iT邦幫忙

2025 iThome 鐵人賽

DAY 28
0
AI & Data

實戰派 AI 工程師帶你 0->1系列 第 28

Day 28: RoPE 觀念

  • 分享至 

  • xImage
  •  

前情提要

前幾天已經把 MoE 觀念以及實作介紹完了,剩下最後一塊拼圖也就是 RoPE。

參考文章 & 圖片來源:
https://www.cnblogs.com/rossiXYZ/p/18744797
https://www.cnblogs.com/rossiXYZ/p/18787343

0. 複習

這天當中提到原先學的絕對位置編碼,是詞向量與位置編碼直接相加,再送到後續計算,雖然可以得到相對位置的關係,但實際效果不是很成功,我們透過參考文章整理好的圖來說明為什麼。

  1. 計算注意力當中的 qk 矩陣相乘,將 q_t = x_t + p_t (詞向量與位置編碼直接相加)
  2. (x_t + p_t) * (x_s + p_s) 透過國中學的分配律乘開 → 圖中的 (a) ~ (d)
  3. (a) 是詞的內容訊息,兩個詞的相關性,與位置編碼沒關係
    (b), (c) 都只有一個位置向量,比較偏向是關於絕對位置編碼的訊息
    (d) 同時包含兩個位置向量
  4. 照理說 (d) 要有效的表達相對位置,但因為中間多乘了參數矩陣,導致原本表達的相對位置被破壞掉了,如下圖二。
    https://ithelp.ithome.com.tw/upload/images/20250922/20168446cTkL5N6m57.jpg
    https://ithelp.ithome.com.tw/upload/images/20250922/20168446Gxc5RiQJPg.jpg

1. RoPE 觀念

為了改善上面提到的問題,之前提到過的蘇神在 roformer 提出 RoPE 的方法,有興趣可以參考這篇文章,由本人推導講解
RoPE的出發點是“通過絕對位置編碼的方式實現相對位置編碼”,即編碼時使用絕對位置,但是其點積結果反應相對位置。
剛才的觀念對應下圖,先對位置 m 的 q 與位置 n 的 k 做加工 (旋轉),然後做 qk^T 內積運算時,可以得到後面 m-n 這個相對位置的資訊。
https://ithelp.ithome.com.tw/upload/images/20250922/20168446j9OUMsXknB.jpg

簡單公式證明

看看 RoPE 是否滿足絕對位置編碼的方式實現相對位置編碼,當中可能會有問題的是 RmRn 怎麼合併的,舉例一個是逆時鐘旋轉 50 度的旋轉矩陣,另一個是逆時鐘旋轉 30 度的旋轉矩陣,假設從從 0 度乘上第一個矩陣 → 0 + 50 度再乘第二個 → 50 +30 = 80 度,所以如下圖二,兩個旋轉 R1 和 R2 的疊加也就是 R1R2 會等於角度直接相加。
那最後 R(mθ)R(−nθ)=R((m−n)θ),也就是簡化成了相對位置 (m−n)θ,這代表 attention score 其實只依賴於輸入向量 x_m, x_n 和它們的相對位置差 m−n
  https://ithelp.ithome.com.tw/upload/images/20250922/20168446Q9xD1OUk6O.png
  https://ithelp.ithome.com.tw/upload/images/20250922/20168446Iemk6qPm9K.png
  圖片連結: https://zhuanlan.zhihu.com/p/655834282

圖解說明

上面用了數學式證明,接下來用圖解再看一次。
假設我想找 pig 和 dog 的相對位置,那我希望不會因為總長度的改變而影響到相對位置,所以如下圖:

  • The pig chased the dog: 單詞 dog 在第四位(從0開始算),旋轉角度 4θ, pig 旋轉 θ
  • Once upon the time, the ping chased the dog: dog 旋轉 9θ, pig 旋轉 6θ

你會發現兩個句子當中的 pig 與 dog 相差都是 3θ,跟總長度沒有關係,而是跟他們相差的位置有關。
https://ithelp.ithome.com.tw/upload/images/20250922/20168446UZusdBnC2m.jpg

論文推導結果

因為牽扯到比較多的數學推導,本篇就略過,有興趣可以看參考文章。
那以下總結當中分成絕對位置以及相對位置
絕對位置:

  1. 輸入 x_m 乘上 W_q 變成 query
  2. 然後旋轉角度 m

相對位置:

  1. q 旋轉 m 與 k 旋轉 n 做內積
  2. 整理過後得到 g(x_m, x_n, m-n)
    https://ithelp.ithome.com.tw/upload/images/20250922/20168446buJBBWzF1O.jpg

因此,RoPE 完成最一開始的公式。

  • 新增絕對位置資訊。新增絕對位置編碼是透過使用旋轉矩陣來完成的,即透過一個基於位置的旋轉矩陣將每個位置的嵌入旋轉到新的位置。
  • 得到相對位置資訊。可以使得兩個token的編碼,經過內積變換(self-attn)後,得到的結果,受它們位置的差值 (m-n),即相對位置影響。

2. RoPE 高維度

上面介紹的都是二維向量,不過實際我們要用在高維向量,所以推廣成多維度如下。
RoPE 透過獨立處理每個維度的方式,像下圖將 X 切分成 X1, X2 然後 X1 用 A矩陣旋轉, X2 用 B 矩陣旋轉。
https://ithelp.ithome.com.tw/upload/images/20250922/20168446HVBQaKrUEg.png
所以最後公式為下圖一每個圈起來的部分就是一個簡單的旋轉矩陣,只對單一的子空間做旋轉,其他子空間不動,意思如下圖二(論文的圖),Query/key 前兩個維度做旋轉 (也就是單一的子空間做旋轉),然後再合併。
當中的 θ 採用跟之前學過的一樣。
https://ithelp.ithome.com.tw/upload/images/20250922/201684460X862z3TwN.jpg
https://ithelp.ithome.com.tw/upload/images/20250922/20168446v4FxtAnfVL.jpg

真正在實作會採用下圖,因為原先 R_m 的稀疏性(有太多零),如果直接用矩陣乘法會浪費算力,所以直接透過下圖的計算方式,其中⨂是逐位對應相乘。
https://ithelp.ithome.com.tw/upload/images/20250922/20168446JshX4vhv9T.jpg

今天先到這裡囉 ~ 明天實作會比較清楚。


上一篇
Day 27: MoE (分享自身經驗)
系列文
實戰派 AI 工程師帶你 0->128
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言