“交叉熵”如何做损失函数?打包理解“信息量”、“比特”、“熵”、“KL散度”、“交叉熵”

本文深入探讨了交叉熵作为损失函数的原理,解释了信息量、熵、KL散度和交叉熵之间的关系。通过最大似然估计和交叉熵的比较,揭示了两者在机器学习中的等价性。文章介绍了熵作为衡量概率分布混乱程度的指标,以及如何通过KL散度和交叉熵评估两个概率分布的相似性。

【本文内容是对下面视频的整理和修正】

“交叉熵”如何做损失函数?打包理解“信息量”、“比特”、“熵”、“KL散度”、“交叉熵”_哔哩哔哩_bilibili​www.bilibili.com/video/BV15V411W7VB/正在上传…重新上传取消https://www.bilibili.com/video/BV15V411W7VB/

1.“最大似然估计”为什么又叫“交叉熵”

上一篇文章《 “损失函数”是如何设计出来的?》已经介绍过,损失函数到底是什么,以及它在机器学习中的作用。在其中,我们还介绍了设计损失函数的两种常用方法,一个是“最小二乘法”,一个是“最大似然估计”,而且还介绍了这两种方法某种程度上来说是等价的。

感兴趣的话,可以去看一下。

这一次,我想分享一个我自己在学习是产生的疑问,我估计很多人在学习损失函数的时候都会产生一样的疑问。
下面这个是吴恩达大佬在他的课程里面写出来的最大似然估计法的公式,y是标签值, \hat{y} 是神经网络的估计值。38ef616fd3dba653d3b006774ed866f4.png

这个的确是用最大似然估计法写出来的损失函数,但是,只要你对损失函数有了解,就可能见到过,同样的这个公式也叫交叉熵,或者说是最小交叉熵方法

这就是有疑问的地方了,同样一个东西,为什么既可以叫这个名字,又可以叫那个名字。如果,两个名字相似也就算了,关键是“最大似然估计”和“交叉熵”两个没有丝毫相似的地方,为什么可以表示同一种东西呢?

这就需要搞明白交叉熵到底是什么东西了,等把它搞明白之后,你就会明白,交叉熵和最大似然估计,虽然它们设计损失函数的思路不同,但是它们却是殊途同归,本质上是相同的。

为了能搞明白什么是交叉熵,在这篇文章里,我们将会一起了解如下内容:

  1. 如何比较两个不同的概率分布?
  2. 什么是信息量?信息量是如何定义出来的?
  3. 什么是熵?
  4. 什么是KL散度(相对熵)和交叉熵?
  5. 用交叉熵如何设计损失函数?真的和最大似然估计法没有区别吗?


2.熵可以让不同的类型的概率分布实现公度

还是拿分类问题来举例,给了一堆猫狗的照片要把它们正确的分开,猫狗的区别这是有一个客观的规律的。我们上一次也讲过了,这个客观的规律,我们可以用函数来表示,也可以概率分布来表示。

假如说,这个真实的规律我们可以用P(y,x|真实规律)来表示,其中y是判断结果,x是输入的图片,如果以真实规律作为条件,那么输入的图片一定能准确地判断出是猫还是狗。那机器学习呢?其实就是在计算机里面尽可能没有差别地把这个P(y,x|真实规律)概率分布学出来。

这里就出现一个关键问题了,假如说机器学习算法做出了一个猜测,P(y,x|猜测规律)。我们应该如何判断,这个猜测出来的概率分布与表示真实规律的概率分布是不是一样的?

其实不只是是判断出来“一样”还是“不一样”就可以了,还需要知道它们之间的差距有多大,这样才能帮助机器学习的算法调整和修改,越来越接近真实规律。

那么如何才能对两个概率分布做出比较呢?

如果是同一类的概率分布的话,那还好办。比如说,都是正态分布,影响分布的参数就两个,一个均值一个方差。只需要判断真实规律和猜测规律里面这两个参数是不是一样,不一样的话看看参数差了多少,就行了。

但真实的情况却不是这么简单,真实规律表现出来是什么样子的,我们根本不知道,别说我们根本无法确定真实规律那个概率分布到底是什么类型的,就算是确定了,决定它的参数也可能有很多,无法进行简单地比较。

于是,比较两个概率分布的最大障碍出现了。两个不同类型的概率分布,它们无法直接公度

那怎么办呢?有什么方法可以让无法公度的两个概率分布,变得可以公度吗?

