語言模型窗口外推技術綜述
一、摘要
主要內容概述:
絕對位置編碼與相對位置編碼:介紹了絕對位置編碼和相對位置編碼的基本原理,包括三角函數編碼和旋轉位置編碼(RoPE)的運作機制 。
窗口外推的概念與意義:詳細闡述了什么是窗口外推,為什么窗口外推對于語言模型的重要性,以及當前的研究挑戰 。
當前窗口外推技術的現狀:分析了不同的窗口外推方法及其各自的優缺點,如限制注意力流派和調整旋轉速度流派 。
未來展望:展望了未來窗口外推技術的發展方向,特別是對 RoPE 的進一步研究和模型架構優化的可能性 。
二、絕對位置編碼
1. 三角位置編碼介紹
三角函數式 (Sinusoidal) 位置編碼是在原 Transformer 模型中使用的一種絕對位置編碼,其函數形式是:
其中 $p_{k,2i},p_{k,2i+1}$ 分別是位置索引 $k$ 處的編碼向量的第 $2i,2i+1$ 個分量。在一般實踐中 n=10000。
2. 性質
對于每個 dimension 而言,有
因此對于每個橫坐標而言,都是一個正弦波,且波長和 dimension 大小是指數關系。這里說明了低 dimension 存儲了高頻分量,而高 dimension 存儲了低頻分量。
對于每個 token 而言,每個奇數坐標的正弦值如下所示:
波動是隨著 token 靠后變大的,最終波長趨于 2πn/k。
還有個性質就是對于每一對(cos 和 sin),平方和為 1。
計算 qkv 的時候,我們知道有:
于是點積形式:
我們實際需要:
即所有的 p_n,p_m 都轉化為 delta 的形式,這樣就不存在基坐標的表示形式,有利于我們建模(具有平移不變性)。
3. 推論
另一個有用的推論,對于 p_2=p_1+k,有:
可以看到絕對位置編碼是可以分解的,系數和 k 有關。但這個分解的結構性質告訴我們如果需要外推則需要兩個域內的特征表示。
三、相對位置編碼
1. 靜態位置編碼
ALiBi 的做法是不添加 position embedding,然后添加一個靜態的不學習的 bias。
具體而言:
其中 n 為 attention 頭個數:
效果也挺好。
2. 旋轉位置編碼
(1)小背景
什么是旋轉矩陣,將二維的點逆時針繞原點旋轉 θ 的表示。
目標,每個詞都在單位圓上的 unique 位置,每個詞(或者任意間隔的詞)的距離顯然一致(在 L2 空間上)。
(2)推理
在二維空間,內積空間退化為點積形式(其中?x,y?=x^T My 且 M=I),我們首先讓這個部分表示為相對位置編碼:
因為我們在二維空間,則可以用復數推理,復數的內積有:
假設存在復數等于該式子,利用歐拉公式有:
假設初始輻角為 ?_0=0,幅值為 1,一些特解:
遞推公式:
這里多少角度其實無所謂,因此有解:
高維偶數空間的表示(注意這里只表達了在每個子空間上 ?_0=0,幅值為 1 的形式)。
為什么這是對的,因為內積是線性的。
(3)遠程衰減
當距離趨于無窮時,有:
如果使用三角位置編碼的方式,即:
因此內積可以被寫作:
最后一步假設位置編碼向量長度趨于無窮。
這個編碼確實有衰減趨勢。
但不代表就這一種合理的衰減形式,只要單調遞減且大于 0 基本都沒有太大的問題。
(4)矩陣形式
于是對于任意的 qkv 而言,有這樣一般的嵌入(這里只寫了 q 向量,其他向量也是如此):
二維嵌入:
RoPE 中,將 hidden states 的每兩維看做一個二維坐標系,位置編碼從“加”的方式變為對 hidden states 做“旋轉”的方式參與計算,這也符合上述內容。
不同的“二維坐標系”(一般為頭大小 128/2=64 個)有不同的旋轉單位角,因此表達了不同頻率的信息。每個子空間的旋轉角為:
在 llama 中設置:
這個矩陣為什么保證了相對位置,因為:
其中旋轉矩陣的轉置就是往相反的方向旋轉,于是該式子自然成立,保證了相對位置的一致性。
因為該矩陣是稀疏的,因此有:
注意?是逐位乘法,也可以寫成點積的形式,效果一樣。
(5)N 進制編碼
比如要編碼更長的數字,在不損失數字精度的方案的情況下,有圖示的幾種解法:
這個例子中的數字在 RoPE 中就是旋轉角度。
- 前兩者可以比較穩妥的解決該問題
- 第一種雖然 .5 不在訓練數據中,但三位數字的序關系是保持的
- 加大 base 雖然可能在某個 token 上出現大于等于 10 的數字,但三位數字序關系依舊是存在的
- 縮小 base (看上去是反其道而行,我明明希望能在有限 context 的窗口表示,但我用了更多的窗口)實際上是希望模型能夠更好的泛化低位的部分,但表示的 token 數量變長了導致長序列理解能力會有問題(畢竟更長了,而且他也沒有學習更長范圍,也就是超過三位數字的序關系),這個效果不是太好。還有一種解釋就是更高的頻率模型其實也沒有泛化(因為僅僅是把基頻變高了而已,落入到了未泛化區間)
四、外推能力
1. 外推動機
外推:讓語言模型能夠以一定的性能理解并生成超過其預訓練窗口長度的文本。
為什么需要外推?
- 在應用中,有時會要求語言模型閱讀或生成長度數萬甚至數十萬的文本,這超過了一般模型訓練窗口的數倍至數十倍;
- 目前典型的語言模型預訓練窗口長度為 2k~8k,更大的窗口會提高訓練算力需求,降低訓練效率。
補充一下知識:
這個是 LM 的對數似然:logP(x)=∑_(i=1)^n?log P(x_i |x_1,x_2,…,x_(i-1) )。
這個是 perplexity,可以看到兩者是一致的:最小化 perplexity 等于最大化 LM 的對數似然:"Perplexity" (x)=exp(-1/n ∑_(i=1)^n?log P(x_i |x_1,x_2,…,x_(i-1) ))。
為什么當前的 RoPE based LLM 難以“無痛”外推?
- 理論上,得益于“旋轉”操作周期性的本質,RoPE 的方案可以建模任意長度的序列;
- 但實際上,在推理時,模型對訓練階段沒有“見過”的長度序列的建模效果顯著地變差,具體表現為 perplexity 快速上升到完全不可用。
我們發現高頻分量是充分學習的,因此可以外推,而低頻分量不行。
2. 實現外推的方式
目前常見的有這幾種形式:
(1)限制注意力流派
既然直接外推時對遠程信息建模會出現 OOD 問題,那最直接的方式是在“少看”甚至“不看”遠程信息的情況下建模長序列(只要我的建模序列的一個 layer 上的感受野大小和訓練時保持一致即可)。
比如 SWA(在 Mistral 的報告中有)。
或者 Alibi 的將遠處的 token 壓低概率,使得其不出現在感受野中。
(2)調整旋轉速度流派
既然對長距離的信息建模崩壞是因為“旋轉”了“沒見過”的角度,那么就讓推理時的各token 間的相對旋轉角度的區間映射回訓練過的“熟悉”區間上去!
那么如何回到原來的訓練分布上?
旋轉角度=相對距離*單位角
①位置內插
第一種就是很樸素的位置內插(Extending Context Window of Large Language Models via Positional Interpolation),這樣修改了相對距離。
也就是將原始訓練長度 L 外推到 L^' 上,即加上一個線性變換:
然而,位置內插并不算長度外推方案,至少不是免訓練的長度外推方案,因為位置內插之后同樣會有 PPL 爆炸的問題。原因也不難理解,盡管位置內插避免了遠處的位置越界問題,但這同時壓縮了鄰近 Token 的距離,嚴重擾亂了模型的局部分辨率,而眾所周知語言模型本身就是一個非常依賴于局部關系的任務,所以擾亂了局部自然就沒法預測準了。
不過,這也并非說位置內插就沒有價值了。我們知道,需要長度外推的讀者,無外乎是兩種情況:一種是沒有資源去做長文本微調,希望能夠從短文本模型直接得到一個可用的長文本模型,這種需求對長度外推的效果要求會比較高,位置內插就不適合他們了;另一種是有資源去做長文本微調,研究長度外推純粹是為了得到一個更好的初始化模型,這種情況對模型修改帶來的初始損失容忍度比較高,只要能夠通過微調快速彌補回損失掉的效果即可,位置內插正好是屬于此類方法。Meta 的論文顯示,經過 PI 之后,僅需 1000 步左右的長文本訓練,就可以得到一個行之有效的長文本模型,這比不做任何修改直接微調的訓練效率高出很多。
這種方案的一種修改則是 NTK-by-parts:
基于這個規則(高頻的不插值,低頻的插值,中間的線性過渡)對于長度為d 的第 i 維,比率為:
給出 ramp function:
對于 llama 而言,這里的超參數為:
縮放形式為:
其實就是位置內插的加權平均,超過 β 就不插值,低于 α 就純插值。
②NTK(減小單位角)
第二種基于 YaRN: Efficient Context Window Extension of LargeLanguage Models 的 NTK-aware 方式。
就是縮小每個字空間的單位角(這是一種非線性變換)。
其中 α 為縮放系數,這實際上有以下的好處,首先:不是將 RoPE 的每個維度平均縮放一個因子,而是通過減少對高頻區域的縮放和增加對低頻區域的縮放(即高頻不縮放,低頻才縮放),從而將插值壓力分散到多個維度,尤其是較低的維度。我們可以計算一下調節的比率。
當 i→1 時,比率趨近于 1;
當 i→d/2 時,比率趨近于 1/α。
③增大單位角
第三種是反而是在預訓練的過程調小 base,讓模型充分感知 at least 一個周期的頻譜,這樣是否在推理的階段不需要做任何操作呢?
實際上不行,不行是因為效果差。
3. 外推能力評測
大海撈針測試是大語言模型信息檢索能力的重要參考。通過在長文本中隨機插入關鍵信息,形成大型語言模型(LLM)的Prompt。該測試旨在檢測大型模型是否能從長文本中提取出這些關鍵信息,從而評估模型處理長文本信息提取的能力,這可以反映LLM對長文本的理解基礎能力。
在給定文本塊中插入一段信息之后檢索該 needle。
4. 長文本信息依賴
我們發現如果把 base 變小,即使模型已經充分感知到了 rotation(因為在 context 長度上已經轉過了至少一圈)但效果很差。我們在前面已經了解到了相對位置編碼(這里特指旋轉位置編碼)是有遠程衰減性質的。
如果 base 變大的話遠距離的 token 壓制變小,因此長文本的 attention 會比 base 小的要大一點,因此小 base 損失了很大一部分 attention 的能力。這也能從上面的實驗中看出。這里我們可以更具體地表達這部分內容。定義:
其中前半部分為相似 token 間注意力的期望,后半部分是隨機 token 間注意力的期望,假設 qk 是 i.i.d. 的,且各自的均值和方差為 μ,σ,且 k^*=q+?,則有:
五、問答環節
Q1:位置編碼(旋轉位置編碼)的物理意義與直觀解釋?
A1:單位角代表了旋轉速度。旋轉速度快的,那么建模了距離較近的信息,遠的則建模較遠信息。
Q2:外推的價值,是否需要建模長距離(可以講前面的變成摘要)?
A2:這不矛盾。模型可以有能力閱讀所有的文本,但畢竟這是二次復雜度的(attention operation),當然也可以對長文本去做一個切片,或者說去做一個分割,這是應用決定的。
Q3:BERT 可以做相對位置編碼嗎?
A3:沒有不可以,但目前沒人做。
Q4:9.11<9.9可以用 PE 解決嗎?
A4:這個是 LLM 在理解和感知 token 上的問題,和 PE 沒什么關系。
Q5:外推效果有損,衡量指標是什么?能到原來的多少?
A5:base 調小在前面說了雖然 ppl 還可以但效果很差,對位置感知很混沌,因為喪失了對長距離的感知。ppl 相對穩定,但比原來的有上移。衡量指標指標就是 ppl 和 needle seeking。base 變大的話對模型性能影響不大,完全可以接受。