Transformer

一、Transformer[2017]

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

    循环模型通常沿输入序列和输出序列的 symbol position 来考虑计算。将 positionstep 在计算期间对齐 aligning ,这些模型生成一系列 hidden state ht ,其中 ht 是前一个hidden state ht1t 时刻 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)),尽管以降低有效分辨率 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) 映射到 continuous representation 的序列 z=(z1,,zn),其中 n 为输入序列长度,xi 为第 i 个输入 symbol representationone-hot 向量),zi 为第 ihidden representation 。 给定 zdecoder 然后生成 symbol 的一个输出序列 (y1,y2,,ym) ,一次输出一个元素,其中 m 为输出序列长度,yj 为第 j 个输出 symbol representationone-hot 向量)。在每个 step,模型都是自回归auto-regressive的,在生成下一个输出symbol 时使用所有前面生成的 symbol 作为额外的输入。

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

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

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

    LayerNorm(x+Sublayer(x))

    其中:Sublayer(x) 是子层自己实现的函数。

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

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

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

    encoder 类似,我们在每个子层周围使用残差连接,然后进行 layer normalization 。我们还修改了 decoder stack 中的 self-attention 子层,从而防止它关注后续的 position (即,masked self-attention)。这种 masking 确保对 position 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 ,如下图所示。输入由三部分组成:维度为 dkquery、维度为 dkkey、维度为 dvvalue 。我们将单个 query 和所有的 key 计算内积,然后内积的结果除以 dk ,然后对这些内积结果应用 softmax 函数从而获得 value 的权重。

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

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

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

    假设有 nqquerynvkeynvvalue (要求 key 的数量和 value 的数量相同),则:

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

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

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

      因为维度越大,则内积中累加和的项越多,内积结果越大。很大的数值会导致 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

      其中:

      • wattention 向量,为待学习的参数,σ() 为非线性函数。
      • qi 为第 iquerykj 为第 jkeyvj 为第 jvalue
      • Wqquery 向量映射到公共空间,Wkkey 向量映射到公共空间,因此 query 向量和 key 向量可以为不同的维度。它们都是待学习的权重。
      • αi,j 给出第 iquery 在各个 position 的注意力权重,position 的数量为 nv

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

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

    然后,在每个 query, key, value 的投影后的版本上,我们并行执行注意力函数,每个注意力函数产生 dv 维的 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×dkWiKRdmodel×dkWiVRdmodel×dvWOR(hdv)×dmodel

    在这项工作中,我们使用 h=8 个注意力头 attention head 。对于其中每个注意力头,我们使用 dk=dv=dmodel/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 设置为 ),这些 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,而内层的维度为 dff=2048

    W1Rdmodel×dffW2Rdff×dmodel 。这里采用膨胀的方式,选择 dff>dmodel 从而使得 representation 维度先增大再减小。

1.1.4 Embeddings and Softmax

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

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

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

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

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

1.1.5 position embedding

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

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

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

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

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

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

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

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

1.1.6 Why Self-Attention

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

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

    如下表所示:

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

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

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

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

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

      卷积层通常比循环层更昂贵 expensive (贵 k 倍)。然而,可分离卷积将计算复杂度显著降低到 O(k×n×d+n×d2) 。当 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 。我们根据以下公式来调整训练期间的学习率:

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

    即:

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

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

  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

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

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

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

      其中 W 为一个序列,P(W)=P(w1,w2,,wn) 为这个序列的概率。

1.2 实验

