宅中地 - 每日更新
宅中地 - 每日更新

贊助商廣告

X

當注意力機制悄悄失明:ALiBi位置編碼里藏了三年的數字陷阱

2026年08月20日 首頁 » 熱門科技

2022年,一篇叫ALiBi的論文橫空出世,它承諾了一件幾乎所有位置編碼方法都做不到的事情:用幾乎為零的計算代價,讓模型在訓練時只見過2048個token,推理時卻能處理更長的文本。

這個承諾聽起來太美好了。事實上,不少開源大模型都用上了它,BLOOM、Falcon、MPT,這些你可能聽過名字的模型,底層的位置編碼全部依賴ALiBi。

但2026年的這篇論文告訴你一件事:這個承諾從一開始就沒有兌現過,而且沒人發現,已經悄悄失效了三年多。

問題出在一個所有人都以為無關緊要的地方,浮點數精度。

先說清楚,ALiBi到底解決了什麼問題

要理解這個失誤有多致命,你得先明白Transformer模型天生的一個缺陷。

**自注意力機制*:Transformer模型處理文字時,會讓每個詞都去"看"句子裡所有其他的詞,計算彼此之間的關聯程度,這個機制就叫自注意力。

問題是,自注意力這套機制天生不知道詞語的先後順序。你把一句話的詞打亂了扔給它,它算出來的關聯程度是一模一樣的。這顯然不對,"貓追狗"和"狗追貓"含義完全相反,模型必須知道誰在前誰在後。

於是就有了各種位置編碼方法,想辦法把"位置"這個資訊塞進模型里。最早Transformer論文用的是正弦曲線編碼,後來又有學習式的絕對位置編碼,但這些方法都有個共同的軟肋,超出訓練時見過的最長長度後,模型就懵了,沒法處理更長的文本。

ALiBi的思路簡單粗暴:不去修改詞向量本身,而是直接給注意力算出來的分數加一個懲罰項。兩個詞離得越遠,懲罰越重,模型自然而然就學會"越遠的詞越不重要"這條規律。因為這個懲罰是線性增長的,而且不依賴任何需要訓練的參數,理論上無論文本多長,這套規則都能延續下去。

這就是ALiBi論文標題里那句"Train Short, Test Long"的由來,短文本訓練,長文本也能用。這個想法在2022年確實讓人眼前一亮,後來KERPLE、FIRE、Sandwich這些論文都是沿著"給注意力加偏置項"這條路繼續往前走的變體。

不過話說回來,論文作者自己後來也承認,在更大規模的對比實驗裡,另一個叫RoPE的位置編碼方法表現更好,這也是為什麼現在主流大模型基本都用RoPE而不是ALiBi了。

**RoPE*:全稱Rotary Position Embedding,旋轉位置編碼,通過旋轉詞向量本身來編碼位置資訊,是目前大語言模型里最常用的位置編碼方案。

但這篇論文的作者們沒有就此放棄研究ALiBi。他們想問一個更根本的問題:ALiBi真的做到了它承諾的事情嗎?

核心問題:線性增長的懲罰,撞上了浮點數的天花板

答案是,沒有。而且原因出人意料,不是算法設計的問題,是數字本身的物理極限。

電腦里儲存小數,用的是浮點數格式,常見的有32位單精度(fp32)和16位半精度(bf16)。這些格式能表示的數字範圍是有限的,當一個數字小到超出這個範圍,電腦沒辦法把它精確表示出來,只能把它當成0處理,這個現象叫做下溢。

**下溢(underflow)*:當計算結果的絕對值太小,小到浮點數格式無法表示時,電腦會把這個數字直接歸零,這個現象叫下溢。

現在回頭看ALiBi的設計,懲罰項是線性增長的,詞語離得越遠,懲罰越大。這個懲罰會通過一個叫softmax的函數,變成一個自然指數的負指數,而指數函數有個特點,自變量越負,函數值越接近於零。

