跳至主要内容

[21.04] RoFormer

Z. Yuan
Maintainer

旋轉位置編碼​

RoFormer: Enhanced Transformer with Rotary Position Embedding


比起 RoFormer 這個名字,其實 RoPE 應該更廣為人知。

RoPE 是 RoFormer 的核心概念,全名為「Rotary Position Embedding」,是一種新型的位置編碼方法。

定義問題​

和 RNN 或 CNN 不同,Transformer 沒有對於位置的歸納偏差。

因此,我們必須額外提供位置信息,以便模型能夠理解序列中的順序。

一般來說,位置編碼是透過將位置信息轉換為向量形式,然後「加」到輸入的 token embedding 中。

絕對位置:三角式​

在第一篇 Transformer 的論文中,採用的方法為三角函數式。

PE(pos,k)={sin⁡(pos/100002i/dmodel)if k=2icos⁡(pos/100002i/dmodel)if k=2i+1PE_{(pos, k)} = \begin{cases} \sin(pos/10000^{2i/d_{\text{model}}}) & \text{if } k = 2i \\ \cos(pos/10000^{2i/d_{\text{model}}}) & \text{if } k = 2i + 1 \end{cases}

這個函數同時考慮了序列的長度和特徵維度,給予每個位置一個固定的位置編碼。

三角函數式由於有固定的生成規律,因此有一定的外推能力。

提示

那個數學式中的 10000 是什麼?

這個 10000 的物理意義可以被解釋為位置編碼的尺度。我們將位置編碼的尺度限制在一個合適的範圍內,以便它能夠有效地捕捉到不同位置之間的關係,同時避免了太高或太低的頻率造成的不良影響。

如果將位置編碼中的 10000 改為 100,將會改變正弦和餘弦函數的頻率,正弦和餘弦函數的頻率將增加,每個位置的位置編碼將在更短的距離內週期性地重複。這可能會導致模型對於較遠位置之間的關係感知能力下降,因為它們的位置編碼會顯示出更大的相似性。

絕對位置:訓練式​

在 BERT 和 GPT 等模型中,位置編碼是透過訓練來獲得的。

假設最大序列長度為 NN,則位置編碼的維度為 dmodeld_{\text{model}},則位置編碼的矩陣為 N×dmodelN \times d_{\text{model}}。

這樣的設計優點是非常簡單,完全不需經過大腦思考,但缺點是無法泛化到更長的序列,如果序列長度改變,就必須重新訓練。

提示

其實外推性也不是絕對位置編碼的明顯缺點,讀者可以參考蘇劍林的這篇文章:

相對位置:XL 式​

在這篇論文中,對自注意力機制中的 QKTQK^T 展開:

  • Qi=(xi+posi)WQQ_i=(x_i+pos_i)W_Q
  • Kj=(xj+posj)WKK_j=(x_j+pos_j)W_K
  • QiKjT=(xi+posi)WQWKT(xj+posj)TQ_iK_j^T=(x_i+pos_i)W_QW_K^T(x_j+pos_j)^T

最後,得到了下式:

  • QiKjT=xiWQWKTxjT+xiWQWKTposjT+posiWQWKTxjT+posiWQWKTposjTQ_iK_j^T=x_iW_QW_K^Tx_j^T+x_iW_QW_K^Tpos_j^T+pos_iW_QW_K^Tx_j^T+pos_iW_QW_K^Tpos_j^T

接著,將 posjpos_j 替換成相對位置向量 Ri−jR_{i-j};將 posipos_i 替換成可學習的向量 uu, vv,得到:

  • QiKjT=xiWQWKTxjT+xiWQWKTRi−jT+uWQWKTxjT+vWQWKTRi−jTQ_iK_j^T=x_iW_QW_K^Tx_j^T+x_iW_QW_K^T{\color{red}{R_{i-j}^T}}+{\color{green}{u}}W_QW_K^Tx_j^T+{\color{green}{v}}W_QW_K^T{\color{red}{R_{i-j}^T}}

然後 uWQuW_Q 和 vWQvW_Q 都是可學習的參數,可以合併成一個,得到:

  • QiKjT=xiWQWKTxjT+xiWQWKTRi−jT+uWKTxjT+vWKTRi−jTQ_iK_j^T=x_iW_QW_K^Tx_j^T+x_iW_QW_K^T{\color{red}{R_{i-j}^T}}+{\color{green}{u}}W_K^Tx_j^T+{\color{green}{v}}W_K^T{\color{red}{R_{i-j}^T}}

考慮到 Ri−jT{\color{red}{R_{i-j}^T}} 的編碼空間和原本 posjpos_j 的編碼空間不同,因此把 WKTW_K^T 換成 WK,RTW_{K, R}^T,得到:

  • QiKjT=xiWQWKTxjT+xiWQWK,RTRi−jT+uWKTxjT+vWK,RTRi−jTQ_iK_j^T=x_iW_QW_K^Tx_j^T+x_iW_QW_{K, R}^T{\color{red}{R_{i-j}^T}}+{\color{green}{u}}W_K^Tx_j^T+{\color{green}{v}}W_{K, R}^T{\color{red}{R_{i-j}^T}}

最後,在這篇論文中,沒有在 QKV 的 V 矩陣中添加位置編碼,之後的研究也都只在 QK 矩陣(也就是注意力矩陣)中添加位置編碼。

相對位置:T5 式​

在 T5 中,作者解耦了內容資訊和位置資訊,把跟位置有關的資訊全部放到 βi,j\beta_{i,j},得到:

  • QiKjT=xiWQWKTxjT+βi,jQ_iK_j^T=x_iW_QW_K^Tx_j^T + \beta_{i,j}

還有更多​

我們沒有要回顧所有的位置編碼方法,更多內容可以參考蘇劍林的網站文章:

解決問題​

可以看到過去的研究,絕對位置編碼和相對位置編碼都有各自的優點和缺點。

本研究期望可以提出一個融合絕對位置編碼和相對位置編碼的方法。

模型架構​

基於 Transformer 的語言建模通常透過自注意力機制利用各個 token 的位置資訊,作者希望內積僅以相對形式編碼位置資訊:

⟨fq(xm,m),fk(xn,n)⟩=g(xm,xn,m−n)\langle f_q(x_m, m), f_k(x_n, n) \rangle= g(x_m, x_n, m-n)

最終目標是找到一個等價的編碼機制來解函數 fq(xm,m)f_q(x_m, m) 和 fk(xn,n)f_k(x_n, n) 以符合上述關係式。

經過一串推導之後(細節請詳閱論文),作者提出的公式的解是:

  • fq(xm,m)=(Wqxm)eimθf_q(x_m, m) = (W_qx_m)e^{im\theta}
  • fk(xn,n)=(Wkxn)einθf_k(x_n, n) = (W_kx_n)e^{in\theta}
  • g(xm,xn,m−n)=ℜ[(Wqxm)(Wkxn)∗ei(m−n)θ]g(x_m, x_n, m - n) = \Re \left[ (W_q x_m)(W_k x_n)^* e^{i(m - n) \theta} \right]

在上式中,ℜ\Re 表示取實部,∗* 表示共軛複數,θ\theta 是一個不為零的常數。

資訊

歐拉公式與旋轉

歐拉公式的核心概念是旋轉。對於一個複數 z=x+iyz = x + iy,我們可以將其看作平面上的一個點 (x,y)(x, y),也可以視作一個向量 (x,y)(x, y)。當我們對複數 zz 乘上 eiθe^{i\theta} 時,相當於將向量 (x,y)(x, y) 逆時針旋轉 θ\theta 角度。

舉個例子來看一下,我們用 markdown 畫個潦草的圖:

  • 初始狀態

        y
    ^
    |
    | z = x + iy
    |
    +-----------------> x
  • 旋轉後

    當我們對複數 zz 乘上 eiθe^{i\theta} 時,相當於將向量 (x,y)(x, y) 逆時針旋轉 θ\theta 角度:

        y
    ^
    | z' = e^{i\theta}z
    | /
    | /
    | /
    | /
    | / z = x + iy
    | /
    | /
    |/
    +-----------------> x

這是因為 eiθe^{i\theta} 可以用歐拉公式展開為:

  • eiθ=cos⁡(θ)+isin⁡(θ)e^{i\theta} = \cos(\theta) + i\sin(\theta)

這個公式表示的是一個單位向量在複平面上繞原點逆時針旋轉 θ\theta 角度。

  • 特殊情況

    當 θ=π\theta = \pi 時,我們得到:

    • eiπ=−1e^{i\pi} = -1

    這意味著將複數 zz 乘以 eiπe^{i\pi} 就是將其旋轉了 180 度,得到相反方向的向量。因此,我們可以得到著名的恆等式:

    • eiπ+1=0e^{i\pi} + 1 = 0

    這個公式被稱為歐拉恆等式,是數學中最優美的公式之一,將自然對數的底數 ee、虛數單位 ii、圓周率 π\pi、1 和 0 巧妙地聯繫在一起。

提示

在論文中,出現了 inθin\theta 這樣的形式,這裡的 nθn\theta 表示在旋轉角度上的多重倍數。

fq(xm,m)f_q(x_m, m) 和 fk(xn,n)f_k(x_n, n) 的形式表示了兩個向量在複平面上分別旋轉 mθm\theta 和 nθn\theta 角度。

這裡的 mm 和 nn 是參數,代表不同的頻率成分或不同的空間位置。這樣的形式可以捕捉到兩個向量在不同旋轉角度下的行為。

g(xm,xn,m−n)=ℜ[(Wqxm)(Wkxn)∗ei(m−n)θ]g(x_m, x_n, m - n) = \Re \left[ (W_q x_m)(W_k x_n)^* e^{i(m - n)\theta} \right]

這裡 i(m−n)θi(m - n)\theta 則表示兩個旋轉角度的差異。

高維拓展​

RoPE

RoPE 的圖形說明如上圖。

為了將在二維空間中的結果推廣到任何 xi∈Rdx_i \in R^d 且 dd 為偶數的情況,作者將 dd 維空間分為 d/2d/2 個子空間,並利用內積的線性特性將 f{q,k}f\{q,k\} 轉化為:

f{q,k}(xm,m)=RΘ,mdW{q,k}xmf\{q,k\}(x_m, m) = R^d_{\Theta,m} W_{\{q,k\}} x_m

其中

RΘd,m=(cos⁡mθ1−sin⁡mθ100⋯00sin⁡mθ1cos⁡mθ100⋯0000cos⁡mθ2−sin⁡mθ2⋯0000sin⁡mθ2cos⁡mθ2⋯00⋮⋮⋮⋮⋱⋮⋮0000⋯cos⁡mθd/2−sin⁡mθd/20000⋯sin⁡mθd/2cos⁡mθd/2)R^d_\Theta,m = \begin{pmatrix} \cos m\theta_1 & -\sin m\theta_1 & 0 & 0 & \cdots & 0 & 0 \\ \sin m\theta_1 & \cos m\theta_1 & 0 & 0 & \cdots & 0 & 0 \\ 0 & 0 & \cos m\theta_2 & -\sin m\theta_2 & \cdots & 0 & 0 \\ 0 & 0 & \sin m\theta_2 & \cos m\theta_2 & \cdots & 0 & 0 \\ \vdots & \vdots & \vdots & \vdots & \ddots & \vdots & \vdots \\ 0 & 0 & 0 & 0 & \cdots & \cos m\theta_{d/2} & -\sin m\theta_{d/2} \\ 0 & 0 & 0 & 0 & \cdots & \sin m\theta_{d/2} & \cos m\theta_{d/2} \end{pmatrix}

是帶有預定參數 Θ={θi=10000−2(i−1)/d,i∈[1,2,...,d/2]}\Theta = \{\theta_i = 10000^{-2(i-1)/d}, i \in [1, 2, ..., d/2]\} 的旋轉矩陣。

將 RoPE 應用於自注意力機制的方程式,我們可以得到:

qm⊤kn=(RΘ,mdWqxm)⊤(RΘ,ndWkxn)=x⊤WqRΘ,n−mdWkxnq^\top_m k_n = (R^d_{\Theta,m} W_q x_m)^\top (R^d_{\Theta,n} W_k x_n) = x^\top W_q R^d_{\Theta,n-m} W_k x_n

其中 RΘ,n−md=(RΘ,md)⊤RΘ,ndR^d_{\Theta,n-m} = (R^d_{\Theta,m})^\top R^d_{\Theta,n}。需要注意的是,RΘdR^d_\Theta 是一個正交矩陣,這確保了在編碼位置資訊過程中的穩定性。

長距離衰減​

long-range

作者遵循連原始 Transformer 的設計觀點,設定 θi=10000−2i/d\theta_i=10000^{-2i/d},提供位置編碼的長距離衰減的特性,如上圖。

意思是當兩個位置之間的距離增加時,位置編碼間的內積會減少,因為我們通常會預期在文本中較遠的位置之間的關係會比較弱。

討論​

對比其他位置編碼​

RoPE vs. Others

上圖展示了 RoPE 和其他位置編碼方法的比較。

左邊是和 BERT 對比,可以看出使用 RoPE 的模型在訓練過程中展現出更好的性能,MLM Loss 下降更快。右邊是把 RoPE 加入 PerFormer,可以看到訓練過程的收斂速度更快,並且在訓練結束時有更好的性能。

GLUE benchmark​

glue

作者使用 Hugging Face 的 Transformers 庫進行微調,並在 GLUE 數據集上進行了實驗。

實驗結果看來 Roformer 在 GLUE 數據集上的表現大多優於 BERT,這表明 RoPE 在自然語言處理任務中的有效性。

限制​

儘管本論文的研究提供了強有力的理論支持和令人鼓舞的實驗結果,但作者認為仍然存在一些限制:

  1. 在數學上將相對位置關係表示為 2D 子空間中的旋轉,但對於為什麼這種方法比採用其他位置編碼策略的基線模型收斂更快,還缺乏深入的解釋。
  2. 雖然證明了模型具有長期衰減的有利特性,這與現有的位置編碼機制相似,並且在長文本處理方面的性能優於其他模型,但在主尚未找到令人信服的解釋。

結論​

這篇論文可能不太容易閱讀,但 RoPE 的概念非常有趣,我們強烈推薦閱讀原文。

目前已經有大量的工作(ex. LLaMA, Mamba)已經使用了 RoPE 這個方法,這表明 RoPE 在自然語言處理領域的應用前景非常廣闊。

後續有很多工作探討和改進 RoPE 了的方法,我們之後遇到再接著聊。

☕ 一杯咖啡,就是我創作的燃料!

贊助我持續分享 AI 實作、全端架構與開源經驗,讓好文章不斷更新。

cta-button
AI / 全端 / 客製 一次搞定 icon
ALL

AI / 全端 / 客製 一次搞定

從構想到上線,涵蓋顧問、開發與部署,全方位支援你的技術實作。

包含內容
  • 顧問服務 + 系統建置 + 客製開發
  • 長期維運與擴充規劃

🚀 你的專案準備好了嗎?

如果你需要客製服務或長期顧問,歡迎與我聯繫!