跳到主要內容

softmax 數值誤差解析:梯度為何歸零,修正能讓模型更強嗎?(2026)

最後更新: ·
softmax 數值誤差:微小梯度在捨入關卡歸零的編輯示意圖

2026 年 10 月 22 日,Google DeepMind 的 Jonathan T. Barron、Dan Gnanapragasam 與 Michael Tschannen 在 arXiv 提交了〈A Fix for Softmax and Cross-Entropy〉。這篇 softmax 數值誤差研究追問一個很基本的問題:模型明明還有一點點錯,電腦會不會先把修正訊號算成零?

softmax 數值誤差論文作者專頁與摘要
圖/Barron、Gnanapragasam、Tschannen 的作者專頁;AlphaLab 擷取並加入瀏覽器外框,點圖可開啟原文。

另一個方向更反直覺:學生模型已經和教師輸出相同,訓練程式卻仍給它一個「繼續改」的訊號。下面先拆清楚兩種誤差,再看作者拿什麼實驗支持修正,最後回答:哪些人值得測試,哪些結論還不能跟著放大。

softmax 數值誤差:機率算得出來,梯度仍可能算歪

先把三個零件分開。Logit 是模型為各答案打的原始分數;softmax 把它們轉成總和為一的機率;交叉熵用來衡量預測與目標分布的差距。訓練時還需要梯度,也就是「把哪個分數往哪個方向調」的訊號。想先看分數如何進入模型運算,可搭配 Attention 與 softmax 的互動實驗。

Standard implementations of softmax, log-softmax, and cross-entropy have two numerical bugs.

中文:作者主張,常見 softmax、log-softmax 與交叉熵實作存在兩種數值問題。這句是在指特定計算路徑的誤差,不能直接替每個版本、核心與硬體做出相同判決。

Barron、Gnanapragasam、Tschannen,2026

數學上等價,並不保證電腦算出同樣的結果。浮點數只能保留有限位數;像一張只顯示到元的帳單,極小的尾數加到大數旁邊,可能就看不見了。Blanchard 與兩位 Higham 的數值分析研究早已比較不同 softmax 寫法的誤差;PyTorch 的數值精度文件也明說,運算順序會影響結果。避免指數溢位,只處理了其中一類問題。

第一種:信心很高,正確答案的梯度先被歸零

假設模型對正確答案已很有把握,機率接近一。硬標籤交叉熵對該 logit 的梯度是「預測機率減一」;它應該是很小的負數。若機率先被捨入成恰好一,再減一就得到零。然而其他答案的微小正梯度仍可能保留下來,整組梯度因而失去原本總和為零的性質。作者稱這個狀況為 Softmax Collapse。

這不等於整個模型全部停止學習。出問題的是某些樣本、某個梯度分量,以及它們後續對更新的影響。文章裡的「信心」也不是模型說話多肯定,而是 logit margin:正確答案的分數,減去其餘答案分數的 log-sum-exp。它不是只拿第一名減第二名。

作者圖 1 的近似精度門檻為 bf16 的 5.5、fp32 的 16.6、fp64 的 36.7。這些是該公式與精度設定下的 margin 門檻,不是模型大小,也不是所有混合精度系統共用的故障刻度。實際上還要看 loss 與累加運算使用的精度。

Softmax Collapse 與 Softmax Cancellation 的原始梯度曲線
圖/Barron、Gnanapragasam、Tschannen,〈A Fix for Softmax and Cross-Entropy〉圖 1,CC BY 4.0;AlphaLab 將作者原圖的圖例與兩個面板等比例排列。左圖為高信心梯度的精度斷崖,右圖為師生接近時的殘餘誤差。

修正的核心可用一個式子看懂。令 s 是其他答案相對於正確答案的指數總和,目標梯度可以寫成 1 / (1 + s) − 1,也可以寫成 −s / (1 + s)。兩式在實數運算相同;後式把那個很小的 s 留在分子,減少先把機率算成一、再相減造成的資訊損失。作者用排除目標項的 log-sum-exp 與 softplus 實現這個想法。