**softmax函數*:一種把一組數字轉換成概率分布的函數,常用在神經網路輸出層,讓所有數值加起來等於1。

問題來了。當兩個詞的距離足夠遠,線性增長的懲罰項累積到一定程度,推進softmax內部那個指數運算的指數變得極端負,直接跌破了浮點數能表示的下限,直接變成了精確的0。

這意味著什麼?意味著模型壓根不是"逐漸忘記"遠處的詞,而是像被一刀切斷了信號一樣,完全看不到了。

論文用一個精確的數學式子刻畫了這個現象,把每個注意力頭(attention head)開始失明的距離稱為blindness distance,並且證明了對不同的頭,這個距離是不一樣的。

**注意力頭(attention head)*:Transformer模型里,注意力機制會被拆分成多個並行的小模組同時計算,每個模組叫一個注意力頭,不同的頭可以關注不同的模式。

ALiBi的設計里,每個頭會被分配一個不同的斜率(slope),斜率越陡,懲罰增長得越快,這個頭失明得也就越早。論文測算了默認參數下,標準的16頭模型里,斜率最陡的頭,在詞語距離只有124個token的時候就已經開始失明了,而這時候模型的訓練上下文窗口還有2048個token那麼長。

這就好比什麼呢?

想像你雇了一個保安團隊來監控一整條街,每個保安負責的視野範圍本來說好是"越遠越模糊,但至少能看見個輪廓"。結果實際情況是,有的保安走出去124步,眼前的畫面就直接變成一片純黑,不是模糊,是徹底黑畫面,後面發生什麼他一無所知。如果你不知道這件事,你會以為整條街都在監控之下,實際上早就有大段大段的盲區,而且是完全的盲區,不是弱信號,是零信號。這就是為什麼ALiBi承諾的"長距離外推能力",實際執行時大打折扣,因為很多頭根本沒走多遠就瞎了。

論文裡畫了一張圖,展示在2048個token的距離上,已經有36.6%的注意力權重跌進了下溢區間,直接變成了0。這不是個例外情況,而是所有用ALiBi訓練的模型都必然會遇到的系統性問題。

這不只是理論推導,已發布的模型全部中招

光有數學證明還不夠有說服力,研究者們找來三個真實存在、被廣泛使用的預訓練模型,BLOOM、Falcon-RW、MPT,直接測量它們運行時的注意力矩陣,看看下溢到底發不發生。

結果和理論預測嚴絲合縫。實際測出來的下溢比例曲線,和純數學推導出來的曲線形狀幾乎一模一樣。這說明什麼?說明這不是一個理論上存在但實際影響很小的邊角案例,而是每一個用ALiBi訓練出來的模型,都在真實地經歷這個失明過程,包括你可能用過的開源模型。

研究者還做了另一層驗證,他們測試這些模型在困惑度(perplexity,衡量語言模型預測下一個詞準確度的指標,數值越低說明模型越"確定")上的表現,以及在兩個專門測試資訊檢索能力的任務上的表現。

**passkey檢索*:在一段很長的文字開頭藏一個密碼,後面跟一大段無關的填充文字,然後讓模型在結尾回憶出密碼是什麼,用來測試模型能否跨越長距離準確提取資訊。

**needle in a haystack(大海撈針)*:passkey檢索的升級版,不是簡單粘貼密碼,而是把密碼自然地嵌入一篇真實文檔里,同時考驗模型能否找到正確位置、以及能否理解上下文語義。

結果很扎心。BLOOM模型在passkey任務的域內準確率(測試距離沒超過訓練時見過的長度)已經算不錯,0.93,但一旦超出訓練時的上下文窗口,準確率直接掉到了0.29。needle in a haystack任務更慘,域外表現只有0.06。Falcon-RW和MPT情況稍好一些,但也都呈現出同樣的規律,一旦超出訓練長度,表現斷崖式下跌。

