交叉熵損失為何勝出:它在訓練一個文本壓縮器
交叉熵損失之所以被選中,是因為數學上可以證明它是唯一能保證「模型輸出等於數據真實分布時損失最小」的函數形式,而這恰好等價於把模型訓練成逼近香農極限的文本壓縮器。
核心論點 · 點時間戳可跳到原聲
gzip能畫出語言家族樹
一篇2002年的論文只用gzip這種通用文件壓縮,就能給不同語言的文本自動聚類,甚至還原出語系之間的譜系樹,全程不依賴任何語言學先驗知識。方法是把文檔B的一個片段接到文檔A末尾再壓縮,比較這個結果和單獨壓縮A的文件大小差異——這個差值本質上是在問「為A優化的壓縮方案,處理B的片段效果有多好」,同樣的思路後來也被用來做文本作者識別。
— Grant Sanderson舊編碼遇上新分布的代價
如果一套編碼方案是為某個分布Q優化的(比如給機器人指令up/down/left/right分配1/2、1/4、1/8、1/8的概率並設計對應比特長度),但實際數據變成了新分布P,繼續用舊編碼會產生浪費。按新分布重新加權計算這套舊編碼平均要用掉的比特數,這個值就叫做「Q相對於P的交叉熵」——它衡量的正是「為一種情境優化的壓縮方案,搬到另一種情境下表現如何」。
— Grant Sanderson交叉熵的最小值就是熵本身
把交叉熵公式想像成固定P、讓Q變化畫出的曲線,會發現這條曲線總在Q等於P的地方取得最小值,而這個最小值恰好就是P的熵。這是因為交叉熵問的問題——「為一種設定優化的編碼,在另一種設定下表現如何」——只有在兩種設定完全一致時,壓縮效率才能達到理論最優。這條性質是後面整個論證的樞紐。
— Grant Sanderson預訓練損失就是每個token的平均信息量
訓練語言模型時,對訓練數據裡每一個真實出現的下一個token,取模型給它分配的概率的負對數,再對所有token取平均,這就是整個預訓練的損失函數。模型越「聰明」,對真實發生的token給出的概率越高,對應的負對數值(信息量/驚訝程度)就越低;一個訓練很差的模型則會對什麼都不自信,處處感到「意外」。
— Grant Sanderson為什麼必須是負對數,而不是隨便一個遞減函數
常見的解釋是「交叉熵公式裡除了真實token那一項全是0,剩下的自然就是負對數」,但這解釋不了為什麼一開始要選交叉熵。更紮實的論證是:如果只要求某個函數F滿足「全體訓練樣本的平均損失只有在模型輸出分布等於數據真實統計分布時才取得最小值」,用拉格朗日乘子做約束優化可以證明F必須是對數函數——選擇權其實並不在你手裡,負對數是被數學逼出來的,而這時的平均損失公式恰好就是交叉熵的定義。
— Grant Sanderson蒸餾:把大模型的整個概率分布餵給小模型
普通預訓練每個token只給「真實發生的那一個」滿權重,其餘全是0;蒸餾則是讓小模型對每個位置的預測去匹配大模型給出的完整概率分布,損失定義為小模型分布相對大模型分布的交叉熵。這樣一個訓練樣本傳遞的信息量遠大於普通預訓練——好比學下棋不是只看一步實際走法,而是有個更強的人把每一步的所有候選走法和權重都講給你聽。
— Grant Sanderson交叉熵損失等價於訓練一個文本壓縮器
從壓縮的角度看,交叉熵天然衡量「一種壓縮方案搬到另一種情境下有多浪費」;從語言模型訓練的角度看,損失函數就是每個token的平均信息量。只要能把一個通用的預測器(比如語言模型)轉化成一個壓縮器——用大約等於該文本在模型看來的信息量那麼多的比特去編碼它——這兩條線索就完全對上了:用交叉熵損失訓練模型,等價於把它訓練成儘可能好的文本壓縮器。
— Grant SandersonKL散度:編碼浪費了多少比特
交叉熵減去熵,就得到KL散度(Kolbach-Leibler divergence),它專門衡量「用一套沒優化好的編碼方案,平均每個符號浪費了多少比特」。在機器學習裡KL散度常被當作兩個分布之間的「距離」,兩分布相同時為0,差異越大越大,但它不對稱——Q相對P的KL散度不等於P相對Q的KL散度,這也是為什麼蒸餾時用交叉熵而非KL散度是一個值得琢磨的選擇。
— Grant Sanderson原話 · 已逐字校驗
But whenever you see the same formula pop up in two separate contexts, it's math's way of kind of winking at you and hinting at a connection.
但每當你看到同一個公式在兩個不相關的場景裡冒出來,這就是數學在向你眨眼睛,暗示背後有一層聯繫。
Grant Sanderson2:05
for an optimal code, the number of bits that you allocate to a given symbol looks like the negative log base 2 of the probability for that symbol showing up.
對於最優編碼而言,分配給某個符號的比特數,看起來就是該符號出現概率的負的以2為底的對數。
Grant Sanderson4:09
A very nice way to think about the loss function we use in this case is that you measure the average information per token from the model's perspective.
理解這裡所用損失函數的一個很好的方式是:你衡量的是從模型視角看,每個token的平均信息量。
Grant Sanderson17:28
You might think this loss function would go by a name like information loss, or log loss, but in fact, people call it cross-entropy loss, which at first might sound really strange, given that nowhere in the explanation have we actually used the cross-entropy formula.
你可能以為這個損失函數會被叫做「信息損失」或「對數損失」,但實際上人們把它叫做「交叉熵損失」,這一開始聽起來會很奇怪,因為前面的解釋裡我們根本沒用到交叉熵公式。
Grant Sanderson20:33
you would like it to be the case that the full average loss over all of the examples is minimized only when the model's output matches the statistics that show up in the data, there's actually a really nice mathematical argument for why F has to be a logarithm.
如果你希望所有樣本上的平均損失只在模型輸出與數據中呈現的統計分布相匹配時才取得最小值,那麼其實有一個很漂亮的數學論證,可以說明F必須是對數函數。
Grant Sanderson24:38
it's the difference between trying to learn chess just by watching a game versus having someone better than you talk through all the possible good moves and how heavily they would weight them at each new turn.
這就好比只是看一盤棋來學下棋,和有一個比你厲害的人把每一步所有可能的好棋以及他們會賦予的權重都講給你聽,這兩者之間的區別。
Grant Sanderson27:42
And once you understand this, it makes clear how using cross-entropy loss is actually equivalent to training the model to be the best possible text compressor.
一旦理解了這一點,就能看清使用交叉熵損失,實際上等價於把模型訓練成儘可能好的文本壓縮器。
Grant Sanderson29:48
In the language of compression, you would think of it as describing how many bits per symbol are you wasting by using a poorly optimized code.
用壓縮的語言來說,你可以把它理解為:使用一套沒有優化好的編碼方案,每個符號平均浪費了多少比特。
Grant Sanderson31:49
數字與實體
| 機器人指令舊編碼應對新分布時的交叉熵 | 2.625 bits/符號 | 6:13 |
| 90/10偏態分布編碼用於50/50均勻分布時的交叉熵 | 約1.74 bits/符號 | 9:20 |
| 《Language Trees and Zipping》論文發表年份 | 2002年 | 0:00 |
術語
- cross-entropy交叉熵
- 用為分布Q優化的編碼去編碼分布P的數據時,平均每個符號所需的比特數
- KL divergenceKL散度(相對熵)
- 交叉熵減去熵,衡量一套編碼方案相對最優方案浪費了多少比特
- distillation模型蒸餾
- 用大模型輸出的完整概率分布而非單一正確答案來訓練小模型
- Lagrange multiplier拉格朗日乘子
- 求帶約束條件下函數極值的一種數學方法
- Shannon limit香農極限
- 無損壓縮理論上能達到的最優比特數下界
收聽指南
對損失函數設計、信息論與深度學習交叉點感興趣的工程師和研究者,尤其是想搞懂「交叉熵損失」命名由來的人。
24:38處拉格朗日乘子的嚴格推導可跳過,不影響後續結論。