跳轉到

05.3 位置編碼與 RoPE#

本章導讀#

注意力有個天生的盲點:它對「順序」視而不見。 把「貓追狗」和「狗追貓」的字序打亂,注意力算出的關聯完全一樣——因為它對輸入是置換等變的。 但語言的順序有意義。怎麼把「位置」塞進無序的注意力?答案是一個優雅的幾何技巧:旋轉。

淺顯說明#

最直覺的做法是給每個詞發一個「座位號碼牌」(加到詞向量上)。 2017 年 Transformer 用正弦號碼牌;2021 年 RoPE 改用更聰明的辦法:

  • 不加號碼牌,而是把每個詞的向量在平面上旋轉一個與位置成正比的角度。
  • 位置 \(m\) 的詞旋轉 \(m\theta\) 度。
  • 神奇之處:兩個詞做內積時,旋轉角自動相減——內積只依賴「相對位置 \(m - n\) 」, 而不是絕對位置。

就像兩隻手錶各自快慢不同,比對時間時只需看時差。

正規理論#

問題:置換等變性#

自注意力對輸入序列的置換等變:打亂詞序,注意力輸出同樣打亂,語義結構不變。 因此必須顯式注入位置資訊。

正弦位置編碼(Transformer, 2017)#

位置 \(m\) 、維度偶數位 \(2i\) :

\[ PE(m, 2i) = \sin\!\left(\frac{m}{10000^{2i/d}}\right), \qquad PE(m, 2i+1) = \cos\!\left(\frac{m}{10000^{2i/d}}\right) \]

低維振盪快(編碼精細位置)、高維振盪慢(編碼粗位置)——像二進位計數器的連續版。 用法: \(\mathbf{x}_m \leftarrow \mathbf{x}_m + PE(m)\) (加法注入)。

RoPE:旋轉位置編碼#

把 \(d\) 維向量看成 \(d/2\) 個二維平面上的複數。位置 \(m\) 的詞,每個平面旋轉 \(m\theta_i\) :

\[ R_{\Theta, m} = \mathrm{diag}\!\left(R(\theta_1 m), R(\theta_2 m), \dots, R(\theta_{d/2} m)\right), \qquad R(\phi) = \begin{pmatrix} \cos\phi & -\sin\phi \\ \sin\phi & \cos\phi \end{pmatrix} \]

其中 \(\theta_i = 10000^{-2i/d}\) 。應用: \(q_m = R_{\Theta,m}\,q\) , \(k_n = R_{\Theta,n}\,k\) 。

核心性質:相對位置偏置#

定理:旋轉後的內積只依賴相對位置 \(m - n\) :

\[ (R_{\Theta,m}\,q)^\top (R_{\Theta,n}\,k) = q^\top R_{\Theta,n-m}\, k \]

證明(複數形式):每個平面是一個複數 \(q_j \in \mathbb{C}\) ,旋轉即乘 \(e^{i\theta_j m}\) :

\[ \sum_j \overline{e^{i\theta_j m} q_j}\, e^{i\theta_j n} k_j = \sum_j \overline{q_j}\, e^{i\theta_j(n - m)} k_j = q^\top R_{\Theta, n-m}\, k \]

實數部分正是二維旋轉下的內積。旋轉矩陣的正交性( \(R^\top R = I\) )保證: \(\blacksquare\)

\[ R_{\Theta,m}^\top R_{\Theta,n} = R_{\Theta, n-m} \]

意義: - 內積天生攜帶相對位置資訊——「誰離誰近」自動進入注意力 logits。 - 絕對位置不出現——模型可直接外推到更長的序列(配合尺度調整)。 - 正交旋轉不改變向量長度——不擾動詞向量的範數,只改方向。

簡易範例:二維旋轉#

\(d = 2\) , \(\theta = 30°\) 。詞 A 在位置 \(m = 1\) ,詞 B 在位置 \(n = 3\) ,都是向量 \((1, 0)\) :

  • A 旋轉 \(30°\) : \((\cos 30°, \sin 30°) \approx (0.866, 0.5)\)
  • B 旋轉 \(90°\) : \((\cos 90°, \sin 90°) = (0, 1)\)

內積: \(0.866 \times 0 + 0.5 \times 1 = 0.5\) 。

驗證定理:相對位置 \(n - m = 2\) ,即旋轉 \(60°\) , \(q^\top R(60°) k = \cos 60° = 0.5\) 。一致!

