【论文阅读笔记】Attention Is All You Need

打印 上一主题 下一主题

主题 1019|帖子 1019|积分 3057

1 引言

循环神经网络(RNN),特殊是是非期记忆和门控循环神经网络(编码器-解码器架构),已成为序列建模和转换标题(如语言建模和呆板翻译)的先进方法,浩繁研究在不断推动其发展。

但RNN通常沿输入和输出序列的符号位置进行计算,其固有的顺序性导致练习示例内难以并行化,在序列长度较长时,由于内存限制跨示例的批处理惩罚,这一标题更加突出。只管近期通过一些技术改进了计算效率,但顺序计算的根本限制仍未改变
且RNN使用共享权值矩阵,在面临较长序列时,会有梯度消失的标题(也可以说是背面词的梯度会覆盖前面的梯度)。纵然后序的LSTM和GRU对这一部分做了改进,但也无法完全解决该标题。
注意力机制已成为各种序列建模和转换模子的紧张构成部分,能在不考虑输入或输出序列距离的情况下对依赖关系进行建模,但在大多数情况下与循环网络联合使用。
作者提出了 Transformer 模子,该模子摒弃了循环单元和卷积单元,完全依赖注意力机制来创建输入和输出之间的全局依赖关系,允许更多的并行化。
2 背景

镌汰序列计算量和加快计算是序列处理惩罚模子中的根本思想。ByteNet和ConvS2S通过使用卷积神经网络并行计算,计算量和序列中位置的距离相关。ConvS2S是线性关系,而ByteNet是对数关系,使得长距离关系学习困难。Transformer将这个过程镌汰到常数规模,只管低落了有效分辨率,但多头注意力机制弥补了这一点。
自注意力机制(内部注意力机制)为序列的差异位置分配权重,并学习表现向量,已在阅读理解、文本择要等任务中表现出色。
端到端记忆网络通常基于循环注意力机制,已用于简单语言翻译等任务。而Transformer 是第一个完全依赖自注意力来计算其输入和输出表现的转换模子。
3 模子架构

Transformer中沿用了非常经典的编码器-解码器架构,编码器将输入的序列                                   (                                   x                            1                                  ,                         …                         ,                                   x                            n                                  )                              (x_1,\dots,x_n)                  (x1​,…,xn​)转化成一个表现向量                                   z                         =                         (                                   z                            1                                  ,                         …                         ,                                   z                            n                                  )                              \boldsymbol{z}=(z_1,\dots,z_n)                  z=(z1​,…,zn​),而编码器依据向量                                   z                              \boldsymbol{z}                  z逐步生成输出序列                                   (                                   y                            1                                  ,                         …                         ,                                   y                            m                                  )                              (y_1,\dots,y_m)                  (y1​,…,ym​),而且模子在每个步调中都是自回归的,会将先宿世成的符号作为生成下一个的额外输入,例如这一步要生成                                             y                            t                                       y_t                  yt​,要将                                   (                                   y                            1                                  ,                         …                         ,                                   y                                       t                               −                               1                                            )                              (y_1,\dots,y_{t-1})                  (y1​,…,yt−1​)都拿到也作为输入。
同时Transformer模子在编码器和解码器中都使用堆叠自注意力机制和逐点全毗连层,如下图的左半部分和右半部分所示。
3.1 编码器堆叠和解码器堆叠

编码器由                                    6                              6                  6 个相同的层堆叠而成。每个层包罗两个子层:多头自注意力机制和逐位置全毗连前馈神经网络。每个子层都使用了残差毗连,然后进行层规范化(防止模子过拟合)。假设每一层的输入是                                   x                              x                  x,那么每一层的输出结果可以表现为:
                                         LayerNorm                            (                            x                            +                            Sublayer(x)                            )                                  \text{LayerNorm}(x+\text{Sublayer(x)})                     LayerNorm(x+Sublayer(x))
此中


  •                                         SubLayer                                  \text{SubLayer}                     SubLayer是当前子层自己实现的运算函数,比如注意力运算和全毗连运算;
  • 模子中的全部子层以及嵌入层的输出维度均为                                                    d                               model                                      =                            512                                  d_{\text{model}} = 512                     dmodel​=512(便于残差毗连)。
