交叉熵损失函数

交叉熵损失函数

熵的本质是香浓信息量\(\log(\frac{1}{p})\)的期望

既然熵的本质是香浓信息量\(\log(\frac{1}{p})\)的期望,那么便有

\[H(p)=E[p_i\times\log(\frac{1}{p_i})]=\sum p_i\times\log\frac{1}{p_i} \]

一个时间结果的出现概率越低,对其编码的bit的长度就越长。熵的本质的另一个解释是编码方案完美时,最短平均编码长度的是多少

现在关于样本集的2个概率分布\(p\)\(q\),其中\(p\)为真实分布,\(q\)为非真实分布,通常是预测结果,比如在深度学习的分类中,像手写数字识别,会有10个类别,那么对于一个给定的图片\(x\),那么经过深度模型预测得到的结果应该是一个分布,比如\(q(0)=0.0,q(1) = 0.1,q(2) = 0.1, q(3) = 0.8,q(4)=0,\dots\),这就是一个分布,最后肯定会选择概率最大的3作为输出。但是这是预测的概率分布,实际的分布应该是\(p(0)=0,p(1)=0,p(2)=0,p(3)=1,p(4)=0,\dots\)。于是,我们想做的就是让q的分布与\(p\)的分布一样。

在概率论或信息论中,KL散度( Kullback–Leibler divergence),又称相对熵(relative entropy),是描述两个概率分布P和Q差异的一种方法。它是非对称的,这意味着D(P||Q) ≠ D(Q||P)。特别的,在信息论中,D(P||Q)表示当用概率分布Q来拟合真实分布P时,产生的信息损耗,其中P表示真实分布,Q表示P的拟合分布。简单的说,KL散度或者相对熵它是用来度量两个分布\(P,Q\)之间的距离的,也就是说,距离越大,两个分布差距最大。于是。在我们的模型训练中, 我们要做的就是不断的调整参数,使得预测得到的分布与真实分布尽可能的一致。那么,这与交叉熵有什么关系呢?

相对熵的数学定义如下

\[D_{KL} = \sum_ip(i)\log\frac{p(i)}{q(i)} \]

展开后有

\[D_{KL} = \sum_ip(i)\log(p(i)) - p(i)\log(q(i)) \]

我们暂且表示为

\[D_{KL} = \sum_iH(p(i) + H(p(i),q(i)) \]

\(H(p_i)\)是一个真实分布的期望,因此与训练无关,是一个常数项。于是,最小化相对熵便转为最小化\(H(p_i,q_i)=-\sum_i p(i)\log q(i)\)

这个就是交叉熵。

一句话说,就是,最小化误差可以通过最小化相对熵(KL散度)来实现,而最小化相对熵,则可以通过最小化交叉熵来实现,所以,交叉熵损失函数就这么来了。。。。。。。。。

参考

  1. 妖娆的up主的交叉熵视频
posted @ 2017-04-28 15:39  狂徒归来  阅读(7032)  评论(1编辑  收藏  举报