news 2026/4/22 12:08:54

从信息论到代码:用CrossEntropyLoss搞懂分类任务的核心思想

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从信息论到代码:用CrossEntropyLoss搞懂分类任务的核心思想

从信息论到代码:用CrossEntropyLoss搞懂分类任务的核心思想

在机器学习的浩瀚海洋中,分类任务是最基础也最常遇到的一类问题。无论是识别图片中的猫狗,还是判断邮件是否为垃圾邮件,本质上都是在做分类。而要让模型学会正确分类,关键在于如何定义"正确"——这就是损失函数的作用。在所有分类损失函数中,交叉熵损失(CrossEntropyLoss)因其理论优雅和实际效果出众,成为了当之无愧的首选。但你是否想过,为什么偏偏是交叉熵?它和信息论中的"熵"有何关联?PyTorch实现中为何要先做log_softmax再调用NLLLoss?本文将带你从信息论的基本概念出发,逐步拆解这些问题的答案。

1. 信息论基础:从熵到交叉熵

1.1 信息熵:不确定性的度量

信息论的创始人香农(Claude Shannon)在1948年提出了"信息熵"的概念,用来量化信息的不确定性。对于一个离散随机变量X,其熵H(X)定义为:

H(X) = -Σ p(x) * log p(x)

其中p(x)是X取值为x的概率。熵越大,表示系统的不确定性越高。举个例子:

  • 一枚公平硬币的正反面概率都是0.5,其熵为:
    H = - (0.5*log(0.5) + 0.5*log(0.5)) ≈ 0.693
  • 而一枚总是正面朝上的硬币(概率1.0),其熵为:
    H = - (1.0*log(1.0)) = 0

熵的直观理解:可以看作"惊讶程度"。确定性事件(熵=0)不会带来任何惊喜,而完全随机的事件(熵最大)每次都会让人惊讶。

1.2 交叉熵:两个概率分布的差异

交叉熵H(P,Q)扩展了熵的概念,用于衡量两个概率分布P和Q之间的差异:

H(P,Q) = -Σ p(x) * log q(x)

其中P是真实分布,Q是估计分布。在机器学习中:

  • P:标签的真实分布(通常是one-hot编码)
  • Q:模型预测的分布

关键洞察:当P=Q时,交叉熵就等于P的熵。因此,最小化交叉熵就是在让预测分布Q逼近真实分布P。

2. 从理论到实践:分类任务中的交叉熵

2.1 为什么交叉熵适合分类问题

分类任务通常使用softmax将模型输出转换为概率分布。假设有一个三分类问题:

# 模型原始输出(logits) logits = [2.0, 1.0, 0.1] # softmax转换后 probs = [0.659, 0.242, 0.099] # 总和为1

交叉熵损失的计算过程:

  1. 真实分布:对于标签y=1(第二类),其one-hot表示为[0,1,0]
  2. 计算交叉熵
    loss = - (0*log(0.659) + 1*log(0.242) + 0*log(0.099)) = -log(0.242) ≈ 1.418

为何优于均方误差

  • 对于概率预测任务,交叉熵的梯度更合理
  • 当预测错误时(如预测概率0.01而实际为1),交叉熵会产生很大的损失值,迫使模型快速修正

2.2 PyTorch的实现细节

PyTorch的CrossEntropyLoss实际上是两个操作的组合:

  1. log_softmax:对输入进行softmax后取对数
    log_probs = log(softmax(logits))
  2. NLLLoss(负对数似然损失):根据真实标签选取对应的log_prob并取负

这种实现方式在数值计算上更稳定,避免了单独计算softmax可能导致的数值溢出问题。

实际使用示例

import torch import torch.nn as nn # 输入是未经softmax的原始logits(3个样本,每个样本3类) inputs = torch.tensor([[2.0, 1.0, 0.1], [0.5, 2.0, 0.3], [0.2, 0.1, 3.0]]) # 标签是类别索引(不是one-hot) targets = torch.tensor([1, 0, 2]) loss_fn = nn.CrossEntropyLoss() loss = loss_fn(inputs, targets) print(loss) # 输出损失值

