信息熵、相对熵和交叉熵是机器学习中非常重要的概念,它们都是用来衡量不同概率分布之间的差异。在这篇博客中,我们将分别介绍这些概念,并用通俗易懂的语言以及实例的方式来阐述它们的含义。

信息熵

信息熵(Entropy)是衡量信息不确定性的度量,由于这个概念最早是由香农提出的,因此也被称为香农熵。假定随机变量X的概率密度函数为p(x),则其信息熵定义为:

H ( X ) = − ∑ x ∈ X p ( x ) log ⁡ 2 p ( x ) H(X)=-\sum_{x \in X} p(x) \log _2 p(x) H(X)=−∑x∈X​p(x)log2​p(x)

其中,log的底数通常是2,这时单位为比特。如果底数是e,那么单位就是自然单位(nats)。香农熵用来描述一个系统的总体不确定性,这个概念并不局限于信息论领域,而是可以应用于其他科学领域中某个系统的度量。

为了更直观地理解信息熵,我们来看一个例子。假设我们有一个硬币,它有两个面,正面和反面,每一面朝上的概率都是0.5。那么这个硬币的信息熵是多少呢?

H = − ( 0.5 ∗ log ⁡ 2 ( 0.5 ) + 0.5 ∗ log ⁡ 2 ( 0.5 ) ) = 1 H=-\left(0.5 * \log _2(0.5)+0.5 * \log _2(0.5)\right)=1 H=−(0.5∗log2​(0.5)+0.5∗log2​(0.5))=1

可以发现,这个硬币的信息熵是1,这是由于这个硬币是一个完全的随机变量。它的随机程度是最大的,因此信息熵也是最大的,而且取值范围是[0, 1]。在信息熵的计算中,概率越大,对应的熵值就越小,反之亦是。

相对熵(KL散度)

相对熵(KL散度,Kullback-Leibler divergence)是衡量两个概率分布之间差异的度量。在信息论中,它也称为信息散度,是另一位信息论的著名学者Kullback-Leibler提出的。设有两个离散型随机变量X和Y,它们的概率分别为p(x)和q(x),则相对熵定义为:

D K L ( P ∥ Q ) = ∑ x ∈ X p ( x ) log ⁡ 2 ( p ( x ) q ( x ) ) D_{K L}(P \| Q)=\sum_{x \in X} p(x) \log _2\left(\frac{p(x)}{q(x)}\right) DKL​(P∥Q)=∑x∈X​p(x)log2​(q(x)p(x)​)

其中,相对熵的值越小,说明两个概率分布越接近。相对熵可以用来衡量模型的预测结果与实际情况之间的差异。实践中,我们通常把相对熵当成损失函数,将其最小化。

为了更好地理解相对熵,我们还是来看一个例子。假设有一组对数价格的真实分布p(x),和由一个预测模型所得到的价格分布q(x)。我们想要衡量这两个分布之间的差异程度,这时就可以使用相对熵:
D K L ( p ∥ q ) = ∑ x p ( x ) log ⁡ ( p ( x ) q ( x ) ) D_{K L}(p \| q)=\sum_x p(x) \log \left(\frac{p(x)}{q(x)}\right) DKL​(p∥q)=∑x​p(x)log(q(x)p(x)​)
通过计算得出的结果越大,则说明分布之间的差异越大,结果越小,则说明分布之间的差异越小。

交叉熵

交叉熵(Cross entropy)与相对熵非常相似,也是用来衡量两个概率分布之间的差异。它同样可以用来衡量模型的预测结果与实际情况之间的差异。对于两个离散型随机变量X和Y,它们的概率分别为p(x)和q(x),则交叉熵定义为:

H ( P , Q ) = − ∑ x p ( x ) log ⁡ 2 q ( x ) H(P, Q)=-\sum_x p(x) \log _2 q(x) H(P,Q)=−∑x​p(x)log2​q(x)

从公式中可以看出,交叉熵的计算与信息熵的计算非常相似,只是概率的来源不同。在交叉熵的计算中,概率来自真实概率分布p(x)和预测概率分布q(x)。

与相对熵的区别在于,相对熵是以真实分布为基础,衡量预测分布的不确定性,而交叉熵则是以预测分布为基础,衡量真实分布的不确定性。

作为loss function,交叉熵的主要作用是衡量神经网络的输出分布与真实分布之间的差异度量,从而优化神经网络的参数。交叉熵作为loss function的公式为:

