信息量
如果现在知道了一个随机事件的结果,那么如何衡量知道这个结果所带来的信息呢?或者说知道了这个结果,相较于不知道这个结果,所减少的不确定性是多少?shannon针对这个问题给出了事件m的信息量的定义:
$$ I(m) = log(\frac{1}{p(m)}) = -log(p(m)) $$
其中,\( p(m) \) 是m发生的概率,log以2为底的话,计算结果以shannon为单位,或者是更通用的bit为单位。 为什么定义成这种形式,因为需要信息量满足以下两个条件:1、事件结果发生概率越大,信息量越少,即事件结果的信息量与其发生概率呈负相关。2、多个事件结果同时发生的信息量,等于其中每个事件结果信息量之和。 从该定义可以得到,发生概率越低的事件,带来的信息量越大。反之则越小。这也符合常规的认知。比如知道明天的天气是晴天,那么给我们带来的信息量则不是太大,因为晴天很常见。但是如果知道明天会有龙卷风,那么则带来了很大的信息量,因为龙卷风是很罕见的天气。从另一个角度去理解,定义的一个事件的信息量表示这个事件会带来的“惊讶度”(surprise)。
熵
表示一个随机事件所有结果的信息量的期望。或者说在只知道所有结果的概率分布时,整个系统的不确定性。 \[ {\rm H}(M) = {\rm E}[{\rm I}(M)] = \sum_{m∈M}p(m){\rm I}(m) = -\sum_{m∈M}p(m){\rm log}p(m) \]
一个随机系统的熵,在各个结果的概率相等时,是最大的。这时系统的随机性也是最大的。而如果这个随机系统只会有一个确定的结果,那么熵为0,系统是确定的没有随机性。在物理中,熵的概念是表示一个系统混乱的程度,与信息论中的熵有着相同的内涵。从另一个角度理解,熵也可以理解成系统混乱性的衡量。
KL散度
表示两个分布之间的差异程度的量化,也就是这个两个分布的“距离”。(实际上不能直接当成距离,因为不满足对称性,即\( KL(p||q) ≠ KL(q||p) \),而且不能满足三角形两边之和一定大于第三边的条件,即\( KL(p||r) + KL(r||q) \) 一定大于\( KL(p||q)) \)
\[ KL(p(X)||q(X)) = \sum_{x∈X}-p(x){\rm log}q(x) – \sum_{x∈X}-p(x){\rm log}p(x) = \sum_{x∈X}p(x){\rm log}\frac{p(x)}{q(x)} \]
当两个分布完全相同时,KL散度为0。 在深度学习中,KL散度常用来作为两个分布之间差异的衡量,对于一个确定的分布\(p\),通过KL散度衡量一个估计的分布\(q\)和\(p\)之间的差异\(KL(p||q)\)。通过减少KL散度来使\(q\)和\(p\)之间的差异。
维基百科上对KL散度的另一种解读: Another interpretation of the KL divergence is the “unnecessary surprise” introduced by a prior from the truth: suppose a number X is about to be drawn randomly from a discrete set with probability distribution \(p(x)\). If Alice knows the true distribution \(p(x)\), while Bob believes (has a prior) that the distribution is \(q(x)\), then Bob will be more surprised than Alice, on average, upon seeing the value of X. The KL divergence is the (objective) expected value of Bob’s (subjective) surprisal minus Alice’s surprisal, measured in bits if the log is in base 2. In this way, the extent to which Bob’s prior is “wrong” can be quantified in terms of how “unnecessarily surprised” it is expected to make him.
交叉熵与KL 散度
交叉熵常作为分类任务的损失函数,但是来源是什么。其实本质上,减少交叉熵损失,其实是降低预测分布与GT分布之间的KL散度,从而让预测分布与GT分布接近。
\[ \begin{split} KL(p||q) &= – \sum_{k}p_{k}{\rm log}\frac{q_{k}}{p_{k}} \\ &= -\sum_{k}p_{k}{\rm log}q_{k} – ( – \sum_{k}p_{k}{\rm log}p_{k}) \\ &= {\rm H}(p, q) – {\rm H}(p) \end{split} \]
其中\(p\)为GT的分布,\(q\)为预测分布。\({\rm H}(p, q)\)就是交叉熵, \({\rm H} (p)\)是\(p\)的熵。因为GT分布是确定的,所以 \({\rm H} (p)\) 这一项是一个定值,与求 \(q\) 是无关的。因此,减少交叉熵损失,其实就是在降低预测分布与GT分布之间的KL散度。
最小化KL散度等价于最大化似然函数
对于一个未知的\(p(x)\),可以通过\(q(x|θ)\)来近似 \(p(x)\) , \(q(x|θ)\) 由可调节的参数\(θ\)控制(比如神经网络中的权重)。通过最小化\({\rm KL}(p(x)|q(x|θ))\)来确定 \(q(x|θ)\) 。但是计算这个KL散度又要求知道 \(p(x)\) ,这成了一个循环的问题。重新审视KL散度,它也可以理解成\(log( p(x) / q(x|θ) )\)关于 \(p(x)\) 的期望,而求期望则可以通过蒙特卡洛估计的方式进行,在实际中就是采样若干的数据,用这些数据计算\(log(p(x) / q(x|θ))\)的平均值来作为其期望。写成公式为:
\[KL(p||q) ≈ \frac{1}{N}\sum_{n=1}^{N}[-{\rm ln}q(x_{n}|\theta) + {\rm ln}p(x_{n})]\]
式中右边第二项与\(θ\)无关,优化时可以直接省略。而第一项就是采样数据的负对数似然函数,同时也是训练分类网络用的交叉熵函数。因此,最小化KL散度等价于最大化似然函数。
