熵与交叉熵详解

前言

本文隶属于专栏《机器学习数学通关指南》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!

本专栏目录结构和参考文献请见《机器学习数学通关指南》


ima 知识库

知识库广场搜索:

知识库创建人
机器学习@Shockang
机器学习数学基础@Shockang
深度学习@Shockang

正文

在这里插入图片描述

📚 引言

交叉熵是机器学习和信息论中的基础概念,它们在模型优化、信息压缩和不确定性量化中扮演着核心角色。本文将系统地分析这两个概念,从理论到实践,帮助您构建完整的理解框架。

🔄 熵 (Entropy)

📝 定义

熵源于信息论,用于量化随机变量的不确定性或信息量。对于一个随机变量 X X X 的概率分布 P P P

H ( P ) = − ∑ i = 1 n p i log ⁡ 2 p i H(P) = -\sum_{i=1}^{n} p_i \log_2 p_i H(P)=i=1npilog2pi

其中 p i p_i pi 是事件 i i i 发生的概率。单位通常是比特(bit)(使用以2为底的对数时)。

🔑 核心特性

  • 非负性:熵始终 ≥ 0 \geq 0 0
  • 最大熵原理:均匀分布时熵最大
  • 最小熵原理:确定事件(概率为1)时熵为0
  • 加性:独立随机变量的联合熵等于各自熵之和

📊 直观理解

熵可以理解为平均信息量平均惊讶度

  • 高熵:事件发生很"意外",需要更多信息来描述系统
  • 低熵:事件发生很"平常",需要较少信息来描述系统

🌟 应用场景

  1. 决策树算法:通过信息增益(熵的减少)选择最优特征
  2. 数据压缩:信息熵决定了数据压缩的极限(香农极限)
  3. 密码学:评估密码的安全强度
  4. 特征选择:选择包含最多信息的特征

💻 Python代码实现

import numpy as npdef entropy(probabilities):"""计算信息熵"""# 过滤掉零概率(避免log(0))probabilities = np.array(probabilities)probabilities = probabilities[probabilities > 0]return -np.sum(probabilities * np.log2(probabilities))# 例子1: 均匀分布 [0.5, 0.5]
print(f"均匀二项分布的熵: {entropy([0.5, 0.5])}")  # 结果为1,即最大熵# 例子2: 确定事件 [1, 0]
print(f"确定事件的熵: {entropy([1, 0])}")  # 结果为0,即最小熵# 例子3: 偏斜分布 [0.9, 0.1]
print(f"偏斜分布的熵: {entropy([0.9, 0.1])}")  # 结果约为0.469,熵较低

❌ 交叉熵 (Cross-Entropy)

📝 定义

交叉熵用于衡量两个概率分布的差异,特别是真实分布 P P P 和预测/估计分布 Q Q Q 之间的差异:

H ( P , Q ) = − ∑ i = 1 n p i log ⁡ 2 q i H(P, Q) = -\sum_{i=1}^{n} p_i \log_2 q_i H(P,Q)=i=1npilog2qi

🔍 与熵的关系

  • P = Q P = Q P=Q 时, H ( P , Q ) = H ( P ) H(P, Q) = H(P) H(P,Q)=H(P)
  • 一般情况下, H ( P , Q ) ≥ H ( P ) H(P, Q) \geq H(P) H(P,Q)H(P)(信息不等式)
  • 交叉熵 = 熵 + KL散度: H ( P , Q ) = H ( P ) + D K L ( P ∣ ∣ Q ) H(P, Q) = H(P) + D_{KL}(P || Q) H(P,Q)=H(P)+DKL(P∣∣Q)

🚀 作为损失函数的优势

  1. 梯度稳定性:相比均方误差,避免了梯度消失问题
  2. 概率解释性:直接对应最大似然估计
  3. 对错误预测的高惩罚:预测值远离真实值时惩罚显著增加

💻 Python代码实现

