返回介绍

数学基础

统计学习

深度学习

工具

Scala

一、Transformer [2017]

发布于 2023-07-17 23:38:25 字数 92806 浏览 0 评论 0 收藏 0

  1. 循环神经网络RNN (尤其是 LSTMGRU 网络)已经牢牢地被确定为序列建模和转导transduction 问题的 state-of-the-art 方法。此后,许多努力继续推动循环语言模型 recurrent language modelencoder-decoder 的发展。

    循环模型通常沿输入序列和输出序列的 symbol position 来考虑计算。将 positionstep 在计算期间对齐 aligning ,这些模型生成一系列 hidden stateht$ \mathbf{\vec h}_t $ ,其中ht$ \mathbf{\vec h}_t $ 是前一个hidden stateht1$ \mathbf{\vec h}_{t-1} $ 和t$ t $ 时刻 input 的函数。这种固有的序列性质 sequential nature 阻止了训练样本内的并行化,而这种样本内的并行化在更长的序列长度下变得至关重要,因为内存约束限制了样本之间的 batching 。最近的工作通过分解factorization 和条件计算 conditional computation 显著提高了计算效率,同时在后者的 case 中(即,条件计算)也提高了模型性能。然而,序列计算sequential computation的基本约束仍然存在。

    注意力机制已经成为各种任务中引人注目的序列建模和转导模型 sequence modeling and transduction model 的组成部分,它允许建模依赖性而无需考虑这些相互依赖的项在 input 序列或 output 序列中的距离。然而,除了少数情况之外,这种注意力机制与RNN 结合使用。

    在论文 《Attention Is All You Need》 中,作者提出了 Transformer,这是一种避免循环 recurrence 的模型架构。Transformer 完全依赖注意力机制来抽取 inputoutput 之间的全局依赖关系。Transformer 可以实现更高的并行化,并且在八个 P100 GPU 上经过短短 12 个小时的训练后就可以在翻译质量方面达到新的 state-of-the-art

  2. 背景:

    • 减少序列计算这一目标也构成了 Extended Neural GPUByteNetConvS2S 的基础,它们都使用卷积神经网络作为基础构建块 basic building block ,并行地为所有 input positionoutput position 来计算 hidden representation 。在这些模型中,联系 relate 来自两个任意 input positionoutput position 的信号所需操作的数量,随着 position 之间的距离而增加:对于 ConvS2S 呈线性增加,而对于 ByteNet 则呈对数增加。这使得学习远距离位置之间的依赖性变得更加困难。

      Transformer ,这种数量被降低到常数级(O(1)$ O(1) $ ),尽管以降低有效分辨率 effective resolution 为代价(由于attention-weighted 加权平均 ),但是我们使用多头注意力 Multi-Head Attention 来抵消这种影响。

    • 自注意力self-attention(有时被称作 intra-attention)是一种将单个序列的不同位置关联起来从而计算序列的 representation 的注意力机制。自注意力已经成功应用于各种任务,包括阅读理解reading comprehension、抽象摘要abstractive summarization、文本蕴含textual entailment、学习任务无关的 sentence representation

    • 端到端记忆网络memory network 基于循环注意力机制 recurrent attention mechanism 而不是序列对齐循环 sequence-aligned recurrence,并且已被证明在简单的语言问题和语言建模任务中表现良好。

    然而,据我们所知,Transformer 是第一个完全依赖自注意力来计算其 inputoutputrepresentation 而不使用 sequence-aligned RNN 或卷积的模型。在接下来部分中,我们将描述 Transformer、自注意力的启发,并讨论它相对于 《Neural GPUs learn algorithms》《Neural machine translation in linear time》《Structured attention networks》 等模型的优势。

1.1 模型

