深入理解 Cross-Entropy 損失函數:從原理到實踐

在深度學習中,損失函數是衡量模型性能的關鍵指標之一。對于多分類問題,Cross-Entropy 損失函數 是最常用的選擇之一。它不僅能夠有效衡量模型輸出與真實標簽之間的差異,還能通過梯度下降法指導模型的優化。本文將深入探討 Cross-Entropy 損失函數的數學原理、計算過程以及在實際應用中的表現。

一、Cross-Entropy 損失函數的數學原理

1.1 信息熵與交叉熵

在信息論中,信息熵(Entropy)是衡量信息不確定性的指標。對于一個離散隨機變量 (X),其概率分布為 (P(X)),信息熵定義為:
H ( X ) = ? ∑ i P ( x i ) log ? P ( x i ) H(X) = -\sum_{i} P(x_i) \log P(x_i) H(X)=?i?P(xi?)logP(xi?)
其中,(\log) 是以 2 為底的對數,表示信息的單位是比特(bit)。信息熵越高,表示信息的不確定性越大。

交叉熵(Cross-Entropy)是衡量兩個概率分布之間的差異的指標。對于兩個概率分布 (P) 和 (Q),交叉熵定義為:
H ( P , Q ) = ? ∑ i P ( x i ) log ? Q ( x i ) H(P, Q) = -\sum_{i} P(x_i) \log Q(x_i) H(P,Q)=?i?P(xi?)logQ(xi?)
其中,(P) 是真實分布,(Q) 是預測分布。交叉熵越小,表示預測分布與真實分布越接近。

1.2 Cross-Entropy 損失函數

在多分類問題中,模型的輸出通常是一個概率分布 (\mathbf{p}),表示每個類別的預測概率。真實標簽通常用 one-hot 編碼表示,即 (\mathbf{y})。Cross-Entropy 損失函數定義為:
H ( y , p ) = ? ∑ i y i log ? p i H(\mathbf{y}, \mathbf{p}) = -\sum_{i} y_i \log p_i H(y,p)=?i?yi?logpi?
其中,(y_i) 是真實標簽中第 (i) 個類別的概率(0 或 1),(p_i) 是模型預測第 (i) 個類別的概率。

1.3 Softmax 函數

為了將模型的輸出轉換為概率分布,通常使用 Softmax 函數。Softmax 函數將一個實數向量 (\mathbf{z}) 轉換為概率分布 (\mathbf{p}),定義為:
p i = e z i ∑ j e z j p_i = \frac{e^{z_i}}{\sum_{j} e^{z_j}} pi?=j?ezj?ezi??
其中,(e^{z_i}) 是指數函數,確保所有輸出值為正;分母 (\sum_{j} e^{z_j}) 是歸一化因子,確保所有概率之和為 1。

二、Cross-Entropy 損失函數的計算過程

2.1 示例數據

假設我們有一個簡單的多分類問題,目標是將輸入數據分類到 3 個類別中的一個。模型的輸出是一個 logits 向量(即未經 Softmax 轉換的原始輸出),真實標簽是一個類別索引。

  • 模型輸出(logits):([2.0, 1.0, 0.1])
  • 真實標簽:類別 0(表示第一個類別)

2.2 Softmax 轉換

首先,我們將 logits 轉換為概率分布。使用 Softmax 函數計算:
p = Softmax ( z ) = [ e 2.0 e 2.0 + e 1.0 + e 0.1 , e 1.0 e 2.0 + e 1.0 + e 0.1 , e 0.1 e 2.0 + e 1.0 + e 0.1 ] \mathbf{p} = \text{Softmax}(\mathbf{z}) = \left[ \frac{e^{2.0}}{e^{2.0} + e^{1.0} + e^{0.1}}, \frac{e^{1.0}}{e^{2.0} + e^{1.0} + e^{0.1}}, \frac{e^{0.1}}{e^{2.0} + e^{1.0} + e^{0.1}} \right] p=Softmax(z)=[e2.0+e1.0+e0.1e2.0?,e2.0+e1.0+e0.1e1.0?,e2.0+e1.0+e0.1e0.1?]
計算結果為:
p ≈ [ 0.6590 , 0.2424 , 0.0986 ] \mathbf{p} \approx [0.6590, 0.2424, 0.0986] p[0.6590,0.2424,0.0986]

2.3 計算 Cross-Entropy 損失

