论文题目:Attention Is All You Need(transformer)
时间:2017
来源:NIPS
论文链接:https://arxiv.org/abs/1706.03762
目录
相关介绍
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=dqi⋅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版本:
https://github.com/hila-chefer/Transformer-MM-Explainability - DODRIO