由上图所示,源序列长度为 N N N, t t t针对的是目标序列解码过程中的每个时间步。
1、score function: e t , i = a ( s t − 1 , h i ) = v a T t a n h ( W a ∗ s t − 1 + U a ∗ h i ) e_{t,i}=a(s_{t-1,h_i})=v_a^Ttanh(W_a*s_{t-1}+U_a*h_i) et,i=a(st−1,hi)=vaTtanh(Wa∗st−1+Ua∗hi),计算相似程度
2、alignment function: α t , i = e x p ( e t , i ) ∑ k = 1 N e x p ( e t , k ) \alpha_{t,i}=\frac{exp(e_{t,i})}{\sum_{k=1}^{N}{exp(e_{t,k})}} αt,i=∑k=1Nexp(et,k)exp(et,i)
3、context function: c t = ∑ i N α t , i h i c_t=\sum_i^N\alpha_{t,i}h_i ct=∑iNαt,ihi
这里可以和传统seq2seq架构进行对比,如果不引入Attention机制,则 y t y_t yt的条件概率公式: p ( y t ∣ y 1 , . . . , y t − 1 , c ) = g ( y t − 1 , s t , c ) p(y_t|y_1,...,y_{t-1},c)=g(y_{t-1},s_t,c) p(yt∣y1,...,yt−1,c)=g(yt−1,st,c)引入Attention之后: p ( y t ∣ y 1 , . . . , y t − 1 , X ) = g ( y t − 1 , s t , c t ) p(y_t|y_1,...,y_{t-1},X)=g(y_{t-1},s_t,c_t) p(yt∣y1,...,yt−1,X)=g(yt−1,st,ct)也就是解码过程中每个时间步的context都不一样。
由上图所示,源序列长度为 N N N, t t t针对的是目标序列解码过程中的每个时间步。
1、score function: e t , i = a ( s t − 1 , h i ) = s t − 1 T W a h i e_{t,i}=a(s_{t-1,h_i})=s_{t-1}^TW_ah_i et,i=a(st−1,hi)=st−1TWahi
2、alignment function: α t , i = e x p ( e t , i ) ∑ k = 1 N e x p ( e t , k ) \alpha_{t,i}=\frac{exp(e_{t,i})}{\sum_{k=1}^{N}{exp(e_{t,k})}} αt,i=∑k=1Nexp(et,k)exp(et,i)
3、context function: c t = ∑ i N α t , i h i c_t=\sum_i^N\alpha_{t,i}h_i ct=∑iNαt,ihi
加性注意力和乘法注意力在复杂度上是相似的,但是乘法注意力在实践中往往要更快速、具有更高效的存储,因为它可以使用矩阵操作更高效地实现。
Transformer采用这种方式构建Self-Attention模块。KV代表Key-Value,不同的Key对应不同的Value。Q为Query向量,Query与所有的Key度量一个相似性,找到和它最相似的Key,仿照这个Key对应的Value,产生这个Query对应的Value。
Scaled dot-product Attention计算公式: s o f t m a x ( Q K T i n _ d i m ) V softmax(\frac{QK^T}{\sqrt {in\_dim}})V softmax(in_dimQKT)V也可以类似地拆成以下三步:
先要明确一下源序列为 x 1 , x 2 , . . . , x m x_1,x_2,...,x_m x1,x2,...,xm,而目标序列为 y 1 , y 2 , . . . , y t , . . . , y n y_1,y_2,...,y_t,...,y_n y1,y2,...,yt,...,yn。
其中 Q = ( q 1 , q 2 , . . . , q m ) , 1 ≤ i ≤ m , 1 ≤ j ≤ n Q=(q_1,q_2,...,q_m),1≤i≤m,1≤j≤n Q=(q1,q2,...,qm),1≤i≤m,1≤j≤n
1、score function: e i , j = a ( q i , k j ) e_{i,j}=a(q_i,k_j) ei,j=a(qi,kj)
2、alignment function: α i , j = e x p ( e i , j ) ∑ k = 1 n e x p ( e i , k ) \alpha_{i,j}=\frac{exp(e_{i,j})}{\sum_{k=1}^{n}{exp(e_{i,k})}} αi,j=∑k=1nexp(ei,k)exp(ei,j)
3、context function: c i = ∑ k = 1 n α i , k v k c_i=\sum_{k=1}^n\alpha_{i,k}v_k ci=∑k=1nαi,kvk
首先宏观上他也是计算相似性、归一化、Attention计算这三个步骤。
但和前面传统Attention计算有一些不同,但也只是计算的先后顺序不同,宏观上都是一回事。
Self-Attention就是Scaled dot-product Attention。区别就是此时的源序列就是目标序列。
再次明确一下源序列为 x 1 , x 2 , . . . , x m x_1,x_2,...,x_m x1,x2,...,xm,而目标序列为 y 1 , y 2 , . . . , y t , . . . , y n y_1,y_2,...,y_t,...,y_n y1,y2,...,yt,...,yn。
就是将Self-Attention中配套的QKV映射到了不同的子空间当中。假设head=2,计算时每个head之间的数据独立,不产生交叉。最终 b i b_i bi的输出需要一个权重矩阵 W O W^O WO模型学习得到。
当head=h时,最终Output由h个head产生的 O u t p u t i Output_i Outputi与权重矩阵相乘得到: