《Attention Is All You Need》
概述:
谷歌的transformer结构,17年6月,单模型在机器翻译领域就能吊打所有模型或者组合模型。
笔记:
1.循环神经网络+attention机制,无法满足并行计算要求。
2.transformer将词语词之间注意力的计算降低至常数复杂度,虽然这种平均注意力权重位置的做法削弱了有效的resolution(这玩意到底是啥),但是多头机制弥补了这一点。
3.transformer是第一个完全基于自注意力机制的模型,而不是通过RNN+self-attention或者CNN+self-attention。
4.encoder有6层相同的layer组成。每层两个子层,第一个子层是多头的self-attention,第二层是个简单的全连接ffn。每个子层是残差连接和layer normalization。
每个子层的输出维度同embedding层,都是512维。
5.decoder也是6层,每层3个子层,新加的子层用来计算编码器输出和解码器输入的多头注意力运算,decoder的原多头注意力层也进行了重新定义,加了mask,确保了当前预测结果只和当前预测结果之前的输出有关。
6.一个注意力模型可以认为是一个query和一个输出的key-value的映射关系。
这里的query、key、value还有输出全是向量。输出被当做所有value的权重和,value的权重是根据query查询的函数和相应的key计算得到的。
7.transformer中的注意力模型为“施加了缩放因子的点乘的多投注意力”。缩放因子是根号dk,用所有keys计算query的点积,除以缩放因子,然后通过softmax获取value的权重,就是value。
8.计算相关性函数由加法式,乘法式,transformer使用的是乘法式,也就是点乘。两种方式复杂度相同,但是高度优化的点乘式更加节省空间。
9.对于较小的dk值,这两种机制的性能相似,对于较大的dk[3]值,在不缩放的情况下,加法注意优于点积注意。本文认为,较大的dk会把softmax推向梯度更新较慢的区域饱和域,所以加了缩放因子。
10.多头注意力是把单层的“施加了缩放因子的点乘的多投注意力”并行计算,并投影到一个线性空间里,然后再连接起来,再次投影,获得最终的输出。
11.多头注意允许模型在不同的位置共同关注来自不同表示子空间的信息。用一个注意力头,平均就能抑制这种情况。
12.每个多头注意力层有8个并行的self-attention,每个头的dk dv dmodel = 64 = dmodel/8,这样每个头尺寸较小和单头的全尺寸计算量相当。
13.ffn包含两层线性传导层和一个relu激活函数,输入层和输出层都是512维,隐藏层的维度是2048。
14.PE位置编码,self-attention由于不是rnn也不是cnn,为了使用序列的顺序信息,将位置编码添加到embedding中,维度同embedding都是512维,与embedding层相加。
15.文中使用的位置编码公式十分先验,奇偶数词采用正余弦函数计算。文中假设是该函数可以让模型更好的学习相对位置信息,因为对于任意的偏移k,PEpos+k都能被一个线性变换后的PEpos表示。
16.不用正弦函数,而是直接用学习过位置的embeddings的效果跟正弦函数+embedding差不多,文中用了正弦函数的版本,因为may让模型推测更长的句子。
17.为什么选择self-attention
1.单层的计算复杂度,当词数n小于词的维度d的时候,self-attention计算量小于rnn,而且这种情况很常见,embedding维度一般都上好几百,
2.总的可以并行计算的计算量,用所需最小顺序op衡量。
18.self-attention的一个附带好处,有更好的可解释性。
19.训练环境:8张NVIDIA p100,base模型训了10万步12个小时。big模型选了30万步,三天半。
20.使用adam优化,学习率公式比较先验,叫warm-up,看上去比较复杂,其实逻辑表达起来比较清楚,需要预先设置一个warmup_steps超参。当训练步数step_num小于该值时,以括号中的第二项公式决定学习率,该公式实际是step_num变量的斜率为正的线性函数。当训练步数step_num大于warm_steps时,以括号中的第一项决定学习率,该公式就成了一个指数为负数的幂函数。所以整体来看,学习率呈先上升后下降的趋势,有利于模型的快速收敛。文中的warm-up 超参是4000.
21.三种正则化方式:
1.子层drop-out,在残差连接和层归一化之前,DropoutKeepprob = 0.1。
2.attentiion计算的时候,对softmax(QK)进行dropout。
3.label smoothing,这应该算加噪声了。
结论:
提出了transformer,第一个完全基于注意力的序列建模模型,使用多头自注意力替代了额编码器-解码器框架中最常用的rnn。在wmt2014英德和英法翻译任务上取得了state-of-art的最好成绩。另外在其他实验上证明了具有很好的推广性和适应性。