1706.03762
目录
一、Abstract
改进:
二、相关工作
三、模型架构
1、编码器和解码器栈
2、Attention—注意力机制
2.1 Scaled DotProduct Attention
2.2 MultiHead Attention—多头注意力机制
2.3 Applications of Attention in our Model(注意力机制在模型中的应用)
3、Position-wise Feed-Forward Networks
4、Embeddings and Softmax —词嵌入和 softmax
5、Positional Encoding——位置编码
四、Why Self-Attention-为什么选择自注意力层?
五、总结
一、Abstract
主流的序列转换模型都是基于复杂的循环神经网络或卷积神经网络,且都包含一个encoder和一个decoder,RNN及其衍生网络的缺点就是慢,问题在于前后隐藏状态的依赖性,无法实现并行。针对机器翻译问题,本文提出了一种被称为”Transformer”的网络结构,基于注意力机制,完全摒弃了递归结构,挖掘输入和输出之间的关系,这样做最大的好处是能够并行计算了。
解读:
之前RNN等方法的不足:从左到右一步步计算,因此难以并行计算,过早的历史信息可能被丢弃,时序信息一步一步向后传递,训练时间慢
改进:
本文的 Transformer 完全不用RNN,这是一种避免使用循环的模型架构,完全依赖于注意机制来绘制输入和输出之间的全局依赖关系,并行度高,计算时间短。
二、相关工作
减少序列计算的目标也成就了 Extended Neural GPU ,ByteNet和ConvS2S的基础,它们都使用了卷积神经网络作为基础模块。在这些模型中,将来自两个任意输入或输出位置的信号关联起来所需的操作数,随位置间的距离而增长,ConvS2S为线性增长,ByteNet为对数增长。这使得学习远距离位置之间的依赖性变得更加困难。 在Transformer中,这种情况被减少到了常数次操作(卷积对于远距离的像素块需要多层卷积,Transformer中的注意力机制一层就可以看到整个序列),虽然代价是由于平均注意力加权位置信息降低了有效分辨率,用多头注意力抵消这种影响。
然而,Transformer是第一个完全依赖于self-attetion来计算encoder和decoder架构的模型。
PS:
卷积的好处是可以输出多通道,Transformer采用的是多头注意力机制
自注意力(self-attention):
有时也称为内部注意力,是一种将一个序列的不同位置关联起来以计算序列表示的注意机制。 自注意力已成功用于各种任务,包括阅读理解、抽象摘要、文本蕴涵和学习与任务无关的句子表示。
端到端记忆网络:
基于循环注意机制而不是序列对齐循环,并且已被证明在简单语言问答和语言建模任务中表现良好。
三、模型架构
encoder,也就是编码器,负责将输入序列( x 1 , . . . , x n )变成成指定的向量映射成一个连续表示的序列z = ( z 1 , . . . , z n )
decoder,也就是解码器,根据encoder的输出生成一个长为m的一个序列(一个一个生成的)。在每一步,模型都是自回归的,在生成下一个时刻输出时,将过去时刻的输出作为输入。
Transformer遵循这个总体架构,使用堆叠的self-attention层、point-wise和全连接层,分别用于encoder和decoder。
1、编码器和解码器栈
Encoder:
将一个长为n的输入(如句子),序列(x1, x2, … xn)映射为(z1, z2, …, zn)(机器学习可以理解的向量)。
encoder由n个相同层组成,重复6个layers,每个layers会有两个sub-layers,每个sub-layers里第一个layer是multi-head attention,第二个layer是 simple,position-wise fully connected feed-forward network,简称 MLP。每个sub-layer的输出都做一个残差连接和layerNorm。计算公式:LayerNorm( x + Sublayer(x) ),Sublayer(x) 指 self-attention 或者 MLP。
残差连接需要输入和输出的维度一致,所以每一层的输出维度在transformer里都是固定的,都是512维。与CNN不一样的是,MLP的空间维度是逐层下降,CNN是空间维度下降,channel维度上升。
Decoder:
decoder 拿到 encoder 的输出,会生成一个长为 m 的序列(y1, y2, … , ym)。n 和 m 可以一样长、也可以不一样长,编码时可以一次性生成,解码时只能一个个生成(auto-regressive 自回归模型)
decoder同样由n个相同层组成。除了encoder中的两个子层外,decoder还增加了一个子层:对encoder层的输出执行多头注意力。
另外对自注意力子层进行修改(Mask),防止某个position受后续的position的影响。确保位置i的预测只依赖于小于i的位置的已知输出。输出就是标准的 Linear+softmax。
PS:
多层感知机(MLP)
- 背景:它是一种前馈人工神经网络模型,是深度学习的基础架构之一。其灵感来源于生物神经系统中的神经元结构。
- 结构细节:它由输入层、一个或多个隐藏层和输出层组成。每个神经元(节点)接收来自上一层神经元的输入,并通过加权求和与激活函数处理后,将输出传递给下一层神经元。例如,在一个简单的图像分类任务中,输入层的神经元数量可能对应于图像的像素数量,隐藏层可以对图像的特征进行提取和转换,输出层则给出图像属于不同类别(如猫、狗等)的概率。
LayerNorm模块
LayerNorm是层标准化,和 BatchNorm 在很多时候几乎一样,除了实现方法不同。
BN取的是不同样本的同一个特征,而LN取的是同一个样本的不同特征。在BN和LN都能使用的场景中,BN的效果一般优于LN,原因是基于不同数据,同一特征得到的归一化特征更不容易损失信息。
但是有些场景是不能使用BN的,例如batchsize较小或者在RNN中,这时候可以选择使用LN,LN得到的模型更稳定且起到正则化的作用。RNN能应用到小批量和RNN中是因为LN的归一化统计量的计算是和batchsize没有关系的。
2、Attention—注意力机制
Attention机制可以描述为将一个query和一组key-value对映射到一个输出,其中query,keys,values和输出均是向量。输出是values的加权求和,其中每个value的权重 通过query与相应key的兼容函数来计算。
PS:
注意力机制是对每个 Q 和 K做内积,将它作为相似度。
当两个向量做内积时,如果他俩的 d 相同,向量内积越大,余弦值越大,相似度越高。
如果内积值为0,他们是正交的,相似度也为0。
注意力机制:虽然key-value没有变,但是随着query的改变,因为权重分配的不一样,导致输出会不一样
2.1 Scaled DotProduct Attention
本文的attention为Scaled Dot-Product Attention。输入由query、的key和
的value组成。我们计算query和所有key的点积,再除以
然后再通过softmax函数来获取values的权重。
在实际应用中,我们把一组query转换成一个矩阵Q,同时应用attention函数。key和valuue也同样被转换成矩阵K和矩阵V。我们按照如下方式计算输出矩阵:
为什么除以 ?
虽然对于较小的 dk 两者的表现相似,但在较大的 dk 时,加法注意力要优于没有缩放机制的点乘注意力。我们认为在较大的 dk 时,点乘以数量级增长,将 softmax 函数推入梯度极小的区域,值就会更加向两端靠拢,算梯度的时候,梯度比较小。为了抵抗这种影响,我们使用 缩放点乘结果。
2.2 MultiHead Attention—多头注意力机制
不再使用一个attention函数,而是使用不同的学习到的线性映射将queries,keys和values分别线性投影到 dq、dk 和 dv 维度 h 次。然后在queries,keys和values的这些投影版本中的每一个上并行执行注意力功能,产生h个注意力函数。最后将这些注意力函数拼接并再次投影,产生最终输出值。
多头目的:
一个 dot product 的注意力里面,没有什么可以学的参数。具体函数就是内积,为了识别不一样的模式,希望有不一样的计算相似度的办法。
本文的点积注意力先进行了投影,而投影的权重w是可学习的。多头注意力给h次机会学习不一样的投影方法,使得在投影进去的度量空间里面能够去匹配不同模式需要的一些相似函数,然后把 h 个头拼接起来,最后再做一次投影。这种做法有一些像卷积网络 CNN的多输出通道。
多头注意力的输入还是 Q 、K 、V,但是输出是将不同的注意力头的输出合并,在投影到W0 里,每个头hi把 Q,K,V 通过 可以学习的 Wq , Wk , Wv投影到 dv上,再通过注意力函数,得到head。
2.3 Applications of Attention in our Model(注意力机制在模型中的应用)
Transformer用了三种不同的注意力头:
(1)Encoder 的注意力层: 输入数据在经过 Embedding+位置encoding 后,复制成了三份一样的东西,分别表示 K Q V。同时这个数据既做 key 也做 query 也做value,其实就是一个东西,所以叫自注意力机制。输入了n个 Q,每个Q会有一个输出,那么总共也有n个输出,输出是 V 加权和(权重是 Q 与 K 的相似度)。
(2)Decoder 的掩码注意力层: 掩码注意力层就是将t时刻后的数据权重设置为 0,该层还是自注意力的。
(3)Decoder 的注意力层: 这个注意力层就不是自注意力了,其中 K 和 V 来自 Encoder的输出,Q来自掩码多头注意力输出。
3、Position-wise Feed-Forward Networks
除了attention子层,我们encoder-decoder框架中每一层都包含一个全连接的前馈网络,它分别相同地应用于每个位置。它由两个线性变换和中间的一个ReLU激活函数组成
4、Embeddings and Softmax —词嵌入和 softmax
Embedding: 特征嵌入,embedding是可以简单理解为通过某种方式将词向量化,即输入一个词输出该词对应的一个向量。
5、Positional Encoding——位置编码
由于我们的模型不包含循环或卷积,为了让模型利用序列的顺序信息,我们必须加入序列中关于字符相对或者绝对位置的一些信息。 为此,我们在encoder和decoder堆栈底部的输入嵌入中添加“位置编码”。
四、Why Self-Attention-为什么选择自注意力层?
考虑因素
一是每层的总计算复杂度
二是可以并行化的计算量,以所需的最小序列操作数衡量
三是网络中长距离依赖关系之间的路径长度
研究关键
计算远距离依赖一直是序列转换任务中的关键挑战,其中的一个关键因素就是其路径长度。
路径距离越短,学习长距离依赖越容易。
和CNN、RNN比较
n表示序列长度,d是隐藏层维度,k表示卷积核尺寸,r表示受限自注意力的窗口大小
五、总结
第一个仅基于注意力机制的序列转录模型,使用多头自注意力机制替换了目前在编码器-译码器结构中最普遍使用的循环层。对于机器翻译任务,Transformer模型训练速度相较于其他模型显著提高,实现了新高。
未来可以使用在其他序列模型训练任务中,不限于图片、音频和视频。