transformer中的位置编码

背景:

  各种transformer都含有一项关键的技术——位置编码(position encoding),它可以提升模型对位置信息的感知能力,弥补了Self Attention机制中位置信息的缺失;

  绝对位置编码直接将位置的信息加入到现有的特征中。带有绝对位置编码的Self Attention 计算公式如式1所示:
a t t = ( X i + p i ) T W q T W k ( X j + p j ) (1) att = (X_i+p_i)^TW_q^TW_k(X_j +p_j)\tag1 att=(Xi+pi)TWqTWk(Xj+pj)(1)
其中 X i , X j X_i, X_j Xi,Xj 表示序列中 i , j i,j i,j 两点的特征向量, W q W_q Wq 表示 query 矩阵, W k W_k Wk 表示 key 矩阵, p i , p j p_i, p_j pi,pj 表示 i , j i, j i,j 两点的绝对位置编码信息;
  将式1展开得:
X i T W q T W k X j + p i T W q T W k X j + X i T W q T W k p j + p i T W q T W k p j (2) X_i^TW_q^TW_kX_j + p_i^TW_q^TW_kX_j + X_i^TW_q^TW_kp_j + p_i^TW_q^TW_kp_j \tag2 XiTWqTWkXj+piTWqTWkXj+XiTWqTWkpj+piTWqTWkpj(2)
从式2中可以观察到,第1项是与位置无关的信息,第2、3项只与一个位置相关,第4项是与两个位置都相关的信息,目标是使得注意力机制中包含两个位置之间的相对位置信息,也就是让第满足式3:
p i T W q T W k p j = g ( i − j ) (4) p_i^TW_q^TW_kp_j = g(i-j)\tag4 piTWqTWkpj=g(ij)(4)
其中 g ( i − j ) g(i-j) g(ij) 是一个只与两者相对位置相关的函数; W q T 、 W k W_q^T、W_k WqTWk 是可学习的参数,不妨将问题简化为如何构造函数 g ′ ( i − j ) = p i T p j g^\prime(i-j) = p_i^Tp_j g(ij)=piTpj ,也就是 g g g 只与相对位置有关,而与 i 、 j i、j ij 具体的数值无关;由初等数学三角函数可知:
c o s ( θ − φ ) = cos ⁡ θ cos ⁡ φ + sin ⁡ θ sin ⁡ φ (5) cos(\theta-\varphi) = \cos \theta \cos \varphi+\sin \theta \sin \varphi\tag5 cos(θφ)=cosθcosφ+sinθsinφ(5)
不妨令:
p i = ( c o s θ i s i n θ i )   p j = ( c o s θ j s i n θ j ) p_i = \binom{cos \theta_i}{sin\theta_i}\\ \ \\p_j = \binom{cos \theta_j}{sin\theta_j} pi=(sinθicosθi) pj=(sinθjcosθj)
就有:
c o s ( θ i − θ j ) = ( c o s θ i ,   s i n θ i ) ( c o s θ j s i n θ j ) (6) cos(\theta_i-\theta_j) = (cos \theta_i, \ sin\theta_i)\binom{cos \theta_j}{sin\theta_j}\tag6 cos(θiθj)=(cosθi, sinθi)(sinθjcosθj)(6)
若想让 c o s ( θ i − θ j ) cos(\theta_i-\theta_j) cos(θiθj) 只与 i − j i-j ij 有关,则只需有 θ k = k θ 0 \theta_k=k\theta_0 θk=kθ0,则有 c o s ( θ i − θ j ) = c o s [ ( i − j ) θ 0 ] (7) cos(\theta_i-\theta_j) = cos[(i-j)\theta_0]\tag7 cos(θiθj)=cos[(ij)θ0](7)
所以transformer论文中使用cos与sin函数来对位置编码,是有一定的意义的;
P E ( p o s , 2 i ) = sin ⁡ ( p o s / 1000 0 2 i / d model  ) P E ( pos  , 2 i + 1 ) = cos ⁡ ( p o s / 1000 0 2 i / d model  ) (8) \begin{aligned} P E_{(p o s, 2 i)} &=\sin \left(p o s / 10000^{2 i / d_{\text {model }}}\right) \\ P E_{(\text {pos }, 2 i+1)} &=\cos \left(p o s / 10000^{2 i / d_{\text {model }}}\right) \end{aligned}\tag8 PE(pos,2i)PE(pos ,2i+1)=sin(pos/100002i/dmodel )=cos(pos/100002i/dmodel )(8)
其中 pos 为序列中(句子)的位置, d m o d e l d_{model} dmodel 为位置信息编码的特征向量的长度,i 表示位置信息编码特征向量的第 i 个元素 ,编码向量中的奇数位用cos来编码,偶数位用sin来编码;

你可能感兴趣的:(深度学习,神经网络,人工智能,计算机视觉)