深入理解 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)=iP(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)=iP(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)=iyilogpi
其中,(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=jezjezi
其中,(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)=iyilogpi=(1log(0.6590)+0log(0.2424)+0log(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 ziL=piyi
其中,(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] zL=[0.65901,0.24240,0.09860]=[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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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;当…