真實標簽 (\mathbf{y}) 是 one-hot 編碼的,即 ([1, 0, 0])。根據 Cross-Entropy 損失函數的定義:
H ( y , p ) = ? ∑ i y i log ? p i = ? ( 1 ? log ? ( 0.6590 ) + 0 ? log ? ( 0.2424 ) + 0 ? log ? ( 0.0986 ) ) H(\mathbf{y}, \mathbf{p}) = -\sum_{i} y_i \log p_i = - (1 \cdot \log(0.6590) + 0 \cdot \log(0.2424) + 0 \cdot \log(0.0986)) H(y,p)=?i?yi?logpi?=?(1?log(0.6590)+0?log(0.2424)+0?log(0.0986))
簡化后:
H ( y , p ) = ? log ? ( 0.6590 ) ≈ 0.4156 H(\mathbf{y}, \mathbf{p}) = - \log(0.6590) \approx 0.4156 H(y,p)=?log(0.6590)0.4156

2.4 梯度計算

在反向傳播過程中,Cross-Entropy 損失函數會計算 logits 的梯度。對于 Softmax 和 Cross-Entropy 的組合,梯度可以表示為:
? L ? z i = p i ? y i \frac{\partial L}{\partial z_i} = p_i - y_i ?zi??L?=pi??yi?
其中,(p_i) 是 Softmax 輸出的概率,(y_i) 是真實標簽的概率。對于我們的示例:
? L ? z = [ 0.6590 ? 1 , 0.2424 ? 0 , 0.0986 ? 0 ] = [ ? 0.3410 , 0.2424 , 0.0986 ] \frac{\partial L}{\partial \mathbf{z}} = [0.6590 - 1, 0.2424 - 0, 0.0986 - 0] = [-0.3410, 0.2424, 0.0986] ?z?L?=[0.6590?1,0.2424?0,0.0986?0]=[?0.3410,0.2424,0.0986]

三、Cross-Entropy 損失函數的性質

3.1 對數損失的性質

  • 非負性:Cross-Entropy 損失總是非負的,因為 (\log(p_i)) 在 (0 < p_i < 1) 時是負數。
  • 對數懲罰:對數函數對概率的懲罰是指數級的。如果模型對正確類別的預測概率很低,損失值會急劇增加。這使得模型更加關注那些預測錯誤的樣本。

3.2 Softmax 和 Cross-Entropy 的結合

  • 數值穩定性:在實際實現中,通常會將 Softmax 和 Cross-Entropy 結合在一起計算,以避免數值不穩定的問題。例如,在 PyTorch 中,nn.CrossEntropyLoss 會自動處理 Softmax 轉換和對數計算。
  • 梯度計算:Softmax 和 Cross-Entropy 的組合具有簡單的梯度表達式,便于反向傳播。

四、實際應用中的表現

4.1 優化過程

在訓練過程中,Cross-Entropy 損失函數會指導模型的優化。通過最小化損失值,模型會逐漸調整參數,使得預測分布更接近真實分布。例如,在我們的示例中,模型會通過梯度下降法調整 logits,使得類別 0 的預測概率增加,其他類別的預測概率減少。

4.2 模型評估

在模型評估階段,Cross-Entropy 損失函數可以用來衡量模型的性能。較低的損失值表示模型的預測更準確。此外,還可以結合其他指標(如準確率、召回率等)來全面評估模型。

五、代碼實現與實驗

5.1 PyTorch 實現

以下是使用 PyTorch 實現 Cross-Entropy 損失函數的完整代碼:

import torch
import torch.nn as nn
import torch.nn.functional as F# 模型輸出(logits)
logits = torch.tensor([[2.0, 1.0, 0.1]], requires_grad=True)# 真實標簽(類別索引)
target = torch.tensor([0])  # 目標類別為 0# Softmax 轉換
softmax_output = F.softmax(logits, dim=1)
print("Softmax Output:", softmax_output)# Cross-Entropy 損失
criterion = nn.CrossEntropyLoss()
loss = criterion(logits, target)
print("Cross-Entropy Loss:", loss.item())# 反向傳播
loss.backward()
print("Gradients of logits:", logits.grad)

5.2 輸出結果

運行上述代碼后,您將看到以下輸出:

Softmax Output: tensor([[0.6590, 0.2424, 0.0986]])
Cross-Entropy Loss: 0.4156
Gradients of logits: tensor([[-0.3410,  0.2424,  0.0986]])

六、總結