解码器同样由 6 个层构成。其布局与编码器雷同,但多了一个对编码器输出进行关注的多头注意力子层。而且在自注意力子层中进行了修改,以防止信息左向运动。这种掩码机制,联合输出嵌入向量向后偏移一个位置,确保位置                                    i                              i                  i 的预测仅依赖于位置小于                                    i                              i                  i 的已知输出。
3.2 注意力机制

注意力机制就是对一系列的query和一系列的key-value对,我们需要确定对于每个query而言差异 value 的紧张程度,而这个权重是根据 query 和key 的相关度计算得到的。
3.2.1 缩放的点积注意力机制

Transformer模子中使用的是缩放的点积注意力机制。在这种机制中,注意力计算涉及query和key的维度为                                              d                            k                                       d_k                  dk​ ),以及value的维度为                                              d                            v                                       d_v                  dv​ 。通过引入一个缩放因子                                                        d                               k                                                 \sqrt{d_k}                  dk​            ​,可以控制注意力分布的稳固性和计算效率。
我们用向量化的方式可以将这种注意力机制的计算过程表现成:
                                         Attention                            (                            Q                            ,                            K                            ,                            V                            )                            =                            softmax                            (                                                   Q                                               K                                     T                                                                               d                                     k                                                             )                            V                                  \text{Attention}(Q,K,V)=\text{softmax}(\frac{QK^T}{\sqrt{d_k}})V                     Attention(Q,K,V)=softmax(dk​                    ​QKT​)V
与传统的注意力机制相比,缩放的点积注意力计算速率更快。缩放参数用于调节注意力计算的规模,以确保对于差异大小的输入,注意力权重的计算结果都能保持在公道的范围内。特殊是在                                   softmax                              \text{softmax}                  softmax函数的应用中,由于指数函数的快速增长特性,缩放可以有效防止某些权重过大,而其他权重接近零的情况,确保了计算结果的平稳性和有效性。
3.2.2 多头注意力机制



Transformer采用了多头注意力机制,将query、key和value进行                                   h                              h                  h次投影,然后对                                   h                              h                  h个投影并行计算注意力,再将这些结果组归并线性投影生成最终的多头注意力输出。多头注意力使模子能够共同关注差异表现子空间和差异位置的信息。
多头注意力机制的计算公式为:
                                         MultiHead                            ⁡                            (                            Q                            ,                            K                            ,                            V                            )                            =                            Concat                            (                                       head                               1                                      ,                            …                            ,                                       head                               h                                      )                                       W                               O                                            \operatorname{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, \ldots, \text{head}_h) W^O                     MultiHead(Q,K,V)=Concat(head1​,…,headh​)WO
此中每个头的计算方式为:
                                                    head                               i                                      =                            Attention                            (                            Q                                       W                               i                               Q                                      ,                            K                                       W                               i                               K                                      ,                            V                                       W                               i                               V                                      )                                  \text{head}_i = \text{Attention}(QW_i^Q, KW_i^K, VW_i^V)                     headi​=Attention(QWiQ​,KWiK​,VWiV​)
参数的维度如下:


  •                                         (                            Q                            ,                            K                            ,                            V                            )                                  ( Q, K, V)                     (Q,K,V) 的输入维度为                                         (                                       d                                           m                                  o                                  d                                  e                                  l                                                 )                                  ( d_{model} )                     (dmodel​)(通常为                                        512                                  512                     512)
  •                                                    W                               i                               Q                                      ∈                                       R                                                        d                                                   m                                        o                                        d                                        e                                        l                                                           ×                                               d                                     k                                                             ,                                       W                               i                               K                                      ∈                                       R                                                        d                                                   m                                        o                                        d                                        e                                        l                                                           ×                                               d                                     k                                                             ,                                       W                               i                               V                                      ∈                                       R                                                        d                                                   m                                        o                                        d                                        e                                        l                                                           ×                                               d                                     v                                                             ,                                       W                               O                                      ∈                                       R                                           h                                               d                                     v                                              ×                                               d                                                   m                                        o                                        d                                        e                                        l                                                                                W_i^Q \in \mathbb{R}^{d_{model} \times d_k}, W_i^K \in \mathbb{R}^{d_{model} \times d_k}, W_i^V \in \mathbb{R}^{d_{model} \times d_v}, W^O \in \mathbb{R}^{hd_v \times d_{model}}                     WiQ​∈Rdmodel​×dk​,WiK​∈Rdmodel​×dk​,WiV​∈Rdmodel​×dv​,WO∈Rhdv​×dmodel​
