背景:
各种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 a t t =(X i +p i )T W q T W k (X j +p j )(1 )
其中 X i , X j X_i, X_j X i ,X j 表示序列中 i , j i,j i ,j 两点的特征向量,W q W_q W q 表示 query 矩阵,W k W_k W k 表示 key 矩阵, p i , p j p_i, p_j p i ,p j 表示 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 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 )
从式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 p i T W q T W k p j =g (i −j )(4 )
其中 g ( i − j ) g(i-j)g (i −j ) 是一个只与两者相对位置相关的函数;W q T 、 W k W_q^T、W_k W q T 、W k 是可学习的参数,不妨将问题简化为如何构造函数 g ′ ( i − j ) = p i T p j g^\prime(i-j) = p_i^Tp_j g ′(i −j )=p i T p j ,也就是 g g g 只与相对位置有关,而与 i 、 j i、j i 、j 具体的数值无关;由初等数学三角函数可知:
c o s ( θ − φ ) = cos θ cos φ + sin θ sin φ (5) cos(\theta-\varphi) = \cos \theta \cos \varphi+\sin \theta \sin \varphi\tag5 c o s (θ−φ)=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}p i =(s i n θi c o s θi )p j =(s i n θj c o s θ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 c o s (θi −θj )=(c o s θi ,s i n θi )(s i n θj c o s θj )(6 )
若想让 c o s ( θ i − θ j ) cos(\theta_i-\theta_j)c o s (θi −θj ) 只与 i − j i-j i −j 有关,则只需有 θ 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 c o s (θi −θj )=c o s (i −j )θ0
所以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 P E (p o s ,2 i )P E (pos ,2 i +1 )=sin (p o s /1 0 0 0 0 2 i /d model )=cos (p o s /1 0 0 0 0 2 i /d model )(8 )
其中 pos 为序列中(句子)的位置,d m o d e l d_{model}d m o d e l 为位置信息编码的特征向量的长度,i 表示位置信息编码特征向量的第 i 个元素 ,编码向量中的奇数位用cos来编码,偶数位用sin来编码;
Original: https://blog.csdn.net/weixin_40957452/article/details/124116198
Author: CV科研随想录
Title: transformer中的位置编码
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/692521/
转载文章受原作者版权保护。转载请注明原作者出处!