1.1.1 模型架构

  1. 大多数有竞争力的神经序列转导模型 neural sequence transduction model 具有 encoder-decoder 结构。这里,encodersymbol representation 的输入序列x=(x1,x2,,xn)$ \mathbf x = \left(\mathbf{\vec x}_1,\mathbf{\vec x}_2,\cdots,\mathbf{\vec x}_n\right) $ 映射到 continuous representation 的序列z=(z1,,zn)$ \mathbf z = \left(\mathbf{\vec z}_1,\cdots,\mathbf{\vec z}_n\right) $ ,其中n$ n $ 为输入序列长度,xi$ \mathbf{\vec x}_i $ 为第i$ i $ 个输入 symbol representationone-hot 向量),zi$ \mathbf{\vec z}_i $ 为第i$ i $ 个 hidden representation 。 给定z$ \mathbf z $ ,decoder 然后生成 symbol 的一个输出序列(y1,y2,,ym)$ \left(\mathbf{\vec y}_1,\mathbf{\vec y}_2,\cdots,\mathbf{\vec y}_m\right) $ ,一次输出一个元素,其中m$ m $ 为输出序列长度,yj$ \mathbf{\vec y}_j $ 为第j$ j $ 个输出 symbol representationone-hot 向量)。在每个 step,模型都是自回归auto-regressive的,在生成下一个输出symbol 时使用所有前面生成的 symbol 作为额外的输入。

    Transformer 遵循这种整体架构,同时为 encoderdecoder 使用堆叠的 self-attention的和 point-wise 的全连接层,分别如下图的左半部分和有半部分所示。

    下图中的 attention 的三个输入中,最右侧为 query 而其它两个输入分别为 key,value 。注意,key 的数量和 value 的数量相等。

  2. EncoderencoderN=6$ N = 6 $ 个相同的层堆叠而成。每个层有两个子层:第一个子层是多头注意力机制 multi-head self-attention mechanism, 第二个子层是简单的、position-wise 的全连接前馈神经网络。我们在两个子层中的每个子层周围使用残差连接 residual connection ,然后进行 layer normalization 。即,每个子层的输出为:

    LayerNorm(x+Sublayer(x))

    其中:Sublayer(x)$ \text{Sublayer}\left(\mathbf{\vec x}\right) $ 是子层自己实现的函数。

    为了有助于这些残差连接,模型中的所有子层以及 embedding layer 都会产生维度dmodel=512$ d_\text{model} = 512 $ 的输出。

    注意,图中黄色框内的标注是 Add & Norm ,即 Add 在前、Norm 在后,也就是 LayerNorm 作用在残差连接之后。

  3. Decoderdecoder 也是由N=6$ N = 6 $ 个相同的层堆叠而成。decoder 的每个层包含三个子层,其中有两个子层与 encoder 子层相同,而第三个子层对 encoder stack 的输出执行 multi-head attention

    encoder 类似,我们在每个子层周围使用残差连接,然后进行 layer normalization 。我们还修改了 decoder stack 中的 self-attention 子层,从而防止它关注后续的 position (即,masked self-attention)。这种 masking 确保对 positioni$ i $ 的预测只能依赖于位置小于i$ i $ 的已知输出。

1.1.2 Attention

  1. 注意力函数可以描述为:将一个 query 和一组 key-value pair 映射到 output ,其中 query, key, value, output 都是向量。output 被计算为 value 的加权和,其中每个 value 的权重是由一个函数来计算(即,注意力函数),该函数以 query, key 作为输入。

  2. Scaled Dot-Product Attention:我们称我们提出的注意力为 Scaled Dot-Product Attention ,如下图所示。输入由三部分组成:维度为dk$ d_k $ 的 query、维度为dk$ d_k $ 的 key、维度为dv$ d_v $ 的 value 。我们将单个 query 和所有的 key 计算内积,然后内积的结果除以dk$ \sqrt{d_k} $ ,然后对这些内积结果应用 softmax 函数从而获得 value 的权重。

    这里要求 query 向量的维度和 key 向量的维度相同,都是dk$ d_k $ 。

    在实践中,我们同时计算一组 query 的注意力函数,其中将 query 打包到一个矩阵Q$ \mathbf Q $ 中。keyvalue 也被打包到矩阵K$ \mathbf K $ 和V$ \mathbf V $ 中。我们将 output 矩阵计算为:

    Attention(Q,K,V)=softmax(QKdk)V

    假设有nq$ n_q $ 个 querynv$ n_v $ 个 keynv$ n_v $ 个 value (要求 key 的数量和 value 的数量相同),则:

    QRnq×dk,KRnv×dk,VRnv×dv,QKRnq×nv,Attention(Q,K,V)Rnq×dv

    两种最常见的注意力函数为:加性注意力additive attention、内积注意力dot-product (multiplicative) attention

    • 内积注意力与我们的算法相同,除了我们使用了1/dk$ 1/\sqrt{d_k} $ 的缩放因子。

      因为维度越大,则内积中累加和的项越多,内积结果越大。很大的数值会导致 softmax 函数位于饱和区间,梯度几乎为零。

    • 加性注意力通过具有单隐层的前馈神经网络来计算注意力函数。

      additive attention(也称作 Bahdanau Attention ) 的原理为:

      si,j=wσ(Wqqi+Wkkj)αi,j=softmax(si,j)=exp(si,j)jexp(si,j)vi=j=1αi,jvj

      其中:

      • w$ \mathbf {\vec w} $ 为attention 向量,为待学习的参数,σ()$ \sigma(\cdot) $ 为非线性函数。
      • qi$ \mathbf{\vec q}_i $ 为第i$ i $ 个 querykj$ \mathbf{\vec k}_j $ 为第j$ j $ 个 keyvj$ \mathbf{\vec v}_j $ 为第j$ j $ 个 value
      • Wq$ \mathbf W_q $ 将 query 向量映射到公共空间,Wk$ \mathbf W_k $ 将 key 向量映射到公共空间,因此 query 向量和 key 向量可以为不同的维度。它们都是待学习的权重。
      • αi,j$ \alpha_{i,j} $ 给出第i$ i $ 个 query 在各个 position 的注意力权重,position 的数量为nv$ n_v $ 。

    虽然这两种注意力在理论上的复杂度相同,但是内积注意力在实践中更快且更节省内存空间,因为它可以使用高度优化的矩阵乘法代码来实现。

  3. Multi-Head Attention:与执行单个注意力函数 attention function (具有dmodel$ d_\text{model} $ 维的 query, key, value )不同,我们发现将 query, key, value 线性投影h$ h $ 次是有益的,其中每次线性投影都是不同的并且将 query, key, value 分别投影到dk,dk,dv$ d_k, d_k,d_v $ 维。

    然后,在每个 query, key, value 的投影后的版本上,我们并行执行注意力函数,每个注意力函数产生dv$ d_v $ 维的 output 。这些 output 被拼接起来并再次投影,产生 final output ,如上图右侧所示。

    多头注意力multi-head attention 允许模型在每个position 联合地关注jointly attend 来自不同 representation 子空间的信息。如果只有单个注意力头single attention head,那么平均操作会抑制这一点。

    MultiHead(Q,K,V)=Concat(head1,head2,,headh)WOheadi=Attention(QWiQ,KWiK,VWiV)

    其中待学习的投影矩阵为:WiQRdmodel×dk$ \mathbf W_i^Q\in \mathbb R^{d_\text{model}\times d_k} $ 、WiKRdmodel×dk$ \mathbf W_i^K\in \mathbb R^{d_\text{model}\times d_k} $ 、WiVRdmodel×dv$ \mathbf W_i^V\in \mathbb R^{d_\text{model}\times d_v} $ 、WOR(hdv)×dmodel$ \mathbf W^O\in \mathbb R^{(hd_v)\times d_\text{model}} $ 。

    在这项工作中,我们使用h=8$ h=8 $ 个注意力头 attention head 。对于其中每个注意力头,我们使用dk=dv=dmodel/h=64$ d_k=d_v=d_\text{model}/h=64 $ 。由于每个 head 的维度减小,因此总的计算成本与完整维度的单头注意力single-head attention 相近。

  4. 注意力在 Transformer 中的应用:Transformer 以三种不同的方式使用多头注意力:

    • encoder-decoder attention 层中,query 来自于前一个 decoder layerkeyvalue 来自于 encoder 的输出。这允许 decoder 中的每个位置关注 input 序列中的所有位置。这模仿了 sequence-to-sequence 模型中典型的 encoder-decoder attention 注意力机制。
    • encoder 包含自注意力层。在自注意力层中,所有的 query, key, value 都来自于同一个地方(在这个 case 中,就是 encoder 中前一层的输出)。encoder 中的每个位置都可以关注 encoder 上一层中的所有位置。
    • 类似地,decoder 中的自注意力层允许 decoder 中的每个位置关注 decoder 中截至到当前为止(包含当前位置)的所有位置。我们需要防止 decoder 中的信息向左流动,从而保持自回归特性。我们通过在 scaled dot-product attention 内部屏蔽掉 softmax input 的某些 value 来实现这一点(将这些 value 设置为$ -\infty $ ),这些 value 对应于无效连接illegal connection

