Qwen和DeepSeek為何都選YaRN?
這篇文章,我們還是從面試官的視角出發,一起來分析一下,如果你在面試現場被問到這個題目,應該如何回答?
1.面試官心理分析
首先還是分析一下面試官的心理,面試官問這個問題,主要是想考察三點:
- 第一,你知不知道長度外推這個概念?很多同學可能聽都沒聽過這個概念,那這個問題當然也就無從答起了。
- 第二,deepseek 采用了哪種長度外推方案?面試官希望你能講清楚這個外推算法的底層細節。
- 第三,這種方案相比之前的方法,它好在哪里?這就更進一層了,需要你通過自己的理解總結概括一下。
好,那接下來我們就沿著面試官的心理預期,來分析一下這道題目!
2.面試題解析
首先回答第一層,什么是長度外推?
顧名思義,長度外推,就是不需要用長序列數據進行額外的訓練,只用短序列語料對模型進行訓練,就可以得到一個能夠處理和預測長序列的模型,也就是我們所說的“Train Short,Test Long”。
那么如何判斷一個模型能否用于長序列呢?最基本的指標,就是模型的長序列 Loss 或者 PPL 不會爆炸。
更加符合實踐的評測,則是輸入足夠長的 Context,讓模型去預測答案,然后跟真實答案做對比,計算 BLEU、ROUGE,LongBench 這幾個指標。
然后回答第二層,deepseek 采用了一種叫 YaRN 的長度外推算法。
具體來說,YaRN 是基于 NTK-aware 方法的進一步拓展,通過結合溫度縮放和 NTK-by-parts 插值,來提升長文本外推能力。
即 YaRN = NTK-aware + NTK-by-parts + Dynamic NTK。
然后我們看一下,這個算法是怎么做的。我們首先回顧一下 ROPE 的公式:
圖片
從公式中可以看到,m-n 是相對位置的距離,θi 是旋轉的頻率。
那怎么理解這個公式呢?
我們知道,對于三角函數,不同取值本質上就等于在一個單位圓上的點。
如果 m-n 逐漸變大,也就是相對距離越來越遠,則相當于在圓上旋轉,如果 θ 越大,則代表在圓上旋轉越快。theta 對應頻率,根據頻率和周期的關系,頻率越大,周期越小。
我們來看這張圖,左右分別代表一個大的 θ 和一個小的 θ 的旋轉情況。大 θ 旋轉超過一周了,小 θ 才旋轉一個半圓。
圖片
然后我們來看一下 YaRN 的核心思想,假設訓練的長度是 L,那 m-n 的取值范圍是 [0,L-1]。
θ 越大,則轉速越快,也就是 m-n 從 0 到 L-1 的期間,已經轉了很多圈,也就是說圓上的每一個點幾乎都被訓練過,這類 theta 不存在長度外推的問題。也就是對于高頻信息,不動。
對于小的那些 θ,也就是 m-n 從 0 到 L-1 的期間,可能轉了還沒有一圈,圓上還存在很多空白。
那這種情況,如果測試長度 M 大于 L,則很有可能就超出了訓練過的那一段圓弧,從而造成長度外推失敗。
YaRN 的做法也很直接,直接把此時的 θ 壓回到訓練過的那一段圓弧范圍內,這樣就減少了實際預測時跑到空白的地方。也就是 θ 會乘一個縮放因子 L/M。
我們可以設一個圈數的閾值 τ,如果圈數超過 τ 的,就認為已經充分訓練了,可以不加改動;
圈數少于 1 的,θ 改為 θ*L/M,也就是要把超出弧范圍的重新縮放到弧內,至于二者之間的部分,就在兩者之間線性插值過渡。
也就是論文這個公式所表達的含義:
圖片
YaRN 的第二個點是解決線性內插導致的 self-attention 點積的值增大的問題。
由于線性內插會改變旋轉向量轉動的幅度,也就是隔得更近了。原來距離較遠的 q,k 點積由于旋轉幅度變小,他們的點積結果會增大,進而導致 Softmax 操作過于“銳化”,使得注意力分布集中于少數位置,削弱了模型對全局上下文的關注能力。
Yarn 在 NTK-by-parts 基礎上,引入了注意力溫度因子,來調整注意力分布。
我們看公式:
圖片
3.總結
最后總結一下,這個算法有哪些優勢呢?
首先,YaRN 可以直接和修改注意力機制的庫兼容,比如 Flash attention,因此不會有額外的實現成本和推理成本。Flash 在目前的主流底層框架實現基本是標配了,所以這一點很重要。
第二個是效果拔群,YaRN 這個算法目前在各種大模型和和不同架構上對比實驗表明,是一個非常強的 SOTA。
所以目前主流的大模型,如 LLaMA 的改進系列,Qwen2.5 和 DeepSeek,都選擇了用 YaRN 來做長度外推。