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