本文已参与「新人创作礼」活动,一起开启掘金创作之路。
论文题目:Attention Is All You Need(transformer)
时间:2017
来源:NIPS
论文链接:arxiv.org/abs/1706.03…
目录
相关介绍
Seq2Seq模型
Seq2Seq模型是输出的长度不确定时采用的模型
基础的 Seq2Seq 包括Encoder、Decoder以及连接两者的中间状态向量C
softmax
其实就是计算每个部分在总体中的概率
RNN的局限性
RNN 由于要考虑之前的所有信息,训练非常慢
RNN 是看完所有的input之后再生成输出,很难进行平行计算(如图: a 1 , a 2 , a 3 , a 4 a^1,a^2,a^3,a^4 a1,a2,a3,a4是顺序进行的,然后顺序生成 b 4 , b 3 , b 2 , b 1 b^4,b^3,b^2,b^1 b4,b3,b2,b1)
与之相对的是 CNN 计算,是每部分的同时进行(如图: a 1 , a 2 , a 3 , a 4 a^1,a^2,a^3,a^4 a1,a2,a3,a4是同时进行的)
解决对策
提出了一种新的简单的网络体系结构–Transformer,它完全基于注意力机制,完全不需要重复和卷积。
本文贡献(创新点)
在两个机器翻译任务上的实验表明,这些模型在质量上更优越,同时更具并行性,所需的训练时间明显减少。
- 在WMT2014英译德翻译任务中达到了28.4%的BLEU,比现有的最好成绩(包括合奏)提高了2%以上。
- 在WMT2014英法翻译任务上,我们的模型在8个GPU上进行了3.5d的培训后,建立了一个新的单一模型最先进的BLEU得分41.8%,这只是文献中最好的模型培训成本的一小部分。
什么时候可以用transformer模型
只要是是之前用 RNN 能做的,transformer都可以做
但是几乎可以不用考虑用这个作为应用创新点了,能做的方向几乎都已经有paper
模型
Encoder 部分
基本过程公式推导
- 生成q k v三个向量
a乘以不同的权重矩阵生成:q,k,v(注意权重相加应为1)
这里 x 1 , x 2 , x 3 , x 4 x^1,x^2,x^3,x^4 x1,x2,x3,x4 是同时进行的,x的顺序对attention没什么影响
2. 每个q和每个k做 Scaled Dot-Product Attention
Scaled Dot-Product Attention: α 1 , i = q i ⋅ k i d \alpha_{1,i} = \frac{q^i\cdot k^i}{\sqrt d} α1,i=d qi⋅ki
- 使用 softmax 做归一化
softmax : α ^ 1 , i = e ( α 1 , i ) ∑ j e ( α 1 , j ) \hat\alpha_{1,i} = \frac{e^{(\alpha_{1,i})}}{\sum_je^{(\alpha_{1,j})}} α^1,i=∑je(α1,j)e(α1,i)
- α ^ 1 , i \hat\alpha_{1,i} α^1,i 点乘V
b 1 = ∑ i α ^ 1 , i v i b^1 = \displaystyle\sum_i\hat\alpha_{1,i}v^i b1=i∑α^1,ivi
b 2 = ∑ i α ^ 2 , i v i b^2 = \displaystyle\sum_i\hat\alpha_{2,i}v^i b2=i∑α^2,ivi
…
矩阵计算整体流程
Multi-head self-attention
- Multi-head是一个参数,将生成的q k v分成设置的 head 数,更多 head 会关注更多方向
- 在已经有了足够关注的时候,设置更多的head会关注到noise(我的理解是这里和过拟合有点像)
- 这里有人问 W 是哪来的?是设置了初始值之后网络自己学习的
一些细节上的问题
顺序问题
Decoder 部分
Attention 的可视化(是我比较好奇是怎么做的实验图,不想知道可以不看)
文本的attention可视化
- 如果能输出每一步的attention数值,自己用绘图工具画灰度图就可以。
- 现成工具tensorflow内建了可视化工具tensorboard
- facebook提供的pytorch版本:
github.com/hila-chefer… - DODRIO