logo资料库

Attention Is All You Need 中文版.pdf

第1页 / 共11页
第2页 / 共11页
第3页 / 共11页
第4页 / 共11页
第5页 / 共11页
第6页 / 共11页
第7页 / 共11页
第8页 / 共11页
资料共11页,剩余部分请下载后查看
Attention Is All You Need 摘要   主流的序列列转换模型都是基于复杂的循环神经⽹网络或卷积神经⽹网络,且都包含⼀一个encoder和⼀一个 decoder。表现最好的模型还通过attention机制把encoder和decoder联接起来。我们提出了了⼀一个新的、简单 的⽹网络架构,Transformer. 它只基于单独的attention机制,完全避免使⽤用循环和卷积。在两个翻译任务上表 明,我们的模型在质量量上更更好,同时具有更更⾼高的并⾏行行性,且训练所需要的时间更更少。我们的模型在 WMT2014 英语-德语的翻译任务上取得了了28.4的BLEU评分。在现有的表现最好模型的基础上,包括整合模 型,提⾼高了了2个BLUE评分。在WMT2014英语-德语的翻译任务上,我们的模型在8个GPU上训练了了3.5天(这个 时间只是⽬目前⽂文献中记载的最好的模型训练成本的⼀一⼩小部分),创造了了单模型的SOTA结果,BLEU分数为 41.8,通过在⼤大量量和少量量训练数据上所做的英语选区分析⼯工作的成功,表明Transformer能很好的适应于其它 任务。 1 Introduction(简介)   RNN,LSTM,GRU,Gated Recurrent Neural Networks 在序列列建模和转换任务上,⽐比如语⾔言模型和机器器翻 译,已经是⼤大家公认的取得SOTA结果的⽅方法。⾃自此,⽆无数的努⼒力力继续推动递归语⾔言模型和encoder-decoder 体系结构的界限。   递归模型通常沿输⼊入和输出序列列的符号位置进⾏行行因⼦子计算。在计算时将位置与步骤对⻬齐,它们⽣生成⼀一系列列隐 藏状态$ht$,$t$位置的$ht$使⽤用它的前驱$h_{t-1}$和当前的输⼊入⽣生成。这种内部的固有顺阻碍了了训练样本的 并⾏行行化,在序列列较⻓长时,这个问题变得更更加严重,因为内存的限制限制了了样本之间的批处理理。最近的⼯工作通 过因⼦子分解技巧[21]和条件计算[32]在计算效率⽅方⾯面取得了了显著的提⾼高,同时也提⾼高了了后者的模型性能。然 ⽽而,顺序计算的基本约束仍然存在。   在各种各样的任务中,注意⼒力力机制已经成为各种引⼈人注⽬目的序列列模型和转换模型中的不不可或缺的组成部分, 它允许对依赖关系建模,⽽而不不需要考虑它们在输⼊入或输出序列列中的距离。然⽽而,在除少数情况外的所有情况 下[27],这种注意机制都与⼀一个递归⽹网络结合使⽤用。   在这项⼯工作中,我们提出了了Transformer,这是⼀一种避免使⽤用循环的模型架构,完全依赖于注意机制来绘制 输⼊入和输出之间的全局依赖关系。Transformer允许更更显著的并⾏行行化,使⽤用8个P100 gpu只训练了了12⼩小时,在 翻译质量量上就可以达到⼀一个新的SOTA。 2 Background(背景)   减少序列列计算的⽬目标也成就了了 Extended Neural GPU [16],ByteNet[18],和ConvS2S[9]的基础,它们都使⽤用了了 卷积神经⽹网络作为基础模块,并⾏行行计算所有输⼊入和输出位置的隐藏表示。在这些模型中,将来⾃自两个任意输 ⼊入或输出位置的信号关联起来所需的操作数,随位置间的距离⽽而增⻓长,ConvS2S为线性增⻓长,ByteNet为对
数增⻓长。这使得学习远距离位置之间的依赖性变得更更加困难[12]. 在Transformer中,这种情况被减少到了了常数 次操作,虽然代价是由于平均 注意⼒力力加权位置信息降低了了有效分辨率,如第3.2节所述,我们⽤用多头注意⼒力力 抵消这种影响。   self-attention,有时也叫做内部注意⼒力力,是⼀一种注意⼒力力机制,它将⼀一个序列列的不不同位置联系起来,以计算序列列 的表示。self-attention 已经成功的运⽤用到了了很多任务上,包括阅读理理解、抽象摘要、语篇蕴涵和学习任务⽆无 关的句句⼦子表征等。   已经被证明,端到端的记忆⽹网络使⽤用循环attention机制替代序列列对⻬齐的循环,在简单的语⾔言问答和语⾔言建模 任务中表现良好。   然⽽而,据我们所知,Transformer是第⼀一个完全依赖于self-attetion来计算其输⼊入和输出表示⽽而不不使⽤用序列列对 ⻬齐的RNN或卷积的转换模型,在下⾯面的章节中,我们将描述Transformer,motivate ,self-attention,并讨论它 相对于[17,18]和[9]等模型的优势。 3 Model Architecture(模型结构)   ⼤大多数有竞争⼒力力的序列列转换模型都有encoder-decoder结构构。这⾥里里,encoder将符号表示的输⼊入序列列 $(x1,...,xn)$映射成⼀一个连续表示的序列列$z = (z1,...,zn)$。给定$z$,解码器器以⼀一次⽣生成⼀一个字符的⽅方式⽣生成 输出序列列$(y1,...,ym)$ 。在每⼀一步,模型都是⾃自回归的[10],在⽣生成下⼀一个字符时,将先前⽣生成的符号作为附 加输⼊入。   Transformer遵循这个总体架构,使⽤用堆叠的self-attention层、point-wise和全连接层,分别⽤用于encoder和 decoder,如图1的左半部分和右半部分所示。
3.1 Encoder and Decoder Stacks(编码器器栈和解码器器栈)
Encoder:encoder由N(N=6)个完全相同的layer堆叠⽽而成.每层有两个⼦子层。第⼀一层是multi-head self-attention 机制,第⼆二层是⼀一个简单的、位置全连接的前馈神经⽹网络。我们在两个⼦子层的每⼀一层后采⽤用残差连接[11],接 着进⾏行行layer normalization[1]。也就是说,每个⼦子层的输出是$LayerNorm(x + Sublayer(x))$,其中 $Sublayer(x)$ 是由⼦子层本身实现的函数。为了了⽅方便便这些残差连接,模型中的所有⼦子层以及embedding层产⽣生 的输出维度都为$d_{model} = 512$。 Decoder: decoder也由N(N=6)个完全相同的layer堆叠⽽而成.除了了每个编码器器层中的两个⼦子层之外,解码器器还 插⼊入第三个⼦子层,该⼦子层对编码器器堆栈的输出执⾏行行multi-head attention操作,与encoder相似,我们在每个⼦子 层的后⾯面使⽤用了了残差连接,之后采⽤用了了layer normalization。我们也修改了了decoder stack中的 self-attention ⼦子层,以防⽌止当前位置信息中被添加进后续的位置信息。这种掩码与偏移⼀一个位置的输出embedding相结 合, 确保对第$i$个位置的预测 只能依赖⼩小于$i$ 的已知输出。 3.2 Attention(注意⼒力力机制)   Attention机制可以描述为将⼀一个query和⼀一组key-value对映射到⼀一个输出,其中query,keys,values和输 出均是向量量。输出是values的加权求和,其中每个value的权重 通过query与相应key的兼容函数来计算。 Figure 2: (left) Scaled Dot-Product Attention. (right) Multi-Head Attention consists of several attention layers running in parallel. 3.2.1 Scaled Dot-Product Attention(缩放的点积注意⼒力力机制)   我们称我们的特殊attention为Scaled Dot-Product Attention(Figure 2)。输⼊入由query、$dk$的key和$dv$的 value组成。我们计算query和所有key的点积,再除以$\sqrt{d_k}$,然后再通过softmax函数来获取values的权 重。   在实际应⽤用中,我们把⼀一组query转换成⼀一个矩阵Q,同时应⽤用attention函数。key和valuue也同样被转换成
矩阵K和矩阵V。我们按照如下⽅方式计算输出矩阵: $$Attention(Q,K,V)=softmax(\frac{QK^t}{\sqrt{d_k}})V$$   additive attention和dot-product(multi-plicative) attention是最常⽤用的两个attention 函数。dot-product attention除了了没有使⽤用缩放因⼦子$\frac{1}{\sqrt{d_k}}$外,与我们的算法相同。Additive attention使⽤用⼀一个具 有单隐层的前馈神经⽹网络来计算兼容性函数。尽管在理理论上两者的复杂度相似,但是在实践中dot-product attention要快得多,⽽而且空间效率更更⾼高,这是因为它可以使⽤用⾼高度优化的矩阵乘法代码来实现。   当$dk$的值较⼩小时,这两种⽅方法性能表现的相近,当$dk$⽐比较⼤大时,addtitive attention表现优于 dot- product attention。我们认为对于⼤大的$dk$,点积在数量量级上增⻓长的幅度⼤大,将softmax函数推向具有极⼩小梯 度的区域$^4$。为了了抵消这种影响,我们对点积扩展$\frac{1}{\sqrt{dk}}$倍。 3.2.2 Multi-Head Attention(多头注意⼒力力机制)   相⽐比于使$d{model}$维度的queries,keys,values执⾏行行⼀一个attention函数,我们发现使⽤用不不同的学习到的线性 映射把queries, keys 和 values线性映射到$dk$, $dk$ 和 $dv$维度h次是有益的。在queries,keys和values的 每个映射版本上,我们并⾏行行的执⾏行行attention函数,⽣生成$d_v$维输出值。它们被拼接起来再次映射,⽣生成⼀一个 最终值,如 Figure 2 中所示。   Multi-head attention允许模型把不不同位置⼦子序列列的表示都整合到⼀一个信息中。如果只有⼀一个attention head,它的平均值会削弱这个信息。 $$MultiHead(Q,K,V) = Concat(head1, ..., headh)W^o$$ $$where  headi=Attention(QW^Qi,KW^Ki,VW^Vi)$$   其中,映射为参数矩阵$Wi^Q ∈ ℝ^{d{model}×dk}$ , $Wi^K ∈ ℝ^{d{model}×dk}$ , $Wi^V ∈ ℝ^{d{model} ×dv}$ 及$W^O ∈ ℝ^{hdv×d_{model}}$。 在这项⼯工作中,我们采⽤用$h = 8$ 个并⾏行行attention层或head。 对每个head,我们使⽤用 $dk = dv = d_{model}/h = 64$。 由于每个head尺⼨寸上的减⼩小,总的计算成本与具有全部维度的单个head attention相 似。 3.2.3 Applications of Attention in our Model(注意⼒力力机制在我们模型中的应⽤用) multi-head attention在Transformer中有三种不不同的使⽤用⽅方式: 在encoder-decoder attention层中,queries来⾃自前⾯面的decoder层,⽽而keys和values来⾃自encoder的输 出。这使得decoder中的每个位置都能关注到输⼊入序列列中的所有位置。 这是模仿序列列到序列列模型中典型 的编码器器—解码器器的attention机制,例例如[38, 2, 9]。 encoder包含self-attention层。 在self-attention层中,所有的key、value和query来⾃自同⼀一个地⽅方,在这 ⾥里里是encoder中前⼀一层的输出。 encoder中的每个位置都可以关注到encoder上⼀一层的所有位置。 类似地,decoder中的self-attention层允许decoder中的每个位置都关注decoder层中当前位置之前的所 有位置(包括当前位置)。 为了了保持解码器器的⾃自回归特性,需要防⽌止解码器器中的信息向左流动。我们在 scaled dot-product attention的内部 ,通过屏蔽softmax输⼊入中所有的⾮非法连接值(设置为 −∞)实现了了 这⼀一点。
3.3 Position-wise Feed-Forward Networks(基于位置的前馈神经⽹网络)   除了了encoder⼦子层之外,我们的encder和decoder中的每个层还包含⼀一个全连接的前馈⽹网络,该⽹网络分别单 独应⽤用于每⼀一个位置。这包括两个线性转换,中间有⼀一个ReLU激活。 $$FFN(x) = max(0, xW1 + b1 )W2 + b2       (2)$$   尽管线性变换在不不同位置上是相同的,但它们在层与层之间使⽤用不不同的参数。 它的另⼀一种描述⽅方式是两个 内核⼤大⼩小为1的卷积。 输⼊入和输出的维度为$d{model}$ = 512,内部层的维度为$d{ff}$ = 2048。 3.4 Embeddings and Softmax (词嵌⼊入和 softmax)   与其他序列列转换模型类似,我们使⽤用学习到的嵌⼊入词向量量 将输⼊入字符和输出字符转换为维度为 $d{model}$的向量量。我们还使⽤用普通的线性变换和softmax函数将decoder输出转换为预测的下⼀一个词符的概 率。在我们的模型中,两个嵌⼊入层之间和pre-softmax线性变换共享相同的权重矩阵,类似于[30]。 在嵌⼊入层 中,我们将这些权重乘以$\sqrt{d{model}}$ 3.5 Positional Encoding(位置编码)   由于我们的模型不不包含循环或卷积,为了了让模型利利⽤用序列列的顺序信息,我们必须加⼊入序列列中关于字符相对或 者绝对位置的⼀一些信息。 为此,我们在encoder和decoder堆栈底部的输⼊入嵌⼊入中添加“位置编码”。 位置编码 和嵌⼊入的维度$d_{model}$相同,所以它们两个可以相加。有多种位置编码可以选择,例例如通过学习得到的位 置编码和固定的位置编码[9] Table1:Maximum path lengths, per-layer complexity and minimum number of sequential operations for different layer types. n is the sequence length, d is the representation dimension, k is the kernel size of convolutions and r the size of the neighborhood in restricted self-attention.   在这项⼯工作中,我们使⽤用不不同频率的正弦和余弦函数: $$PE{(pos,2i)} = sin(pos/10000^{2i/d{model}})$$ $$PE{(pos,2i+1)} = cos(pos/10000^{2i/d{model}})$$   其中pos 是位置,i 是维度。也就是说,位置编码的每个维度对应于⼀一个正弦曲线。波⻓长形成了了从2π到 10000·2π的⼏几何数列列。我们之所以选择这个函数,是因为我们假设它可以让模型很容易易地通过相对位置来学 习,因为对任意确定的偏移k, $PE{pos+k}$可以表示为$PE{pos}$的线性函数。   我们还尝试使⽤用预先学习的positional embeddings[9]来代替正弦波,发现这两个版本产⽣生了了⼏几乎相同的结果 (see Table 3 row (E))。我们之所以选择正弦曲线,是因为它允许模型扩展到⽐比训练中遇到的序列列⻓长度更更⻓长的
序列列。 4 Why Self-Attention(为什什么选择selt-attention)   在这⼀一节中,我们将self-attention layers与常⽤用的recurrent layers和convolutional layers进⾏行行各⽅方⾯面的⽐比 较,⽐比较的⽅方式是 将⼀一个可变⻓长度的符号表示序列列 $(x1, ..., xn)$映射到另⼀一个等⻓长序列列$(z1, ..., zn)$,⽤用 $xi,zi ∈ ℝ^d$,⽐比如在典型的序列列转换的encoder或decoder中的隐藏层。我们考虑三个⽅方⾯面,最后促使我们 使⽤用self-attention。   ⼀一是每层的总计算复杂度。另⼀一个是可以并⾏行行化的计算量量,以所需的最⼩小序列列操作数衡量量。   第三个是⽹网络中⻓长距离依赖关系之间的路路径⻓长度。在许多序列列转换任务中,学习⻓长距离依赖性是⼀一个关键的 挑战。影响学习这种依赖关系能⼒力力的⼀一个关键因素是⽹网络中向前和向后信号必须经过的路路径的⻓长度。输⼊入和 输出序列列中任意位置组合之间的这些路路径越短,越容易易学习⻓长距离依赖。因此,我们还⽐比较了了在由​different layer types组成的⽹网络 中的任意两个输⼊入和输出位置之间的最⼤大的路路径⻓长度。   如表1所示,self-attention layer⽤用常数次($O(1)$)的操作连接所有位置,⽽而recurrent layer需要$O(n)$顺序操 作。在计算复杂度⽅方⾯面,当序列列⻓长度N⼩小于表示维度D时,self-attention layers⽐比recurrent layers更更快,这是 使⽤用最先进的机器器翻译模型表示句句⼦子时的常⻅见情况,例例如word-piece [38] 和byte-pair [31] 表示。为了了提⾼高包 含很⻓长序列列的任务的计算性能,可以仅在以输出位置为中⼼心,半径为r的的领域内使⽤用self-attention。这将使 最⼤大路路径⻓长度增⻓长到$O(n/r)$。我们计划在今后的⼯工作中进⼀一步研究这种⽅方法。   核宽度为$k < n$的单层卷积不不会连接每⼀一对输⼊入和输出的位置。要这么做,在相邻的内核情况下,需要⼀一 个n个卷积层的堆栈, 在扩展卷积的情况下需要$O(logk(n))$ 层[18],它们增加了了⽹网络中任意两个位置之间的 最⻓长路路径的⻓长度。 卷积层通常⽐比循环层代价更更昂贵,这与因⼦子k有关。然⽽而,可分卷积[6]⼤大幅减少复杂度到 $O(k ⋅n⋅d + n⋅d^2)$。然⽽而,即使$k= n$,可分离卷积的复杂度等于self-attention layer和point-wise feed- forward layer的组合,这是我们在模型中采⽤用的⽅方法。   ⼀一个随之⽽而来的好处是,self-attention可以产⽣生更更多可解释的模型。我们从我们的模型中研究attention的分 布,并在附录中展示和讨论示例例。每个attention head不不仅清楚地学习到执⾏行行不不同的任务,还表现出了了许多和 句句⼦子的句句法和语义结构相关的⾏行行为。 5 Training(训练)   本节介绍我们的模型训练⽅方法。 5.1 Training Data and Batching(训练数据和batch)   我们在标准的WMT 2014英语-德语数据集上进⾏行行了了训练,其中包含约450万个句句⼦子对。 这些句句⼦子使⽤用byte- pair编码[3]进⾏行行编码,源语句句和⽬目标语句句共享⼤大约37000个词符的词汇表。 对于英语-法语翻译,我们使⽤用⼤大 得多的WMT 2014英法数据集,它包含3600万个句句⼦子,并将词符分成32000个word-piece词汇表[38]。 序列列 ⻓长度相近的句句⼦子⼀一起进⾏行行批处理理。 每个训练批次的句句⼦子对包含⼤大约25000个源词符和25000个⽬目标词符。
5.2 Hardware and Schedule(硬件和时间)   我们在⼀一台具有8个 NVIDIA P100 gpu的机器器上训练我们的模型。对于paper中描述的使⽤用超参数的基础模 型,每个训练步骤⼤大约需要0.4秒。我们对基础模型进⾏行行了了总共100000步或12⼩小时的训练。对于我们的⼤大型 模型(⻅见表3的底线),步进时间为1.0秒。⼤大模型 使⽤用了了30万步(3.5天)的训练。 5.3 Optimizer(优化器器)   我们使⽤用Adam优化器器[20],其中β1 = 0.9, β2 = 0.98及ϵ= 10-9。 我们根据以下公式在训练过程中改变学习 率: $$lrate=d^{−0.5}_{model} ·min(step_num^{−0.5},step_num·warmup_steps^{−1.5})     (3)$$   这对应于在第⼀一次warmup_steps 步骤中线性地增加学习速率,并且随后将其与步骤数的平⽅方根成⽐比例例地减 ⼩小。 我们使⽤用$warmup_steps = 4000$。 5.4 Regularization(正则化)   训练中我们采⽤用三种正则化: Residual Dropout 我们在对每个⼦子层的输出上执⾏行行dropout操作,这个操作在additive操作(⼦子层的输出加上 ⼦子层的输⼊入)和 normalized操作之前。 此外,在编码器器和解码器器堆栈中,我们将丢弃应⽤用到嵌⼊入和位置编码 的和。 对于基础模型,我们使⽤用$P_{drop}$ = 0.1丢弃率。 Label Smoothing 在训练过程中,我们采⽤用了了值$ε_{ls} = 0.1$[36]的标签平滑。这会影响ppl,因为模型学习 到了了更更多的不不确定性,但提⾼高了了准确率和BLEU评分。 6 Results(结果)
分享到:
收藏