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 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/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球