Transformer(一) 您所在的位置:网站首页 itisnice中文翻译 Transformer(一)

Transformer(一)

2024-06-26 08:40| 来源: 网络整理| 查看: 265

转载请注明出处:https://blog.csdn.net/nocml/article/details/103082600

本系列传送门: Transformer(一)–论文翻译:Attention Is All You Need 中文版 Transformer(二)–论文理解:transformer 结构详解 Transformer(三)–论文实现:transformer pytorch 代码实现 Transformer(四)–实现验证:transformer 机器翻译实践

BERT系列传送门: BERT(一)–论文翻译:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding BERT(二)–论文理解:BERT 模型结构详解

文章目录 Attention Is All You Need 摘要 1 Introduction(简介)2 Background(背景)3 Model Architecture(模型结构)3.1 Encoder and Decoder Stacks(编码器栈和解码器栈)3.2 Attention(注意力机制)3.2.1 Scaled Dot-Product Attention(缩放的点积注意力机制)3.2.2 Multi-Head Attention(多头注意力机制)3.2.3 Applications of Attention in our Model(注意力机制在我们模型中的应用) 3.3 Position-wise Feed-Forward Networks(基于位置的前馈神经网络)3.4 Embeddings and Softmax (词嵌入和 softmax)3.5 Positional Encoding(位置编码) 4 Why Self-Attention(为什么选择selt-attention)5 Training(训练)5.1 Training Data and Batching(训练数据和batch)5.2 Hardware and Schedule(硬件和时间)5.3 Optimizer(优化器)5.4 Regularization(正则化) 6 Results(结果)6.1 Machine Translation(机器翻译)6.2 Model Variations(模型变体)6.3 English Constituency Parsing(英文选区分析) 7 Conclusion(结论)

Attention Is All You Need 摘要

  主流的序列转换模型都是基于复杂的循环神经网络或卷积神经网络,且都包含一个encoder和一个decoder。表现最好的模型还通过attention机制把encoder和decoder联接起来。我们提出了一个新的、简单的网络架构,Transformer. 它只基于单独的attention机制,完全避免使用循环和卷积。在两个翻译任务上表明,我们的模型在质量上更好,同时具有更高的并行性,且训练所需要的时间更少。我们的模型在 WMT2014 英语-德语的翻译任务上取得了28.4的BLEU评分。在现有的表现最好模型的基础上,包括整合模型,提高了2个BLEU评分。在WMT2014英语-德语的翻译任务上,我们的模型在8个GPU上训练了3.5天(这个时间只是目前文献中记载的最好的模型训练成本的一小部分),创造了单模型的SOTA结果,BLEU分数为41.8,通过在大量和少量训练数据上所做的英语选区分析工作的成功,表明Transformer能很好的适应于其它任务。

1 Introduction(简介)

  RNN,LSTM,GRU,Gated Recurrent Neural Networks 在序列建模和转换任务上,比如语言模型和机器翻译,已经是大家公认的取得SOTA结果的方法。自此,无数的努力继续推动递归语言模型和encoder-decoder体系结构的界限。

  递归模型通常沿输入和输出序列的符号位置进行因子计算。在计算时将位置与步骤对齐,它们生成一系列隐藏状态 h t h_t ht​, t t t位置的 h t h_t ht​使用它的前驱 h t − 1 h_{t-1} ht−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将符号表示的输入序列 ( x 1 , . . . , x n ) (x_1,...,x_n) (x1​,...,xn​)映射成一个连续表示的序列 z = ( z 1 , . . . , z n ) z = (z_1,...,z_n) z=(z1​,...,zn​)。给定 z z z,解码器以一次生成一个字符的方式生成输出序列 ( y 1 , . . . , y m ) (y_1,...,y_m) (y1​,...,ym​) 。在每一步,模型都是自回归的[10],在生成下一个字符时,将先前生成的符号作为附加输入。

  Transformer遵循这个总体架构,使用堆叠的self-attention层、point-wise和全连接层,分别用于encoder和decoder,如图1的左半部分和右半部分所示。

Alt

3.1 Encoder and Decoder Stacks(编码器栈和解码器栈)

Encoder:encoder由N(N=6)个完全相同的layer堆叠而成.每层有两个子层。第一层是multi-head self-attention机制,第二层是一个简单的、位置全连接的前馈神经网络。我们在两个子层的每一层后采用残差连接[11],接着进行layer normalization[1]。也就是说,每个子层的输出是 L a y e r N o r m ( x + S u b l a y e r ( x ) ) LayerNorm(x + Sublayer(x)) LayerNorm(x+Sublayer(x)),其中 S u b l a y e r ( x ) Sublayer(x) Sublayer(x) 是由子层本身实现的函数。为了方便这些残差连接,模型中的所有子层以及embedding层产生的输出维度都为 d m o d e l = 512 d_{model} = 512 dmodel​=512。