import numpy as np
import matplotlib.pyplot as pltdef cross_entropy(y_true, y_pred):"""计算交叉熵"""# 防止数值不稳定y_pred = np.clip(y_pred, 1e-15, 1 - 1e-15)return -np.sum(y_true * np.log2(y_pred))# 二分类示例
y_true = np.array([1, 0])  # 真实标签:第一个类为正例# 不同预测概率的交叉熵
predictions = np.linspace(0.1, 0.9, 9)
ce_values = []for pred in predictions:y_pred = np.array([pred, 1-pred])  # 预测概率ce_values.append(cross_entropy(y_true, y_pred))print(f"预测概率为[{pred:.1f}, {1-pred:.1f}]时,交叉熵为: {ce_values[-1]:.3f}")# 可视化交叉熵随预测概率变化
plt.figure(figsize=(10, 6))
plt.plot(predictions, ce_values, 'b-o', linewidth=2)
plt.axvline(x=1.0, color='g', linestyle='--', label='理想预测')
plt.xlabel('预测正例的概率')
plt.ylabel('交叉熵')
plt.title('交叉熵随预测概率的变化')
plt.grid(True)
plt.show()

📊 实际应用比较

熵与交叉熵的区别

特征交叉熵
对象单个概率分布的不确定性两个分布的差异性
适用场景信息量度量、特征选择模型训练损失函数
最小值确定事件(某事件概率=1)时为0当预测分布=真实分布时取最小值
数学表达 − ∑ p i log ⁡ p i -\sum p_i \log p_i pilogpi − ∑ p i log ⁡ q i -\sum p_i \log q_i pilogqi
对称性不涉及(仅一个分布)非对称性( H ( P , Q ) ≠ H ( Q , P ) H(P, Q) \neq H(Q, P) H(P,Q)=H(Q,P)

🛠️ 实践应用

1. 决策树中的信息增益
# 计算信息增益
def information_gain(parent_entropy, feature_values, target_values):# 计算特征各取值的条件熵child_entropies = []weights = []unique_values = np.unique(feature_values)total_samples = len(target_values)for value in unique_values:indices = np.where(feature_values == value)[0]target_subset = target_values[indices]# 计算子集中不同类别的概率分布unique_targets = np.unique(target_subset)probs = [np.sum(target_subset == t) / len(target_subset) for t in unique_targets]# 计算条件熵child_entropy = entropy(probs)child_entropies.append(child_entropy)weights.append(len(indices) / total_samples)# 计算条件熵的加权平均conditional_entropy = np.sum(np.array(weights) * np.array(child_entropies))# 信息增益 = 父节点熵 - 条件熵return parent_entropy - conditional_entropy
2. 神经网络分类训练
# 基于TensorFlow/Keras的交叉熵损失示例
import tensorflow as tf
from tensorflow import keras
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split# 生成模拟数据
X, y = make_classification(n_samples=1000, n_classes=3, n_features=20, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 将类别转换为one-hot编码
y_train_onehot = keras.utils.to_categorical(y_train, 3)
y_test_onehot = keras.utils.to_categorical(y_test, 3)# 构建简单神经网络
model = keras.Sequential([keras.layers.Dense(64, activation='relu', input_shape=(20,)),keras.layers.Dense(32, activation='relu'),keras.layers.Dense(3, activation='softmax')  # 3个输出类别
])# 使用交叉熵作为损失函数
model.compile(optimizer='adam',loss='categorical_crossentropy',  # 多分类交叉熵metrics=['accuracy']
)# 训练模型
history = model.fit(X_train, y_train_onehot, epochs=10, validation_split=0.2, verbose=0)# 评估模型
test_loss, test_acc = model.evaluate(X_test, y_test_onehot)
print(f"测试精度: {test_acc:.4f}")
print(f"测试交叉熵损失: {test_loss:.4f}")

🔮 高级话题

1. 最大熵原理

最大熵原理是一种推断方法,当我们对未知分布只有部分信息时,应该选择满足已知条件下熵最大的分布,这样可以避免引入额外的不必要假设。

2. 信息瓶颈理论

信息瓶颈理论(Information Bottleneck Theory)是一种解释深度学习的理论框架,认为深度学习的目标是找到输入数据的一种表示,该表示:

  • 尽可能多地保留与目标相关的信息
  • 尽可能压缩输入的原始信息

3. 可变长度编码

熵确定了信息的最优编码长度。哈夫曼编码等算法利用了这一原理,为频率高的符号分配短码,频率低的符号分配长码。

🎯 小结

  • 是量化单一分布不确定性的基础度量
  • 交叉熵衡量两个分布的差异,是机器学习中常用的损失函数
  • 理解这两个概念有助于理解信息论和机器学习中的许多算法和技术
  • 实际应用中,交叉熵损失函数在分类任务中表现优异,尤其是对于概率预测问题

📖 延伸阅读

  1. 香农的信息论原始论文
  2. KL散度及其在变分推断中的应用
  3. 最大熵模型与其在自然语言处理中的应用
  4. 互信息与特征选择
  5. 深度学习中的信息瓶颈理论

希望这篇文章能帮助你理解熵和交叉熵这两个重要概念。在机器学习的旅途中,掌握这些基础数学工具将使你事半功倍!🚀

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/897446.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

程序化广告行业(3/89):深度剖析行业知识与数据处理实践

程序化广告行业(3/89):深度剖析行业知识与数据处理实践 大家好!一直以来,我都希望能和各位技术爱好者一起在学习的道路上共同进步,分享知识、交流经验。今天,咱们聚焦在程序化广告这个充满挑战…

探索在生成扩散模型中基于RAG增强生成的实现与未来

概述 像 Stable Diffusion、Flux 这样的生成扩散模型,以及 Hunyuan 等视频模型,都依赖于在单一、资源密集型的训练过程中通过固定数据集获取的知识。任何在训练之后引入的概念——被称为 知识截止——除非通过 微调 或外部适应技术(如 低秩适…

DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加列宽调整功能,示例Table14基础固定表头示例

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…

取反符号~

取反符号 ~ 用于对整数进行按位取反操作。它会将二进制表示中的每一位取反,即 0 变 1,1 变 0。 示例 a 5 # 二进制表示为 0000 0101 b ~a # 按位取反,结果为 1111 1010(补码表示) print(b) # 输出 -6解释 5 的二…

论文阅读分享——UMDF(AAAI-24)

概述 题目:A Unified Self-Distillation Framework for Multimodal Sentiment Analysis with Uncertain Missing Modalities 发表:The Thirty-Eighth AAAI Conference on Artificial Intelligence (AAAI-24) 年份:2024 Github:暂…

WBC已形成“东亚-美洲双中心”格局·棒球1号位

世界棒球经典赛(WBC)作为全球最高水平的国家队棒球赛事,参赛队伍按实力、地域和历史表现可分为多个“阵营”。以下是基于历届赛事(截至2023年)的阵营划分及代表性队伍分析: 第一阵营:传统豪强&a…

django中路由配置规则的详细说明

在 Django 中,路由配置是将 URL 映射到视图函数或类视图的关键步骤,它决定了用户请求的 URL 会触发哪个视图进行处理。以下将详细介绍 Django 中路由配置的规则、高级使用方法以及多个应用配置的规则。 基本路由配置规则 1. 项目级路由配置 在 Django 项目中,根路由配置文…

【报错】微信小程序预览报错”60001“

1.问题描述 我在微信开发者工具写小程序时,使用http://localhost:8080是可以请求成功的,数据全都可以无报错,但是点击【预览】,用手机扫描二维码浏览时,发现前端图片无返回且报错60001(打开开发者模式查看日…

栅格裁剪(Python)

在地理数据处理中,矢量裁剪栅格是一个非常重要的操作,它可以帮助我们提取感兴趣的区域并获得更精确的分析结果。其重要性包括: 区域限定:地球科学研究通常需要关注特定的地理区域。通过矢量裁剪栅格,我们可以将栅格数…

【无人机路径规划】基于麻雀搜索算法(SSA)的无人机路径规划(Matlab)

效果一览 代码获取私信博主基于麻雀搜索算法(SSA)的无人机路径规划(Matlab) 一、算法背景与核心思想 麻雀搜索算法(Sparrow Search Algorithm, SSA)是一种受麻雀群体觅食行为启发的元启发式算法&#xff0…

MySQL数据库安装及基础用法

安装数据库 第一步:下载并解压mysql-8.4.3-winx64文件夹 链接: https://pan.baidu.com/s/1lD6XNNSMhPF29I2_HBAvXw?pwd8888 提取码: 8888 第二步:打开文件中的my.ini文件 [mysqld]# 设置3306端口port3306# 自定义设置mysql的安装目录,即解…

软件工程:软件开发之需求分析

物有本末,事有终始。知所先后,则近道矣。对软件开发而言,软件需求乃重中之重。必先之事重千钧,不可或缺如日辰。 汽车行业由于有方法论和各种标准约束,对软件开发有严苛的要求。ASPICE指导如何审核软件开发&#xff0…

正则表达式,idea,插件anyrule

​​​​package lx;import java.util.regex.Pattern;public class lxx {public static void main(String[] args) {//正则表达式//写一个电话号码的正则表达式String regex "1[3-9]\\d{9}";//第一个数字是1,第二个数字是3-9,后面跟着9个数字…

RISC-V医疗芯片工程师复合型转型的路径与策略

从RISC-V到医疗芯片:工程师复合型转型的路径与策略 一、引言 1.1 研究背景 在科技快速发展的当下,芯片技术已然成为推动各行业进步的核心驱动力之一。其中,RISC-V 架构作为芯片领域的新兴力量,正以其独特的优势迅速崛起,对整个芯片产业的格局产生着深远影响。RISC-V 架…

【设计模式】掌握建造者模式:如何优雅地解决复杂对象创建难题?

概述 将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。 分离了部件的构造(由Builder来负责)和装配(由Director负责)。 从而可以构造出复杂的对象。这个模式适用于:某个对象的构建过程复杂的情况。 由于实现了构建和装配的解耦。…

量子计算对区块链技术的影响:革新与挑战

量子计算对区块链技术的影响:革新与挑战 大家好,我是你们的技术伙伴Echo_Wish。今天我们来探讨一个颇具前沿性的话题——量子计算对区块链技术的影响。量子计算作为新一代计算技术,其强大的计算能力为各个领域带来了革新。然而,量…

【Java代码审计 | 第八篇】文件操作漏洞成因及防范

未经许可,不得转载。 文章目录 文件操作漏洞文件读取漏洞基于 InputStream 的读取基于 FileReader 的读取 文件下载漏洞文件删除漏洞防范 文件操作漏洞 分为文件读取漏洞、文件下载漏洞与文件删除漏洞。 文件读取漏洞 在Java中,文件读取通常有两种常见…

与rkipc通信

rkipc的通信方式 在ipcweb中,程序是通过/var/tmp/rkipc和rkipc进行通信,并且网络和客户端的函数封装在luckfox-pico/project/app/ipcweb/ipcweb-backend/src/socket_client文件夹中, client.cpp是客户端命令 socket.cpp是网络命令 编写rkip…

NLP常见任务专题介绍(2)-多项选择任务(MultipleChoice)训练与推理模板

一、 使用 BigBird 进行多项选择任务训练与推理 本示例展示如何使用 BigBirdForMultipleChoice 训练一个多项选择模型,适用于考试答题、阅读理解、常识推理等任务。 1️⃣ 任务描述 目标:给定一个问题和多个选项,模型预测正确答案。 数据格式:输入包含 (问题, 选项1, 选项…

【论文解读】MODEST 透明物体 单目深度估计和分割 ICRA 2025

MODEST是一种用于透明物体的单目深度估计和分割的方法,来自ICRA 2025。 它通过单张RGB图像作为输入,能够同时预测透明物体的深度图和分割掩码。 由深度图生成点云数据,然后采用GraspNet生成抓取位姿,开展透明物体抓取实验。 论文…