為什么分類任務偏愛交叉熵?MSE 為何折戟?

在機器學習的世界里,損失函數是模型的“指南針”——它定義了模型“好壞”的標準,直接決定了參數優化的方向。對于分類任務(比如判斷一張圖片是貓還是狗),我們通常會選擇交叉熵作為損失函數;而在回歸任務(比如預測房價)中,均方誤差(MSE)則是更常見的選擇。但你有沒有想過:為什么分類任務不用 MSE?交叉熵究竟有什么“不可替代”的優勢?

本文將從數學本質、優化行為、信息論視角三個維度,拆解這一經典問題的答案。


一、先明確:分類任務的核心目標是什么?

分類任務的本質是對輸入數據分配一個概率分布,讓模型輸出的“類別概率”盡可能接近真實的“類別分布”。

舉個例子:一張貓的圖片,真實標簽是“貓”(對應獨熱編碼 [1, 0]);模型需要輸出兩個概率值,分別表示“是貓”和“是狗”的概率(理想情況是 [1, 0])。因此,分類任務的核心是讓模型的輸出概率分布與真實分布盡可能一致

而回歸任務的目標是預測一個連續值(比如房價的具體數值),此時模型需要最小化預測值與真實值的“距離”,這正是 MSE 的專長。


二、MSE 和交叉熵的數學本質:它們在“衡量什么差異”?

要理解兩者的差異,先看它們的數學形式。

1. 均方誤差(MSE)

MSE 是回歸任務的“標配”,公式為:
MSE=1N∑i=1N(yi?y^i)2 \text{MSE} = \frac{1}{N} \sum_{i=1}^N (y_i - \hat{y}_i)^2 MSE=N1?i=1N?(yi??y^?i?)2
其中,yiy_iyi? 是真實值,y^i\hat{y}_iy^?i? 是預測值,NNN 是樣本數量。MSE 的本質是衡量預測值與真實值的歐氏距離平方,它假設誤差服從高斯分布(即“噪聲是隨機的、連續的”)。

2. 交叉熵(Cross Entropy)

交叉熵用于衡量兩個概率分布的差異,公式為(以二分類為例):
Cross?Entropy=?1N∑i=1N[yilog?y^i+(1?yi)log?(1?y^i)] \text{Cross Entropy} = -\frac{1}{N} \sum_{i=1}^N \left[ y_i \log \hat{y}_i + (1 - y_i) \log (1 - \hat{y}_i) \right] Cross?Entropy=?N1?i=1N?[yi?logy^?i?+(1?yi?)log(1?y^?i?)]
其中,yiy_iyi? 是真實標簽的獨熱編碼(如 [1, 0] 或 [0, 1]),y^i\hat{y}_iy^?i? 是模型輸出的概率(需通過 Sigmoid 或 Softmax 激活函數保證在 [0,1] 區間)。多分類場景下,交叉熵擴展為:
Cross?Entropy=?1N∑i=1N∑c=1Cyi,clog?y^i,c \text{Cross Entropy} = -\frac{1}{N} \sum_{i=1}^N \sum_{c=1}^C y_{i,c} \log \hat{y}_{i,c} Cross?Entropy=?N1?i=1N?c=1C?yi,c?logy^?i,c?
其中 CCC 是類別總數,yi,cy_{i,c}yi,c? 是第 iii 個樣本屬于第 ccc 類的獨熱標簽(0或1),y^i,c\hat{y}_{i,c}y^?i,c? 是模型預測的第 iii 個樣本屬于第 ccc 類的概率。

關鍵差異:MSE 衡量的是“數值距離”,而交叉熵衡量的是“概率分布的差異”。分類任務需要優化的是概率分布的匹配,因此交叉熵更“對癥”。


三、優化視角:MSE 為何在分類任務中“水土不服”?

僅看數學定義可能不夠直觀,我們需要從梯度下降的優化過程來理解兩者的行為差異。

1. 假設模型輸出層用 Sigmoid 激活(二分類場景)