作者在Transformer中设置                                    h                         =                         8                              h = 8                  h=8 个头,每个头的维度为                                              d                            k                                  =                                   d                            v                                  =                                              d                                           m                                  o                                  d                                  e                                  l                                                 h                                  =                         64                              d_k = d_v = \frac{d_{model}}{h} = 64                  dk​=dv​=hdmodel​​=64。
3.2.3 Transformer中注意力机制的应用



  • 在解码器的“编码器-解码器注意力层”中,query 来自上一个解码器层,而 key 和值 value 来自编码器的输出。这使得解码器中的每个位置都可以到场到输入序列全部位置的注意力计算中。

  • 编码器-解码器注意力层: 在这一层中,query 来自上一个解码器,而记忆 key 和 value 来自编码器的输出。这使得解码器中的每个位置都可以关注输入序列中的全部位置。
  • 编码器中的自注意力层: 编码器包罗自注意力层。在这种自注意力机制中,query, key 和 value 都来自同一位置,即编码器前一层的输出。这样,编码器中的每个位置都可以关注编码器前一层中的全部位置,从而捕获输入序列中差异位置之间的全局依赖关系。
  • 解码器中的自注意力层: 解码器中的自注意力层的key,value和query也是同源的。但为了保持自回归属性,防止序列中前面的内容被背面的内容所影响,解码器在自注意力计算中加入了掩码机制。具体来说,通过在缩放的点积注意力中,将                                        softmax                            ⁡                                  \operatorname{softmax}                     softmax输入中对应非法毗连的值设置为                                        −                            ∞                                  -\infin                     −∞,来屏蔽这些毗连。
3.3 逐位置全毗连前馈神经网络

Transformer中的逐位置全毗连前馈神经网络

在Transformer中,逐位置全毗连前馈神经网络用于加强模子对序列中每个位置信息的处理惩罚本领,这种网络布局包罗两个线性变换层和                                   ReLU                         ⁡                              \operatorname{ReLU}                  ReLU激活函数,用于每个位置独立地进行相同的操作。其数学表现如下:
                                         FFN                            (                            x                            )                            =                            max                            ⁡                            (                            0                            ,                            x                                       W                               1                                      +                                       b                               1                                      )                                       W                               2                                      +                                       b                               2                                            \text{FFN}(x) = \max(0, x W_1 + b_1) W_2 + b_2                     FFN(x)=max(0,xW1​+b1​)W2​+b2​
固然差异位置的线性变换相同,但各层使用的参数差异。此中,                                   x                              x                  x 是输入向量,维度为                                              d                            model                                  =                         512                              d_{\text{model}} = 512                  dmodel​=512 ,而内层的维度为                                             d                                       f                               f                                            =                         2048                              d_{ff}=2048                  dff​=2048,                                             W                            1                                       W_1                  W1​ 和                                              W                            2                                       W_2                  W2​ 是两个线性变换的权重矩阵,                                             b                            1                                       b_1                  b1​ 和                                              b                            2                                       b_2                  b2​ 是相应的偏置向量。这个布局雷同于kernel size为1的卷积操作。
3.4 嵌入和Softmax

和其他序列转换模子雷同,Transformer 使用学习得到的嵌入将输入的token和输出的token转换为维度为 $ d_{\text{model}} $ 的向量。Transformer 还使用学习得到的线性变换和                                   softmax                              \text{softmax}                  softmax函数将解码器的输出转换为预测的下一个token的概率。在Transformer中两个嵌入层和                                   softmax                              \text{softmax}                  softmax之前的线性变换层之间共享相同的权重矩阵(镌汰模子的参数数量,低落过拟合的风险),同时在嵌入层中,我们将这些权重乘以                                                         d                               model                                                 \sqrt{d_{\text{model}}}                  dmodel​            ​(缩放嵌入权重,防止梯度消失)。
3.5 位置编码

