目录
1.2 Multi-head Self-attention(以双头为例)
摘要
本节学习的是Transformer,Transformer实际上就是一个带有“self-attention”的sequence-to-sequence模型。提出的背景是因为RNN常被用于输出是一个序列的情况,但是有一个问题——不容易被平行化(并行)。于是有人提出用CNN取代RNN,可以做到和RNN类似的效果,输入一个sequence,输出一个sequence。表面上CNN和RNN都可以有同样的输入输出。但是每个CNN只能考虑很有限的内容,而RNN是考虑了整个句子再决定输出。
所以,引入了 一个新的想法:Self-Attention,输入输出与RNN一样,都是sequence。特别的地方在于,和双向RNN有同样的能力,通过将输入转换成三个vector Q、K、V,经过一系列的矩阵计算,最终得到输出。每一个输出都是看过整个input sequence,只不过输出是可以同时算出来的,可以并行计算。使用一种多头机制 Multi-head Self-attention(多头机制),把多个attention连接在一起,可以使有的头可以把注意力放在长期信息上,有的头可以把注意力放在短期信息上,然后再进行集合。此外Self-Attention中所有的运算都可以利用矩阵来进行运算,因此我们就可以使用gpu来进行加速,极大的加快了我们的运算速度。
1.Transformer的提出
一般的sequence-to-sequence模型是用RNN来做的,但这样构成的模型不能进行平行计算,例如下图中左边的模型就是RNN结构的sequence-to-sequence模型,想要求出b4就得先从a1输入开始一步一步往后求,直到求出b4,而不能对a1,a2,a3,a4一起计算。
为了能够进行并行计算,提出了使用CNN代替RNN的方法,如上图右侧基于CNN的sequence-to-sequence模型。这个模型中每个三角形的底部是m个输入,顶部是n个输出,n<m,这样的话这个模型就可以并行计算了,但它的感受也与每个CNN的输入尺寸有关,也与CNN的层数有关。但不管怎么样,CNN都无法像RNN一样看的无限远。
也就是说RNN结构的sequence-to-sequence模型和CNN结构的sequence-to-sequence模型都有其优缺点,所以就有了Transformer。Transformer是用Self-Attention Layer来替代RNN的sequence-to-sequence模型。Transformer模型在质量上更优越,同时更具可并行性,并且需要更少的训练时间。
Transformer中的bi是由所有的输入决定的,比如上图中的b2是由a1,a2,a3,a4共同决定的,且b1,b2,b3,b4能够平行计算。
1.1 Self-attention
第一步:
第二步:
第三步:
第四步:
计算b1的时候可以如果让α^都不为0,那么b1就考虑了全局的输入,如果计算b1的时候让α^1,1,α^1,2,α^1,3为0,但α^1,4不为0,则b1只考虑了局部输入。下图中的"x"代表乘。
用上面的方法就可以计算出所有的b了。
用矩阵的形式来看:
框着k的橘色方框横过来代表转置
将α进行softmax变为α^
整个过程:
1.2 Multi-head Self-attention(以双头为例)
其实就是把多个自注意力连起来,这样的一来就可以分工协作了,比如有的头可以把注意力放在长期信息上,有的头可以把注意力放在短期信息上,然后再进行集合。
1.3 Positional Encoding
因为在Transformer中没有rnn,所以如果直接将数据输入模型的话是没有位置信息的,所以需要位置编码。
对pi进行独热编码,编码完为一个向量,这个向量只有第i个值为1,其余都为0,这样再将输入xi和pi拼接起来就可以表示value和position了。
Wp是人为设置的,绘制出来如下所示:
2.seq2seq with attention
就是将普通的seq2seq模型中的rnn换位Self-Attention
3.Transformer(重点)
基本架构
更加具体一点:
4. Atention Visualization
一个句子中的每两个单词都有连接,连接的线条越粗说明attention的权重越大。
下图中第一句话中的it分给animal的注意力最多,因为it代指的就是这个animal,第二句话的it分给street的注意力最多,因为这个it代指street。
下图中绿色的代表Multi-head Attention
5. 应用
总结和展望
本节学习的Transformer,抛弃了传统的CNN和RNN,整个网络结构完全是由Attention机制组成。更准确地讲,Transformer由且仅由self-Attenion和Feed Forward Neural Network组成。采用Attention机制的原因是考虑到RNN或者LSTM的计算限制为是顺序的,也就是说RNN相关算法只能从左向右依次计算或者从右向左依次计算,这种机制带来了两个问题:
1.限制了模型的并行能力;
2.顺序计算的过程中信息会丢失,尽管LSTM等门机制的结构一定程度上缓解了长期依赖的问题,但是对于特别长期的依赖现象,LSTM依旧无能为力。
Transformer的提出解决了上面两个问题,首先它使用了Attention机制,将序列中的任意两个位置之间的距离是缩小为一个常量;其次它不是类似RNN的顺序结构,因此具有更好的并行性。
最后讲了一些Transformer的应用,凡是可以使用seq2seq的都可以使用Transformer,如上,用维基百科作为输出(句子长度长达10e2到10e6),神经网络还能不混乱,足以见到 Transformer 之强。据说RNN已经基本上被self-attention取代了。因为RNN也是一个记忆机制,也是在考虑一个向量的信息的时候 ,加入其它向量的位置信息,可以看成是self-attention的一种特殊情况。加深这些内容的理解还需要自己后面手动去编程实现。