论文原文Attention is all you need:
https://arxiv.org/pdf/1706.03762.pdf
参考的链接:
https://zhuanlan.zhihu.com/p/46990010
https://www.tensorflow.org/tutorials/text/transformer
https://segmentfault.com/a/1190000020021078
https://blog.csdn.net/mpk_no1/article/details/72862348
以下均已翻译模型为例子:
attention涉及的变量主要分为三部分,编码层的输入变量 h i h_i hi,解码器隐层状态相当于系统当前时间 t t t状态 s t s_t st,以及对于 ( h 1 , h 2 , ⋯ , h T x ) (h_1,h_2, \cdots, h_{T_x}) (h1,h2,⋯,hTx)这一输入的隐状态 z z z用来预测 t + 1 t+1 t+1时刻的 s s s
attention的计算总的来说分为三步
计算 s i s_i si和 h j h_j hj的适配程度(compatibility function),相似度
f i j = F ( s i , h j ) f_{ij} = F(s_i,h_j) fij=F(si,hj)
归一化求出权重,通常使用softmax
w i j = e f i j ∑ k = 1 T x e f i k w_{ij} = \frac {{\rm e}^{f_{ij}}} {\sum_{k=1}^{T_x} {\rm e}^{f_{ik}}} wij=∑k=1Txefikefij
其中 T x T_x Tx为源语句长度。 h j h_j hj对 s i s_i si的相似度。
将对应的attettion分配给对应的value,并求和得到最终的输出值
c i = ∑ j = 1 T x w i j ∗ h j c_i = \sum_{j=1}^{T_x} {w_{ij}*h_j} ci=j=1∑Txwij∗hj
其中根据不同的compatibility function,attention主要分为additive和dot-procduct两种
f i j = F ( s i , h j ) = v T t a n h ( W [ s i h j ] ) = v T t a n h ( W 1 s i + W 2 h j ] ) f_{ij} = F(s_i,h_j)=v^Ttanh(W[s_i \quad h_j]) = v^Ttanh(W_1s_i+W_2h_j]) fij=F(si,hj)=vTtanh(W[sihj])=vTtanh(W1si+W2hj])
f i j = F ( s i , h j ) = s i T h j f_{ij} = F(s_i,h_j)=s_i^Th_j fij=F(si,hj)=siThj
或者加入另外的参数矩阵(Multiplicative attention)
f i j = F ( s i , h j ) = s i T W h j f_{ij} = F(s_i,h_j)=s_i^TWh_j fij=F(si,hj)=siTWhj
这是transformer中解释的选择dot-product类型的原因
加性注意力和乘法注意力在复杂度上是相似的,但是乘法注意力在实践中往往要更快速、具有更高效的存储,因为它可以使用矩阵操作更高效地实现。两个变体在低维度 d k d_k dk 解码器状态中性能相似,但加性注意力机制在更高的维度上相对于没有scaled的乘法注意力性能更优,这也是scaled使用的原因。
自己关注自己,没有额外信息输入,简言之 s s s和 h h h同源即可
在self attention的基础上将 h j h_j hj拆分一个 k j k_j kj和对应的 v j v_j vj
【以下为原文的翻译】
注意力函数可视为将一个 q u e r y query query和一组 k e y − v a l u e key-value key−value pairs映射到 o u t p u t output output,其中 q u e r y query query, k e y s keys keys, v a l u e s values values, o u t p u t output output都是向量。 o u t p u t output output为 v a l u e s values values的加权和,其中的权重是由 q u e r y query query和 v a l u e value value对应的 k e y key key的"适配"函数(compatibility)得到的。
attention常见的有两种 additive attention 和 dot-product(multi-plicative)
总的来说,共分为三步
预定义 Q Q Q和 K K K的维度为 d k d_k dk, V V V的维度为 d v d_v dv。很容易理解,dot-product说明"适配"函数选取的是点乘,并且进一步scaled一下:
F ( Q , K ) = Q K T d k F(Q,K)=\frac {QK^T} {\sqrt {d_k}} F(Q,K)=dkQKT
分子 d k \sqrt {d_k} dk在原文中有解释:
如上文所讲,对于较大的 d k {d_k} dk,点乘的值会增加,会使得进行softmax计算的时候偏移到梯度很小的地方,训练停滞。从统计学上来讲,对于均值为0和方差为1的独立变量 q q q和 k k k,他们的点乘 q k qk qk均值为0方差变为 d k d_k dk,除以 d k \sqrt {d_k} dk之后,可以保证方差始终为1