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)cos(pos/100002i/dmodel)if k=2iif k=2i+1
這個函數同時考慮了序列的長度和特徵維度,給予每個位置一個固定的位置編碼。
三角函數式由於有固定的生成規律,因此有一定的外推能力。
那個數學式中的 10000 是什麼?
這個 10000 的物理意義可以被解釋為位置編碼的尺度。我們將位置編碼的尺度限制在一個合適的範圍內,以便它能夠有效地捕捉到不同位置之間的關係,同時避免了太高或太低的頻率造成的不良影響。
如果將位置編碼中的 10000 改為 100,將會改變正弦和餘弦函數的頻率,正弦和餘弦函數的頻率將增加,每個位置的位置編碼將在更短的距離內週期性地重複。這可能會導致模型對於較遠位置之間的關係感知能力下降,因為它們的位置編碼會顯示出更大的相似性。
在 BERT 和 GPT 等模型中,位置編碼是透過訓練來獲得的。
假設最大序列長度為 N,則位置編碼的維度為 dmodel,則位置編碼的矩陣為 N×dmodel。
這樣的設計優點是非常簡單,完全不需經過大腦思考,但缺點是無法泛化到更長的序列,如果序列長度改變,就必須重新訓練。
其實外推性也不是絕對位置編碼的明顯缺點,讀者可以參考蘇劍林的這篇文章:
在這篇論文中,對自注意力機制中的 QKT 展開:
- Qi=(xi+posi)WQ
- Kj=(xj+posj)WK
- QiKjT=(xi+posi)WQWKT(xj+posj)T
最後,得到了下式:
- QiKjT=xiWQWKTxjT+xiWQWKTposjT+posiWQWKTxjT+posiWQWKTposjT
接著,將 posj 替換成相對位置向量 Ri−j;將 posi 替換成可學 習的向量 u, v,得到:
- QiKjT=xiWQWKTxjT+xiWQWKTRi−jT+uWQWKTxjT+vWQWKTRi−jT
然後 uWQ 和 vWQ 都是可學習的參數,可以合併成一個,得到:
- QiKjT=xiWQWKTxjT+xiWQWKTRi−jT+uWKTxjT+vWKTRi−jT
考慮到 Ri−jT 的編碼空間和原本 posj 的編碼空間不同,因此把 WKT 換成 WK,RT,得到:
- QiKjT=xiWQWKTxjT+xiWQWK,RTRi−jT+uWKTxjT+vWK,RTRi−jT
最後,在這篇論文中,沒有在 QKV 的 V 矩陣中添加位置編碼,之後的研究也都只在 QK 矩陣(也就是注意力矩陣)中添加位置編碼。
在 T5 中,作者解耦了內容資訊和位置資訊,把跟位置有關的資訊全部放到 βi,j,得到:
- QiKjT=xiWQWKTxjT+βi,j
我們沒有要回顧所有的位置編碼方法,更多內容可以參考蘇劍林的網站文章:
可以看到過去的研究,絕對位置編碼和相對位置編碼都有各自的優點和缺點。
本研究期望可以提出一個融合絕對位置編碼和相對位置編碼的方法。
基於 Transformer 的語言建模通常透過自注意力機制利用各個 token 的位置資訊,作者希望內積僅以相對形式編碼位置資訊:
⟨fq(xm,m),fk(xn,n)⟩=g(xm,xn,m−n)
最終目標是找到一個等價的編碼機制來解函數 fq(xm,m) 和 fk(xn,n) 以符合上述關係式。
經過一串推導之後(細節請詳閱論文),作者提出的公式的解是:
- fq(xm,m)=(Wqxm)eimθ
- fk(xn,n)=(Wkxn)einθ
- g(xm,xn,m−n)=ℜ[(Wqxm)(Wkxn)∗ei(m−n)θ]
在上式中,ℜ 表示取實部,∗ 表示共軛複數,θ 是一個不為零的常數。
歐拉公式與旋轉
歐拉公式的核心概念是旋轉。對於一個複數 z=x+iy,我們可以將其看作平面上的一個點 (x,y),也可以視作一個向量 (x,y)。當我們對複數 z 乘上 eiθ 時,相當於將向量 (x,y) 逆時針旋轉 θ 角度。
舉個例子來看一下,我們用 markdown 畫個潦草的圖:
這是因為 eiθ 可以用歐拉公式展開為:
- eiθ=cos(θ)+isin(θ)
這個公式表示的是一個單位向量在複平面上繞原點逆時針旋轉 θ 角度。
-
特殊情況
當 θ=π 時,我們得到:
- eiπ=−1
這意味著將複數 z 乘以 eiπ 就是將其旋轉了 180 度,得到相反方向的向量。因此,我們可以得到著名的恆等式:
- eiπ+1=0
這個公式被稱為歐拉恆等式,是數學中最優美的公式之一,將自然對數的底數 e、虛數單位 i、圓周率 π、1 和 0 巧妙地聯繫在一起。
在論文中,出現了 inθ 這樣的形式,這裡的 nθ 表示在旋轉角度上的多重倍數。
fq(xm,m) 和 fk(xn,n) 的形式表示了兩個向量在複平面上分別旋轉 mθ 和 nθ 角度。
這裡的 m 和 n 是參數,代表不同的頻率成分或不同的空間位置。這樣的形式可以捕捉到兩個向量在不同旋轉角度下的行為。
g(xm,xn,m−n)=ℜ[(Wqxm)(Wkxn)∗ei(m−n)θ]這裡 i(m−n)θ 則表示兩個旋轉角度的差異。
RoPE 的圖形說明如上圖。
為了將在二維空間中的結果推廣到任何 xi∈Rd 且 d 為偶數的情況,作者將 d 維空間分為 d/2 個子空間,並利用內積的線性特性將 f{q,k} 轉化為:
f{q,k}(xm,m)=RΘ,mdW{q,k}xm
其中
RΘd,m=cosmθ1sinmθ100⋮00−sinmθ1cosmθ100⋮0000cosmθ2sinmθ2⋮0000−sinmθ2cosmθ2⋮00⋯⋯⋯⋯⋱⋯⋯0000⋮cosmθd/2sinmθd/20000⋮−sinmθd/2cosmθd/2
是帶有預定參數 Θ={θi=10000−2(i−1)/d,i∈[1,2,...,d/2]} 的旋轉矩陣。
將 RoPE 應用於自注意力機制的方程式,我們可以得到:
qm⊤kn=(RΘ,mdWqxm)⊤(RΘ,ndWkxn)=x⊤WqRΘ,n−mdWkxn
其中 RΘ,n−md=(RΘ,md)⊤RΘ,nd。需要注意的是,RΘd 是一個正交矩陣,這確保了在編碼位置資訊過程中的穩定性。
作者遵循連原始 Transformer 的設計觀點,設定 θi=10000−2i/d,提供位置編碼的長距離衰減的特性,如上圖。
意思是當兩個位置之間的距離增加時,位置編碼間的內積會減少,因為我們通常會預期在文本中較遠的位置之間的關係會比較弱。
上圖展示了 RoPE 和其他位置編碼方法的比較。
左邊是和 BERT 對比,可以看出使用 RoPE 的模型在訓練過程中展現出更好的性能,MLM Loss 下降更快。右邊是把 RoPE 加入 PerFormer,可以看到訓練過程的收斂速度更快,並且在訓練結束時有更好的性能。
作者使用 Hugging Face 的 Transformers 庫進行微調,並在 GLUE 數據集上進行了實驗。
實驗結果看來 Roformer 在 GLUE 數據集上的表現大多優於 BERT,這表明 RoPE 在自然語言處理任務中的有效性。