1.1.3 Position-wise Feed-Forward Networks

  1. 除了注意力子层之外,我们的 encoderdecoder 中的每一层还包含一个全连接的前馈神经网络,该网络分别且相同地应用于每个位置。该网络包含两个线性变换,中间有一个 ReLU 激活函数:

    FFN(x)=max(0,xW1+b1)W2+b2

    虽然线性变换在不同位置上是共享的(即,相同的参数),但是它们在层与层之间使用不同的参数。

    该层的另一种描述是: kernel size = 1 的两个卷积,其中 inputoutput 的维度为dmodel=512$ d_\text{model} = 512 $ ,而内层的维度为dff=2048$ d_\text{ff} = 2048 $ 。

    W1Rdmodel×dff$ \mathbf W_1\in \mathbb R^{d_\text{model}\times d_\text{ff}} $ ,W2Rdff×dmodel$ \mathbf W_2\in \mathbb R^{d_\text{ff}\times d_\text{model}} $ 。这里采用膨胀的方式,选择dff>dmodel$ d_\text{ff} \gt d_\text{model} $ 从而使得 representation 维度先增大再减小。

1.1.4 Embeddings and Softmax

  1. 与其它序列转导模型类似,我们使用学到的 embeddinginput tokenoutput token 转换为维度dmodel$ d_\text{model} $ 的向量。我们还使用学到的线性变换和 softmax 函数将 decoder output 转换为 next-token 的预测概率。

    在我们的模型中,我们在两个 embedding layer (输入层)和 pre-softmax 线性变换(输出层)之间(共计三个权重矩阵)共享相同的权重矩阵,类似于 《Using the output embedding to improve language models》。在 embedding 层中,我们将这些权重乘以dmodel$ \sqrt{d_\text{model}} $ 。

    这里有两个输入层,分别来自于 encoder inputdecoder input。而输出层来自于 decoder

    三个 embedding 矩阵共享的前提是:input symbol 空间和 output symbol 空间是相同的,例如,输入是中文的文本,输出是中文摘要,那么input symboloutput symbol 都是中文单词。否则,encoderembedding 矩阵无法和 decoder 的 两个 embedding 矩阵共享。但是无论如何,decoder 的两个 embedding 矩阵之间可以共享。

    为什么要把 embedding 矩阵乘以dmodel$ \sqrt{d_\text{model}} $ ?论文并未说明原因。有一种解释说是放大 embedding 使得它的量级和 positional embedding 的量级相同。可以通过实验来验证。