L ( θ ) = − 1 N ∑ i = 1 N ∑ j = 1 C y i , j log ⁡ f ( x i ; θ ) j + ( 1 − y i , j ) log ⁡ ( 1 − f ( x i ; θ ) j ) L(\theta)=-\frac{1}{N} \sum_{i=1}^N \sum_{j=1}^C y_{i, j} \log f\left(\mathbf{x}_i ; \theta\right)_j+\left(1-y_{i, j}\right) \log \left(1-f\left(\mathbf{x}_i ; \theta\right)_j\right) L(θ)=−N1​∑i=1N​∑j=1C​yi,j​logf(xi​;θ)j​+(1−yi,j​)log(1−f(xi​;θ)j​)

其中 θ \theta θ为神经网络中的参数, N N N为样本数量, C C C为分类数量, y i , j y_{i,j} yi,j​代表第 i i i个样本的实际标签, f ( X i , θ ) j f(X_i,\theta)_j f(Xi​,θ)j​代表第i个样本在第 j j j个分类上的预测值, l o g log log表示自然对数函数
交叉熵损失函数可以看作是二元交叉熵和多元交叉熵的一个统一形式。当 C = 2 C=2 C=2时,该公式为二元交叉熵公式;当 C > 2 C>2 C>2时,这个公式为多元交叉熵公式。

交叉熵优缺点

在分类问题中,交叉熵作为loss function的优点包括:

交叉熵越小,说明模型预测的结果与真实结果之间的差异度量越小,从而可以更好地评估模型的性能。
与均方误差(Mean Square Error,MSE)相比,交叉熵能够更好地处理分类问题,因为它能够更好地量化分类问题中的不确定性。
交叉熵可以避免梯度消失的问题,因为当目标值与预测值相差很大时,交叉熵的梯度相对于均方误差的梯度更大。
交叉熵是实际应用中使用最广泛的分类损失函数之一,在训练神经网络模型时具有良好的收敛性和鲁棒性。

尽管交叉熵作为loss function有诸多优点,但也具有相应的缺点和适用范围:

计算交叉熵需要计算softmax函数,所以在处理大规模的分类问题时,计算代价较高。
交叉熵对噪声敏感,训练过程过程中可能会出现过拟合的现象。
交叉熵在处理稀疏标签数据时可能会出现问题,需要进行特殊处理。

总的来说,交叉熵是一种优秀的分类损失函数,可以适用于各种分类问题,但在不同的问题和场景中,需要根据实际情况进行使用。

交叉熵实现

交叉熵的python实现比较简单,下面是一个简单的示例代码:

import numpy as np
def cross_entropy_loss(y_pred, y_true):"""计算交叉熵损失函数:param y_pred: 模型预测值:param y_true: 真实值:return: 损失"""num_samples = y_pred.shape[0]epsilon = 1e-12# 将预测值限制在一个较小的范围内,避免取对数时出现错误y_pred = np.clip(y_pred, epsilon, 1. - epsilon)# 计算交叉熵cross_entropy = -np.log(y_pred[np.arange(num_samples), y_true])# 计算平均损失loss = np.sum(cross_entropy) / num_samplesreturn loss

其中,y_pred和y_true分别是模型的输出和真实标签,这里假设y_pred是一个二维数组,每一行代表一个样本的输出,每一列对应于不同的类别预测结果的概率值。y_true是一维数组,每个元素代表对应样本的真实标签。

在计算交叉熵时,需要将预测值限制在一个较小的范围内,避免取对数时出现错误。实现时,我们使用了numpy库,使用了np.clip函数对y_pred中的值进行限制。
最后,我们对每个样本的交叉熵损失进行求和,并除以样本数量得到平均损失。
除了这个简单实现,还有许多其他的交叉熵loss的实现方式,例如使用tensorflow或者pytorch。

总结

信息熵、相对熵和交叉熵是机器学习中非常重要的概念,它们都是用来衡量不同概率分布之间的差异。在实践中,我们通常使用交叉熵作为损失函数,将其最小化,从而提高模型的预测准确率。这篇博客中,我们简要介绍了这些概念的含义,从而使读者更好地理解它们在机器学习中的作用。

