Attention is all you need
nips
这个模型仅仅依赖于注意力机制,而没有用循环或卷积
提出了一个模型,在机器翻译这个任务上效果比较好,然后有比较好的泛化性
后续有bert,gpt;在图片上面视频上面可以用
把之前所有的循环层,全部换成了multi-headed self-attention
不仅仅在机器翻译这个方向上,还可以用在其他方向
2017年 RNN:LSTM,GRU
输出结构化,一般会用编码器和解码器的架构
rnn并行度比较差,历史信息是一步一步向后传递的
transformer是可以变形的,不再使用时序,纯用attention,并行度是比较高的
如何使用卷积神经网络替换掉循环神经网络
卷积神经网络的问题
注意力机制可以一次看到所有的像素
卷积可以做多个输出通道,多头可以模拟多输出通道的效果
自注意力机制
原始输入句子,编码器输出每一个词的向量表示
解码器里,词是一个一个生成的,过去时刻的输出可以作为当前时刻的输入(自回归)
编码器:输入编码,注意力层,残差连接,前馈神经网络,normalization
6个layer
一个layer有两个sub-layer: multi-head attention, fully connected feed-forward network
对每一个子层用残差连接 最后进入layer norm
batch norm是对每一个feature做normalization, layer norm是对每一个样本做normalization
对每一层,维度都是512
只有两个参数:d多少层、N维度有多大
n=6 每个层有两个子层
解码器做了一个自回归
带掩码的注意力机制
注意力函数是query和key value对
output是value的加权和
权重等价于query和key的相似度,如果query和某个key更相似,那么那个key对应的value的权重会比较大一些
scaled dot-product attention
query和key做内积,作为他们的相似度
相似度算出来再除以根号dk,再放进softmax得到一个非负的加起来等于1的权重
query可以画成一个矩阵
通过两次矩阵乘法,可以并行计算矩阵元素
一般有两种注意力机制:加法的注意力机制(可以处理q、k不等长的情况)、点积的注意力机制
为什么是scaled,要除以一个根号dk,一般dk取512
在算输出的时候,不要用到后面的attention,所以要用mask,换成一个负数,进softmax就会变成0
qkv进线性层,投影到比较低的维度
可以投影到多个不同的模式
然后做注意力机制
不同的输出 然后加起来concat
再接一个线性层
在实际中一般用8个头
三种不一样的注意力层
编码器的输入,句子长度是n,编码器的输入是n个长为d的向量
注意力层有三个输入:qkv
后面的东西要设成0
可以去挑你感兴趣的东西,attention可以在编码器和解码器中交换信息
中间隐藏层把维度扩大4倍
然后用一个残差把维度回去
MLP:每个mlp对每一个输入做运算,然后就得到一个输出
attention把序列里的信息抓取出来,做一次aggregation
投影MLP,对每个点独立做就可以了,因为输入向量的序列信息已经抽取完成,MLP以后就是我们要的语义空间的向量
rnn的思想:一般的MLP要把上一个向量的输出作为下一个向量的输入
不同的点在于如何传递序列的信息,在transformer是通过attention全局的拉到整个序列的信息
attention是没有时序信息的
position encoding在输入里加入时序信息
任何一个词用一个长为512的向量来表示
position encoding把这个位置的信息+那个向量
就完成了在输入里加入信息
自注意力层的算法复杂度、顺序计算、信息从一个数据点到另一个数据点要多远
现在基于transformer的模型都是特别大特别贵
任务:英语翻德语
bpe是可以把英语的词根提出来,token的字典,在英语德语之间是共享的
编码器和解码器的embedding可以用同一个东西
tpu比较适合做大的矩阵乘法
对每一个带权重的使用了大量的dropout对模型做正则化
label smooth:softmax是很难逼近于1,所以训练是比较难的,只要置信度是0.1就可以了
之前视觉用cnn,nlp用rnn
但是transformer不仅可以在nlp,cv上也可以用
transformer可以把不同的数据融合起来,抽取到同一个语义空间,用文本、语音去训练一个更好更大的模型
attention可能用了一个归纳偏执,所以可以有一般性的结论,但是缺点是要用大模型,训练比较贵