天天看点

机器学习信息论基础

机器学习信息论基础

科学真理最重要的是两点,一是能量,二是信息。一是通过爱因斯坦的 E = m c 2 E=mc^{2} E=mc2,物质和能量其实是一回事,另外如何描写和衡量信息则是更重要的,爱因斯坦本人曾经说过随着时间的改变质量方程可能会错,而这个信息方程却绝对不会,shannon。

信息论是应用数学的一个分支,主要研究的是对一个信号能够提供信息的多少进行量化,最初用于研究在一个含有噪声的信道上用离散的字母表来发送消息,指导最优的通信编码等。

  • 熵是英文是entropy,来自于热力学,表示系统在不受外部干扰时,其内在最稳定的状态,由于entropy是能量Q和温度T的商,又与火有关,就被翻译为了熵。温度可以看作是让例子有序化的能量,而熵可以看作是“无序化”的度量。”*

那么如何度量这种无序性?能得到某个确定的值方便比较吗?

关于信息一个基本想法是一个不太可能的事情竟然发生了要比一个非常可能的事件的发生能提供更多的信息,也就是说导致那些“异常”事件发生的背后拥有着我们更想知道的东西,比如说“我每天都要吃饭”和“我每天都不吃饭”,哪个更有意思?再比如每天太阳都照常升起,抛一枚硬币,如果每次都是同一面朝上,完全可以预知它下一次出现的图案,那么还有意思吗,它的出现有值得我们更加关注的理由吗?所以以此来量化信息的不确定性就得满足

1.常见的,非常可能发生的事它的信息量要少,但非负
2.单调性,越不可能发生的事件信息量应该越多
3.独立事件应该具有增量的性质,即二个硬币结果的信息量应该是一个的两倍
           

于是为了满足上述各条件就产生了自信息(self-information): I ( x ) = − l o g P ( x ) I(x)=-logP(x) I(x)=−logP(x)

这个公式完美的符合了所有的要求,能够度量这样单个变量发生的不确定性。

信息熵代表的是随机变量或整个系统的不确定性,熵越大,随机变量或系统的不确定性就越大。即描述的是有关事件 X X X的所有可能结果的自信息期望值: H ( X ) = − ∑ i = 1 n p i l o g p i H(X) = -\sum\limits_{i=1}^{n}p_i logp_i H(X)=−i=1∑n​pi​logpi​

其中n代表事件 X X X的所有n种可能的取值, p i p_i pi​代表了事件X为i时的概率,log为以2或者e为底或者其他但影响不大,不同底数的对数之间的区别只存在一个常数的关系,但是如果使用 log2 作为底,那么熵可以更容易被理解为编码所有信息所需要的最小位数(minimum numbers of bits) 。

机器学习信息论基础

跟熵(entropy)类似,交叉熵用于比较,衡量两个事件X,Y的概率分布,经常做损失函数使用。从信息压缩的角度来看,它代表着每个词(X,真实分布)平均要用几个位(Y,非真实分布)来编码,即计算 log(X) 在概率Y 下的期望: H ( X , Y ) = E p [ − l o g ( Y ) ] = − ∑ i = 1 n p ( x i , y i ) l o g p ( x i , y i ) H(X,Y) =E_p[-log(Y)]= -\sum\limits_{i=1}^{n}p(x_i,y_i)logp(x_i,y_i) H(X,Y)=Ep​[−log(Y)]=−i=1∑n​p(xi​,yi​)logp(xi​,yi​)

KL散度(Kullback-Leible Divergence ,相对熵)

KL是另一个用来衡量分布相似度的量,即从分布p到分布q的 KL 散度为它们之间的变化所带来的信息增益,而不是“距离”(KL散度不具有交换性,衡量不是空间而是两个分布间的信息损失):