值得分清研究的先後。Prieto 等人的 2025 年研究已討論 Softmax Collapse,並提出 StableMax 等緩解方式。這篇新作的重點,是直接重寫原有函數的計算方式,並把另一種蒸餾誤差納入處理;不宜把 collapse 本身說成十月才被發現。

第二種:學生已經像老師,捨入誤差卻叫它繼續改

模型蒸餾會讓學生學習教師的輸出分布,而非只記一個正確標籤。Hinton、Vinyals 與 Dean 的原始蒸餾論文提供了這個背景;本站的 模型蒸餾入門則把它與 SFT、合成資料、量化分開說明。

在這種 soft-target loss 中,對學生 logits 的理想梯度是「學生機率減教師機率」。兩者越接近,差值越小。若先把各自的機率算完、捨入,再相減,細小差異就容易受損;如果前向 softmax 與反向 log-softmax 的數值路徑還不一致,即使 logits 相等,也可能留下殘餘梯度。這是作者所說的 Softmax Cancellation,並不是所有相同輸入做減法都一定出錯。

這次的修正從師生 logits 的差異出發,在 log 空間計算,使用 log1p、expm1 等適合處理小差值的函數,再安排反向傳播所用的梯度。因此,hard-target 與 soft-target 是兩條需要分別驗收的路徑。只換一個顯示機率的函數,不能據此認定蒸餾損失的反向計算也修好了。

原文的實驗證明到哪裡?先看三張不同的考卷

一、Grokking:測的是記住之後能否學出規則

Grokking 的原始研究關注一種現象:模型先記住小型訓練集,經過很長時間才開始對沒見過的例子泛化。新論文以模數算術的 Transformer 與 MLP 作為試驗台。作者報告,修正版在其條件下能減少 slingshot 損失尖峰,並改善部分泛化結果。這不是聊天、長程編碼或前沿模型綜合能力測試。

作者的解釋是:高信心樣本的目標梯度先歸零,Adam 的歷史尺度估計跟著下降;梯度重新出現時,就可能被很小的分母放大成更新尖峰。這說明一種可檢查的因果路徑,並不表示任何訓練 loss spike 都有同一個原因。

二、蒸餾:從「本來就一樣」測試會不會漂走

圖 7 的設計很刻意:學生直接複製已訓練教師的權重,在模 53 加法任務上,以溫度 T=4、Adam、零 weight decay 與 ε=10⁻⁸,再走 2,000 步。作者觀察到,修正版讓師生維持一致;原本的計算路徑在較低精度下會留下偏移。

學生從教師相同權重出發後的 KL 距離原始實驗圖
圖/Barron、Gnanapragasam、Tschannen,同論文圖 7 的 KL 面板與圖例,CC BY 4.0;AlphaLab 等比例排列。學生由教師相同權重初始化,T=4,ε=10⁻⁸;圖顯示三個 seeds 中的兩個。這是作者實驗,並非 AlphaLab 重跑結果。

這張考卷問得很窄,也很乾淨:答案已經對齊時,更新是否仍把它推開?它不能直接估計「把大型模型壓縮成小模型,成績能提升幾分」。真實蒸餾還有師生容量、資料、目標與最佳化路徑的差異。

三、ε 與 weight decay:修完斷崖,仍有最佳化平衡

作者另在記憶訓練資料後的設定分析,梯度驅動的步伐與 weight decay 可形成 margin 平衡,近似尺度為 log(1 / ε)。當 ε=10⁻⁸,這個尺度約為 18.4,恰好高於文中 fp32 的 16.6 斷崖。這讓「先碰到數值門檻,還是先到達最佳化平衡」成為有用的診斷問題;它不是所有架構都可直接套用的 margin 定律。

不能跳過的反證:梯度更準,不保證大型模型一切更穩

are uncommon in standard large-scale training

中文:作者在結論明說,實驗探測的極端 margin 與近乎零的師生差距,在標準大規模訓練中並不常見。這是對測試條件的限制,不是說大型訓練完全不會遇到數值問題。

Barron、Gnanapragasam、Tschannen,2026