這時候一個更棘手的問題冒出來了:困惑度飆升,到底是因為模型本身就沒見過這麼長的文本導致的正常退化,還是因為注意力失明造成的額外損傷?這兩個因素混在一起,單看預訓練模型是分不清楚的。研究者自己也承認了這一點,"我們無法推斷這些飆升到底是因為超出了訓練上下文,還是注意力失明,或者兩者都有"。

於是,為了把這兩個變量拆開,他們決定自己動手訓練模型。

親手訓練模型,把"失明"這個變量單獨拎出來

這是整篇論文裡最紮實的部分。研究團隊用SmolLM配方訓練了一系列1.48億參數的Llama架構解碼器模型,餵了200億個來自FineWeb-Edu的token,專門設計了幾組不同的斜率配置,人為製造不同程度的"失明提前量"。

具體來說,他們設計了三種極端配置:一種叫Steep(陡峭),故意把斜率調得很大,讓失明來得特別早,失明距離壓縮到只有128到512個token;一種叫Safe(安全),把失明距離推得很遠,2048到4096個token,理論上在訓練長度內幾乎不會失明;還有一種叫Wide(寬泛),讓不同頭的失明距離均勻分布在16到4096這個區間裡,呈2的冪次分布。

同時他們還訓練了標準ALiBi版本和RoPE版本作為對照。

這個實驗設計有個巧妙之處,他們固定了訓練數據的順序,只讓位置編碼方式和模型初始化這兩個變量發生變化。這就好比科學實驗裡的對照組設計,如果你想知道某種肥料到底有沒有用,你得保證陽光、水分、土壤這些其他條件完全一樣,只有肥料這一個變量不同,這樣測出來的差異才能真正歸因到肥料本身,而不是別的干擾因素。如果不這樣控制變量,你測出來的結果誰也說不清是肥料的功勞還是陽光多曬了半小時的結果。

結果出來後,有幾個地方相當耐人尋味。

Steep這個故意讓模型早早失明的配置,表現確實是所有配置里最差的,但研究者原本預期它會"完全失敗",實際情況卻是,它並沒有崩潰,只是各項指標都偏低一些。這說明模型有一定的自我調節能力,即使某些頭很早就瞎了,資訊似乎還是能通過某種方式在層與層之間傳遞下去。

Safe配置,也就是幾乎不會失明的那組,在passkey檢索任務上表現最好,域內比標準ALiBi高5個百分點,域外更是高出9個百分點。但轉到needle in a haystack任務,Safe的表現反而不如標準ALiBi,域內0.48對0.68,域外0.02對0.20,差距相當明顯。

這個現象值得琢磨。為什麼"更不容易失明"反而在某個任務上表現更差?研究者給出的解釋是,那些斜率很平緩、失明距離很遠的注意力頭,其實承擔著一種類似"檢索頭"的功能,即使還沒走到失明的距離,它們微弱但存在的位置信號,在中短距離範圍內反而是有用的資訊,一旦人為削減了斜率的陡峭程度,相當於砍掉了那些負責近距離精細定位的"本地頭",模型整體的敏銳度反而下降了。

這裡有個細節挺有意思的,RoPE作為對照組,拿到了最低的驗證損失(說明語言建模能力最強),在語言類任務上表現也最好,但一到域外檢索任務,直接歸零,完全檢索不到任何跨越訓練長度的資訊。這從另一個角度印證了論文的核心發現,不管用ALiBi還是RoPE,超長文本檢索這件事,現有的位置編碼方案都不算真正解決。

四種補救方案,誰能真正堵住這個漏洞

發現問題之後,研究者提出了四種訓練階段的補救策略,並且做了詳盡的組合實驗。

第一種叫截斷(Clamping)。

思路很直接,給懲罰值設一個下限,一旦懲罰要往更負的方向增長,就死死摁在這個下限上,不讓它繼續下降。這樣一來,再遠的詞語,懲罰值也不會無限增長下去,自然也就不會撞上下溢那道牆。代價是,超過這個距離之後,模型沒法再區分"遠一點"和"更遠一點"的差異,所有超遠距離的詞在模型眼裡變得一樣遠。

