目录
时间一长就忘记了,今天看见缩写CE,突然有点陌生,写个图文并茂的博客加深一下印象。
1 交叉熵
交叉熵,在机器学习中广泛用于衡量两个分布的相似度:
交叉熵一般跟在softmax处理之后,softmax的输出是0-1之间的正数序列,可以认为是概率分布函数。对于分类问题,一般会输出这张图片对应于每一个分类的概率,使概率分布与真实的label(one-hot编码)接近。
看一下两个分布,假设长度是100,序列x的第40个数强制置为5,其他数是0-1之间的随机数,y也一样的配置:
图1
然后进行softmax:
那么交叉熵H(x|y)和H(y|x)分别是3.1775和3.1808。这个交叉熵是比较大的。
我们再将第40个数增加到10:
图2
这时候其他值就很接近于0,这时候的交叉熵H(x|y)和H(y|x)分别是0.0846和0.0825。
也就是说,当两个概率分布几乎相等时,交叉熵才接近于0,否则较大。
但是对于分类来说,第一个图的结果已经不错了,可以很好的进行分类。
2 KL散度
KL散度,本名是相对熵,相对于谁?本身的信息熵!这就很好理解了:
变形为:
后面减去的H(P)就是自己的信息熵。
之前做的是交叉熵,好奇心驱使我计算一下对应的熵(也就是信息熵),对于第一幅图,H(x)=3.1511, H(y) = 3.1430。如果用H(x|y)和H(y|x)分别减去对应的熵,那么
H(x|y)-H(x)=0.0428
H(y|x-H(y)=0.0421
对于第二幅图:H(x)=0.0784, H(y) = 0.0810,
H(x|y)-H(x)=6.5000e-04
H(y|x-H(y)=6.6702e-04
H(x)是什么意思呢?就是分布x与自己的一个熵,也就是说,自己表示自己也是需要很多信息量的。因此,使用二者的差去衡量两个分布的相似度,会更客观。这个比较容易理解了,因为上面两幅图,效果都已经达到了分类要求,只不过图2比图1逼近程度更好。但是使用交叉熵,二者的区别很大(无论是H(x|y)或是H(y|x)),前者是>3的值,而后者仅为<0.09的数,相差近30倍。而使用KL散度,得到的相对差异值,前者是0.0428,后者是0.00065,虽然倍数也是几十倍,但是二者都很小。