信息熵与交叉熵实战:从编码到PyTorch损失函数的3个关键推导
📅 2026/7/6 9:25:17
👁️ 次浏览
信息熵与交叉熵实战从编码到PyTorch损失函数的3个关键推导1. 信息论基础从编码视角理解熵的本质当我们谈论信息熵时本质上是在讨论用最优方式编码信息所需的最小平均比特数。这个观点由克劳德·香农在1948年提出它揭示了概率与信息之间的深刻联系。信息量的数学定义对于一个发生概率为p的事件其信息量I(p) -log₂p。这个对数函数的选择不是随意的——它确保了独立事件的信息量具有可加性。例如一个公平硬币抛掷的结果p0.5包含I1比特的信息一个八面骰子掷出特定数字p1/8包含I3比特的信息熵的物理意义信息熵H(X)是随机变量X所有可能取值的信息量的期望def entropy(prob_dist): return -np.sum(prob_dist * np.log2(prob_dist))考虑以下三种概率分布的熵对比分布类型概率向量熵值比特确定分布[1.0, 0.0, 0.0]0.0均匀分布[0.33, 0.33, 0.34]~1.58偏斜分布[0.9, 0.05, 0.05]~0.57熵的重要性质当分布越接近均匀时熵越大完全确定时熵为零。这解释了为什么压缩随机数据比压缩规律性强的数据更困难。2. 交叉熵的推导与最大似然估计交叉熵是机器学习中最重要的概念之一它衡量了两个概率分布之间的距离。从编码角度理解用真实分布P的最优编码时平均码长为H(P)用近似分布Q的编码来传达P的信息时平均码长为H(P,Q)数学定义 H(P,Q) -Σp(x)logq(x)在深度学习中最小化交叉熵等价于最大化似然函数。让我们通过一个分类问题来理解这点假设我们有真实标签分布Pone-hot编码 [0,0,1]模型预测分布Qsoftmax输出 [0.1,0.2,0.7]交叉熵计算为 H(P,Q) -(0log0.1 0log0.2 1*log0.7) -log0.7 ≈ 0.3567PyTorch中的实现方式import torch.nn as nn loss_fn nn.CrossEntropyLoss() # 内置了softmax outputs model(inputs) loss loss_fn(outputs, labels)三种典型分布的交叉熵计算对比二分类问题sigmoid输出 H(P,Q) -[y*logŷ (1-y)*log(1-ŷ)]多分类问题softmax输出 H(P,Q) -Σy_i*logŷ_i回归问题高斯假设 当假设输出服从高斯分布时最小化MSE等价于最小化交叉熵3. 从理论到实践PyTorch中的自定义损失函数理解理论后我们可以深入实现层面。标准的交叉熵损失有时需要调整例如处理类别不平衡或特殊任务需求。自定义加权交叉熵实现class WeightedCrossEntropy(nn.Module): def __init__(self, weights): super().__init__() self.weights torch.tensor(weights) def forward(self, inputs, targets): log_probs -F.log_softmax(inputs, dim1) loss self.weights[targets] * log_probs.gather(1, targets.unsqueeze(1)) return loss.mean() # 使用示例 weights [1.0, 2.0, 1.5] # 给不同类别不同权重 criterion WeightedCrossEntropy(weights)KL散度与交叉熵的关系 KL(P||Q) H(P,Q) - H(P)在PyTorch中可以直接计算kl_loss nn.KLDivLoss(reductionbatchmean) output F.log_softmax(model_out, dim1) loss kl_loss(output, target_distribution)实际训练中的技巧数值稳定性添加微小epsilon防止log(0)标签平滑防止模型对标签过度自信温度系数调整softmax输出的锐度# 标签平滑示例 def label_smoothing(targets, n_classes, smoothing0.1): with torch.no_grad(): targets targets * (1 - smoothing) smoothing / n_classes return targets4. 高级应用互信息与特征学习互信息I(X;Y)H(X)-H(X|Y)衡量两个变量间的统计依赖性。在现代深度学习中它被用于无监督表示学习如Deep InfoMax特征选择生成模型的评估互信息估计的PyTorch实现class MutualInfoEstimator(nn.Module): def __init__(self, input_dim): super().__init__() self.net nn.Sequential( nn.Linear(input_dim*2, 256), nn.ReLU(), nn.Linear(256, 1)) def forward(self, x, y): # 联合样本得分 joint torch.cat([x, y], dim1) t self.net(joint) # 边缘乘积样本得分 shuffled_y y[torch.randperm(y.size(0))] marginal torch.cat([x, shuffled_y], dim1) t_margin self.net(marginal) # 互信息下界估计 mi t.mean() - torch.log(t_margin.exp().mean() 1e-6) return mi在实际项目中理解这些基础概念如何转化为代码至关重要。例如在图像分类任务中交叉熵损失的选择直接影响模型收敛速度和最终性能。一个经验法则是对于类别不平衡数据使用加权交叉熵当需要比较两个完整分布时使用KL散度而在自监督学习中互信息最大化成为强大的学习目标。
本文还有配套的精品资源,点击获取
简介:基于STM32F103C8T6芯片的洗衣机主控源码,开箱即用,含完整Keil MDK-ARM工程(.uvprojx/.uvoptx)、标准外设库、启动文件及模块化驱动代码。功能覆盖按键输入识别、串…
📅 2026/7/6 9:25:17
本文还有配套的精品资源,点击获取
简介:这个PyTorch实现的Deeplabv3模型代码包,聚焦语义分割任务,提供完整可运行的网络结构定义(Deeplab_v3plus.py),支持灵活配置输入尺寸、类别数和主干网络…
📅 2026/7/6 9:25:17
本文还有配套的精品资源,点击获取
简介:一套开箱即用的MATLAB实现,专注压缩感知下的图像稀疏重建任务。包含三个主脚本:OMP_without_noise.m处理理想无噪声条件下的信号恢复;OMP_noisy_condition.m适配含高斯白噪声…
📅 2026/7/6 9:25:17
1. 项目概述:这不是学CSS,而是给HTML“动手术”的语言训练 Diazo Syntax Training——光看这个名字,很多人第一反应是“又一个前端框架?”或者“是不是某种CSS预处理器?”其实完全不是。Diazo 是一套独立于编程语言的、…
📅 2026/7/6 10:19:47
如何构建基于LCU API的英雄联盟数据查询工具:Seraphine完整指南 【免费下载链接】Seraphine 英雄联盟战绩查询工具 项目地址: https://gitcode.com/gh_mirrors/se/Seraphine
Seraphine是一个基于英雄联盟客户端API(LCU API)开发的桌面…
📅 2026/7/6 10:19:47
百度网盘提取码智能查询工具:3秒获取资源密码的免费解决方案 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey
还在为百度网盘提取码而烦恼吗?…
📅 2026/7/6 10:19:47
1. 这不是编程语言培训,而是规则引擎的“手写处方”训练很多人第一次看到“Diazo Syntax Training”这个标题,下意识会以为是某种新出的前端框架语法课,或者又一个需要背命令的CLI工具。其实完全不是——Diazo根本不是编程语言,它…
📅 2026/7/6 10:19:47
1. 项目概述:这不是“多站点管理”,而是用Lineage构建可复用的基础设施治理范式 “Multisite Management using Lineage (PC14 Recap)”这个标题乍看像一个运维工具配置笔记,但如果你在大型企业做过三年以上数据平台建设,第一反应…
📅 2026/7/6 10:19:47
1. 项目概述:一次生产环境更新发布的“外科手术式”演进在托管型生产站点的日常运维中,“发布新版本”从来不是点一下部署按钮那么简单。我做过七年的全栈运维和SaaS平台交付,亲手操盘过从日活500到200万用户的17个线上系统,最常被…
📅 2026/7/6 10:17:46
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray
你是否厌倦了Windows任务栏上密密麻麻的图标&…
📅 2026/7/6 0:01:19
1. 项目概述:一次对React Server Components核心安全机制的深度剖析 最近在安全研究圈里,CVE-2025-55182这个编号被频繁提及,它直指React生态中一个相对较新的概念——React Server Components(RSC)。作为一个长期关注…
📅 2026/7/6 0:01:20
星露谷物语终极MOD指南:5个步骤打造智能自动化农场 【免费下载链接】StardewMods Mods for Stardew Valley using SMAPI. 项目地址: https://gitcode.com/gh_mirrors/st/StardewMods
你是否厌倦了在星露谷物语中重复收割、加工、存储的繁琐操作?梦…
📅 2026/7/6 0:01:20
1. 项目背景与核心需求 在嵌入式系统开发中,快速精确的数据检索是一个常见但极具挑战性的需求。特别是在工业控制、医疗设备和物联网终端等场景下,系统往往需要在毫秒级时间内完成关键参数的读取和写入操作。传统基于Flash存储的方案存在擦写次数有限、操…
📅 2026/7/5 0:01:51
1. 工业电流环信号传输的基础认知在工业自动化领域,4-20mA电流环传输技术已经持续服役超过半个世纪。这种看似简单的信号传输方式之所以能经久不衰,核心在于其独特的抗干扰能力——电流信号在长距离传输时几乎不受线路电阻和电压波动的影响。我曾在化工厂…
📅 2026/7/6 6:10:21
最近在项目里尝试用 YOLO 做目标检测,从环境搭建到模型训练,再到推理部署,整个过程踩了不少坑。网上的资料虽然多,但要么版本老旧,要么步骤零散不成体系,对于刚入门的新手来说,很容易卡在某个环…
📅 2026/7/6 5:35:58
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/6 6:10:28
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/6 6:10:26
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/5 23:45:08