2017年,Vaswani等人[1]提出了完全基于注意力机制的Transformer模型,在机器翻译任务上的表现超过了RNN,CNN,只用attention机制就能达到很好的效果。
Transformer是一种基于encoder-decoder结构的模型,其编码器和解码器均是由注意力模块和前项神经网络构成。编码组件和解码组件分别是由6个相同的编码模块和6个相同的解码模块堆叠构成(数字6没有什么神奇之处,也可尝试其他数字),所有的编码器在结构上都是相同的,但不会共享参数:数据进入Transformer模型首先会进行词embedding与positional embedding,相加得到transformer表示,位置编码通常选择相对位置编码:在下图中,是20个单词的 positional encoding,每行代表一个单词的位置编码,即第一行是加在输入序列中第一个词嵌入的,每行512个值,取值在[-1,1],用颜色表示出来。Self-attention是与位置无关的,因此需要在embedding中添加能够表明token位置的信息。在每一个encoder模块中,数据分别进行multi-attention计算,再经过position-wise Feed Forward,同时每一层中间都有残差连接。自注意力机制相比其他attention机制的区别在于,其目的是关注当前单词与本句话范围内其他单词之间的信息,寻找相关的线索,从而达到更好的编码效果。在Multi-Head attention进行了多次self-attention操作。模型通过Dense生成,将输入与Wq,Wk,Wv矩阵相乘得到Q,K,V矩阵,通过计算单头self-attention结果。Multi-head attention相当于把一个大的空间划分成多个互斥的小空间,在小空间内分别计算attention,帮助网络捕捉到种类更丰富的信息。Multi-head attention将单头Attention结果concat后作线性变换至与输入数据相同尺寸,以传入残差连接层。由于transformer模型是多层叠加的网络模型,为避免梯度爆炸、梯度消失、网络退化,同时使模型更加关注于当前差异的部分,通常会引入ensumble思想,在多层堆叠网络中使用残差连接层。同时为了加快模型收敛加入layer normalization层。类比CNN网络,CNN block和fc交替连接,效果更好。相比于单独的multi-head attention,加入Feed Forward层可以提高整个block的非线性变换能力。模型的解码模块由masked multi-head attention,编码层解码层multi-head attention和Feed Forward及各层残差连接与layer normalization组成。在decoder模块的masked multi-head attention中,相较于encoder模块中的multi-head attention,此时计算self attention时需要mask掉当前时刻token与后续token的点积结果,将其设置为-inf,是由于自然语言生成(如机器翻译,文本摘要)是auto-regressive的,在推理的时候只能依据之前的token生成当前时刻的token,因此为了保持训练和推理逻辑的一致性,在训练时也不能利用后续token生成当前时刻token,这种方式也是符合人类在自然语言生成中的思维方式的。在encoder-decoder multi-head attention中,K,V矩阵不再来自于下层输入与Wk,Wv矩阵的乘积,而是直接来自于encoder模块的输出。该部分有助于解码器聚焦在输入序列中的合适位置。Decoder模块中的Feed Forward层与encoder部分相同。重复上面的过程,直到 decoder 完成了输出,每个时间步的输出都在下一个时间步时喂入给最底部的 decoder,同样,在这些 decoder 的输入中也加入了位置编码,来表示每个字的位置。模型最后通过线性层与softmax层实现概率分布的输出。
Transformer是第一个用纯attention搭建的模型,不仅计算速度更快,在翻译任务上获得了更好的结果,也为后续的BERT模型做了铺垫。
[1] Vaswani A , Shazeer N , Parmar N , et al. Attention Is All You Need[J]. arXiv, 2017.
' fill='%23FFFFFF'%3E%3Crect x='249' y='126' width='1' height='1'%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E)