交叉熵損失:神經網路的核心引擎#
引擎室裡的那條公式#
今日所有人的語言模型——從 BERT 到 GPT——訓練時每天都在最小化同一個量:
交叉熵。它的出身平淡無奇:香農 1948 年定義了熵 \(H(P) = -\sum p \log p\),交叉熵只是把真實分佈 \(P\) 的概率乘上模型 \(Q\) 的自資訊。它衡量「用 \(Q\) 編碼 \(P\) 的平均碼長」;與 \(H(P)\) 相減,就得到前章的 KL 散度。但在 1980–2010 年之間,這條公式從通訊理論的注腳,升格為整個深度學習的核心引擎。這段升格史,值得細說。
為什麼是它,而不是均方誤差?#
1990 年代以前,多層感知器的標準配備是均方誤差(MSE)加.sigmoid 或 tanh 輸出。訓練慢得令人絕望,LeCun、Hinton、Bengio 等人花了數年才明白原因——飽和。
設網路輸出經 sigmoid 得 \(q\),標籤為 \(p \in \{0,1\}\)。用 MSE 損失 \(L = \frac12 (q - p)^2\),對 logit \(z\) 的梯度ЭЛ含有 \(\sigma'(z) = q(1-q)\) 這個因子;當 \(q\) 極端錯誤(如 \(q \approx 0\) 而真值為 1),\(\sigma'(z) \approx 0\),梯度反而最小——錯得越離譜,學得越緩慢。
交叉熵損失 \(L = -[p \log q + (1-p) \log(1-q)]\) 對 \(z\) 求梯度則得到優雅無比的:
只是「預測減真值」,與平方誤差在線性回歸中的形式完全一致。錯得越大,推力越大。1998 年 LeCun、Bottou、Bengio、Haffner 的經典論文〈Gradient-Based Learning Applied to Document Recognition〉(MNIST 與 LeNet 之地)正是以 softmax + 交叉熵為標準配備,把這套做法推向整個社群。
統計學的底牌:最大概似#
交叉熵不是湊巧好用,它在統計上有嚴格身份。設資料來自分佈 \(P\),模型為參數化 \(Q_\theta\),最小化交叉熵:
等價於最小化 KL 散度,也就等價於最大概似估計(Maximum Likelihood Estimation):負對數概似(NLL)即交叉熵在樣本上的經驗版本。換言之,每一次在 ImageNet 上訓練分類器、每一次微調語言模型,都是在重演 1912 年費雪(R. A. Fisher)確立的最大概似傳統——只是以梯度下降、用 GPU 執行。
這也解釋了 softmax 的由來:對多類問題,輸出層 \(z \to \text{softmax}(z)\),交叉熵損失即多類邏輯迴歸的 NLL,統計學家早在 1980 年代 Cox 與 McCullagh–Nelder 的廣義線性模型框架下熟知此物。神經網路不是發明了新損失,而是把古典統計的估計量接上了非線性特徵學習。
與 SVM 的路線之爭#
1990–2000 年代,另一條路線是支持向量機(SVM,Vapnik 與 Cortes 1995)。SVM 用 hinge loss \(\max(0, 1 - y\, f(x))\),只關心樣本是否越過邊界,分正確即不再推動決策面;交叉熵則永遠追求更高的置信度,即使已經分對也要把概率推向 1。學理上:hinge loss 對應間隔最大化;交叉熵對應概率校準(calibration)——模型輸出的數字真的可以當概率用。
這條分界在 2012 年畫下句點:Krizhevsky、Sutskever、Hinton 的 AlexNet 在 ImageNet 以交叉熵 + softmax + dropout + ReLU 奪冠,深度學習一統江湖。SVM 退入小數據戰場,概率化訓練成為正統。此後所有人談「損失函數」,預設幾乎都是交叉熵。
Label smoothing 與 Focal Loss:兩次精修#
交叉熵的「絕不滿足」性格也帶來副作用:過度自信與類別失衡。
- Label smoothing(Szegedy et al., Inception-v3 論文,2016):把 one-hot 標籤 \([0,1,0]\) 軟化為 \([0.05, 0.9, 0.05]\),在交叉熵項上人為保留一點不確定性,抑制過擬合、改善校準。2019 年 Müller、Kornblith、Hinton 的分析論文(〈When Does Label Smoothing Help?〉)證實它同時提升蒸餾效果。
- Focal Loss(Lin et al., 2017,開源目標檢測 RetinaNet 之基石):把損失改為 \(-(1-q)^\gamma \log q\),對已經分對的高置信樣本降權,讓訓練火力集中在困難樣本上,解決 one-stage 檢測中前景與背景樣本 1:1000 的失衡。
兩者都是對交叉熵這台引擎做精密調校,而非更換引擎。
從 log-loss 到 GPT:困惑度與下一個詞#
語言模型的訓練目標,本質就是交叉熵最純粹的形態:給定前文,預測下一個 token 的分佈,最小化
對整個語料求平均,就是「每個 token 的平均位元數」。資訊論的老朋友困惑度(perplexity)直接由此而來:
模型每平均在 \(2^H\) 個等機率選項中猶豫。2019 年 OpenAI 的 GPT-2 論文整篇都在報告 WebText 與各語料上的 bits-per-token——交叉熵的另一件外衣。語料越多、模型越大,交叉熵單調下降;湧現能力被事後解讀為其連鎖反應。2023 年 Andrej Karpathy 的教學影片〈Let's build GPT from scratch〉,把「minibatch 上的 cross-entropy 對 logits」這一步講成入門第一課——引擎原理,就這樣成為新一世代的通識。
引擎的哲學#
熵的故事走到這裡,出現一個漂亮的迴圈:克勞修斯量熱、波茲曼數分子、香農算信息,而 21 世紀的工程師把這條 19 世紀的尺規寫進每一張 GPU 的核心循環。所有深度學習模型都在做同一件事——讓模型的熵,向世界的熵靠攏。認知世界的不確定性結構,是一切智能的起點;而這條起點,寫在交叉熵的一行公式裡。