熵
我们现已知的一个概念是,“熵”可以表示一个系统的混乱程度,从数学上来讲也是求期望的过程,是信息量与其对应概率相乘的结果。【关于熵具体的定义大家应该看了很多,这里我主要叙述交叉熵和相对熵】
在深度学习当中我们经常用交叉熵或者相对熵作为损失函数,用来衡量网络的输出结果和真实值的差距或者是概率分布上的相似性。这里将更进一步了解这一过程是怎么做到的。
交叉熵
先写出交叉熵公式
已知两个概率分布P与Q,可以将P视为我们真实值概率分布,Q为网络预测的概率分布(这里的概率都是经过softmax的soft label,不是hard label) 。在神经网络中,m是输入图片的数量,就是输入的(真实值,也是一个概率值),这个概率值就是要么是狗,要么就不是狗,输出的预测值就是判断有多像狗。再对上式基础上,我们还可以拓展一下【可以想成一个二分类】:
公式的中x是输入的图像,真实值,y是网络预测值。公式前半部分就是判断这张图中目标是狗的熵是多少,后半部分为不是狗的熵。
相对熵
也叫KL散度,对于两个概率系统P与Q,定义为:
以P为基准,去考虑P与Q相差多少。对于某个事件,系统Q的信息量fq减去它对应到P中的信息量fp,差值求整体的期望。这个差值直观理解就是Q如果想和P一样,应该补充多少差值;
对上式继续展开:
其中前半部分就是交叉熵H(P,Q)。从上式可以看出,是将P的熵分成了两个部分,前面是交叉熵,后面是自己的熵值【我的理解就是也可以类比成前面预测值,后面真实值,然后两者的差值,或者说两者的举例】
交叉熵和相对熵都是度量两个概率分布的相似性,所以可以用来做损失函数,和以单纯的以欧氏距离或者去计算真实值和预测值的差值考虑的更全。
还有一点就是,我们通常认为熵应该越小越好,这个其实应该看应用于什么场景,我们在对话通信方面,希望的是熵,信息量越小越好。但在深度学习中,熵应该是越大越好,熵越大,系统程度混乱,说明了两个样本(猫和狗)的概率分布越大,相似性越小,概率分布越独立【个人理解】。