原文:https://blog.csdn.net/tsyccnh/article/details/79163834 (有修改)
信息论
交叉熵是信息论中的一个概念
下面将介绍信息量、熵、相对熵(KL散度)、交叉熵这四个概念。
1. 信息量
假设是一个离散型随机变量,其取值集合为,其概率分布函数,
则定义事件的信息量为:
图像如下:
横轴:; 纵轴:
【
(横轴代表事件发生的概率,范围[0,1],所以上面的信息量与图像只取下图中的粉色段)
】
事件x发生的概率越大,其包含的信息量越少
2. 熵
计算方法事件所有可能性的信息量的期望
【
对于某个事件,有n中可能性,每一种可能性对应一个概率,这样就可以计算出每一种可能性 的信息量
例如,按下电脑的开机键,会有三种可能(正常开机,无法开机,爆炸),这三种可能性对应的概率和信息量如下表:
】
通过每个事件的信息量,我们可以计算出这个事件(包含三种可能)的熵,即所有信息量的期望,
公式为:
,其中n代表某一事件包含的所有可能性,
如抛硬币这种只有两种可能,我们称之为0-1分布(二项分布的特例,n=1,即只实验1次),对于这种问题,熵的计算公式可以简化成:
3. 相对熵(KL散度)
什么是KL散度?
对于同一个随机变量X,有两个单独的概率分布P(X)和Q(X),我们可以使用 KL 散度(Kullback-Leibler (KL) divergence)来衡量这两个分布的差异。
KL散度的公式:
【
KL散度在信息论中的物理意义就是:用基于Q分布的编码来编码来自P分布的样本所需要的额外的Bit个数。
KL散度的直观理解:平均编码长度问题(类似于霍夫曼树找最佳编码长度,出现越频繁的字母(概率高)用较短的编码来表示,这样平均编码长度将会最小)
在香农信息论中,用基于P分布的编码方式(依照P分布中各字符的出现概率决定各字符的编码长度)来编码来自P分布的样本,其所最优编码平均所需要的Bit个数:
其中,表示对于字符的编码长度
而如果现在变成用基于Q分布的编码方式来编码来自P分布的样本,其编码平均所需要的Bit数就变为:
如果Q与P是不同的分布,那么用基于Q分布的编码方式来编码来自P分布的样本并不是最优的q,q,其q,其平均q,其平均编码q,其平均编码长度q,其平均编码长度就变大了,所以有:
如果P和Q分布非常接近(或者通过优化越来越接近),那么基于Q分布的平均编码长度就会接近于最优编码长度,因此我们采用KL散度来衡量P和Q两个分布的接近程度:
】
在深度学习中对于每个样本,神经网络最终都会output一个多维的vector,代表该样本的类别分布。我们希望对这个样本预测得到的类别分布与该样本的真实类别分布越接近越好,所以可以将KL应用到深度学习中来衡量预测与真实分布的距离。
【
例如,P往往用来表示样本的真实分布,比如[1,0,0]表示当前样本属于第一类。
Q用来表示模型所预测的分布,比如[0.7,0.2,0.1] 。
目标就是通过学习让Q(X)能够像P(X)一样能够完美的描述样本
】
其中代表预测出的样本的类别分布,代表样本的真实类别分布。
上式中的第二步,由于第二部分就是真实分布的熵,是不变量。所以想要KL减小只需要优化第一项 ,称为交叉熵。
所以在机器学中一般直接用交叉熵做loss,来评估模型。
4. 交叉熵
(KL散度公式中去掉不变的那一项(label:真实类别分布 的熵))
其中,P(x)是标签,Q(x)是预测的概率分布,由于P(x)一般是one-hot向量,只有一个位置为1,所以交叉熵公式可以简化为:
也就是只关注真实类别对应的那一维的神经网络输出值,让它尽可能变大(这样-log值就变小了,loss就减小了),所以有提出soft label的方法,让其他类别对应的神经元也能得到优化。
5. 交叉熵损失函数在机器学习中分类问题的应用
1. 回归问题
回归问题中一般使用MSE(Mean Squared Error)作为loss函数,比如:
m为样本数量,loss为m个样本的loss均值,但是这种loss并不适用于概率相关的分类问题
2. 单分类问题
这里的单类别是指,每一张图像样本只能有一个类别,比如只能是狗或只能是猫。标签是one-hot向量
上式为一张样本的loss计算方法。式2.1中n代表着n种类别。
3. 多类问题(一张图片中包含多种类别的物体)
多分类的标签是n-hot向量,如一张图片里既有青蛙又有老鼠
如下图:
这里的preb不再是通过softmax进行计算,而是采用sigmoid,将每一个神经元节点的输出归一化到[0,1]区间,所有preb的和也不再是1,。所以每个label都是独立分布的,相互之间没有影响。
所以交叉熵在这里是对每一个值进行计算
最终loss是每一个类别loss的合集