1、交叉熵(cross entropy loss)简介
熵=entropy=不确定性=惊讶的度量。越高的熵越低的信息度,因此不确定性或者混乱性越高,熵越高。
数学定义,把所有事情的概率通过下式计算。比如概率分比为:0.001、0.001、0.001、0.999,则其熵=0.0313,非常小,说明稳定性较大,基本上事实仅由概率为0.999的事情给主宰。
但当概率均为0.25时,说明不确定性很大,四者皆可能发生,所以熵比较大=2
交叉熵:是p和q之间
Divergence(差异) 衡量两个概率分布函数的重叠情况。比如下图两个函数重叠的阴影面积越小,Divergence越大。当完全重合,Divergence=0。
这里使用H(p,q)表示p,q间的交叉熵。可进一步表示为H(p,q)=H(p)+Divergence.
如果p=q,Divergence=0,则直接退化为H(p)。
在one-hot编码中,H(p)=0,所以交叉熵= Divergence。
2、求交叉熵的梯度函数:以双分类问题为例,是猫还是狗?
H(P,Q)=两项求和。再根据事件概率之和为1=P(cat)+P(dog),全部用cat表示,可列出下式。
假设P(cat)=y,其中P为0-1分布;Q(cat)=p,为ϑ分布。可得到:H(P,Q)=
这就是二分类需要优化的目标函数。进一步讨论:
如果y=1,则后一项=0,前一项为了达到最小,需最大化log(P),即最大化P
如果y=0,则前一项=0,后一项为了达到最小,需最大化log(1-P),即最小化P
3、例子:五分类问题。
假设P为标签值,即实际观测值,Q为网络输出值。二者越接近越好,我们可以使用交叉熵作为优化函数。比如第一次计算Q1=[0.4\0.3\0.05\0.05\0.2],显然与P相差较大,计算出来的交叉熵为0.916,但在第二次优化后,计算出的交叉熵为0.02,直接优化了将近0.9=0.916-0.02。这里当然也可以使用均方差(MSE)作为优化函数,但只会优化0.3-0.4这么多。因此不那么明显。因为交叉熵梯度更大,收敛更快。
4、为什么不用均方差(MSE)
- 首先:当使用sigmoid+MSE组合时,容易出现梯度离散。
- 其次也是最重要的:MSE收敛太慢了,如图所示,在初始时log函数会因梯度变化而收敛很快。
- 最后需提及:收敛快的交叉熵,也有着求导后的函数复杂的缺点,即求梯度比较繁琐。但MSE导数就是2(p-y)很简单。因此,在一些新的算法时,算法不完善,可以先使用MSE去求解,说不定还会得到更好的结果,比如在,meta-learning 中就是如此。
5、补充
在pytorch中,函数F.cross_entropy是打包好的函数=softmax+log+nll_loss,后两个和组合成一个数学上的cross_entropy函数。因此我们使用函数F.cross_entropy,就不用再手动加入softmax函数了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)