Categorical Cross-Entropy/zh
| Article | |
|---|---|
| Topic area | Loss Functions |
| Prerequisites | Softmax Function, Cross-Entropy Loss, KL Divergence |
概述
分類交叉熵是用於訓練分類器的損失函數,這類分類器必須將每個輸入分配到若干互斥類別中的恰好一個。它衡量預測的類別概率分布與真實分布之間的差異,在普通的監督學習中,真實分布集中於單個正確標籤。配合 softmax 輸出層使用時,它是現代神經網絡中多類分類的標準目標,涵蓋圖像分類器、語言模型以及大多數預訓練Transformer。
該損失有兩種互補的解釋。從信息論角度,它等於在使用對預測分布最優的編碼時,編碼真實標籤所需的平均比特數(或納特數);將其最小化會使預測分布趨近於真實分布。從統計角度,它是觀測標籤在分類模型下的負對數似然,因此最小化分類交叉熵恰好就是最大似然估計。這兩種視角解釋了為何同一公式出現在信息論、統計學和深度學習中,並解釋了為何它具有良好的梯度性質,使隨機梯度下降優化變得切實可行。
直觀理解
設想一個模型,給定一張照片,必須判斷圖像中顯示的是貓、狗還是鳥。模型為每個類別給出一個概率,例如貓 0.7、狗 0.2、鳥 0.1。如果正確答案是"貓",一個好的損失函數應當獎勵賦予該類別的高概率而忽略其他類別。分類交叉熵正是這樣做的:它對賦予正確類別的概率取負對數。接近 1 的概率產生很小的損失,而接近 0 的概率產生任意大的損失,因此模型在自信地犯錯時會受到強烈懲罰。
自信正確與自信錯誤的預測之間的不對稱性是該損失的核心特徵。對真實類別預測 0.99 產生約 0.01 的損失,而對真實類別預測 0.01 則產生約 4.6 的損失。這種對數縮放意味着,當模型偏離很遠時梯度恰好變大,從而在訓練初期提供強有力的糾正信號,而在接近收斂時變得溫和。這一行為與平方誤差形成鮮明對比,後者在自信預測時梯度趨於消失,並在與 softmax 輸出搭配時可能發生飽和,從而減慢學習。
公式表述
設有 $ K $ 個類別。對於一個具有 one-hot 真實標籤 $ y \in \{0,1\}^K $(即恰有一個分量為 1)和預測概率向量 $ \hat{y} \in [0,1]^K $(滿足 $ \sum_k \hat{y}_k = 1 $)的樣本,分類交叉熵定義為
$ {\displaystyle L(y, \hat{y}) = -\sum_{k=1}^{K} y_k \log \hat{y}_k.} $
由於 $ y $ 是 one-hot 的,求和坍縮為單個項 $ -\log \hat{y}_{c} $,其中 $ c $ 是真實類別的索引。對於 $ N $ 個獨立樣本組成的數據集,經驗風險是每個樣本損失的平均,
$ {\displaystyle \mathcal{L} = -\frac{1}{N}\sum_{i=1}^{N} \log \hat{y}^{(i)}_{c^{(i)}}.} $
在實踐中,預測概率來自施加在 logits $ z \in \mathbb{R}^K $ 上的 softmax:
$ {\displaystyle \hat{y}_k = \frac{\exp(z_k)}{\sum_{j=1}^{K} \exp(z_j)}.} $
代入並化簡,得到以 logits 表達的損失:
$ {\displaystyle L(y, z) = -z_c + \log \sum_{j=1}^{K} \exp(z_j).} $
右側的項是 logits 的 log-sum-exp,也稱為分類指數族的累積量函數。這是數值庫實際計算的形式,因為分別施加 softmax 再取對數對於較大的 logits 在數值上不穩定。
與信息論及最大似然的聯繫
分類交叉熵是當 $ p $ 為經驗(one-hot)標籤分布、$ q $ 為模型預測時,對交叉熵 $ H(p, q) = -\sum_k p_k \log q_k $ 的求值。它可分解為 $ H(p, q) = H(p) + D_{\text{KL}}(p \,\|\, q) $,其中 $ H(p) $ 是真實分布的熵,$ D_{\text{KL}} $ 是 Kullback-Leibler 散度。對 one-hot 標籤有 $ H(p) = 0 $,因此交叉熵與 KL 散度重合,最小化其一等同於最小化另一個。
統計解釋源於觀察到 softmax 分類器定義了一個分類似然 $ P(Y = c \mid x; \theta) = \hat{y}_c $。數據的負對數似然為
$ {\displaystyle -\sum_{i=1}^{N} \log P(Y = c^{(i)} \mid x^{(i)}; \theta),} $
在差一個常數的意義下,這恰好等於分類交叉熵。因此用此損失訓練 softmax 分類器在數值上等同於在多項模型下進行最大似然估計,這一事實證明了在分析分類器校準和置信度時使用標準頻率派工具(如 Fisher 信息矩陣)是合理的。
訓練與反向傳播
softmax與交叉熵的組合具有異常簡潔的梯度。給定 logits $ z $ 和 one-hot 標籤 $ y $,有
$ {\displaystyle \frac{\partial L}{\partial z_k} = \hat{y}_k - y_k.} $
梯度就是預測概率與真實類別指示函數之差。沒有遺留的指數或對數因子,這正是深度學習框架將 softmax 與交叉熵合併為單一原語的原因(例如 PyTorch 中的 nn.CrossEntropyLoss,TensorFlow 中的 SparseCategoricalCrossentropy)。隨後反向傳播使用這一具有殘差形態的誤差信號在網絡其餘部分中正常進行。
為保持數值穩定,庫直接從 logits 出發,使用 log-sum-exp 技巧計算損失,在取指數前先減去 $ \max_k z_k $:
$ {\displaystyle \log \sum_j \exp(z_j) = m + \log \sum_j \exp(z_j - m), \quad m = \max_k z_k.} $
這樣可避免 logits 過大時的上溢和過小(極負)時的下溢。那些先施加 softmax 再單獨取對數的樸素流水線可能在訓練時產生 NaN 值,尤其是在混合精度設置下。
變體
若干變體針對具體的實際問題:
- 稀疏分類交叉熵接受整數類別索引而非 one-hot 向量。數學公式完全相同,但實現避免了顯式構造大型 one-hot 矩陣,這對於語言模型中擁有數十萬 token 的詞表至關重要。
- 標籤平滑將 one-hot 目標替換為軟化分布,將 $ 1-\epsilon $ 分配給真實類別,將 $ \epsilon/(K-1) $ 分配給其他類別。它防止模型產生任意尖銳的預測,從而改善校準並往往提升泛化能力。該方法由 Inception-v3 推廣,已成為Transformer訓練中的標準做法。[1]
- Focal loss將每個樣本的損失乘以 $ (1 - \hat{y}_c)^\gamma $,降低簡單樣本的權重,使優化聚焦於困難樣本。它最初為稠密目標檢測提出,因為該場景中絕大多數候選框為背景。[2]
- 類別加權交叉熵按類別相關的權重縮放每個樣本的損失,以緩解類別不平衡,是相對於重採樣的一種簡單替代方案。
- 溫度縮放交叉熵在 softmax 之前用溫度 $ T $ 除以 logits。它不改變 argmax,但被廣泛用於知識蒸餾和事後校準。
與其他損失的比較
分類交叉熵是分類問題可選的若干損失之一,正確的選擇取決於標籤結構和輸出激活函數:
- 二元交叉熵是兩類的特例,配合 sigmoid 輸出用於單標籤二分類問題,並按類別獨立應用於標籤互不排斥的多標籤問題。
- 均方誤差作用於 one-hot 目標在技術上定義了一個有效的損失,但其梯度與 softmax 飽和的相互作用較差,導致訓練緩慢且概率校準不佳。它在分類中很少使用。
- 鉸鏈損失及其多類擴展用於支持向量機,優化間隔而非似然。它們產生稀疏的決策邊界,但不給出概率估計,在現代深度學習中並不常見。
- 三元組、對比與 InfoNCE 損失優化相對相似度而非絕對類別概率,更適合表示學習和檢索任務。
對於標籤集合固定且使用 softmax 輸出的標準分類,分類交叉熵是默認選擇,其他替代方案在很大程度上已被取代。
Practical Considerations and Limitations
Despite its dominance, categorical cross-entropy has known limitations. Models trained with it are often overconfident: probabilities estimated by deep networks tend to be poorly calibrated, with confidence systematically higher than empirical accuracy.[3] Temperature scaling, label smoothing, and focal loss all partially address this. The loss is also sensitive to label noise: a single mislabeled example can produce an unbounded gradient because $ -\log \hat{y}_c \to \infty $ as $ \hat{y}_c \to 0 $. Robust alternatives such as the generalized cross-entropy and symmetric cross-entropy trade off some accuracy on clean data for resilience to noisy labels.
A more subtle issue is that categorical cross-entropy treats all classes as exchangeable: misclassifying a husky as a wolf incurs the same loss as misclassifying it as a banana. When the label space has structure (hierarchical categories, semantic embeddings, ordinal levels), specialized losses or auxiliary objectives can encode that structure and outperform the plain cross-entropy. Finally, in extreme classification with millions of classes, the normalizing log-sum-exp becomes a computational bottleneck, motivating sampled approximations such as sampled softmax, noise-contrastive estimation, and hierarchical softmax.