假設模型的最后一層是 Sigmoid 函數,將線性輸出 zzz 轉換為概率 y^=σ(z)=11+e?z\hat{y} = \sigma(z) = \frac{1}{1 + e^{-z}}y^?=σ(z)=1+e?z1?。此時,Sigmoid 的導數為:
σ′(z)=σ(z)(1?σ(z)) \sigma'(z) = \sigma(z)(1 - \sigma(z)) σ(z)=σ(z)(1?σ(z))

(1)MSE 的梯度問題

MSE 對 zzz 的梯度為:
?MSE?z=?MSE?y^??y^?z=2?(y^?y)y^(1?y^)?σ(z)(1?σ(z))=2(y^?y) \frac{\partial \text{MSE}}{\partial z} = \frac{\partial \text{MSE}}{\partial \hat{y}} \cdot \frac{\partial \hat{y}}{\partial z} = 2 \cdot \frac{(\hat{y} - y)}{\hat{y}(1 - \hat{y})} \cdot \sigma(z)(1 - \sigma(z)) = 2(\hat{y} - y) ?z?MSE?=?y^??MSE???z?y^??=2?y^?(1?y^?)(y^??y)??σ(z)(1?σ(z))=2(y^??y)
(注:推導中利用了 y^(1?y^)=σ(z)(1?σ(z))\hat{y}(1 - \hat{y}) = \sigma(z)(1 - \sigma(z))y^?(1?y^?)=σ(z)(1?σ(z))

看起來梯度表達式很簡潔,但問題出在當預測值 y^\hat{y}y^? 與真實值 yyy 差異較大時,梯度會變得極小。例如:

  • 當真實標簽 y=1y=1y=1(正樣本),但模型預測 y^=0.1\hat{y}=0.1y^?=0.1(嚴重錯誤),此時 y^?y=?0.9\hat{y} - y = -0.9y^??y=?0.9,梯度為 2×(?0.9)=?1.82 \times (-0.9) = -1.82×(?0.9)=?1.8,絕對值并不大;
  • 但如果模型使用 Sigmoid 激活,當 zzz 很大(比如 z=10z=10z=10),y^≈1\hat{y} \approx 1y^?1,此時 σ(z)(1?σ(z))≈0\sigma(z)(1 - \sigma(z)) \approx 0σ(z)(1?σ(z))0,MSE 的梯度會趨近于 0——這會導致梯度消失,模型參數幾乎無法更新。
(2)交叉熵的梯度優勢

交叉熵對 zzz 的梯度為:
?Cross?Entropy?z=?Cross?Entropy?y^??y^?z=(?yy^+1?y1?y^)?σ(z)(1?σ(z)) \frac{\partial \text{Cross Entropy}}{\partial z} = \frac{\partial \text{Cross Entropy}}{\partial \hat{y}} \cdot \frac{\partial \hat{y}}{\partial z} = \left( -\frac{y}{\hat{y}} + \frac{1 - y}{1 - \hat{y}} \right) \cdot \sigma(z)(1 - \sigma(z)) ?z?Cross?Entropy?=?y^??Cross?Entropy???z?y^??=(?y^?y?+1?y^?1?y?)?σ(z)(1?σ(z))
代入 y^=σ(z)\hat{y} = \sigma(z)y^?=σ(z),化簡后得到:
?Cross?Entropy?z=σ(z)?y=y^?y \frac{\partial \text{Cross Entropy}}{\partial z} = \sigma(z) - y = \hat{y} - y ?z?Cross?Entropy?=σ(z)?y=y^??y

這個結果非常簡潔!交叉熵的梯度僅與預測值與真實值的差(y^?y\hat{y} - yy^??y)有關,完全消除了 Sigmoid 導數中的 σ(z)(1?σ(z))\sigma(z)(1 - \sigma(z))σ(z)(1?σ(z))。這意味著:

  • 當預測錯誤時(比如 y=1y=1y=1y^=0.1\hat{y}=0.1y^?=0.1),梯度為 0.1?1=?0.90.1 - 1 = -0.90.1?1=?0.9,絕對值較大,參數會被快速更新;
  • 當預測正確但置信度不高時(比如 y=1y=1y=1y^=0.6\hat{y}=0.6y^?=0.6),梯度為 0.6?1=?0.40.6 - 1 = -0.40.6?1=?0.4,參數仍會向正確方向調整;
  • 當預測完全正確且置信度高時(比如 y=1y=1y=1y^=0.99\hat{y}=0.99y^?=0.99),梯度為 0.99?1=?0.010.99 - 1 = -0.010.99?1=?0.01,梯度很小,模型趨于穩定。

結論:交叉熵的梯度與預測誤差直接相關,避免了 MSE 因 Sigmoid 導數導致的梯度消失問題,優化過程更高效。


四、信息論視角:交叉熵是“最合理”的概率分布度量

從信息論的角度看,交叉熵衡量的是用真實分布 ppp 編碼服從預測分布 qqq 的數據時,所需的平均編碼長度。公式為:
H(p,q)=?∑p(x)log?q(x) H(p, q) = -\sum p(x) \log q(x) H(p,q)=?p(x)logq(x)

在分類任務中,真實分布 ppp 是獨熱編碼(只有真實類別的概率為 1,其余為 0),因此交叉熵簡化為:
H(p,q)=?log?q(c?) H(p, q) = -\log q(c^*) H(p,q)=?logq(c?)
其中 c?c^*c? 是真實類別。這意味著,交叉熵越小,模型對真實類別的預測概率 q(c?)q(c^*)q(c?) 越大——這正是分類任務的核心目標(讓模型“更確信”自己的預測)。

而 MSE 對應的是最小化預測值與真實值的 L2 距離,它假設數據的噪聲服從高斯分布(即回歸任務的合理假設)。但在分類任務中,噪聲并不服從高斯分布(標簽是離散的 0/1 或獨熱編碼),此時 MSE 會傾向于懲罰“數值偏差”,而非“概率分布偏差”。例如:

  • 真實標簽是 [1, 0],模型輸出 [0.9, 0.1](正確且置信)和 [0.6, 0.4](正確但置信低)的 MSE 分別是 (0.1)2+(0.1)2=0.02(0.1)^2 + (0.1)^2 = 0.02(0.1)2+(0.1)2=0.02(0.4)2+(0.4)2=0.32(0.4)^2 + (0.4)^2 = 0.32(0.4)2+(0.4)2=0.32,顯然前者更優;
  • 但如果模型輸出 [0.1, 0.9](錯誤但置信)和 [0.5, 0.5](錯誤且模糊),MSE 分別是 (0.9)2+(0.9)2=1.62(0.9)^2 + (0.9)^2 = 1.62(0.9)2+(0.9)2=1.62(0.5)2+(0.5)2=0.5(0.5)^2 + (0.5)^2 = 0.5(0.5)2+(0.5)2=0.5,此時 MSE 會認為后者“更好”,但這與分類任務的目標完全矛盾。

結論:交叉熵直接優化“真實類別的預測概率最大化”,與分類任務的目標高度一致;而 MSE 優化的“數值距離”與分類目標存在語義錯位。


五、總結:分類任務選交叉熵的底層邏輯

回到最初的問題:為什么分類任務用交叉熵而不用 MSE?

核心原因可以總結為三點:

  1. 目標一致性:分類任務需要優化的是“概率分布的匹配”,交叉熵直接衡量真實分布與預測分布的差異;而 MSE 衡量的是“數值距離”,與分類目標語義錯位。
  2. 優化效率:交叉熵的梯度與預測誤差直接相關,避免了 MSE 因 Sigmoid 激活函數導致的梯度消失問題,參數更新更高效。
  3. 概率解釋性:交叉熵對應“最大化真實類別的預測概率”,符合分類模型的概率輸出需求;而 MSE 對應“最小化 L2 距離”,更適合連續值回歸。

簡言之,交叉熵是分類任務的“原生損失函數”,而 MSE 是回歸任務的“原生損失函數”——選擇它們,本質上是選擇與任務目標最匹配的優化工具。

下次設計分類模型時,記得給交叉熵一個機會——它會用更快的收斂和更高的準確率,證明自己的價值。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/91583.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/91583.shtml
英文地址,請注明出處:http://en.pswp.cn/web/91583.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[echarts]橫向柱狀圖

前言 接到一個需求,需要展示一個橫向的柱狀圖,按數量從大到小排序,并定時刷新 使用react配合echarts進行實現。 react引入echarts import React, { useEffect, useRef } from react; import * as echarts from echarts; import DeviceApi fro…

【開源項目】輕量加速利器 HubProxy 自建 Docker、GitHub 下載加速服務

??引言?? 如果你經常被 Docker 鏡像拉取、GitHub 文件下載的龜速折磨,又不想依賴第三方加速服務(擔心穩定性或隱私),今天分享的 ??HubProxy?? 可能正是你需要的。這個開源工具用一行命令就能部署,以極低資源消…

java web jsp jstl練習

JSP 的學習。 核心功能模塊 1. 源代碼層 ( src ) HelloWorld :主程序入口領域模型 : domain 包含User.java和ceshi.java控制器 : servlet 包含登錄驗證和驗證碼相關ServletWeb表現層 ( web ) JS…

VSCode 完全指南:釋放你的編碼潛能

零、簡介 在當今的軟件開發領域,代碼編輯器的選擇至關重要,它就像是工匠手中的工具,直接影響著工作效率和成果質量。Visual Studio Code(簡稱 VSCode)自問世以來,迅速在全球開發者社區中嶄露頭角&#xff…

《n8n基礎教學》第一節:如何使用編輯器UI界面

在本課中,你將學習如何操作編輯器界面。我們將瀏覽畫布,向您展示每個圖標的含義,以及在 n8n 中構建工作流程時在哪里可以找到您需要的東西。本課程基于 n8n 最新版本 。在其他版本中,某些用戶界面可能有所不同,但這不會…

gcc g++ makefile CMakeLists.txt cmake make 的關系

gcc:C語言編譯器g:C編譯器makefile:定義編譯規則、依賴關系和構建目標。可以手動編寫,也可以由CMakeLists.txt生成cmake:讀取CMakeLists.txt文件,生成Makefilemake:構建工具,執行Mak…

SFT 訓練器

SFT 訓練器 “訓練時間到!” 我們現在終于可以創建一個監督微調訓練器的實例了: trainer = SFTTrainer( model=model, processing_class=tokenizer, args=sft_config, train_dataset=dataset, )SFTTrainer 已經對數據集進行了預處理,因此我們可以深入查看,了解每個小批次…

Android Material Components 全面解析:打造現代化 Material Design 應用

引言 在當今移動應用開發領域,用戶體驗(UX)已成為決定應用成功與否的關鍵因素之一。Google推出的Material Design設計語言為開發者提供了一套完整的視覺、交互和動效規范,而Material Components for Android(MDC-Android)則是將這些設計理念轉化為可重用…

Windows使用Powershell自動安裝SqlServer2025服務器與SSMS管理工具

安裝結果: 安裝前準備: 1.下載mssql server 2025安裝器 2.下載iso鏡像 3.下載好SSMS安裝程序,并放到iso同目錄下 4.執行腳本開始自動安裝

09 RK3568 Debian11 ES8388 模擬音頻輸出

1、設備樹配置 確認自己的i2c,使用sdk帶的驅動es8323 /SDK/kernel/sound/soc/codecs/es8323.c es8388_sound: es8388-sound {status = "okay";compatible = "rockchip,multicodecs-card"; rockchip,card-name = "rockchip,es8388-codec"; …

力扣-199.二叉樹的右視圖

題目鏈接 199.二叉樹的右視圖 class Solution {public List<Integer> rightSideView(TreeNode root) {List<Integer> res new ArrayList<>();Queue<TreeNode> queue new LinkedList<>();if (root null)return res;queue.offer(root);while …

Android Bitmap 完全指南:從基礎到高級優化

在 Android 開發中&#xff0c;圖像處理是一個核心且復雜的領域&#xff0c;而 Bitmap 作為 Android 中表示圖像的基本單位&#xff0c;貫穿了從簡單圖片顯示到復雜圖像編輯的各個場景。然而&#xff0c;Bitmap 處理不當往往會導致應用性能下降、內存溢出&#xff08;OOM&#…

unity日志過濾器

背景&#xff1a;之前做游戲的時候和同組的同事聊過說日志過濾盡量不要限制大家怎么使用日志打印的接口&#xff0c;不要加額外的參數&#xff0c;比如多加一個標簽string,或者使用特定的接口&#xff0c;枚舉。最好就是日志大家還是用Debug.Log無感去用&#xff0c;然后通過勾…

OpenGL Camera

一. lookAt函數的參數含義glm::mat4 view glm::lookAt(cameraPos, // 相機在世界坐標系中的位置&#xff08;任意值&#xff09;cameraPos cameraFront, // 相機看向的目標點&#xff08;位置朝向&#xff09;cameraUp // 相機的"上方向"&#xff08;通…

Android RTMP推送|輕量級RTSP服務同屏實踐:屏幕+音頻+錄像全鏈路落地方案

一、背景&#xff1a;從“移動終端”到“遠程協作節點”&#xff0c;同屏音頻錄像為何成剛需&#xff1f; 在數字化辦公、智慧醫療與遠程教育等快速發展的推動下&#xff0c;手機作為隨身終端&#xff0c;已不再只是“內容接收者”&#xff0c;而逐步成為遠程信息發布與可視化…

NLP 和 LLM 區別、對比 和關系

理解自然語言處理(NLP)和大語言模型(LLM)的區別、對比和關系對于把握現代人工智能的發展非常重要。以下是清晰的分析: 核心定義 NLP (Natural Language Processing - 自然語言處理): 是什么: 一個廣闊的計算機科學和人工智能子領域,致力于讓計算機能夠理解、解釋、操作…

Altium 移除在原理圖之外的元器件

Altium新手&#xff0c;最近在畫原理圖的時候&#xff0c;遇見了這種不小心拖到界面外的元器件&#xff0c;發現拖不回來了了&#xff0c;查閱了一下&#xff0c;總結在這里 官方推薦的方法----------------使用“SCH List”面板刪除 鏈接&#xff1a;如何移除在原理圖之外的元…

【Linux我做主】細說環境變量

Linux環境變量Linux環境變量github地址前言1. 基本概念環境變量的本質2. 認識常見的環境變量PATH查看PATH修改PATHHOMESHELL其他常見環境變量PWD與OLDPWDLOGNAME與USERSSH_TTY由環境變量理解權限使用系統調用獲取環境變量理解權限3. 總結什么是環境變量3. 命令行參數和環境變量…

leecode-15 三數之和

我的解法&#xff08;不是完全解309/314&#xff09;我的思路是定義一個left和一個right&#xff0c;然后在向集合里去查詢&#xff0c;看看有沒有除了nums[left]&#xff0c;和nums[right]的第三個元素&#xff0c;把這個問題轉換為一個遍歷查找問題 利用List.contains()方法來…

精通分類:解析Scikit-learn中的KNN、樸素貝葉斯與決策樹(含隨機森林)

在機器學習領域&#xff0c;分類任務占據核心地位。Scikit-learn作為Python的機器學習利器&#xff0c;提供了豐富高效的分類算法。現在進行初步探討三種經典算法&#xff1a;K最近鄰&#xff08;KNN&#xff09;、樸素貝葉斯&#xff08;Naive Bayes&#xff09;和決策樹&…