转自https://blog.csdn.net/u014465639/article/details/71637477
一、熵的本质是香农信息量()的期望。
现有关于样本集的2个概率分布p和q,其中p为真实分布,q非真实分布。按照真实分布p来衡量识别一个样本的所需要的编码长度的期望(即平均编码长度)为:H(p)=。如果使用错误分布q来表示来自真实分布p的平均编码长度,则应该是:H(p,q)=
。因为用q来编码的样本来自分布p,所以期望H(p,q)中概率是p(i)。H(p,q)我们称之为“交叉熵”。
比如含有4个字母(A,B,C,D)的数据集中,真实分布p=(1/2, 1/2, 0, 0),即A和B出现的概率均为1/2,C和D出现的概率都为0。计算H(p)为1,即只需要1位编码即可识别A和B。如果使用分布Q=(1/4, 1/4, 1/4, 1/4)来编码则得到H(p,q)=2,即需要2位编码来识别A和B(当然还有C和D,尽管C和D并不会出现,因为真实分布p中C和D出现的概率为0,这里就钦定概率为0的事件不会发生啦)。
可以看到上例中根据非真实分布q得到的平均编码长度H(p,q)大于根据真实分布p得到的平均编码长度H(p)。事实上,根据Gibbs' inequality可知,H(p,q)>=H(p)恒成立,当q为真实分布p时取等号。我们将由q得到的平均编码长度比由p得到的平均编码长度多出的bit数称为“相对熵”:D(p||q)=H(p,q)-H(p)=,其又被称为KL散度(Kullback–Leibler divergence,KLD) Kullback–Leibler divergence。它表示2个函数或概率分布的差异性:差异越大则相对熵越大,差异越小则相对熵越小,特别地,若2者相同则熵为0。注意,KL散度的非对称性。
比如TD-IDF算法就可以理解为相对熵的应用:词频在整个语料库的分布与词频在具体文档中分布之间的差异性。
交叉熵可在神经网络(机器学习)中作为损失函数,p表示真实标记的分布,q则为训练后的模型的预测标记分布,交叉熵损失函数可以衡量p与q的相似性。交叉熵作为损失函数还有一个好处是使用sigmoid函数在梯度下降时能避免均方误差损失函数学习速率降低的问题,因为学习速率可以被输出的误差所控制。
PS:通常“相对熵”也可称为“交叉熵”,因为真实分布p是固定的,D(p||q)由H(p,q)决定。当然也有特殊情况,彼时2者须区别对待。先给结论:
1)信息熵:编码方案完美时,最短平均编码长度的是多少。
2)交叉熵:编码方案不一定完美时(由于对概率分布的估计不一定正确),平均编码长度的是多少。
平均编码长度 = 最短平均编码长度 + 一个增量
3)相对熵:编码方案不一定完美时,平均编码长度相对于最小值的增加值。(即上面那个增量)
-------------------------------------------------------------------------------------------------
零、信息熵
1、熵的本质是香农信息量 log(1/p) 的期望;(参考了第一个答案)
H(p) = E[ log(1/p) ] = ∑ p_i * log(1/p_i),是一个期望的计算,也是记录随机事件结果的平均编码长度;
为什么信息量 是 log(1/p) 呢?
因为:一个事件结果的出现概率越低,对其编码的bit长度就越长。
以期在整个随机事件的无数次重复试验中,用最少的 bit 去记录整个实验历史。
即无法压缩的表达,代表了真正的信息量。
2、熵的本质的另一种解释:最短平均编码长度;
【本质含义:编码方案完美时,最短平均编码长度的是多少】
3、交叉熵,则可以这样理解:使用了“估算”的编码后,得到的平均编码长度(可能不是最短的)
p是真实概率分布,q是你以为的概率分布(可能不一致);
你以 q 去编码,编码方案 log(1/q_i)可能不是最优的;
于是,平均编码长度 = ∑ p_i *log(1/q_i),就是交叉熵;
只有在估算的分布 q 完全正确时,平均编码长度才是最短的,交叉熵 = 熵
1)交叉熵在 ML 中等效于相对熵
【作用:用来评估,当前训练得到的概率分布,与真实分布有多么大的差异】
因为与相对熵只差一个 分布 P 的信息熵,若 P 是固定的分布,与训练无关;Q 是估计的分布,应尽量等于 P。
二者一致时,交叉熵就等于 P 的熵
【本质含义:由于编码方案不一定完美,导致的平均编码长度的增大值】
1)用来衡量2个取值为正数的函数的相似性
2)2个完全相同的函数,相对熵为0;差异越大,相对熵越大;
3)概率分布函数,或 概率密度函数,若函数值均大于0,相对熵可以度量两个随机分布的差异性;
4)相对熵不对称,没有交换律