从信息熵、相对熵到交叉熵损失函数相关推荐

  1. Lesson 4.2 逻辑回归参数估计:极大似然估计、相对熵与交叉熵损失函数

    文章目录 一.逻辑回归参数估计基本思路 1. 构建损失函数 2. 损失函数求解 二.利用极大似然估计进行参数估计 三.熵.相对熵与交叉熵 1. 熵(entropy)的基本概念与计算公式 2. 熵的基本 ...

  2. 深度学习 交叉熵损失函数

    交叉熵损失函数 前言 交叉熵损失函数 信息量 信息熵 交叉熵 求导过程 应用 扩展 Binary_Crossentropy 均方差损失函数(MSE) 前言 深度学习中的损失函数的选择,需要注意一点是直 ...

  3. 信息熵、相对熵和交叉熵

    此文章为了解交叉熵的小记,具体详细讲解可移至文末处参考文章 信息熵 信息的本质:信息是用来消除随机不确定性的东西: 信息量的大小与信息发生的概率成反比.概率越大,信息量越小.概率越小,信息量越大. 某 ...

  4. 信息熵,条件熵,相对熵,交叉熵

    转自详解机器学习中的熵.条件熵.相对熵和交叉熵 信息是一个很抽象的概念,百度百科中的定义: 信息是指音讯.消息.通讯系统传输和处理的对象,泛指人类社会传播的一切内容 那信息可以被量化么?可以的!香农提 ...

  5. 信息熵、相对熵、交叉熵公式及tensorflow代码

    最近在学习卷积神经网络,其中遇到了信息熵和交叉熵,对此理解的一知半解,现记录一下信息熵.相对熵.交叉熵公式及tensorflow代码,供以后参考. 假设概率分布中,真实分布:  假设分布: 信息量公式 ...

  6. 交叉熵损失函数原理详解,KL散度

    https://blog.csdn.net/b1055077005/article/details/100152102 https://blog.csdn.net/tsyccnh/article/de ...

  7. 交叉熵损失函数原理详解

    交叉熵损失函数原理详解 之前在代码中经常看见交叉熵损失函数(CrossEntropy Loss),只知道它是分类问题中经常使用的一种损失函数,对于其内部的原理总是模模糊糊,而且一般使用交叉熵作为损失函 ...

  8. 史上最全交叉熵损失函数详解

    在我们自学神经网络神经网络的损失函数的时候会发现有一个思路就是交叉熵损失函数,交叉熵的概念源于信息论,一般用来求目标与预测值之间的差距.比如说我们在人脑中有一个模型,在神经网络中还有一个模型,我们需要 ...

  9. 损失函数——交叉熵损失函数(CrossEntropy Loss)

    损失函数--交叉熵损失函数(CrossEntropy Loss) 交叉熵函数为在处理分类问题中常用的一种损失函数,其具体公式为: 1.交叉熵损失函数由来 交叉熵是信息论中的一个重要概念,主要用于度量两 ...

最新文章

  1. oracle enterprise linux 5.7,Red Hat Enterprise Linux 5.7 安装Oracle数据库
  2. HTML canvas font 属性
  3. 1.3 Quick Start中 Step 3: Create a topic官网剖析(博主推荐)
  4. Python: sklearn库——数据预处理
  5. Acwing第 20 场周赛【未完结】
  6. Python去线性化趋势
  7. Hibernate面试题分析
  8. python写文件格式转换程序_python实现txt文件格式转换为arff格式
  9. Python库安装路径查询MAC,也可以看到pip到底是给哪个版本的Python安装库了
  10. 苹果三星手机被诉辐射超标;淘集集启动破产清算;Drupal 8.8.0 发布 | 极客头条...
  11. 排序算法入门之堆排序
  12. nodejs爬虫与python爬虫_不再羡慕python,nodejs爬虫撸起袖子就是干,爬取宅男女神网大姐姐的高清图片!...
  13. VSCode创建Vue项目完整教程
  14. WPF Blend 自定义控件
  15. 仲阳天王星 | 八载同行 启航向星
  16. 创建一个字体wx.Font
  17. RTFM — man
  18. JAVA高级基础(26)---File的常用方法
  19. java前端页面调用webservice_一个简单的Webservice的demo(中)_前端页面调用
  20. oracle v backup,睿备份oracle下载

热门文章

  1. 关于网站多语言的实现
  2. 论文阅读:Keyphrase Extraction for N-best Reranking in Multi-Sentence Compression
  3. mysql完整性约束
  4. MySQL之完整性约束
  5. JavaScript-->流程控制语句*笔记
  6. 为什么不应该大面积推广双壁波纹管来做排水管道?
  7. react学习17-React高阶组件
  8. 新手购买基金的经验教训
  9. Vue 页面启动时 input 框获得聚焦 focus
  10. kali-Linux-2021.4a 修改系统语言