1.1.5 position embedding

  1. 由于我们的模型不包含递归和卷积,为了让模型利用序列的次序 order,我们必须注入一些关于序列中 token 的相对位置或绝对位置的信息。为此,我们在 encoder stackdecoder stack 底部的 input embedding 中添加了 positional encodingpositional encodingembedding 具有相同的维度dmodel$ d_\text{model} $ ,因此可以将二者相加。

    positional encoding 有很多选择,可以选择固定的也可以选择可学习的。

    • 这里我们选择固定的方式,采用不同频率的正弦函数和余弦函数:

      pj=(PE(j,1),PE(j,2),,PE(j,dmodel))PEj,2i=sin(j100002i/dmodel),PEj,2i+1=cos(j100002i/dmodel)

      其中:j$ j $ 表示 positioni$ i $ 表示维度。即,positional encoding 的每个维度对应于一个正弦曲线,正弦曲线的波长从2π$ 2\pi $ (当维度i=0$ i=0 $ 时)到10000×2π$ 10000\times 2\pi $ (当维度2i=dmodel$ 2i=d_\text{model} $ 时)。

      我们选择这个函数是因为我们假设它可以让模型通过相对位置来轻松地学习关注 attend ,因为对于任意固定的偏移量k$ k $ ,pj+k$ \mathbf{\vec p}_{j+k} $ 可以表示为pj$ \mathbf{\vec p}_j $ 的线性函数。

    • 我们还尝试使用可学习的 positional embedding,发现这两个版本产生了几乎相同的结果。我们选择了正弦版本,因为它可以让模型推断出比训练期间遇到的序列长度更长的序列。

      正弦版本的 positional embedding 可以应用到训练期间 unseen 的位置,而可学习的 positional embedding 无法实现这一功能。

1.1.6 Why Self-Attention

  1. 这里我们将自注意力层与循环层、卷积层进行各个方面的比较。这些层通常用于将一个可变长度的 symbol representation 序列(x1,,xn)$ (\mathbf{\vec x}_1,\cdots,\mathbf{\vec x}_n) $ 映射到另一个等长序列(z1,,zn)$ (\mathbf{\vec z}_1,\cdots,\mathbf{\vec z}_n) $ ,其中x,ziRd$ \mathbf{\vec x}_,\mathbf{\vec z}_i\in \mathbb R^d $ 。 为了启发我们使用自注意力,我们考虑了三个方面:每层的总计算复杂度、可并行化的计算量(以所需的最少的序列操作数量来衡量)、网络中远程依赖long-range dependency的路径长度。

    学习远程依赖是许多序列转导任务中的关键挑战。影响学习这种依赖的能力的一个关键因素是:前向传播信号和反向传播信号必须在网络中传输的路径长度。input 序列和 output 序列中任意位置组合之间的路径越短,那么就越容易学习远程依赖。因此,我们还比较了由不同类型的层组成的网络中,任意input 位置和 output 位置之间的最大路径长度。

    如下表所示:

    • 自注意力层在所有位置都关联一个O(1)$ O(1) $ 数量的序列操作(即具有最大程度的并行化),而循环层需要O(n)$ O(n) $ 数量的序列操作(即几乎完全无法并行化)。

      并行化指的是:为了计算指定位置的输出,模型需要依赖已经产生的多少个输出?

    • 在计算复杂度方面,当序列长度n$ n $ 小于 representation 维度d$ d $ 时(机器翻译中 state-of-the-art 模型常见的 case ),self-attention 层比循环层更快。

      为了提高涉及非常长序列(即n$ n $ 非常大)的任务的计算性能,可以将自注意力限制为仅考虑输入序列中的局部区域,这个局部区域是以输出位置对应处为中心、大小为r$ r $ 的邻域。这会将最大路径长度增加到O(n/r)$ O(n/r) $ ,同时每层的计算复杂度降低到O(rnd)$ O(rnd) $ 。我们计划在未来的工作中进一步研究这种方法。

    • 具有 kernel widthk<n$ k \lt n $ 的单个卷积层无法连接 input positionoutput position 组成的所有的 pair 。如果希望连接所有的 input positionoutput position,则需要堆叠O(n/k)$ O(n/k) $ 个卷积层(连续核 contiguous kernel) 或O(logk(n))$ O(\log_k(n) ) $ 个卷积层(空洞卷积 dilated convolution ),并且增加了网络中任意两个位置之间最长路径的长度。

      卷积层通常比循环层更昂贵 expensive (贵k$ k $ 倍)。然而,可分离卷积将计算复杂度显著降低到O(k×n×d+n×d2)$ O(k\times n\times d + n\times d^2) $ 。当k=n$ k=n $ 时,可分离卷积的复杂度就等于一个自注意力层和一个point-wise feed-forward layer 的组合(这就是我们在 Transformer 模型中采用的方法)。

  2. 作为附带的好处,自注意力可以产生更可解释的模型。我们从 Transformer 模型中检查注意力的分布,并在下图中展示和讨论了示例。不仅单个注意力头清晰地学习执行不同的任务,而且许多注意力头似乎还表现出与句子的句法结构syntactic structure和语义结构 semantic structure 有关的行为。

    • 如下图所示为 encoder 六层自注意力层的第五层中,making 这个单词的多头自注意力分布(不同的颜色代表不同的头,颜色的深浅代表注意力大小)。making 这个单词的自注意力分布似乎倾向于构成短语 making ... more difficult

    • 如下图所示为 encoder 六层自注意力层的第五层中的两个注意力头。上半部分为 head 5 的完全的注意力分布(每个单词),下半部分为单词 itshead 5head 6 中的注意力分布。

    • 如下图所示为 encoder 六层自注意力层的第五层中的两个注意力头。