獨立的 Liu 等人〈Grokking or Glitching?〉第 4.3 節提供了重要反例。他們在自己的 GPT 設定中觀察到 Softmax Collapse;但改用 float64 計算 loss,並沒有讓 logit 增長變小。訓練十萬步後,報告的平均 logit 從 float32 loss 的 183,變成 float64 loss 的 498。作者把差異與自然語言 token 頻率不平衡連在一起。

這不是對 Barron 修正版的直接比較,不能據此宣稱新方法無效;它反駁的是更大的推論:局部算術更準,就必然讓整體訓練軌跡更理想。資料分布、模型架構與最佳化器仍會共同決定結果。若要從小型研究走到產品,還要像 開放訓練堆疊的驗收一樣,把實際配方與可重現證據對起來。

AlphaLab 的判讀:先修量尺,再量它對任務有多少幫助

一、我同意修正數值機制,但不把它換算成智慧成長

一把量尺會漏掉小刻度,值得修;修好之後,受測物不會因此自動變長。這項工作的價值,是讓某些更新更接近原本的數學目標。它可能解除一個瓶頸,實際收益仍取決於你的訓練是否經常走到那個瓶頸。研究分數、推論速度與使用者任務成功率,應各自有證據。

二、零梯度與非零梯度,都需要問「本來應該是多少」

看見零,不足以判斷已收斂;看見非零,也不足以判斷模型仍有東西可學。高信心硬標籤的微小負梯度,與師生完全相等時應有的零梯度,是兩個方向相反的驗收題。工程上的可靠性,來自能對照預期值的邊界案例。

三、我存疑的是無條件替換與效益保證

作者專頁公開了 JAX 實作,但這不等於已替每個現有訓練系統交付可直接採用的核心。資料型別、遮罩、batch reduction、label smoothing、自訂梯度與融合 loss 都可能改變整合方式。作者把效能代價描述得很小;本文不把這段說法當成你的硬體吞吐量結果。

同樣不能把一個漂亮的 100% 圖例當成每輪實驗的保證。原文表 1 是多個 seeds 的彙總,其中也有低於 100% 的平均值。數值誤差修正的成立,與每一格準確率都勝出,是不同命題。讀其他架構研究,例如 Looped Transformer 的循環深度,也可沿用這個分法。

接下來怎麼做:依你碰得到的那一層驗收

如果你只使用聊天工具或模型 API:這篇研究最有用的地方,是辨認「基礎函數修正」與「模型能力升級」之間還隔著實驗。不要因為看到 softmax 修正,就預先替任何供應商的下一版模型加分。要理解訓練目標如何影響能力,也可讀 Next Concept Prediction 與 NTP 的差別。

如果你在訓練或蒸餾模型:先記下框架版本、裝置、logits/loss/累加精度、目標種類、Adam ε 與 weight decay。第一輪只驗邊界:高 margin 的目標梯度是否保留、梯度總和的殘差有多大、相同師生 logits 的梯度是否接近預期零。再以相同資料、seeds 與預算比較修正前後的驗證集結果及吞吐量。

值得追蹤的下一份證據,是在較貼近實際的資料與模型規模上,同時報告誤差、穩定性、任務表現和速度。先證明量尺修好了,再證明它改變了你的工作;這比把一次數值修正讀成整個 AI 世代升級,更能幫你做下一個決定。

ALPHALAB 社群

有問題?來 Telegram 聊

和 Terry、編輯、其他網友一起討論這篇文章。提問、分享觀點,回覆更即時。

加入 Telegram 討論

📩 訂閱 AlphaLab 電子報

週日 Weekly 週報+週二、週四 Alpha Signal,每週最多三封。

我們不會 spam,隨時可退訂。已訂閱?管理訂閱偏好(會寄登入連結到你的信箱)

主題篩選與退訂說明

寄送日期以台灣時間為準。主題偏好會篩選每期精選,並非每篇新文章的即時通知;當期符合主題的文章不足時會略過寄送。

未勾選任何主題會收到所有主題的精選,並不會停止寄信。

取消勾選 Alpha Signal 可停止週二、週四短報,仍保留週日週報。若要停止所有電子報,請使用信件底部的「取消訂閱」。