前言
熵、KL散度、交叉熵、损失函数,它们彼此之间是层层递进的关系。
熵的提出用于衡量系统的混乱程度,香农熵是熵在信息论中的引入
KL散度基于熵的概念,用于衡量两个概率分布的差异
交叉熵是一种特殊情况的KL散度,交叉熵减去一个常数项熵就等于KL散度
(有时候写的是交叉熵-常数项的熵=KL散度)
熵
关于熵的解释,我推荐这篇博客,香农熵-CSDN博客
总结一下:
1.熵的概念:
一个系统中的粒子具有很大概率重新排列的可能性叫做系统具有很大的熵(也就是常说混乱程度越高,系统的熵越高)
但是按照前面的理解的话,就可以更好的理解熵的计算,熵的计算定义为某种特定排列的概率。
试想一下,要是某种排列的概率很小(熵取负),系统就是越混乱的,熵就是越大的,也就符合上面的定义。
而香农熵就是美国数学家将熵引入信息论中,用来衡量信息的不确定性,并将它命名为 “香农熵” 或者 “信息熵”。所以,熵和香农熵就是在一个概念在不同领域的叫法罢了。
2.公式的推导:
首先是普通的排列组合计算过程,某种排列的概率由p*p*p*(1-p)得到
根据这个公式,我们就可以计算不同系统中某一种排列的概率作为这个系统混乱程度的一种衡量方式(不同系统p不同)
然后,使用数学技巧,让连乘变为连加(用对数的方法可以做到)
log(ab)=loga+logb,由于a,b值是一个概率,得到的结果是负数,因此结果取负,得到正数
最后对结果规范化,取平均,得到公式:
前面的平均是p的原因?
一方面可以从前面的连接中对公式推导得到,
一方面理解为一种结果发生的可能性是p,这个可能性就是这个事件对整个系统熵的贡献为p
KL散度(相对熵)、交叉熵
KL散度(相对熵)
1.KL散度的概念:
是两个概率分布间差异的非对称性度量,KL散度也被称为相对熵。
通俗的说法:KL散度是用来衡量同一个随机变量的两个不同分布之间的距离
更正一下,KL散度是衡量差异性,衡量两个分布之间的不相似性(不能叫度量距离)
它的这个距离一般用于衡量两个分布之间的差异
2.KL散度公式如下,其中P( p) 是真实分布,Q(q)是用于拟合P的分布,KL散度越小,Q越接近于P
3.KL散度的特性:
(1)分对称性:DKL(p||q) ≠ DKL(q||p),只有概率分布完全一样时才相等
(2)非负性:DKL(p||q)恒大于0,只有概率分布完全一样时才等于0
概率分布完全一样才相等,KL散度需要说明清楚是p对q还是q对p
例子见参考资料一篇文章彻底搞懂熵、信息熵、KL散度、交叉熵、Softmax和交叉熵损失函数_信息熵求和-CSDN博客
注意DKL(P||Q)是从P角度看Q,两个分布之间的
交叉熵
交叉熵是则是KL散度和熵的结合
KL散度=交叉熵-信息熵 Dkl(P||Q)=H(P,Q)-S(P)
根据前面的公式,把KL散度和信息熵加起来,也可以化简得到交叉熵的公式
注意,当P是一个常量的时候,优化交叉熵=优化KL散度
因为训练的时候P是相对于给定的训练数据是固定的
损失函数
为什么使用交叉熵作为损失函数?而不是KL散度?
实际上有时候也用KL散度(在一些特殊情况下),但是由于有真实的标签,所以损失函数的计算用的是交叉熵损失函数
当然,损失函数有很多种,这里只是对比交叉熵损失函数的情况
在实际应用中,交叉熵损失函数还需要结合softmax一起使用,进行归一化,将数值转化为概率
在实际模型训练中,我们希望学习到的模型的分布P(model)和真实数据的分布P (real) 越接近越好
但我们没有真实数据的分布,那么只能退而求其次,希望模型学到的分布和训练数据的分布 P(training)尽量相同,也就是把训练数据当做模型和真实数据之间的代理人。
也就是P(model)和P(training)之间不断接近,
- 模型的训练数据真实分布就是P(training),我们近似把他看为真实的数据分布P(real)
- 从模型中训练得到的得到的分布就是P(model)
所以整个模型训练的过程中,就是不断在更新P(model),使得这两个分布之间的距离更小
由于P(training)是固定的,所以P的熵是一个常量,优化KL散度和交叉熵都是相同的
H(P(training,P(model))等价于DKL(P(training || P(model))
反过来不可,
一是S(model)不是常量,不可等价
二是因为KL(P(training)∣∣P(model))指的是站在P(training)角度(假设不变)还需要多少额外信息来表示P(model),这是合理的,因训练数据的分布是固定的。但若反过来,KL(P(model)∣∣P(training)),那就是站在假设模型分布不变的情况下,求还需要额外多少的信息来表示P(training)。 我是没有做过实验,但根据定义,若反着来做监督学习,那么应该是无法收敛的。反过来看是无法解释的。
一些常见的损失函数:
-
均方误差(Mean Squared Error, MSE): 用于回归问题,计算预测值与实际值之间差的平方的平均值。
MSE=1/n∑i=1n(yi−y^i)2MSE=n1∑i=1n(yi−y^i)2
-
平均绝对误差(Mean Absolute Error, MAE): 类似于MSE,但是计算的是预测值与实际值之间差的绝对值的平均值。
MAE=1n∑i=1n∣yi−y^i∣MAE=n1∑i=1n∣yi−y^i∣
-
Hinge损失(Hinge Loss): 用于支持向量机(SVM)和其他线性分类器,衡量的是分类间隔的违反程度。
L=∑i=1nmax(0,1−yi⋅y^i)L=∑i=1nmax(0,1−yi⋅y^i)
-
对数损失(Log Loss): 对数损失是交叉熵损失的另一种称呼,用于概率预测。
-
指数损失(Exponential Loss): 用于AdaBoost算法,与Hinge损失类似,但是当预测错误时,损失指数增长。
L=∑i=1ne−yi⋅y^iL=∑i=1ne−yi⋅y^i
-
0-1损失(0-1 Loss): 用于分类问题,当预测错误时损失为1,否则为0。
-
Categorical Cross-Entropy: 用于多分类问题,是交叉熵损失的一种形式。
-
Binary Cross-Entropy: 用于二分类问题,是交叉熵损失的一种形式。
-
平方对数损失(Squared Logarithmic Loss): 对数损失的平方版本,用于某些特定的问题,如保险精算。
-
Focal Loss: 用于解决类别不平衡问题,特别是在目标检测和显著性检测中。
-
IoU Loss(Intersection over Union Loss): 用于对象检测和分割问题,衡量预测框与真实框之间的重叠程度。
-
Dice Loss: 用于医学图像分割,是一种基于集合的相似度度量。
-
Triplet Loss: 用于训练深度学习模型进行相似性度量,特别是在度量学习中。
-
Cosine Similarity Loss: 用于度量预测向量和真实向量之间的余弦相似度。