D K L ( p ∣ ∣ q ) = E [ log ⁡ p ( x ) − log ⁡ ( q ( x ) ] = ∑ i = 1 N p ( x i ) ⋅ ( log ⁡ p ( x i ) − log ⁡ q ( x i ) ) D_{KL}(p||q)=E[\log{p(x)}-\log{(q(x)}]=\sum_{i=1}^Np(x_i)\cdot(\log{p(x_i)}-\log{q(x_i)}) DKL​(p∣∣q)=E[logp(x)−log(q(x)]=i=1∑N​p(xi​)⋅(logp(xi​)−logq(xi​))

直观上KL散度就是求p和q之间的对数差在p上的期望。

而且 D K L ( p ∣ ∣ q ) = H ( p , q ) − H ( p ) D_{KL}(p||q)=H(p,q)-H(p) DKL​(p∣∣q)=H(p,q)−H(p),相当于交叉熵的值等于KL 散度加上一项信息熵,那么在最小化交叉熵时,H(x)就可视为一个常量而可以被省略,交叉熵就直接等价于 了KL 散度,而KL 散度可以更加简单地从最大似然估计推导得到!但是在进行最大似然的时候需要注意到它不是“距离”,也就是说它不会对称,即便它衡量的是两个分布之间的差异,所以在一些情况下, D K L ( P p ∣ q ) D_{KL}(Pp|q) DKL​(Pp∣q)和 D K L ( q ∣ ∣ p ) D_{KL}(q||p) DKL​(q∣∣p)是不相等的,比如下图:

机器学习信息论基础

其中设p是两个高斯分布的混合,q是单个高斯。左边最小化D_KL(p||q),q将多峰模糊到了一起,使高频率质量放到所有峰上,而右边则选择了单个峰。简而言之就是左边的图是在p的基础上与q作比较,所以倾向于模糊多峰,而右边是在单峰的q上于p作比较,注重单峰的高质量。所以利用这个性质可以是可以按照不同的需求去最小化KL散度来达到不同的效果。

像神经网络的本质是函数的拟合近似,通过最小化损失函数来训练,此时使用KL散度来最小化近似分布时的信息损失,可以让网络学习到很多复杂的分布。 比如变分自编码器 (Variational Auto-encoders, VAE)和自编码器就可以采用。而且使用它会在使用sigmoid函数的网络情况下,梯度下降时因为学习速率可以被输出的误差所控制从而能避免均方误差损失函数学习速率降低的问题。

JS散度(Jensen-Shannon)

JS是KL散度的变体,尝试解决KL散度的非对称问题,即把式子变成:

J S ( p ∣ ∣ q ) = 1 2 K L ( p ∣ ∣ p + q 2 ) + 1 2 K L ( q ∣ ∣ p + q 2 ) JS(p||q)=\frac{1}{2} KL(p||\frac{p+q}{2})+\frac{1}{2} KL(q||\frac{p+q}{2}) JS(p∣∣q)=21​KL(p∣∣2p+q​)+21​KL(q∣∣2p+q​)

Wasserstein距离

KL和JS存在致命的弱点就是,因为是衡量的分布,那么如果两个分布不重合,离得很远,那么KL散度值是没有意义的,而且此时JS散度值会是一个常数,梯度为0,瞬间消失。这在类似GAN的训练里很不利,所以产生了Wasserstein距离:

W ( p , q ) inf ⁡ γ ∈ Π ( p , q )   E ( x , y ) ∼ γ ∥ x − y ∥ W(p,q) \inf_{\gamma \in \Pi(p,q)} \ \mathbb{E}_{(x,y) \sim \gamma} \Vert x - y \Vert W(p,q)γ∈Π(p,q)inf​ E(x,y)∼γ​∥x−y∥

应用详细可以参看:https://blog.csdn.net/qq_39388410/article/details/97137145

总结:

熵:描述随机变量的不确定性,若p表示其分布,则 H ( X ) = − ∑ i = 1 n p ( x ) l o g p ( x ) H(X) = -\sum\limits_{i=1}^{n}p(x) logp(x) H(X)=−i=1∑n​p(x)logp(x)

联合熵:两个随机变量X,Y的联合分布,用H(X,Y)表示

条件熵:在随机变量X发生的前提下,随机变量Y发生所新带来的熵定义为Y的条件熵,用H(Y|X)表示,用来衡量在已知随机变量X的条件下随机变量Y的不确定性。且此时H(Y|X) = H(X,Y) – H(X)成立。

机器学习信息论基础

相对熵:KL散度,p(x)、q(x)是X中取值的两个概率分布,则p对q(D(p||q) ≠D(q||p))的相对熵 D K L ( p ∣ ∣ q ) = E [ log ⁡ p ( x ) − log ⁡ ( q ( x ) ] D_{KL}(p||q)=E[\log{p(x)}-\log{(q(x)}] DKL​(p∣∣q)=E[logp(x)−log(q(x)],此式一定大于0

交叉熵:可以用来恒定在给定的真实分布下,使用非真实分布所指定的策略消除系统的不确定所需要付出的努力大小。

互信息:度量 X和 Y共享的信息,即度量知道这两个变量其中一个,对另一个不确定度减少的程度。所以互信息定义为X,Y的联合分布和各自独立分布乘积的相对熵,即用I(X,Y)表示: I ( X , Y ) = ∑ x , y p ( x , y ) l o g p ( x , y ) p ( x ) p ( y ) I(X,Y)=\sum\limits_{x,y}p(x,y)log\frac{p(x,y)}{p(x)p(y)} I(X,Y)=x,y∑​p(x,y)logp(x)p(y)p(x,y)​,且此时I(X,Y)=D(P(X,Y) || P(X)P(Y))

机器学习信息论基础

又由于H(Y|X) = H(X,Y) - H(X),所以就有了 I(X,Y)= H(X) + H(Y) - H(X,Y)。

#计算真实值与预测值互信息
from sklearn import metrics

labels_true = [1, 0, 0, 1, 1, 1]
labels_pred = [0, 0, 1, 1, 2, 2]
metrics.adjusted_mutual_info_score(labels_true, labels_pred)  
           

从这个量化的角度看信息熵是求在最优编码时,最短的平均编码长度。交叉熵是编码不一定最优时(分布的估计不准),平均编码长度。相对熵则是编码不一定最优时,平均编码长度相对于最小值的增值。而在机器学习中经常需要使用它们的关键思想来描述概率分布或者量化概率分布之间的相似性。

继续阅读