Decoder: decoder也由N(N=6)个完全相同的layer堆叠而成.除了每个编码器层中的两个子层之外,解码器还插入第三个子层,该子层对编码器堆栈的输出执行multi-head attention操作,与encoder相似,我们在每个子层的后面使用了残差连接,之后采用了layer normalization。我们也修改了decoder stack中的 self-attention 子层,以防止当前位置信息中被添加进后续的位置信息。这种掩码与偏移一个位置的输出embedding相结合, 确保对第 i i i个位置的预测 只能依赖小于 i i i 的已知输出。

3.2 Attention(注意力机制)

  Attention机制可以描述为将一个query和一组key-value对映射到一个输出,其中query,keys,values和输出均是向量。输出是values的加权求和,其中每个value的权重 通过query与相应key的兼容函数来计算。 Alt 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、 d k d_k dk​的key和 d v d_v dv​的value组成。我们计算query和所有key的点积,再除以 d k \sqrt{d_k} dk​ ​,然后再通过softmax函数来获取values的权重。

  在实际应用中,我们把一组query转换成一个矩阵Q,同时应用attention函数。key和valuue也同样被转换成矩阵K和矩阵V。我们按照如下方式计算输出矩阵: A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q K t d k ) V Attention(Q,K,V)=softmax(\frac{QK^t}{\sqrt{d_k}})V Attention(Q,K,V)=softmax(dk​ ​QKt​)V

  additive attention和dot-product(multi-plicative) attention是最常用的两个attention 函数。dot-product attention除了没有使用缩放因子 1 d k \frac{1}{\sqrt{d_k}} dk​ ​1​外,与我们的算法相同。Additive attention使用一个具有单隐层的前馈神经网络来计算兼容性函数。尽管在理论上两者的复杂度相似,但是在实践中dot-product attention要快得多,而且空间效率更高,这是因为它可以使用高度优化的矩阵乘法代码来实现。

  当 d k d_k dk​的值较小时,这两种方法性能表现的相近,当 d k d_k dk​比较大时,addtitive attention表现优于 dot-product attention。我们认为对于大的 d k d_k dk​,点积在数量级上增长的幅度大,将softmax函数推向具有极小梯度的区域 4 ^4 4。为了抵消这种影响,我们对点积扩展 1 d k \frac{1}{\sqrt{d_k}} dk​ ​1​倍。

3.2.2 Multi-Head Attention(多头注意力机制)

  相比于使 d m o d e l d_{model} dmodel​维度的queries,keys,values执行一个attention函数,我们发现使用不同的学习到的线性映射把queries, keys 和 values线性映射到 d k d_k dk​, d k d_k dk​ 和 d v d_v dv​维度h次是有益的。在queries,keys和values的每个映射版本上,我们并行的执行attention函数,生成 d v d_v dv​维输出值。它们被拼接起来再次映射,生成一个最终值,如 Figure 2 中所示。

  Multi-head attention允许模型把不同位置子序列的表示都整合到一个信息中。如果只有一个attention head,它的平均值会削弱这个信息。

M u l t i H e a d ( Q , K , V ) = C o n c a t ( h e a d 1 , . . . , h e a d h ) W o MultiHead(Q,K,V) = Concat(head_1, ..., head_h)W^o MultiHead(Q,K,V)=Concat(head1​,...,headh​)Wo w h e r e   h e a d i = A t t e n t i o n ( Q W i Q , K W i K , V W i V ) where head_i=Attention(QW^Q_i,KW^K_i,VW^V_i) where headi​=Attention(QWiQ​,KWiK​,VWiV​)

  其中,映射为参数矩阵 W i Q ∈ R d m o d e l × d k W_i^Q ∈ ℝ^{d_{model}×d_k} WiQ​∈Rdmodel​×dk​ , W i K ∈ R d m o d e l × d k W_i^K ∈ ℝ^{d_{model}×d_k} WiK​∈Rdmodel​×dk​ , W i V ∈ R d m o d e l × d v W_i^V ∈ ℝ^{d_{model}×d_v} WiV​∈Rdmodel​×dv​ 及 W O ∈ R h d v × d m o d e l W^O ∈ ℝ^{hd_v×d_{model}} WO∈Rhdv​×dmodel​。

在这项工作中,我们采用 h = 8 h = 8 h=8 个并行attention层或head。 对每个head,我们使用 d k = d v = d m o d e l / h = 64 d_k = d_v = d_{model}/h = 64 dk​=dv​=dmodel​/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激活。 KaTeX parse error: Expected 'EOF', got '&' at position 41: …1 )W_2 + b_2 &̲emsp; &ems…

  尽管线性变换在不同位置上是相同的,但它们在层与层之间使用不同的参数。 它的另一种描述方式是两个内核大小为1的卷积。 输入和输出的维度为 d m o d e l d_{model} dmodel​ = 512,内部层的维度为 d f f d_{ff} dff​ = 2048。

3.4 Embeddings and Softmax (词嵌入和 softmax)

  与其他序列转换模型类似,我们使用学习到的嵌入词向量 将输入字符和输出字符转换为维度为 d m o d e l d_{model} dmodel​的向量。我们还使用普通的线性变换和softmax函数将decoder输出转换为预测的下一个词符的概率。在我们的模型中,两个嵌入层之间和pre-softmax线性变换共享相同的权重矩阵,类似于[30]。 在嵌入层中,我们将这些权重乘以 d m o d e l \sqrt{d_{model}} dmodel​ ​

3.5 Positional Encoding(位置编码)

  由于我们的模型不包含循环或卷积,为了让模型利用序列的顺序信息,我们必须加入序列中关于字符相对或者绝对位置的一些信息。 为此,我们在encoder和decoder堆栈底部的输入嵌入中添加“位置编码”。 位置编码和嵌入的维度 d m o d e l d_{model} dmodel​相同,所以它们两个可以相加。有多种位置编码可以选择,例如通过学习得到的位置编码和固定的位置编码[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.

在这里插入图片描述

  在这项工作中,我们使用不同频率的正弦和余弦函数:

P E ( p o s , 2 i ) = s i n ( p o s / 1000 0 2 i / d m o d e l ) P E ( p o s , 2 i + 1 ) = c o s ( p o s / 1000 0 2 i / d m o d e l ) PE_{(pos,2i)} = sin(pos/10000^{2i/d_{model}})\\ PE_{(pos,2i+1)} = cos(pos/10000^{2i/d_{model}}) PE(pos,2i)​=sin(pos/100002i/dmodel​)PE(pos,2i+1)​=cos(pos/100002i/dmodel​)

  其中pos 是位置,i 是维度。也就是说,位置编码的每个维度对应于一个正弦曲线。波长形成了从2π到10000·2π的几何数列。我们之所以选择这个函数,是因为我们假设它可以让模型很容易地通过相对位置来学习,因为对任意确定的偏移k, P E p o s + k PE_{pos+k} PEpos+k​可以表示为 P E p o s PE_{pos} PEpos​的线性函数。

  我们还尝试使用预先学习的positional embeddings[9]来代替正弦波,发现这两个版本产生了几乎相同的结果 (see Table 3 row (E))。我们之所以选择正弦曲线,是因为它允许模型扩展到比训练中遇到的序列长度更长的序列。

4 Why Self-Attention(为什么选择selt-attention)

  在这一节中,我们将self-attention layers与常用的recurrent layers和convolutional layers进行各方面的比较,比较的方式是 将一个可变长度的符号表示序列 ( x 1 , . . . , x n ) (x_1, ..., x_n) (x1​,...,xn​)映射到另一个等长序列 ( z 1 , . . . , z n ) (z_1, ..., z_n) (z1​,...,zn​),用 x i , z i ∈ R d x_i,z_i ∈ ℝ^d xi​,zi​∈Rd,比如在典型的序列转换的encoder或decoder中的隐藏层。我们考虑三个方面,最后促使我们使用self-attention。

  一是每层的总计算复杂度。另一个是可以并行化的计算量,以所需的最小序列操作数衡量。

  第三个是网络中长距离依赖关系之间的路径长度。在许多序列转换任务中,学习长距离依赖性是一个关键的挑战。影响学习这种依赖关系能力的一个关键因素是网络中向前和向后信号必须经过的路径的长度。输入和输出序列中任意位置组合之间的这些路径越短,越容易学习长距离依赖。因此,我们还比较了在由different layer types组成的网络 中的任意两个输入和输出位置之间的最大的路径长度。

  如表1所示,self-attention layer用常数次( O ( 1 ) O(1) O(1))的操作连接所有位置,而recurrent layer需要 O ( n ) O(n) O(n)顺序操作。在计算复杂度方面,当序列长度N小于表示维度D时,self-attention layers比recurrent layers更快,这是使用最先进的机器翻译模型表示句子时的常见情况,例如word-piece [38] 和byte-pair [31] 表示。为了提高包含很长序列的任务的计算性能,可以仅在以输出位置为中心,半径为r的的领域内使用self-attention。这将使最大路径长度增长到 O ( n / r ) O(n/r) O(n/r)。我们计划在今后的工作中进一步研究这种方法。

  核宽度为 k < n k < n k



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有