1.1.7 训练

  1. Training Data and Batching

    • 我们在由大约 450 万个 sentence pair 组成的标准 WMT 2014 English-German 数据集上进行了训练。句子使用 byte-pair encoding: BPE《Massive exploration of neural machine translation architectures》) 进行编码,该编码有一个共享的 source-target vocabulary,词典规模大约 37000token

      BPE 算法:

      • 语料库中每个单词表示为字符的拼接,其中 </w> 表示词尾。
      • 将每个单词拆分为字符,并计算字符出现的次数。这些字符添加到词表 vocabulary
      • 寻找出现频次最高的 character pair,合并它们并添加到词表。这些合并的 character pair 称作 word-piece
      • 重复执行上一步(即,“寻找--合并”),直到词表达到指定的规模。
    • 对于 English-French,我们使用了更大的 WMT 2014 English-French 数据集,该数据集由 3600 万个 sentence pair 组成。这些句子被拆分为 token,并且使用大小为 32kword-piece vocabulary

    sentence pair 按照近似的序列长度被 batch 在一起。每个训练 batch 包含一组 sentence pair,大约共计 25ksource token25ktarget token

  2. 硬件和 schedule:我们在一台配备 8NVIDIA P100 GPU 的机器上训练我们的模型。

    • 对于我们的base model(使用我们在整篇论文中描述的超参数),每个 training step 大约需要 0.4 秒。我们对 base model 进行了总共 100k 步(即 12 小时)。
    • 对于我们的 big model (如下表最后一行所示),每个 training step 大约需要 1.0 秒。我们对 base model 进行了总共 300k 步(即 3.5 天)。

  3. 优化器:我们使用 Adam optimizer 优化器,其中β1=0.9,β2=0.98,ϵ=109$ \beta_1=0.9,\beta_2=0.98,\epsilon=10^{-9} $ 。我们根据以下公式来调整训练期间的学习率:

    lr=1dmodel×min(1step-num,step-numwarmup-steps1.5)

    即:

    • 在开头的 warmup_steps 训练 step 中线性增加学习率。这里我们使用 warmup_steps = 4000
    • 然后根据 step number 的平方根倒数来按比例降低学习率。

    为什么除以dmodel$ \sqrt{d_\text{model}} $ ?论文并未给出原因。这样做的效果是:模型越大则学习率越小。

  4. 正则化:在训练期间我们使用三种类型的正则化:

    • Residual Dropout

      • 我们将 dropout 应用于每个子层的 output,然后将其和子层的 input 相加(即残差连接)最后进行 layer normalization 。即:

        LayerNorm(x+Dropout(Sublayer(x)))
      • 此外,我们将 dropout 同时应用于 encoder stackdecoder encoder 中的 sum embedding,这个 sum embeddingembeddingpositional encoding 相加得到的。

      对于 base model,我们使用 dropout ratePdrop=0.1$ P_\text{drop} = 0.1 $ 。

    • Label Smoothing:在训练期间,我们采用了ϵls=0.1$ \epsilon_\text{ls} = 0.1 $ 的 label smoothing 。这会损害 perplexity 指标,因为模型会变得更加不确定,但是会提高准确率指标和 BLEU 得分。

      语言模型困惑度perplexity 的定义为:

      perplexity(W)=1P(w1,w2,,wn)n

      其中W$ \mathcal W $ 为一个序列,P(W)=P(w1,w2,,wn)$ P(\mathcal W) = P(w_1,w_2,\cdots,w_n) $ 为这个序列的概率。

