浅谈我自己眼中的信息熵


在机器学习中不可避免的会接触到信息熵和交叉熵这些个东西,这是绕不开的。然后,笔者就去网上查阅资料,作为一个机械狗,结果自然是越看越懵逼,就搁置了一段时间。今日回头反复咂摸,似乎又了那么一点味道。于是特记于此,以为进步之脚印。

信息

要说信息熵这个东西啊,我们就显得说说什么叫信息。我们日常说某段文字信息量真大,或者说某些表述说的都是废话,毫无信息。这里的信息这个东西实在是太抽象了,你说说看我这篇文章含有多少信息量?要按我的理解,信息量是我们在传递它的过程中所花费的代价的大小,这很好理解,我们要传递越大的信息量,我们自然要花费越大的代价。譬如,“太阳东升西落”对于我们成年人来讲,并没有带给我们什么信息,因为我们很确信太阳是东升西落的,我跟本不需要传递这句话给你,你也知道太阳会东升西落,因为这是一件确定的事.换句话说,对于确定的事情,我传递花费的代价是零,也就是说,这确定的事的信息量是零。

另外一个例子,对于一个骰子,如果我来抛掷,然后我把结果要传递给你,那么我就需要花费一定的代价才能传递给你,比如,我需要写个字条给你,上面个写"1", 或者"2",或者"3"...反正就是要把结果写在上面.你看了之后就知道我的投掷结果.需要说明的是,这里的"传纸条"和"写"都不是传递代价,因为我可以使用其他的方式,比如"说",比如"比划",这里的"1,2,3,4..."的编码才是传递代价,因为我们双方需要约定好这个编码.如果我把骰子换作硬币,那么我只需要"0/1"两个编码就能把抛掷的结果传递给你,直观的感觉就是,代价比抛骰子小了不少.

但是这里光谈传递代价还不方便,我们需要量化传递代价,这个具体的量化值就可以作为代价的度量,也就是信息量的度量。

那么我们开始来定义所谓的“信息量”,他应该符合下面几个特征吧:

  • 应该是个非负数吧。
  • 应该能良好的定义加法吧。两句不同的话传达的信息应该能相加,即对于。
  • 应该依赖于概率连续变动。
  • 应该是“发生事件”的概率的减函数。如上文所说,对于一个观察到的事件A,如果P(A)的概率越小,那么“事件A的发生”带给我们的信息也就越多。

跟据网友们所说,符合这些七七八八的条件的只有$$-log  p(X)$$这个函数,香浓给出了严格的证明。

信息熵

有了我们说的“信息量”这个定义,我们就能很好的解释信息熵为何物了。热力学里熵是衡量一个系统无序程度的度量。这里需要指出的是,熵是一个动态的概念,是系统从一个状态变化至另一个状态过程中,我们的不确定程度的度量.换句话说,我们在确定的时刻\(t_1\),系统没有熵的概念,同样的\(t_2\)也没有,因为确定的时刻,系统的状态是固定的且已知的(抛开不确定性原理),但是从\(t_2\)开始,我们就不知道\(t_3\)时刻的状态是什么样,但是我们能大致的估计状态的范围,这个估计"范围"越大,我们就越不确定\(t_3\)的具体状态,也就是熵越大\(t_2\)到\(t_3\)的熵越大.

同样的,我们这里的信息熵也是很亮信息的不确定度的一个度量。一个样本点的信息量由-log(p(x))给出,这个样本点信息的概率是p(x),那么这个样本点的信息量的不确定程度就是\(-p(x)logp(x)\),那么系统总的信息量不确定程度就是:

$$H(x) = -\sum_{x \in U} p(x)logp(x)$$

信息熵与编码

前面说过,信息量其实与"传递代价"挂钩,这里的"传递代价"就是编码长度,对于传递越大的信息,我们需要编码也就会越长,也就是代价越大.

我们总是希望能以最短的编码传递尽可能多的信息。要实现尽可能短的编码长度,我们很容易想到,最频繁出现的事件用最短的编码,次频繁的用稍长一点的……最不可能的事件我们用最长的编码,如此,我们设计出来的系统在长期传输信息过程中,平均需要的编码长度最短。怎么理解上面这句话呢?举个栗子(大家都常用的栗子,因为好算又形象):

时间X的样本空间是{A,B,C,D},发生的概率分别是\(\frac{1}{2},\frac{1}{4},\frac{1}{8},\frac{1}{8} \),在计算机中,如果我们约定一个事件用两位来编码,那么编码就是00, 01, 10 ,11,我们的平均编码长度就是\(0.5 \times 2 + 0.25\times 2+ 0.125\times 2 + 0.125\times 2 = 2\).但是事实上,A事件的出现频率高,我们希望用短一点的编码,其他的事件允许适当的长一点,这样,总的平均编码也可能变短。比如我们0, 10,110 , 111来分别编码的话,那么我们的编码长度就是\(0.5 \times 1 + 0.25\times 2+ 0.125\times 3 + 0.125\times 3 = 1.75\),另一方面,我们计算这个系统的信息熵\(-(\frac{1}{2} \times \log_2\frac{1}{2} +\frac{1}{4}\times \log_2\frac{1}{4}+\frac{1}{8}\times \log_2\frac{1}{8} +\frac{1}{2}\times \log_2\frac{1}{8}) = 1.75\)从上面这个角度讲,单个样本点的最短编码长度等价于它的信息量,这也印证了"信息量越大传递代价也就越大"这句话.信息熵等价于平均最短编码长度。

交叉熵与相对熵

终于到了我们的目标问题–交叉熵了。所谓交叉熵就是说我们在非真实分布q(x)下计算真实分布p(x)出来的“平均最短编码长度”–也即信息熵。用公式表达就是:

$$H(p,q)=\sum p(x) \cdot \frac{1}{q(x)}$$

因为我们把q(x)当作是真实的分布,依据p(x)的来分配各个样本点的编码长度,计算出的信息熵一般情况是不等于系统的真正信息熵的。有严格的证明表明$$H(p,q) \ge H(p),$$当且仅当p=q时取到等号,这也就是说,我们要最小化交叉熵,我们就必须尽可能的是q(x)的分布贴近与p(x)的分布,这也就是我们用交叉熵来衡量两个概率分布的相近程度的原因,基于此,我们自然就可以用交叉熵来衡量机器学习最后的预测概率分布与真是概率分布的差异,将之作为我们优化的目标函数(也即代价函数)咯~~

相对熵的定义就很简单了$$D(p \parallel q) = H(p,q)-H(p)=\sum p(x) \cdot \frac{p(x)}{q(x)}$$

哎呀呀,,,终于写完了,,,收工回宿舍了。

发表评论

电子邮件地址不会被公开。 必填项已用*标注