3. 深入理解:交叉熵的梯度特性

交叉熵之所以成为分类任务的首选损失,很大程度上得益于其优秀的梯度特性。让我们通过一个简单的二分类例子来分析:

假设:

  • 真实标签y=1
  • 模型预测概率p=σ(z),其中σ是sigmoid函数

交叉熵损失:

L = -[y*log(p) + (1-y)*log(1-p)]

梯度计算:

dL/dz = p - y

这个简洁的梯度公式意味着:

  • 当预测p接近真实y时,梯度趋近0,学习速度减慢
  • 当预测p远离真实y时,梯度较大,学习速度加快

对比均方误差(MSE)的梯度

dL_mse/dz = (p-y)*p*(1-p)

MSE梯度中多了一个p*(1-p)项,当p接近0或1时(即预测很自信时),梯度会变得很小,导致学习停滞——这就是所谓的"梯度消失"问题。

4. 实战技巧与常见问题

4.1 处理类别不平衡

当数据集中各类别样本数量差异很大时,可以给交叉熵损失添加类别权重:

# 假设类别0出现频率是类别1的10倍 weights = torch.tensor([1.0, 10.0]) loss_fn = nn.CrossEntropyLoss(weight=weights)

4.2 标签平滑(Label Smoothing)

为了防止模型对标签过度自信,可以使用标签平滑技术:

class LabelSmoothingCrossEntropy(nn.Module): def __init__(self, epsilon=0.1): super().__init__() self.epsilon = epsilon def forward(self, logits, targets): n_classes = logits.size(-1) log_probs = F.log_softmax(logits, dim=-1) loss = -log_probs.mean() * (1 - self.epsilon) loss += - (log_probs.sum(-1) / n_classes).mean() * self.epsilon return loss

4.3 数值稳定性问题

在极端情况下,直接计算softmax后取log可能遇到数值问题。PyTorch的实现使用了以下技巧:

log_softmax(x) = x - x.max() - log(exp(x - x.max()).sum())

这种"减最大值"的方法确保了数值稳定性,同时不影响最终结果。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/22 12:05:57

Unity URP 顶点偏移实现伪体积 Billboard

让 Quad 始终面朝摄像机 — 球形与柱状 Billboard 详解一、什么是 Billboard?Billboard(公告板)是一种在游戏开发中广泛使用的技术——用一块始终朝向观察者的平面(通常为 Quad)来模拟体积效果。经典应用包括粒子、烟雾…

作者头像 李华
网站建设 2026/4/22 12:05:21

NoFences:3步打造整洁高效的Windows桌面分区系统

NoFences:3步打造整洁高效的Windows桌面分区系统 【免费下载链接】NoFences 🚧 Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences 想要彻底告别混乱的桌面图标吗?NoFences作为一款完全…

作者头像 李华
网站建设 2026/4/22 12:04:29

元宇宙质量保障:Roblox脚本安全测试框架

在元宇宙从概念蓝图演变为产业现实的进程中,以Roblox为代表的用户生成内容平台正扮演着核心枢纽的角色。其生命力源于强大的Luau脚本语言,它赋予创作者构建复杂交互与动态世界的无限可能。然而,这种开放性与灵活性也带来了前所未有的质量保障…

作者头像 李华
网站建设 2026/4/22 12:02:30

从需求到发布:手把手教你用CMMI配置管理搭建研发“数字档案馆”

构建研发数字资产中枢:CMMI配置管理实战指南 当电商平台的订单服务突然出现数据不一致时,开发团队耗费72小时才定位到问题根源——三个月前某次hotfix修改了数据库脚本但未更新部署文档。这种场景在缺乏配置管理的团队中屡见不鲜。现代软件研发早已不是代…

作者头像 李华
网站建设 2026/4/22 12:02:03

网络安全3个月速成学习顺序

网络安全3个月速成学习顺序 学习资源 如果你也是零基础想转行网络安全,却苦于没系统学习路径、不懂核心攻防技能?光靠盲目摸索不仅浪费时间,还消磨自己信心。这份 360 智榜样学习中心独家出版《网络攻防知识库》专为转行党量身打造&#xff0…

作者头像 李华