Transformer 與大型語言模型內部機制
旋轉位置編碼(RoPE)
RoPE 不是把位置向量加到 token 上,而是依位置把查詢(query)與鍵(key)向量旋轉一個角度。把每一對特徵維度想成時鐘的指針;位置 m 的 token 就把指針轉 m 格。之後計算位置 m 的查詢與位置 n 的鍵的內積時,兩邊的旋轉會合併,使分數只取決於相對位移 n 減 m,而非任一絕對位置。
具體上,RoPE 把 d 維向量切成 d/2 個二維區塊,對第 k 個區塊套用角度為 m 乘 theta_k 的 2x2 旋轉矩陣,其中 theta_k = base^(-2k/d),base 通常取 10000。由於旋轉矩陣滿足 R_m 轉置乘 R_n = R_(n-m),R_m q 與 R_n k 的內積等於 q 轉置 R_(n-m) k,精確地編碼相對位置且不改變向量範數。它只作用在查詢與鍵,從不作用在值(value),且幾乎不增加參數。
RoPE 已成為 LLaMA、GPT-NeoX、PaLM 等現代 LLM 的預設,因為它無參數、與 KV 快取乾淨地組合、退化平緩。主要限制是長度外推:超過訓練長度時高頻分量會混疊,而這正是 NTK-aware 縮放與 YaRN 透過重新縮放 theta_k 頻率所修補的。
\mathrm{RoPE}(x_m)=R_{\Theta,m}\,x_m,\quad \langle R_m q,\ R_n k\rangle = q^\top R_{n-m}\, k
旋轉 q 與 k 使注意力分數成為相對位移 n 減 m 的函數。
RoPE 不像正弦嵌入那樣是「加」上去的;它是「乘」在 q 與 k 上,因此位置由內積的幾何承載,而非你加進去的向量。
又稱
另見