1.2.1 机器翻译

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

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

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

    • 我们使用 beam size = 4length penalty α=0.6beam search

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

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

      其中 n 为序列 W=(w1,,wn) 的长度。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={1if c>rexp(1r/c)else

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

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

      • wn 代表 n-gram 匹配结果的权重,通常选择 wn=1N

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

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

        其中:

        • Candidates 表示翻译的所有句子的集合,C 表示某个翻译的句子,gramn 表示某个 n-gram 项。

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

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

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

          ground-truth(gramn)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 ,而不是 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 会损害模型质量。这表明确定 compatibility function 并不容易确定,采用比内积更复杂的 compatibility function 可能是有益的。

      compatibility function 就是计算未归一化注意力分的函数 si,j=qikj

      此外,降低 dk 降低了模型容量(模型参数从 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=10244transformer 。对于该任务,我们使用 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

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

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

二、Universal Transformer[2018]

  1. Transformer 这样的 parallel-in-time 架构解决了RNN 的一个重要缺陷:RNN 固有的序列计算sequential computation 阻止了输入序列中各元素的并行化。同时 Transformer 也解决了序列较长时梯度消失的问题。Transformer 模型完全依靠自注意力机制。这种机制不仅可以直接并行化,而且由于每个symbolrepresentation 也直接访问到所有其他symbolrepresentation ,这导致了整个序列中有效的全局感受野 global receptive field

    然而,值得注意的是,Transformer 具有固定数量的层,放弃了RNN 对学习迭代式转换 iterative transformation或递归式转换recursive transformation的归纳偏置 inductive bias。我们的实验表明:这种归纳偏置可能对一些算法和语言理解任务至关重要,Transformer 不能很好地泛化到训练期间没有遇到的输入长度。

    在论文 《Universal Transformer》 中,作者介绍了Universal Transformer: UT,这是一个parallel-in-time 的递归的自注意力序列模型,它可以作为Transformer 模型的泛化,在广泛的具有挑战性的sequence-to-sequence 任务上产生提升的理论能力和改进的结果。 Universal Transformer结合了像Transformer这样的前馈序列模型的并行能力 parallelizability 和全局感受野、以及RNN的循环归纳偏置,这似乎更适合一系列的算法和自然语言理解的sequence-to-sequence 问题。顾名思义,与标准的 Transformer 相比,在某些假设下,Universal Transformer 可以被证明是图灵完备的。

    在每个recurrent step中,Universal Transformer 使用自注意力机制并行地refine 序列中所有 symbolrepresentation ,然后跟着一个深度可分离卷积depth-wise separable convolutionposition-wise fully-connected layer (在所有positiontime-step 中共享),如下图所示。作者还添加了一个动态的逐位置停机机制 per-position halting mechanism ,允许模型动态选择每个symbol 所需的refinement step 数量,并首次表明这样的条件计算机制conditional computation mechanism 事实上可以提高几个较小的结构化的算法和语言推理任务的准确性(尽管它在机器翻译任务上的结果略有下降)。

    论文强有力的实验结果表明:Universal Transformer 在广泛的任务中的表现优于 TransformerLSTM

  2. 相关工作:

    • 当运行一个fixed 数量的 step 时,Universal Transformer 相当于一个跨所有层共享参数的 multi-layer Transformer 。这在一定程度上类似于Recursive Transformer ,它在不同的深度上共享了self-attention layer 的权重。

      另一种可能更 informative 的描述,Universal Transformer 的方式是:作为一个并行的 RNN block (每个symbol 一个RNN block ,共享参数)来同时演化每个symbolhidden state (通过在每个 step 关注前一个 stephidden state 序列来产生)。这样,它与 Neural GPUNeural Turing Machine 等架构有关。因此,Universal Transformer 保留了原始 feed-forward Transformer 模型有吸引力的计算效率,但增加了RNNrecurrent inductive bias。此外,利用动态停机机制,Universal Transformer 可以根据输入数据自动选择 processing step 的数量。

    • Universal Transformer 和其他序列模型之间的联系从架构上看是显而易见的: 如果我们将recurrent step 限制为一个,它将是一个Transformer

      但是,考虑 Universal TransformerRNN 以及其他网络之间的关系更为有趣,在这些网络中,递归发生在时间维度上。表面上看,这些模型似乎密切相关,因为它们也是递归的。但有一个关键的区别:

      • RNN这样的time-recurrent模型不能在递归步骤中访问所有的记忆 memory (只能访问最近的一个记忆)。这使得它们在计算上更类似于自动机automata,因为在递归部分唯一可用的记忆是一个固定尺寸的状态向量fixed-size state vector
      • 另一方面,Universal Transformer 可以关注整个previous layer,允许它在recurrent step 中访问所有的记忆。
    • 给定足够的内存,Universal Transformer 在计算上是通用的,即它可以模拟任何图灵机Turing machine,从而解决了标准Transformer模型的一个缺陷。

      除了在理论上有吸引力外,我们的结果表明:这种增加的表达性也导致了在几个具有挑战性的序列建模任务上的准确性的提高。这缩小了在机器翻译等大规模任务上与Neural Turing MachineNeural GPU等模型之间的差距。

      为了说明这一点,我们可以将 Universal Transformer 简化为一个 Neural GPU。忽略decoder 并将 self-attention 模块(即带有残差连接的self-attention)简化为恒等映射,并且假设转移函数是卷积。如果我们将循环step的总数 T 设定为输入长度,我们得到的正是一个Neural GPU

      Universal TransformerNeural Turing Machine 之间也存在类似的关系。Neural Turing Machine 每个 stepsingle read/write 操作可以由 Universal Transformer 的全局的、并行的representation revision来表达。

    • 另一个相关的模型架构是端到端记忆网络Memory Network 。然而,与端到端记忆网络相比,Universal Transformer 使用的 memory 对应于与其输入或输出的individual position 对齐的状态。此外,Universal Transformer 遵循 encoder-decoder 的配置,在大规模 sequence-to-sequence 的任务中实现了有竞争力的性能。

  3. Universal Transformer将以下关键属性结合到一个模型中:

    • Weight sharing:我们用一种简单的权重共享形式来扩展Transformer ,从而在inductive bias 和模型表达力之间取得了有效的平衡。

      由于权重共享,所以 Universal Transformer 的模型大小要远远小于标准的 Transformer

    • Conditional computation:我们为Universal Transformer 配备了动态停机能力。与固定深度的 Universal Transformer 相比,它显示了更强的结果。

2.1 模型

  1. Universal Transformer 是基于常用的encoder-decoder 架构,它的encoderdecoder都是通过将一个 RNN 分别应用于输入和输出序列的每个位置的 representation 来操作的,如下图所示。然而,与常规 RNN 不同,Universal Transformer 不是在序列中的 position 上递归(沿着宽度方向),而是在每个 positiondepth 上递归(沿着高度方向)。

    在每个 recurrent time-step,每个位置的 representation 在两个 sub-step 中被并行地修改:

    • 首先,使用自注意力机制在序列中的所有位置上交换信息,从而为每个位置生成一个 vector representation ,该 representation 是由前一个time step的所有其他位置的representation 融合而来。
    • 然后,在每个位置独立地对自注意力机制的输出应用一个转移函数(跨positiontime 共享)。

    由于递归可以应用任何次数,这意味着Universal Transformer 可以有可变的深度(per-symbol processing step 的数量)。相比之下,Transformerstacked RNN 只有固定的深度。

    更完整的架构如下图所示:

2.1.1 Encoder

  1. 给定一个长度为 m 的输入序列,我们定义 H(0)Rm×dembedding 矩阵,它的第 i 行表示输入序列位置 isymboldembedding 向量 hi(0)Rd,0i<m 。 然后 Universal Transformer 通过应用Transformer的多头内积自注意力机制 multi-headed dot-product self-attention mechanism ,在 step t 为所有 m 个位置并行地迭代计算 representation H(t),然后是一个转移函数transition function 。我们还在这些功能块function block周围添加了残差连接,并应用了 dropoutlayer normalization

  2. 更具体地说,我们使用缩放的内积注意力:

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

    其中 QRm×d,KRm×d,VRm×d,QKRm×m,Attention(Q,K,V)Rm×d

    我们使用有 k 个头的多头自注意力版本:

    MultiHeadSelfAttn(H(t))=Concat(head1,head2,,headk)WOheadi=Attention(H(t)WiQ,H(t)WiK,H(t)WiV)

    其中:WQRd×(d/k),WKRd×(d/k),WVRd×(d/k),WORd×d

  3. step tUniversal Transformer 然后计算所有 m 个输入位置的修正的 representation H(t)Rm×d,即:

    H(t)=LayerNorm(A(t)+Transition(A(t)))A(t)=LayerNorm((H(t1)+P(t))+MultiHeadSelfAttn(H(t1)+P(t)))

    LayerNorm 作用在残差连接之后,而不是之前。

    其中:

    • Transition 为转移函数。根据任务,我们使用两种不同的转移函数之一:要么是可分离的卷积、要么是前馈神经网络(由两个线性投影以及中间的的单个 Relu 激活函数组成,逐位置应用)。

    • P(t)Rm×d 为固定的、常量的、二维的(位置维度、时间维度)的 coordinate embedding,通过计算正弦的 position embedding 向量获得:

      pi(t)=(pi,1(t),,pi,d(t))Rdpi,2j(t)=sin(i100002j/d)+sin(t100002j/d)pi,2j+1(t)=cos(i100002j/d)+cos(t100002j/d)

      i 给出了位置维度的信息,t 给出了时间维度的信息。

    经过 Tstep (每个 step 并行地更新输入序列的所有位置),Universal Transformer encoderfinal outputH(T)Rm×d

2.1.2 Decoder

  1. decoderencoder 的基本递归结构相同。然而,在self-attention 函数之后,decoder 额外还使用多头内积注意力函数来关注 encoderfinal representation H(T),但query Q 是从 decoder representation 投影得到,而 key Kvalue V 是从 encoder final representation 投影得到。

    是否可以对 decoderencoder 应用不同的 T ?理论上并没有约束强制要求 decoderencoder 迭代相同的次数。

  2. Transformer 模型一样,Universal Transformer 是自回归的。

    • 在生成阶段,Universal Transformer 一次产生一个 symbol 的输出,其中 decoder 仅仅依赖已经产生的输出位置。
    • 在训练阶段,decoder 的目标输出就是输入左移一个位置。

    最后,per-symbol target distribution 是通过应用线性变换 ORd×|V|final decoder state 映射到 output vocabulary V ,然后通过 softmax 进行按行的归一化: