JOVANA
Explore Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

我在哪裡?現代 Transformer 中的位置編碼

2017 年的正弦表已經退場。本篇講 RoPE 如何旋轉查詢與鍵、ALiBi 如何懲罰距離——這兩個讓注意力悄悄延伸到訓練長度之外的關鍵想法。

注意力天生對順序視而不見

純粹的自注意力區塊是一種集合運算:把輸入詞元重排,輸出也跟著同樣重排。這種對稱性很優雅,但對語言毫無用處——貓坐著坐著貓意思不同。因此每個 Transformer 都得設法注入位置。第一卷的正弦位置編碼(sinusoidal positional encoding)在輸入嵌入上加一張固定的表;它能用,但把模型綁死在訓練時看過的絕對索引上,超過該長度往往就崩潰。

兩個觀察重塑了這個領域。第一,注意力真正需要的是相對位置——兩個詞元相隔多遠——而非它們的絕對索引。第二,位置最好施加在比較發生的地方:在縮放點積注意力(scaled dot-product attention)的查詢—鍵內積裡,而不是貼在輸入上。RoPE 與 ALiBi 都是把這兩點當真之後的結果。

本文要超越的经典 2017 方案:把位置信号直接加到每个词元的嵌入向量上。

示意图:位置编码向量与词嵌入向量逐元素相加。

RoPE:用旋轉,不用相加

旋轉位置嵌入(RoPE)把每個查詢與鍵向量切成一組組二維對,再依詞元位置成比例的角度旋轉每一對。奧妙在內積:當你比較位置 m 的查詢與位置 n 的鍵時,兩個旋轉合併後,分數只取決於差值 m − n。輸入的是絕對旋轉,輸出的是相對位置——不花額外參數,免費取得。

不同的座標對以不同的頻率旋轉,從非常快(高頻對在幾個詞元內就翻轉)到非常慢(低頻對橫跨數千詞元也幾乎不動)。快的維度解析鄰近的字序;慢的維度承載粗略的長程位置。這個頻率階梯正是後面 YaRN 用來延展脈絡的槓桿——請先把這幅圖記住。

\langle R_m\mathbf{q},\,R_n\mathbf{k}\rangle=\mathbf{q}^{\top}R_{n-m}\,\mathbf{k},\qquad R_m=\begin{pmatrix}\cos m\theta & -\sin m\theta\\ \sin m\theta & \cos m\theta\end{pmatrix}

RoPE 的核心恒等式:旋转查询与键后,其点积只依赖相对位置差 n−m。

# RoPE applied to one query vector q at position m
for pair i in pairs(q):
    theta = m * base ** (-2*i / d)   # angle grows with position
    q[i] = rotate_2d(q[i], theta)     # rotate this (x, y) pair
# the same rule applies to keys; the q.k score then depends on (m - n)
RoPE 旋轉座標對;內積把絕對角度轉成相對位置。

ALiBi:直接懲罰距離

ALiBi(線性偏置注意力,Attention with Linear Biases)簡單到近乎強硬:不在嵌入上加東西,也不旋轉任何東西。它在 softmax 之前,依查詢與鍵之間的距離成比例地減去一個懲罰——某詞元在越後面,分數就被壓得越低。每個注意力頭各有自己的懲罰斜率,於是有些頭看起來敏銳地偏向局部,有些頭則維持長而和緩的觸及範圍。

a_{ij}=\mathrm{softmax}\!\left(\frac{\mathbf{q}_i^{\top}\mathbf{k}_j}{\sqrt{d}}-m\,(i-j)\right),\qquad i\ge j

ALiBi 一行公式:在 softmax 之前,从每个注意力分数中减去与词元距离成正比的斜率 m。

由於懲罰是距離的固定線性函數,ALiBi 能優雅地外推:在 2k 詞元上訓練的模型,到 4k 仍表現合理,因為偏置公式對任意距離都有定義。相對地,RoPE 原本並非為外推而設計——不加處理就硬推到遠超訓練長度,準確度會崩潰,這正是倒數第二篇要解決的問題。

選哪一個,以及為何牽動後面的一切

多數前沿開源模型(Llama 與 Qwen 系列)選 RoPE,看重它在分佈內的強品質與乾淨、可調的頻率結構。少數以長脈絡為先的設計則靠 ALiBi 的內建外推。這個決定會擴散:RoPE 的頻率會與脈絡長度(context length)延展技巧互動,而這個選擇也限制了你後續能加上哪種長脈絡方法。