在Transformer模子中,由于没有循环和卷积单元,为了处理惩罚序列数据的位置信息,引入了位置编码。位置编码是为序列中的每个位置添加特定的向量表现,以便模子能够区分差异位置的token。在Transformer中的位置编码使用了sin函数和cos函数,这种方法差异于传统的学习得到的位置嵌入,而是采用固定的函数形式,即
                                                    PE                                           pos                                  ,                                  2                                  i                                                 =                            sin                            ⁡                                       (                                           pos                                               1000                                                   0                                                                       2                                              i                                                                          d                                              model                                                                                                )                                                          PE                                           pos                                  ,                                  2                                  i                                  +                                  1                                                 =                            cos                            ⁡                                       (                                           pos                                               1000                                                   0                                                                       2                                              i                                                                          d                                              model                                                                                                )                                            \text{PE}_{\text{pos}, 2i} = \sin\left(\frac{\text{pos}}{10000^{\frac{2i}{ d_{\text{model}}}}}\right)\\ \text{PE}_{\text{pos}, 2i+1} = \cos\left(\frac{\text{pos}}{10000^{\frac{2i}{ d_{\text{model}}}}}\right)                     PEpos,2i​=sin(10000dmodel​2i​pos​)PEpos,2i+1​=cos(10000dmodel​2i​pos​)
这里的                                   pos                              \text{pos}                  pos表现位置而                                   i                              i                  i表现维度,也就是对于位于                                   pos                              \text{pos}                  pos位置的token的嵌入向量第                                   i                              i                  i维加上这样一个值。
4 为什么使用自注意力机制

在处理惩罚序列数据时,长距离依赖关系的学习是一个关键挑战。论文中对比了使用自注意力、循环单元和卷积单元等差异模子布局时的计算量、时间复杂度和最大依赖路径长度。此中,最大依赖路径长度指的是任意两个输入输出位置之间信息传递的最长路径。

在传统的循环神经网络(RNN)中,信息是逐步传递的,因此全局视角下,任意两个位置之间的最长信息传递路径往往是以序列长度                                    n                              n                  n 为量级的。这种逐步传递导致了RNN在捕获长距离依赖时可能面临的挑战,尤其是在处理惩罚长序列时效果不佳。
相比之下,Transformer使用自注意力机制直接将每个位置与全部其他位置进行关联,制止了逐步传递的过程,使得任意两个位置之间的信息传递路径变得极为直接和高效。这种直接的路径传递方式使得Transformer能够更有效地捕获到长距离的依赖关系,而不受序列长度的限制。
因此,Transformer凭借其独特的注意力机制,实现了“Attention is all you need”的理念,夸大了在序列建模中注意力机制的紧张性和效果。它不但仅是一种模子布局的创新,更是在解决长距离依赖标题上的一次庞大突破。Transformer的成功不但在于其高效的信息传递路径,还在于其能够在更大范围内捕获和使用序列中的关联信息,从而提升了序列建模任务的性能和效果。
5 练习

在论文中,练习Transformer模子涉及到几个关键的优化和正则化策略。
5.1 优化器

模子的练习使用了Adam优化器,并采用了一种自适应的学习率。学习率                                    lr                              \text{lr}                  lr 的计算方式如下所示:
                                         lr                            =                                       d                               model                                           −                                  0.5                                                 ×                            min                            ⁡                            (                                       step_num                                           −                                  0.5                                                 ,                            step_num                            ×                                       warm_up_steps                                           −                                  1.5                                                 )                                  \text{lr} = d_{\text{model}}^{-0.5} \times \min(\text{step\_num}^{-0.5}, \text{step\_num} \times \text{warm\_up\_steps}^{-1.5})                     lr=dmodel−0.5​×min(step_num−0.5,step_num×warm_up_steps−1.5)
这种自适应学习率的筹划有助于在练习初期快速提升学习率,以加快模子收敛,而在练习后期渐渐低落学习率,以更细致地调整模子参数,提升练习的稳固性和效果。
5.2 正则化

Transformer模子采用了多种正则化方法,以提升泛化本领和练习稳固性:

  • 残差毗连:在每个子层之间都使用了残差毗连,这种毗连方式有助于镌汰梯度消失标题,并简化了模子的练习和优化过程。
  • Dropout:在输入嵌入向量和位置编码相加后的层中使用了Dropout,选择的Dropout概率为0.1。Dropout通过随机地将部分神经元的输出置为零,有助于防止模子过拟合,并加强泛化本领。
  • 标签平滑处理惩罚:这是一种用于改善模子练习和提高评价指标(如BLEU分数)的技术。标签平滑处理惩罚通过将真实标签替换为一个分布更平滑的目标分布,从而镌汰模子对练习数据中特定标签的过度自信,提升泛化本领和性能评估的划一性。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

慢吞云雾缓吐愁

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表