attention is all you need笔记

传统

encoder

输入:符号序列 x1,…,xn

输出:连续表示z1,…,zn

decoder

输入:连续表示z1,…,zn

输出:符号序列y1,….ym

 

作者原创

transformer

使用堆叠的self-attention和point-wise,全连接层。(左encoder,右decoder)

transformer结构图

encoder

由6个相同层堆叠而成。每个层有2个子层,首先是一个multi-head self-attention,接着是一个简单的position-wise的全连接层,再跟上正则化,另外还有残差连接。模型中所有的子层输出以及embedding层的输出都是512维度,以方便残差的连接。

decoder

由6个相同层堆叠而成。除了两个和encoder一样的子层,还有masking multi-head attention层,同时它也有残差连接和标准化。

同时,decoder里的self-attention也被堆叠起来防止当前position注意到之后的position。这个masking,加上输出embeddings被偏置了一个position,确保了对位置i的预测只会依赖于下标小于i的已知输出。

 

attention

attention的定义:匹配一个查询到一组键值对,并将它们输出。其中,查询,键,值,输出都是向量。输出是计算值得到加权和,其中权重被分配到各个值上,权重通过查询的兼容度函数compatibility function和对应的键计算得到。

scaled dot-product attention

输入:dk维度的queries和keys,dv维度的values

计算所有keys的点积,再除以 ,并使用softmax函数来获得值的函数。

同时计算一组queries的attention函数,堆叠到矩阵Q中,keys和values被堆叠到矩阵K和V中,在计算输出矩阵

常用的两种attention机制为additive和dot-product,dot-product和作者的算法等价,除了没有除以 。additive使用前项神经网络和一个单一的隐含层计算相容性函数。尽管这两者的理论复杂度相当,但是dot-product的计算速度要快得多,空间效率也要高得多,因为它能被高度优化的矩阵乘法代码所实现。

之所以加上除以 ,是因为,作者认为当维度dk变得很大的时候,点积的量级会有很大的增长,从而将softmax推到一个梯度极小的区域里。为了抵消这种危害,作者除以了

multi-head attention

将queries, keys 和 values分别线性投影分h次分别通过不断学习的投影到不同的dk维度,会比将原来这三者放到一个简单的attention中的表现要好。对于这些输入,并行地执行注意力函数,生成dv维度的输出值。这些输出再被拼接起来,再次被注入,最终得到最终的值。

Multi-head能够让模型联合注意到,来自不同位置的不同表示子空间的信息。使用单个的attention head,就能抑制这种情况。

实验中,采用h=8个并行的attention层或heads。对于其中的每一个使用dk = dv = dmodel/h = 64。由于每个head减少了维度,总体的计算损失和,与使用全连接的单个head的attention,基本相当。

Position-wise Feed-Forward Networks

即encoder和decoder中都有的全连接前向网络,被独立且相同地应用到每一个位置。它包含了两个线性变换,并在其中夹了一个relu激活层

不同位置,即不同层的线性变换并不共用参数。

Embeddings and Softmax

词向量embedding层,线性转换,softmax机制均可学习。两个嵌入层和softmax前的线性变换层共用相同的权重矩阵。在嵌入层中,我们把这些权重乘上

Positional Encoding

没使用卷积或者循环神经网络,所以必须体现位置信息,即positional encodings。对于不同的频率,使用正弦和余弦函数。

每个位置都是正弦信号。波长从2π到20000π不等。原因:我们假设它将使模型能够很容易地学习相对位置,因为对于任何固定偏移量k, P Epos+k都可以表示为P Epos的线性函数。此外,它可能允许模型推断出比训练中遇到的序列长度更长的序列长度。

 

设计并选择Self-Attention的原因

  1. 每一层的计算复杂度
  2. 可并行化的计算量,用序列操作的最小数量来衡量
  3. 网络中长范围依赖的路径长度,很重要的一点是前向传播和反向传播在网络中必经路线的长度,它越短则越容易学习到长范围的依赖。

self-attention的限制版本,只关心各自输出位置的r的尺寸内的输入序列。

具体比较如下

此外,self-attention的可解释性更强。个体的attention head不仅清楚地学会了执行不同的任务,许多attention head还表现出与句子的句法和语义结构相关的行为。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章