信息量

信息量被看作是用来度量事件发生时携带信息的多少,或描述事件消除不确定性程度的量。事件发生的概率越大,则事件发生的确定性越高,能带来的新信息越少,信息量越小。反之,事件发生的概率越小,信息量就越大。

1.信息量为正数,信息量与实践发生的概率相关,表征信息量的数学函数\(I(P)\),应当是一个单调递减函数。 2.P(事件)=0时,I(P(事件))=正无穷;P(事件)=1时,I(P(事件))=0; 3.多个独立事件联合发生的信息量,应当等于多个单独事件信息量的和,即: \[ I(P(事件1), P(事件2)) = I(P(事件1)) + I(P(事件2)) \] 举一个例子: \[ \begin{aligned} I(黑桃牌) &= I(P(黑色牌)*I(黑桃牌|黑色牌)) = I(0.5*0.5)\\ &=I(P(黑色牌))+I(P(黑桃牌|黑色牌))=I(0.5)+I(0.5) \end{aligned} \]

基于以上三点,我们可以找出信息量函数I的数学表达形式。针对第3点,容易想到,对数函数\(log\)有同样的性质,可以将内部的连乘转化为外部的连加,根据低一点,我们可以对log取负数,便满足了以上三点要求。

\[ I(P)=-\log_a(P) \]

针对\(\log\)的底数\(a\),则有:

底数 信息量单位
\(log_2(P)\) 比特(bit)
\(log_e(P)\) 奈特(net)
\(log_{10}(P)\) 哈特(hat)

其中\(a=2\)时对应的单位与计算机系统中的二进制天然匹配,是在实际中最为常用的信息量单位。现在我们得到了信息量的数学表达式。

信息熵

然而,信息量衡量的仅是系统中单个事件的不确定性。例如在黑红梅方四张牌中抽中黑桃牌这一事件。然而,整个系统出了抽出黑桃牌这一事件外,还存在着抽中红桃牌、抽中梅花牌、抽中方块牌这些事件。那么,我们要如何评价整个系统的不确定性呢?

直觉上,似乎可以把系统中所有事件的信息量直接相加,得到整个系统的信息量,但是这种简单相加的操作考虑并不周全,因为每个事件发生的概率可能并不相同。一个事件即使信息量很大,但是在整个系统中事件发生的概率可能非常小,因此对整个信息系统信息量的贡献可能也不会特别大。所以我们可以再对信息量乘上一个事件发生的概率作为对整个信息系统信息量的贡献,便得到了信息熵。

\[ H(P)=\sum^n_{i=1}-p_i * \log(p_i) \]

综上,求取信息熵的过程,其实是在求取整个事件信息量期望的过程。

交叉熵

知道一个系统的概率分布,就可以求得该系统对应的信息熵。然而大部分情况下,我们很难获取目标系统的概率分布,只能通过假设来逼近目标系统。

假如,给你一枚硬币,其实际证明朝上的概率为0.9,反面朝上的概率为0.1,但是你事先并不知道,在你的印象里,硬币正反面朝上的概率均为0.5。那么,此时又要如何表示你理想中抛硬币事件的结果概率\(Q\)与真实结果的概率分布\(P\)之间的差异呢。 我们想要知道,使用我们假设的概率分布\(Q\)来预测真实的概率分布\(P\)时会损失多少信息,可以先尝试使用\(Q\)去编码概率概率分布\(P\),此时引入交叉熵的概念,交叉熵:

\[ H(P,Q)=-\sum_{i=1}P_i*\log(Q_i) \]

可以看到,公式中概率这一项实用了真实的概率分布\(P\),表征事件总是以真实的概率分布发生,而信息量这一项则来源于我们预测的概率分布\(Q\),表征预测的模型概率分布\(Q\)对事件发生的信息量进行评估和编码。

整体的公式可以理解为在真实分布为\(P\)的情况下,用预测分布\(Q\)编码数据时所需要的平均信息量。

吉布斯不等式: 若\(\sum^n_{i=1}p_i=\sum^n_{i=1}==\),且\(p_i,q_i\in(0,1]\),则有:\(-\sum^n_{i=1}p_i\log p_i \leqslant -\sum^n_{i=1}p_i \log q_i\),等号成立当且仅当\(p_i=q_i\forall_i\)

1.根据吉布斯不等式,则有\(H(P,Q)\geqslant H(P)\),仅当P与Q完全相等时,\(H(P,Q)=H(P)\);Q=P时,实用Q编码P的损失为零。 2.P和Q差异越大,H(P,Q)越大,交叉熵越大,实用Q近似P的信息损失就越多。

基于以上性质,如果我们想要让我们的预测模型逐渐接近真实模型,那只要让两个模型之间的交叉熵尽可能的减小就可以了。这确实是一种解决方法。

KL散度

然而交叉熵衡量的是实用预测分布Q表达真实分布P时要花费的总比特数,关注的是实际代价,其编码成本来源于两个方面: 1.真实分布P自身的呢在不确定性,这部分实际上是真实分布P自身的信息熵\(H(P)=-\sum_{i=1}P_i*\log(P_i)\),这样正是交叉熵最小值只能取到\(H(P)\)的原因。例如猜一个硬币正反面,即使你完美知道它是公平的,你也要平均花费1bit的编码。 2.模型Q与真实P之间的差异,这部分是模型预测偏离真实分布而产生的额外的编码代价。

综上,让我们对交叉熵的表达式进行修正,排除掉真实分布P自身的信息熵,得到了这个仅表征预测模型分布Q与真实分布P之间差异的结果,就是我们所说的KL散度:

\[ \begin{aligned} 额外编码代价&=交叉熵-P的信息熵\\ D_{KL}&=H(P,Q)-H(P)\\ &=\sum_{i=1}P_i*\log(\frac{P_i}{Q_i}) \end{aligned} \]

由于交叉熵H(P,Q)总是大于等于真实分布的信息熵H(P),且仅当Q和P分布完全相同相等,因此KL散度始终是一个大雨等于0的数;又因为交叉熵与KL散度实际上只相差了一个真实分布的信息熵,而真实分布的信息熵\(H(P)\)通常是确定的,可以看到是一个常数,因此最小化预测模型分布与真实分布之间的差异时,最小化交叉熵实际上就等驾驭最小化两个分布之间的KL散度。

神经网络KL散度

对于一个多分类神经网络,输入一批\(x_i\),我们可以将网络输出的结果\(\hat{y}\)看作是预测模型的概率分布\(Q\),将输入对应的真实标签\(y\)看作是真实分布P。

我们的训练目标是训练一组参数\(\theta\),使得预测模型的概率分布Q尽可能的接近真实概率分布P,因此也可以同样通过最小化交叉熵或最小化KL散度来实现这一目标。

\[ \arg\min_\theta H(P,Q)\equiv\arg \min_\theta D_{KL}(P||Q) \] 这也就是从概率论角度,交叉熵损失函数在神经网络中的来源。

\[ Loss_{CE}=H(P,Q)=-\sum^n_{i=1}\sum^{K}_{k=1}y_{ik}\log\hat{y}_{ik} \]