【转载】机器学习理论—信息论:自信息、熵、交叉熵与KL散度
# 1. Self-Information
信息论中最根本的一个问题就是,怎么量化一个事件x包含的信息量I(x)呢?一个量化事件信息量的思路是,量化观测到该事件发生后,给人带来的惊讶程度。具体来说,如果我们有一个信息量的度量I(x),它应当是以事件x发生的概率P(x)参数化的,即I(x)=f(P(x)),同时我们会希望f(P(x))有以下属性:
- f(P(x))是关于P(x)单调递减的。即,概率越高的事件发生后,带来的信息量/惊讶程度越低;概率越低的事件发生后,带来的信息量/惊讶程度越高。
- f(P(x))≥0。 即,任何事件包含的信息量,应当是非负的。
- f(P(x))对任意P(x)均是连续的。
- I(x1,x2)=I(x1)+I(x2)。即,多个独立事件带来的总信息量,应当等于各个事件的信息量之和。
事实上,满足上述四个条件的函数形式只有I(x)=Klog(P(x)),K<0。证明如下:
设事件C为两个独立事件A和B的交集,即C=A∩B。根据属性4,我们有,
I(C)=I(A∩B)=I(A)+I(B).
因为事件A、B相互独立,我们有,
P(C)=P(A∩B)=P(A)⋅P(B).
因此,
f(P(C))=f(P(A))+f(P(B))=f(P(A)⋅P(B)).
可以得出,函数f(P(x))应当满足f(ab)=f(a)+f(b)。现在我们证明满足该等式的函数f,必然有f(a)=Klog(a),其中K是任意实常数。
令g(a)=f(2a),我们有
g(a+b)=f(2a+b)=f(2a2b)=f(2a)+f(2b)=g(a)+g(b).
显然,我们有g(a+b)=g(a)+g(b)。因为f是连续的,那么g也是连续的。因此,根据柯西函数方程,必然有g(a)=Ka。
因此,g(a)=f(2a)=Ka⇒f(a)=Klog2(a)。
为了使f(P(x))满足上述条件1和2,K应当取负数。另外,其中log的底数可任取,为了方便,我们后续均取2为底数。
关于K的取值,Shannon在他1948年的论文A Mathematical Theory of Communication中写到:
The choice of coefficient K is a matter of convenience and amounts to the choice of a unit of measure.
出于此intuition,Shannon令K=−1,最终得到I(x)=−log(P(x)),用来描述事件x中包含的信息量。
# 2. Entropy
现在我们有了对于一个事件x的信息量的度量I(x),但是往往我们更感兴趣的是这些事件对应的随机变量X的信息量。
一个直观的做法就是对随机变量X中的所有可能事件的信息量求均值,来代表这个随机变量X的信息量。设随机变量X∼p(X),那么X的熵被定义为:
H(p)=EX∼p(X)[−logp(X)].
当X为离散随机变量时,
H(p)=−i=1∑np(xi)logp(xi).
显然,在这个定义下,H(p)自然可以代表随机变量X的信息量。
"熵代表随机变量的平均信息量",这个说法还是过于抽象了,我们能否把这个定义变得更加的数学化?自然是可以的,我们接下来引入熵的一个更加数学化的理解,即,熵代表编码随机变量所需的最短平均编码长度。换句话说,一个随机变量的平均信息量,等价于编码这个随机变量所需的最短平均编码长度。
那么,什么叫做编码一个随机变量呢?编码长度又指什么呢?我们用下面的例子进行一个直观的理解。
p(xi)1/21/41/81/161/641/641/641/64E[li] Code 10000010100111001011101113 Code 201011011101111001111011111101111112
假设一离散随机变量X的分布如上,其共对应8个事件,每个事件发生的概率不一。现在我们希望的是:对每个事件进行二进制编码,使得传递该随机变量的取值时,所需的平均编码长度最小。
显然,若令每个事件的编码长度为li,如果我们利用上表Code 1编码随机变量X的各个取值,那么平均来看我们传递X的值时需要E[li]=3bits的编码长度。而利用Code 2进行编码的话,平均只需要2bits的编码长度。这是因为Code 2对概率更大的事件采用了更短的编码,从而降低了编码所需的平均长度,这一方法同霍夫曼编码的思路一致。
现在的问题是,给定随机变量X,我们能否预先求得其最短的平均编码长度?答案就是利用随机变量X∼p(X)的熵H(p)。
不难计算,H(p)=−∑p(xi)logp(xi)=2bits。也就是说,熵H(p)也可以理解为编码随机变量X时,所需的最短平均编码长度。
通过以上定义,显然,一个随机变量的信息量与其所需的最短平均编码长度是等价的。这也是很直觉的,如果一个随机变量最优的平均编码长度更大,那么它应当包含更大的信息量;如果一个随机变量所需的最优平均编码长度很小,那么它包含的信息量也应当是很小的。
举个例子,编码掷硬币的结果所需的最优平均编码长度为H=−2⋅21log(21)=1bit。而编码掷骰子的结果所需的最优平均编码长度为H=−6⋅61log(61)≈2.58bits。这意味着掷骰子需要更大的平均编码长度,其对应的随机变量也有着更大的信息量。
我们刚刚只是陈述了结论:随机变量的熵即等价于编码该随机变量所需的最短平均编码长度,接下来我们提供证明。
假设编码的字符集的大小为D,若采用二进制编码,则D=2。另外我们假设存在m个事件需要编码,每个事件的编码长度为li。根据编码理论中的Kraft–McMillan Inequality,在给定的码字字长l1,…,lm下能够成功编码,当且仅当
i=1∑mD−li≤1.
至此,寻找最优平均编码长度的问题可以写成如下优化问题:
limins.t.i=1∑mp(xi)lii=1∑mD−li≤1.
我们利用Lagrangian multiplier进一步求解带约束的优化问题,即
J=i=1∑mp(xi)li+λ(i=1∑mD−li−1).
易得li∗=−logDp(xi)。 若采用二进制编码,显然,
∑p(xi)li∗=−∑p(xi)logpi=H(p),
其中,熵的单位为bit,若采用e为底数,则熵的单位为nat。
因此,随机变量X∼p(X)的熵H(p)即是编码随机变量X的最优平均编码长度。
# 3. Cross-Entropy
在说交叉熵之前,我们再回顾一下熵的定义:
H(p)=EX∼p(X)[−logp(X)].
设p为真实分布,q为p的近似分布,交叉熵被定义为:
H(p,q)=EX∼p(X)[−logq(X)].
交叉熵和熵的定义长的很像,它们之间的区别可以这样理解:
- 因为X的实际分布为p,所以计算期望编码长度时,尽管我们可能并不知道p,但理论上总是基于真实分布X∼p(X)计算期望。
- 当我们利用正确的分布p(X)进行编码时,log里面的真数是p(X)。最终算出来的就是随机变量X的最优期望编码长度,即熵。
- 当我们利用错误的分布q(X)进行编码时,log里面的真数是q(X)。最终算出来的自然不再是熵,而是我们用错误的分布q(X)进行编码后,算出来的随机变量X的期望编码长度。
因为熵H(p)是随机变量X的最优期望编码长度,因此从其定义中我们可以直接得到EX∼p(X)[−logp(X)]≤EX∼p(X)[−logq(X)]。但我们这里依然证明一下。
对两个离散随机变量的分布p、q,我们总有
−i=1∑np(xi)log(p(xi))≤−i=1∑np(xi)log(q(xi)).
令上述右式减左式,我们只需要证明
i=1∑np(xi)[log(p(xi))−log(q(xi))]≥0(1)
因为对任意x>0,lnx≤x−1,所以−log2x≥(1−x)/ln2。不难证明,
=≥==i=1∑np(xi)[log(p(xi))−log(q(xi))]i=1∑np(xi)[log(q(xi)p(xi))]ln21i=1∑np(xi)(1−p(xi)q(xi))ln21(i=1∑np(xi)−i=1∑nq(xi))0
显然,我们确实有EX∼p(X)[−logp(X)]≤EX∼p(X)[−logq(X)]。
在了解了交叉熵和熵的关系后,我们就可以从信息论的角度理解,为什么交叉熵可以在机器学习中作为损失函数。我们在最小化交叉熵的时候,事实上是在逼近最优期望编码长度,即利用q(x)逼近p(x),使得交叉熵尽可能的小,以接近熵的值。
# 4. KL Divergence
对于离散随机变量,分布p和q的KL散度的定义如下:
DKL(p∥q)=−i=1∑np(xi)⋅logp(xi)q(xi).
对KL散度在信息论中的一个直观的理解是将其写开,即
DKL(p∥q)=−i=1∑np(xi)⋅logp(xi)q(xi)=−i=1∑np(xi)⋅logq(xi)+i=1∑np(xi)⋅logp(xi)=H(p,q)−H(p).
通过上节我们知道,交叉熵H(p,q)指利用分布q编码随机变量X所需的期望编码长度,而熵H(p)指编码随机变量X所需的最优期望编码长度。
既然DKL(p∥q)=H(p,q)−H(p), 那么显然,其意味着利用q编码X所带来的额外编码长度。事实上,上一节中的式(1)左侧等价于KL散度,因此KL散度恒大于等于零。
倘若我们优化KL散度,即是希望减小所需的额外编码数,使得分布p和q变得接近。这里有两种情况:
- 若真实分布p恒定,那么优化KL散度等价于优化交叉熵,其目的是令交叉熵逼近最优期望编码长度,使得q尽可能接近p。在训练辨别模型时,往往是这种情况。为了简化计算,人们往往直接对交叉熵进行优化。
- 若真实分布p不恒定,那么优化KL散度会同时改变交叉熵和熵的值,使得p与q 相互 接近。在训练生成模型时,往往是这种情况,为了使分布p与q相互接近,我们必须直接对KL散度进行优化。
# 5. References
[1] Link1
[2] Link2
[3] Link3
[4] Link4
[5] Link5
[6] Link6
[7] Link7