科学真理最重要的是两点,一是能量,二是信息。一是通过爱因斯坦的
,物质和能量其实是一回事,另外如何描写和衡量信息则是更重要的,爱因斯坦本人曾经说过随着时间的改变质量方程可能会错,而这个方程不会。
首先来讲信息论是应用数学的一个分支,主要研究的是对一个信号能够提供信息的多少进行量化,最初用于研究在一个含有噪声的信道上用离散的字母表来发送消息,指导最优的通信编码等,从这个角度看信息熵是求在最优编码时,最短的平均编码长度?交叉熵是编码不一定最优时(分布的估计不准),平均编码长度?相对熵则是编码不一定最优时,平均编码长度相对于最小值的增值。而在机器学习中经常需要使用它们的关键思想来描述概率分布或者量化概率分布之间的相似性。
关于信息一个基本想法是一个不太可能的事情竟然发生了要比一个非常可能的事件的发生能提供更多的信息,也就是说导致那些“异常”事件发生的背后拥有着我们更想知道的东西,比如说“我每天都要吃饭”和“我每天都不吃饭”,哪个更有意思?再比如每天太阳都照常升起,抛一枚硬币,如果每次都是同一面朝上,完全可以预知它下一次出现的图案,那么还有意思吗,它的出现有值得我们更加关注的理由吗?所以以此来量化信息的不确定性就得满足
1.常见的,非常可能发生的事它的信息量要少,但非负
2.单调性,越不可能发生的事件信息量应该越多
3.独立事件应该具有增量的性质,即二个硬币结果的信息量应该是一个的两倍
于是为了满足上述各条件就产生了自信息(self-information):
而信息熵代表的是随机变量或整个系统的不确定性,熵越大,随机变量或系统的不确定性就越大。即描述的是有关事件
的所有可能结果的自信息期望值:
其中n代表事件
的所有n种可能的取值,
代表了事件X为i时的概率,log为以2或者e为底或者其他但影响不大,不同底数的对数之间的区别只存在一个常数的关系,但是如果使用 log2 作为底,那么熵可以更容易被理解为编码所有信息所需要的最小位数(minimum numbers of bits) 。
跟熵(entropy)类似,交叉熵用于比较,衡量两个事件X,Y的概率分布,经常做损失函数使用。从信息压缩的角度来看,它代表着每个词(X,真实分布)平均要用几个位(Y,非真实分布)来编码,即计算 log(X) 在概率Y 下的期望:
至于KL散度(Kullback-Leible Divergence ,相对熵)是另一个用来衡量分布相似度的量,即从分布p到分布q的 KL 散度为它们之间的变化所带来的信息增益,而不是“距离”(KL散度不具有交换性,衡量不是空间而是两个分布间的信息损失):
而且
,相当于交叉熵的值等于KL 散度加上一项信息熵,那么在最小化交叉熵时,H(x)就可视为一个常量而可以被省略,交叉熵就直接等价于 了KL 散度,而KL 散度可以更加简单地从最大似然估计推导得到!但是在进行最大似然的时候需要注意到它不是“距离”,也就是说它不会对称,即便它衡量的是两个分布之间的差异,所以在一些情况下,
和
是不相等的,比如下图:
其中设p是两个高斯分布的混合,q是单个高斯。左边最小化D_KL(p||q),q将多峰模糊到了一起,使高频率质量放到所有峰上,而右边则选择了单个峰。简而言之就是左边的图是在p的基础上与q作比较,所以倾向于模糊多峰,而右边是在单峰的q上于p作比较,注重单峰的高质量。所以利用这个性质可以是可以按照不同的需求去最小化KL散度来达到不同的效果。
像神经网络的本质是函数的拟合近似,通过最小化损失函数来训练,此时使用KL散度来最小化近似分布时的信息损失,可以让网络学习到很多复杂的分布。 比如变分自编码器 (Variational Auto-encoders, VAE)和自编码器就可以采用。而且使用它会在使用sigmoid函数的网络情况下,梯度下降时因为学习速率可以被输出的误差所控制从而能避免均方误差损失函数学习速率降低的问题。
主要参考:
bengio deep learning