Cross-Entropy 損失函數是深度學習中處理多分類問題的核心工具之一。它通過衡量模型輸出的概率分布與真實標簽之間的差異,為模型優化提供了明確的方向。結合 Softmax 函數,Cross-Entropy 損失函數不僅具有數學上的優雅性,還具有實際應用中的高效性。通過本文的深入探討,希望您對 Cross-Entropy 損失函數有了更全面的理解。在未來的學習和實踐中,您可以嘗試使用不同的損失函數,探索它們在不同場景下的表現。

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

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

相關文章

Vim-vimrc保存文件自動移除行末尾空格

Vim-vimrc保存文件自動移除行末尾空格 這段代碼通過設置 autocmd 和自定義函數&#xff0c;確保每次保存文件時都自動刪除文件中的行尾空格&#xff0c;同時不會影響光標和視圖的位置。它適用于所有文件類型&#xff0c;并且刪除操作不會引入錯誤&#xff0c;即使沒有行尾空格的…

Occt幾何內核快速入門

本文簡單介紹 Open Cascade Technology&#xff08;OCCT&#xff09;&#xff0c;提供了下載地址和文檔地址。通過OCCT的測試工具Draw&#xff0c;展示了OCCT的一些功能特性。介紹了OCCT集成開發的演示代碼&#xff0c;提供了源代碼下載地址和編譯過程文件。 一、簡介 Open C…

【Docker 08】Compose - 容器編排

&#x1f308; 一、Docker Compose 介紹 ? 1. Docker Compose 是什么 Docker Compose 是由 Docker 官方提供的一個用于定義和運行多容器應用的工具&#xff0c;它讓用戶可以通過一個 YAML 文件&#xff08;通常是 docker-compose.yml&#xff09;來配置應用所需要的服務&…

CentOS Stream 9平臺部署安裝MySQL8.4.1

1、在線下載安裝包 [rootlocalhost ~]# wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.4.1-1.el9.x86_64.rpm-bundle.tar 2、新建解壓文件夾 [rootlocalhost ~]#mkdir /root/sql 3、離線解壓安裝包安裝配置MySQL8 上傳安裝包到home下 [rootlocalhost ~]#c…

phpstorm無縫切換vscode

要將 PhpStorm 的開發體驗無縫遷移到 VS Code&#xff0c;需重點配置插件、快捷鍵和操作習慣。以下是詳細方案&#xff1a; 一、必備插件清單 安裝以下插件&#xff08;VS Code 搜索安裝&#xff09;&#xff1a; PHP Intelephense&#xff1a;核心插件&#xff08;代碼補全、…

雨聲_錦程_時年

1 炎涼 飄零于三界。 子銘師傅看了幾卷筆記&#xff0c;以為我文筆很好&#xff0c;于是我留在石銘公社。 我每日在公社會議廳&#xff0c;高地吹風&#xff0c;悠然筆記。 我喜歡四處旅行。 穿著鞘翅飛翔&#xff0c;風劃過耳邊。 我渴求所飲的每一滴水&#xff0c;追憶木履留…

微信小程序使用rsa 加解密