這就好比給一台老式收音機裝了個音量下限,當信號弱到快要完全消失時,你把它鎖定在一個能聽清楚的最低音量,雖然聽起來還是很遠,但至少你還能聽見個大概,而不是徹底靜音。

第二種叫魯棒斜率(Robust Slopes)。

既然線性增長遲早會撞牆,那就乾脆重新設計每個頭的斜率,讓不同頭的失明距離均勻鋪滿整個上下文窗口,而不是像原來那樣很多頭擠在同一個短距離段集體失明。

第三種是這篇論文重點推薦的,對數尺度距離(Log-scaled Distances)。

原始ALiBi用的是線性距離,詞語隔了1000個token和隔了2000個token,懲罰差異是雙倍關係。改用對數之後,距離先經過一次對數壓縮再計算懲罰,遠距離的增長速度被大幅拉平。論文給出一個具體數字,在默認斜率下,原本第一個頭在124個token處就開始失明,換成對數距離後,這個失明距離被推到了4.37乘以10的53次方,這個數字大到實際上不可能觸及,相當於把失明這件事從"必然發生"變成了"幾乎不可能發生"。

**對數尺度*:把原本隨距離線性增長的數值,改成隨距離的對數增長,數學效果是讓遠距離的數值增長速度大幅放緩,近距離幾乎不受影響。

第四種叫軟截斷(Soft Capping)。

前面幾種方法都是在動"距離懲罰"這一端,軟截斷換了個角度,直接限制原始的注意力分數本身,用一個tanh函數把分數強行壓縮到一個固定區間裡,不讓任何異常大的數值突破邊界。

這四種方法可以單獨用,也可以組合起來用。論文做了詳盡的排列組合測試,發現一個挺重要的結論:沒有一種方法能在所有任務上都全面碾壓默認ALiBi。

具體來看,對數距離方法在passkey檢索的域外表現上效果最突出,把AUC(曲線下面積,用來綜合衡量一個方法在不同距離下的整體表現)從ALiBi基線的0.08一路提升到了0.77,如果再疊加上截斷策略,能進一步衝到0.79,相當於快十倍的提升。但同樣是這套組合,在needle in a haystack任務上表現卻不如人意,域外準確率只有0.03,反而不如什麼都不改的默認ALiBi(0.20)。

這個反差挺說明問題的。passkey任務只需要精確記住一個孤立的密碼短語,對上下文語義理解的要求不高,更像是純粹的位置記憶考驗。needle in a haystack任務除了記住位置,還得在一大段真實語義連貫的文字里辨認出正確的資訊片段,對語義理解的要求更高。這提示我們,同一個補救策略,在不同類型的任務上可能收益完全相反,沒有一招鮮吃遍天的萬能藥。

數字下溢,可能不只是推理時的浪費,訓練時代價更大

這篇論文提出了一個很有前瞻性的猜想,雖然作者自己也說這需要未來研究去驗證。

在前向傳播的過程中,一個精確歸零的注意力權重,和一個非常接近零但沒有歸零的權重,對模型輸出的影響其實差不多,都小到可以忽略。但反向傳播的時候,情況完全不同,只有那個沒有歸零的微小權重,還能繼續攜帶一點點梯度資訊回傳,精確歸零的那個權重,梯度也跟著變成了0,徹底斷了。

**反向傳播(backward pass)*:神經網路訓練時,根據預測結果和真實答案的誤差,反向計算每一層參數應該如何調整的過程,這是模型"學習"的核心機制。

**梯度*:反向傳播過程中計算出來的一個數值,指示某個參數應該往哪個方向調整、調整多少,梯度為0意味著這個參數在這一步完全學不到東西。

這意味著,那些斜率很陡、很早就失明的注意力頭,可能從訓練的第一天開始,就永遠沒有機會學會如何利用遠距離的資訊,不是它暫時學不好,而是從數學上講,它壓根拿不到任何能推動它學習的信號。

