深度学习(一):交叉熵损失函数,信息量,熵,KL散度

版权声明:欢迎转载,转载请注明出处! https://blog.csdn.net/weixin_40871455/article/details/89355324

交叉熵损失函数「Cross Entropy Loss」,我们第一印象就是它如下的公式:

大多数情况下都是直接拿来使用就好,但是它是怎么来的?为什么它能表征真实样本标签和预测概率之间的差值?交叉熵函数是否有其它变种?

信息量

事件A:巴西队进入了2018世界杯决赛圈。 
事件B:中国队进入了2018世界杯决赛圈。 

直觉来说,显而易见事件B的信息量比事件A的信息量要大。究其原因,是因为事件A发生的概率很大,事件B发生的概率很小。所以当越不可能的事件发生了,我们获取到的信息量就越大。越可能发生的事件发生了,我们获取到的信息量就越小。那么信息量应该和事件发生的概率有关。

设X是一个离散型随机变量,X=x0的信息量为:

根据log函数曲线,我们可知,概率越大,信息量越小

熵(entropy)表示随机变量不确定性的度量,熵就是用来表示信息量的期望:

对于二项分布,熵的计算我们可以直接写为:

相对熵(KL散度)

相对熵又称KL散度,如果我们对于同一个随机变量 x 有两个单独的概率分布 P(x) 和 Q(x),我们可以使用 KL 散度(Kullback-Leibler (KL) divergence)来衡量这两个分布的差异,这里 P(x) 表示样本的真实分布,Q(x) 表示我们计算出来的模型,我们怎么取衡量我们的模型和真实的样本分布之间的差异呢,使用KL散度:

n为样本容量,D_{_KL}的值越小,表示q分布和p分布越接近

交叉熵

从KL散度公式,我们可以继续推论:

等式的前一部分恰巧就是p的熵,等式的后一部分,就是交叉熵

机器学习或者深度学习中,我们需要评估label和predicts之间的差距,使用KL散度刚刚好,即D_{KL}(y, \widehat{y}),由于KL散度中的前一部分−H(y)不变,故在优化过程中,只需要关注交叉熵就可以了。所以一般情况下用交叉熵做loss,评估模型。

举个栗子:

假设我们现在使用逻辑斯蒂回归学习一个二分类问题,模型的输出为:

s为 w_{0}*x_{0}+w_{1}*x_{1}+...+w_{n}*x_{n},这里我们使用逻辑斯蒂学习到的g(s) 就是交叉熵公式中的需要和真实模型进行比较的预测模型

使用预测模型预测当前样本x的分类标签为 1 的概率:

当前样本x的分类标签为 0 的概率就可以表达成:

如果我们从极大似然性的角度出发,把上面两种情况整合到一起:

我们希望的是概率 P(y|x) 越大越好。首先,我们对 P(y|x) 引入 log 函数,因为 log 运算并不会影响函数本身的单调性。则有:

根据极大似然估计的思想,我们希望 log P(y|x) 越大越好,反过来,只要 log P(y|x) 的负值 -log P(y|x) 越小就行了。那我们就可以引入损失函数,让损失函数去最小值即可,令 Loss = -log P(y|x),得到损失函数为:

我们已经推导出了单个样本的损失函数,是如果是计算 N 个样本的总的损失函数,只要将 N 个 Loss 叠加起来就可以了:

                                                                    L=-\sum_{i=1}^{n}y^{i}log\widehat{y}^{i}+(1-y^{i})log(1-\widehat{y}^{i})

这样,我们已经完整地实现了交叉熵损失函数的推导过程。

猜你喜欢

转载自blog.csdn.net/weixin_40871455/article/details/89355324