这件事上,虽然不能一下子想到解决方法,但是说到公度的话,我们的世界里有一个特别伟大的系统,通过它可以让许多本来无法公度的事情变得可以公度,这或许可以给我们带来启发。

这个系统就是货币系统,它让许多无法公度的事情,都可以变成一个价格数字,通过价格就能进行比较了。

就比如,一个房子,你家里的老房子,在里面有几代人的记忆,对于你来说这个房子是价值很大的。但是,对于买房的人来说,这并没有什么特殊的,他心中这个房子的价值一定不如你。这本来是一个无法公度的事情,因为你们选择的根本就是不同的价值体系。

不过没有关系,只要把房子放到货币体系里面,货币体系就可以完成对这个房子价值的评估,在你和买房人之间寻找到一个价值平衡点。

虽然价格体系的运行方式很复杂,但是有一点是能给我们启发的,那就是不论是什么东西,它都可以把它们换成一串数字,变成数字之和就可以进行公度了。

那么不同类型的概率分布,它们是不是也可以有类似的方法,先把它们转换成一串数字,将这个数字作为他们进行公度的代表。

还真有,这个概率分布的“货币体系”就是熵

### 数学定义与直观理解 KL(Kullback-Leibler Divergence)和交叉熵(Cross-Entropy)都是用于衡量两个概率分布之间差异的工具,但它们在数学定义和实际应用场景上有显著的不同。 KL衡量的是两个概率分布 $ P $ 和 $ Q $ 之间的差异,其定义为: $$ D_{KL}(P \parallel Q) = \sum_{x} P(x) \log \frac{P(x)}{Q(x)} $$ 这个公式可以拆解为两个部分:一个是信息 $ H(P) $,另一个是交叉熵 $ H(P, Q) $。具体来说,KL可以表示为: $$ D_{KL}(P \parallel Q) = H(P, Q) - H(P) $$ 其中 $ H(P) $ 是真实分布的信息,而 $ H(P, Q) $ 是交叉熵,表示使用 $ Q $ 编码 $ P $ 所需的额外信息量[^1]。 交叉熵的定义如下: $$ H(P, Q) = -\sum_{x} P(x) \log Q(x) $$ 它直接衡量了用近似分布 $ Q $ 对真实分布 $ P $ 进行编码时所需的平均比特数。在机器学习中,交叉熵常被用作损失函数,特别是在分类任务中,用来衡量模型输出的概率分布与真实标签之间的差异[^3]。 ### 实际应用中的区别 尽管KL交叉熵都用于衡量两个分布之间的差异,但在实际应用中,它们的用途有所不同。KL主要用于理论分析,例如在知识蒸馏中,KL可以帮助模型通过温参数调节预测分布的平滑程,从而更有效地传递知识[^2]。 相比之下,交叉熵深度学习中更为常见,尤其是在分类问题中。交叉熵损失函数可以直接作为优化目标,帮助模型调整参数以更好地逼近真实标签分布。例如,在二分类问题中,交叉熵损失函数通常结合Sigmoid激活函数使用;而在多分类问题中,则常与SoftMax函数搭配,以便将模型输出转换为各个类别的概率估计,并据此计算损失[^3]。 下面是一个简单的二分类交叉熵损失函数实现示例: ```python import numpy as np def binary_cross_entropy(y_true, y_pred): # 避免log(0)导致无穷大 epsilon = 1e-15 y_pred = np.clip(y_pred, epsilon, 1 - epsilon) return -(y_true * np.log(y_pred) + (1 - y_true) * np.log(1 - y_pred)) ``` 而对于多分类情况,可以定义如下形式的交叉熵损失函数: ```python def categorical_cross_entropy(y_true, y_pred): # 同样避免log(0) epsilon = 1e-15 y_pred = np.clip(y_pred, epsilon, 1.) return -np.sum(y_true * np.log(y_pred)) ``` 这些代码片段展示了如何手动实现交叉熵损失函数,用于评估模型预测结果与实际标签之间的差距。在训练过程中,优化算法会利用这些损失值来更新模型参数,使得模型能够逐渐减少预测误差,达到更好的性能表现。 ### 数值稳定性与优化 在实际应用中,为了防止数值不稳定的问题,如对零取对数,通常会对预测值进行裁剪处理。例如,在上述代码中,我们引入了一个小常数 `epsilon` 来确保预测值不会接近于零或一,从而避免出现无穷大的对数值。 此外,KL交叉熵在优化过程中也有不同的表现。由于KL包含了信息的部分,它在优化时可能需要更多的计算资源。而交叉熵则因为其直接的梯计算方式,在深度学习中更为常用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值