1.2 实验

1.2.1 机器翻译

  1. 配置(所有超参数是在对验证集进行实验之后再选择的):

    • base model 使用单个模型,该模型是通过平均最后 5checkpoint 获得的,其中 checkpoint 是以 10 分钟的间隔写入的。 big model 也是会用单个模型,但是它平均了最后 20checkpoint

      checkpoint 平均指的是参数值取平均(而不是输出结果取平均)。

    • 我们使用 beam size = 4length penaltyα=0.6$ \alpha = 0.6 $ 的 beam search

      在解码器的每个位置始终生成 beam size 个候选,直到出现结束标记。α$ \alpha $ 用于惩罚较短的生成序列:

      score(w1,,wn)=1nα×perplexity(W)

      其中n$ n $ 为序列W=(w1,,wn)$ \mathcal W=(w_1,\cdots,w_n) $ 的长度。n$ n $ 越大则修正后的困惑度越小。

    • 我们将推断期间的最大输出长度设置为 input length + 50 ,但是在可能的情况下输出会提前结束。

  2. 下表总结了我们的结果,并将我们的翻译质量和训练成本,与文献中的其它模型架构进行了比较。我们通过将训练时间、使用的 GPU 数量、以及每个 GPU 的单精度浮点运算能力的估计值相乘,从而估计用于训练模型的浮点运算的数量。对于 K80, K40, M40, P100,我们取它们的单精度浮点运算能力分别为 2.8, 3.7, 6.0, 9.5 TFLOPS

    • WMT 2014 English-to-German 翻译任务:big transformer model 比先前报告的最佳模型(包括 ensemble 模型)在 BLEU 指标上高出 2.0 以上,达到了一个新的 state-of-the-artBLEU 得分 28.4big transformer model8P100 GPU 上训练耗时 3.5 天。

      甚至我们的 base model 也超越了所有先前发布的模型和 ensembles ,并且 base model 的训练成本仅仅是任何其它有竞争力的模型的一小部分。

      bilingual evaluation understudy: BLEU 评估机器翻译质量。其思想是:机器翻译结果越接近专业人工翻译的结果,则越好。

      BLEU=BP×exp(n=1Nwn×logpn)

      其中:

      • BP 为句子简短惩罚Brevity Penalty,迫使机器翻译的长度与参考翻译的长度接近。

        BP={1ifc>rexp(1r/c)else

        其中c$ c $ 为机器翻译的长度,r$ r $ 为参考翻译的长度。

      • N$ N $ 代表机器翻译和参考翻译之间的 n-gram 匹配最大的 n 值。通常 1-gram 匹配结果代表有多少个单词被独立地翻译出来,而 2-gram 以上的匹配结果代表翻译的流畅度。通常N$ N $ 最大为 4

      • wn$ w_n $ 代表 n-gram 匹配结果的权重,通常选择wn=1N$ w_n = \frac {1}{N} $ 。

      • pn$ p_n $ 衡量机器翻译和参考翻译之间 n-gram 匹配结果,即 n-gram precision

        pn=CCandidatesgramnCcount-clip(gramn)CCandidatesgramnCcount(gramn)

        其中:

        • Candidates$ \text{Candidates} $ 表示翻译的所有句子的集合,C$ \mathcal C $ 表示某个翻译的句子,gramn$ \text{gram}_n $ 表示某个 n-gram 项。

        • count()$ \text{count}(\cdot) $ 表示某个 n-gram 项在所有翻译结果中出现的次数。

        • count-clip()$ \text{count-clip}(\cdot) $ 表示某个 n-gram 项在所有翻译结果中出现的截断次数:

          count-clip(gramn)=min(count(gramn),ground-truth(gramn))

          ground-truth(gramn)$ \text{ground-truth}(\text{gram}_n) $ 为 n-gram 项在参考译文中出现的次数。因此这里的“截断”指的是被 ground-truth频次所截断。

    • WMT 2014 English-to-French 翻译任务:big transformer model 达到了 41.0BLEU 得分,优于先前发布的所有单一模型,训练成本小于先前 state-of-the-art 模型的 1/4

      注意:为 English-to-French 而训练的Transformer big model 使用 dropout ratePdrop=0.1$ P_\text{drop} = 0.1 $ ,而不是 0.3

      41.0 对不上?从下表结果来看应该是 41.8

1.2.2 模型变体

  1. 为了评估 Transformer 不同组件的重要性,我们以不同的方式改变了我们的 base model,并衡量了验证集(newstest2013 )上 English-to-German 翻译性能的变化。我们使用了上一节中描述的 beam search,但是没有使用 checkpoint 平均。实验结果如下表所示。

    • (A) 行中,我们改变了注意力头的数量以及注意力 key, value 的维度,并保持计算量不变。可以看到,虽然单头注意力要比最佳配置差 0.9 BLEU,但是如果 head 数量过多效果也会下降。

    • (B) 行中,我们观察到降低注意力 key 的维度dk$ d_k $ 会损害模型质量。这表明确定 compatibility function 并不容易确定,采用比内积更复杂的 compatibility function 可能是有益的。

      compatibility function 就是计算未归一化注意力分的函数si,j=qikj$ s_{i,j} = \mathbf{\vec q}_i \mathbf{\vec k}_j^\top $ 。

      此外,降低dk$ d_k $ 降低了模型容量(模型参数从 65M 降低到 60M58M)。

    • (C) 行中,我们观察到,正如预期的那样,更大的模型更好。

    • (D) 行中,我们观察到,dropoutlabel smoothing 有助于缓解过拟合,但是需要选取合适的 dropout ratelabel smoothing rate

    • (E) 行中,我们用可学习的 positional embedding 代替固定的正弦 positional encoding ,并观察到与 base model 几乎相同的结果。

1.2.3 English Constituency Parsing

  1. 为了评估 Transformer 是否可以泛化到其它任务,我们对英语成分分析 English constituency parsing 任务进行了实验。这项任务提出了特定的挑战:output 受到强烈的结构性约束,并且明显比 input 更长。此外,RNN sequence-to-sequence model 无法在小数据领域获得 state-of-the-art 结果。

  2. 我们在Penn TreebankWall Street Journal: WSJ 部分(大约 40k 个训练句子)上训练了一个dmodel=1024$ d_\text{model} = 1024 $ 的 4transformer 。对于该任务,我们使用 16k token 的词典 vocabulary

    我们还在半监督环境中训练了相同配置的 transformer ,使用来自大约 1700 万个句子的更大的 high-confidenceBerkleyParser 的数据集。对于该任务,我们使用 32k token 的词典。

    我们仅在 Section 22 验证集上进行了少量实验来选择以下超参数:dropoutattentionresidual 上的 dropout)、学习率、beam size 。所有其它超参数保持与 English-to-German base translation model 相同。在推断期间,我们将最大输出长度增加到 input length + 300 。对于 WSJ only 和半监督任务,我们都使用 beam size = 21α=0.3$ \alpha = 0.3 $ 。

    实验结果如下表所示,可以看到:

    • 尽管缺乏对特定任务的调优,但是我们的模型表现得非常好,比除了 Recurrent Neural Network Grammar 之外的所有先前报告的模型得到了更好的结果。
    • RNN sequence-to-sequence model 相比,即使仅在具有 40k 个句子的 WSJ 训练集上进行训练,Transformer 的性能也超越了 Berkeley- Parser

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文