jsencrypt.min.js !function(t,e){"object"typeof exports&&"undefined"!typeof module?e(exports):"function"typeof define&&define.amd?define(["exports"],e):e(t.JSEncrypt{})}(this,function(t){"use s…

2025北郵軟件工程復習

文章目錄 廢話知識點總結Part1 軟件工程概述Part2 軟件需求分析需求介紹需求描述方法 Part3 軟件設計方法軟件設計的概念與原則軟件設計的方法 Part4 程序實現方法Part5 軟件測試方法白盒測試黑盒測試 練習題北郵2021~2022期末考北郵2018期末考 考后總結 廢話 update on 4.24&…

《Whisper模型版本及下載鏈接》

Whisper模型版本及下載鏈接 Whisper是OpenAI開發的語音識別模型&#xff0c;以下按模型規模從小到大排列&#xff0c;包含不同語言版本及通用版本&#xff1a; 1. Tiny系列&#xff08;輕量級&#xff09; tiny.en.pt&#xff08;英文專用&#xff09;&#xff1a; https://…

AWS-SAA 第二部份:安全性和權限管理

我們來深入講解第二部分&#xff1a;安全性和權限管理&#xff0c;依然用通俗易懂的語言解釋。 核心服務 1&#xff1a;IAM&#xff08;Identity and Access Management&#xff09; 1. IAM 的核心概念 作用&#xff1a; IAM 是 AWS 的“門衛系統”&#xff0c;用來管理誰可以…

Linux 多種方式實現行轉列

目錄 一. 前提二. xargs 實現行轉列三. paste 實現行轉列四. sed 實現行轉列 一. 前提 ?之前在這下面篇文章中使用sed命令實現了行專列&#xff0c;本篇文章再介紹幾種更加簡單的方式。 Linux sed案例 &#x1f449; 20231126-2.log 110120 SPLREQUEST 內容1 AAA memberID1…

Hadoop HDFS存儲機制與塊大小選擇權衡

一、HDFS塊存儲機制核心原理 1.1 邏輯塊 vs 物理存儲 HDFS中的 塊大小(block size) 是一個邏輯概念&#xff0c;而非物理預分配&#xff1a; #mermaid-svg-GzNjegjSgYrnlcme {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mer…

Unity Addressable使用之AddressableAssetSettings

AddressableAssetSettings 是 Unity Addressable Assets System 的核心配置文件 配置 Manage Groups 用來打開Addressables Groups窗口 Profiles配置 Profile In Use&#xff1a;可以在這選擇使用的是哪一套配置文件Manage Profiles&#xff1a;點擊它會打開Addressables Gr…

從“詢”到“單”的智能躍遷:工業品電商復雜交易流程引擎的架構之道

當傳統企業客戶在“詢盤-報價-議價-審批-合同-下單-履約”的復雜迷宮中艱難穿行&#xff0c;反復溝通、層層審批、定制條款、手工錄入……每一步都暗藏延遲與差錯的風險&#xff0c;工業品電商平臺也承受著轉化率低、運營成本高、客戶滿意度下滑的陣痛。流程冗長、定制化依賴人…

【軟考高級系統架構論文】論模型驅動架構設計方法及其應用

論文真題 模型驅動架構設計是一種用于應用系統開發的軟件設計方法,以模型構造、模型轉換和精化為核心,提供了一套軟件設計的指導規范。在模型驅動架構環境下,通過創建出機器可讀和高度抽象的模型實現對不同問題域的描述,這些模型獨立于實現技術,以標準化的方式儲存,利用…

【入門】【例18.2】 孔融讓梨

| 時間限制&#xff1a;C/C 1000MS&#xff0c;其他語言 2000MS 內存限制&#xff1a;C/C 64MB&#xff0c;其他語言 128MB 難度&#xff1a;中等 分數&#xff1a;100 OI排行榜得分&#xff1a;12(0.1分數2難度) 出題人&#xff1a;root | 描述 孔融小時候聰明好學&#xff0…

【nature review】原子尺度上光與物質的相互作用

2021 年 6 月,馬普固態研究所 Rico Gutzler 等人在《Nature Reviews Physics》期刊發表了題為《Light–matter interaction at atomic scales》的文章,基于掃描隧道顯微鏡(STM)與光子學結合的方法,研究了光與物質在原子尺度上的相互作用,實驗和仿真結果表明光可通過多種機…

7.3.3_1紅黑樹的定義和性質

知識總覽&#xff1a; 為什么要發明紅黑樹&#xff1a; 二叉排序樹BST 紅黑樹RBT的查找、插入和刪除效率基本和AVL平衡二叉樹的相同&#xff0c;但是平衡二叉樹在插入和刪除節點操作時容易被破壞平衡&#xff0c;所以需要消耗大量時間重新調整樹的形態(主要時間用在計算平衡因…

微處理器原理與應用篇---馮諾依曼體系結構

馮諾依曼體系結構&#xff1a;計算機的基礎設計范式 一、馮諾依曼體系結構的起源與定義 提出背景&#xff1a; 1945 年&#xff0c;匈牙利數學家約翰?馮?諾依曼&#xff08;John von Neumann&#xff09;在《EDVAC 報告書的第一份草案》中提出該架構&#xff0c;為現代計算…

vue3 + TypeScript +Element Plus 輸入框回車事件 @keydown.enter

在 Vue 3 TypeScript Element Plus 的環境下&#xff0c;keyup.enter.native 和 keydown.enter 在 el-input 組件上的區別主要在于 事件觸發時機 和 Vue 3 的事件處理機制。以下是詳細對比&#xff1a; 1. keydown.enter&#xff08;推薦&#xff09; 觸發時機&#xff1a;當…