這就好比一個剛入職的新員工,如果他負責的那部分工作,匯報渠道從一開始就被切斷了,不管他多努力,反饋永遠傳不到他手上,他不是學得慢,而是根本沒有學習的機會。如果不解決這個反饋渠道被切斷的問題,再怎麼延長訓練時間,這個員工在這項工作上也不會有任何進步。

這個猜想目前還沒有被完全驗證,論文作者自己也把它作為未來的研究方向留下了,但這個思路提醒我們,數字下溢造成的損失,可能不僅僅是推理階段白白浪費了計算資源(算了半天最後還是被丟棄),更可能從訓練一開始,就在悄悄限制模型能學到的能力上限。

寫在實踐層面的建議

論文最後給出了幾條相對具體的實踐建議。

截斷策略應該成為默認選擇,如果你確實希望模型呈現出一種"軟化的滑動窗口"效果,也就是讓遠處的資訊影響力逐漸減弱到某個固定的最低水平而不是徹底消失。否則的話,不如乾脆用一個硬性的滑動窗口,這樣至少可以在計算層面做優化,直接跳過那些註定要被丟棄的遠距離計算,不用做無用功。

**滑動窗口(sliding window)*:一種限制注意力範圍的機制,只允許每個詞關注離它較近的一段範圍內的其他詞,超出這個範圍直接不計算。

軟截斷這個策略,論文並不推薦直接照搬使用,但限制注意力分數的整體範圍這個思路本身值得肯定,因為這既能防止下溢,又能避免某些異常大的數值把整個注意力分布搞亂。

對數距離在passkey檢索和多數下游任務上表現出色,是論文裡表現最穩定、收益最廣泛的單一策略,但研究者也提醒,這個方法在needle in a haystack任務上幫不上什麼忙,而且學習速度似乎比標準ALiBi慢一些,如果訓練時間足夠長,這個差距可能會縮小。

至於直接調整每個頭的斜率參數(也就是魯棒斜率策略),表現介於"部分成功"和"有待進一步研究"之間,它確實帶來了訓練和驗證損失之間最小的差距(說明泛化能力不錯),也在多個組合策略里貢獻了正面效果,但同時也拖累了needle in a haystack的表現,這一點還需要更多實驗才能說清楚。

值得一提的是,論文也觀察到MPT模型的實現里,其實已經對ALiBi的偏置值做了截斷處理,把最平緩的那個頭的失明距離鎖定在2000左右。但研究者推測,這個設計當初很可能不是為了應對浮點數下溢問題而做的,更像是出於別的考慮(比如刻意想實現一種軟性滑動窗口的效果),算是歪打正著地緩解了一部分問題,但這只是巧合,不是有意識的修復。

Q&A

Q1:ALiBi位置編碼到底出了什麼問題?

A:ALiBi用線性增長的懲罰項來編碼詞語之間的距離,但當距離足夠遠,懲罰值會讓softmax內部的指數運算跌破浮點數能表示的下限,直接歸零,導致部分注意力頭對遠距離詞語完全"失明",而不是逐漸減弱關注度。

Q2:這個問題會影響哪些已經發布的模型?

A:論文測試了BLOOM、Falcon-RW、MPT三個知名開源模型,發現它們實際運行時測出的注意力下溢比例,和理論推導的曲線幾乎完全吻合,說明所有用ALiBi訓練的模型都存在這個問題,不是個別案例。

Q3:有沒有辦法修復這個問題?

A:論文提出了截斷、魯棒斜率、對數尺度距離、軟截斷四種訓練階段的補救策略,其中對數尺度距離在passkey檢索任務上效果最突出,能把域外檢索準確率提升近十倍,但沒有一種策略能在所有任務上都全面超越默認ALiBi,需要根據具體應用場景權衡選擇。

宅中地 - Facebook 分享 宅中地 - Twitter 分享 宅中地 - Whatsapp 分享 宅中地 - Line 分享
相關內容
Copyright ©2026 | 服務條款 | DMCA | 聯絡我們
宅中地 - 每日更新