內積 \(= \cos(\text{角度差})\) ——旋轉位置編碼的本質就是:位置差變成角度差,內積變成餘弦。

歷史典故#

習題#

  1. 證明二維旋轉矩陣 \(R(\phi)\) 的正交性: \(R^\top R = I\) 。
  2. 對 \(d=2, \theta=45°\) ,詞在位置 0 與 2(向量 \((1,0)\) ),用兩種方式計算內積(直接旋轉 vs 相對位置),驗證一致。
  3. 討論:為什麼「相對位置」比「絕對位置」更適合語言?(提示:語法關係多是相對的,且需長度外推。)

補充#

1. 數學推導證明#

證明(習題 1):二維旋轉矩陣的正交性。

\[ R(\phi) = \begin{pmatrix} \cos\phi & -\sin\phi \\ \sin\phi & \cos\phi \end{pmatrix} \;\Rightarrow\; R(\phi)^\top R(\phi) = \begin{pmatrix} \cos\phi & \sin\phi \\ -\sin\phi & \cos\phi \end{pmatrix} \begin{pmatrix} \cos\phi & -\sin\phi \\ \sin\phi & \cos\phi \end{pmatrix} \]

逐元素計算:

\[ \begin{pmatrix} \cos^2\phi + \sin^2\phi & -\cos\phi\sin\phi + \sin\phi\cos\phi \\ \sin\phi\cos\phi - \cos\phi\sin\phi & \sin^2\phi + \cos^2\phi \end{pmatrix} = \begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix} \]

(用到畢氏恆等式 \(\cos^2\phi + \sin^2\phi = 1\) 。)故 \(R(\phi)\) 是正交矩陣: \(R^\top = R^{-1}\) ,且 \(\det R = \cos^2\phi + \sin^2\phi = 1\) ——旋轉屬於 \(SO(2)\) 。正交性保證旋轉不改變向量長度: \(\|R v\|^2 = v^\top R^\top R v = \|v\|^2\) 。 \(\blacksquare\)

證明(習題 2):直接旋轉法與相對位置法一致(矩陣形式)。

對 \(d = 2\) 、 \(\theta = 45°\) ,詞在位置 0 與 2(向量 \((1,0)\) )。直接旋轉法:

\[ (R_{\Theta,0}\, q)^\top (R_{\Theta,2}\, k) = q^\top R_{\Theta,0}^\top R_{\Theta,2}\, k = q^\top R_{\Theta,0}\, k \quad (\text{因 } R_{\Theta,0} = I) \]

即 \(q^\top R(90°)\, k\) 。代入 \(q = k = (1, 0)\) :

\[ (1, 0) \begin{pmatrix} \cos 90° & -\sin 90° \\ \sin 90° & \cos 90° \end{pmatrix} \begin{pmatrix} 1 \\ 0 \end{pmatrix} = \cos 90° = 0 \]

相對位置法: \(n - m = 2\) ,角度差 \(2 \times 45° = 90°\) ,內積 \(= \cos 90° = 0\) 。兩法一致——這正是本節定理 \(R_{\Theta,m}^\top R_{\Theta,n} = R_{\Theta, n-m}\) 在 \(d=2\) 的具體驗證。 \(\blacksquare\)

2. 簡易範例#

高頻與低維的分工:正弦編碼 \(PE(m, 2i) = \sin(m / 10000^{2i/d})\) 。取 \(d = 4\) 、 \(m = 1\) 與 \(m = 2\) :最低維( \(i=0\) ) \(\sin(1) \approx 0.841\) 與 \(\sin(2) \approx 0.909\) 差異明顯(精細位置可辨);最高維( \(i=1\) ) \(\cos(1/100) \approx 0.99995\) 與 \(\cos(2/100) \approx 0.9998\) 幾乎相同(粗粒度、變化慢)——像二進位計數器的連續版,低維快速振盪編碼精細位置,高維慢速振盪編碼粗位置。

程式驗證:_code/05.3-rope-rotation.py 用 numpy 實作二維 RoPE 旋轉。程式輸出:(1) 三個角度下 \(R^\top R\) 與單位矩陣的最大偏差都在 \(10^{-16}\) 量級——驗證正交性;(2) 同一對詞(相對位置固定為 2)放在 \(m = 0, 1, 5, 10\) 等不同絕對位置,旋轉後內積全部等於 0.5——驗證內積只依賴相對位置;(3) \(m=1, n=3\) 時直接旋轉法與相對位置法( \(\cos 60°\) )數值一致。