信息熵

我们先明确一个概念, 通常可以直观地把熵理解为度量一个系统无序程度的值, 而信息熵就是度量某个随机信源输出结果的不确定性的量, 熵越大, 说明在观测之前我们越难以预测它会输出什么

而这个不确定性的定义是什么, 比如说我们给你个八位二进制数, 它永远是某个值, 比如 0110110001101100, 那么它的输出就是完全确定的, 信息熵为 00, 而如果它还有概率出现别的值, 比如 0111100001111000, 那它的不确定性就会增加, 所以信息熵的意义就是去量化这种不确定性, 对无损压缩来说, 熵给出了平均编码长度的理论下界, 也就是说, 如果一个信息源的熵是 H(X)H(X),那么长期来看, 任何无损编码的平均码长都不可能低于这个值, 而通过合适的编码方法, 可以在长序列上逼近这个下界

简单的可以理解为为各种技术提供了一个理论目标值吧

按标准流程, 先给公式

H(X)=i=1np(xi)log2p(xi)H(X) = -\sum_{i=1}^np(x_{i})\log_2 p(x_{i})

由于自学还是什么的缘故, 我确实一直没有很清晰的理解, 甚至看了很多资料也没搞懂, 但最近接触这方面, 突然就理解了, 其实感觉很多资料的入手点都不是很合理, 也可能是我的关注点不对, 不重要, 废话不说了, 我们回到正题

首先我们肯定是不能从公式入手, 公式的性质推出来公式这不扯淡吗, 丢掉这个公式

我们先来看这个我随便打的二进制字符串

1
01101100

这里有 8 位二进制数, 如果每个都可以是 0 或 1 的话有 282^8 种可能, 也就是这些个空位所能表示的可能状态有这么多, 这个没问题吧

1
1010000000000010

然后我们来到 16 位, 那是多少, 2162^{16} 种, 用这种 2 的 n 次方的表达形式我们就很容易看出来, 它们的增幅是指数级别, 也就是 log22n=n\log_{2} 2^n = n, 这里的 nn 是位数, 取对数后得到的 nn 也就是区分这 2n2^n 种可能状态所需要的 bit 数, 这样我们就能把这些可能状态的表示拉到一个线性的层面上了

然后跟着这个思路, 我们还是找线性关系, 我们可以从最简单的均匀分布入手, 我们可以发现还是取一个负对数, log212n=n-\log_2{\frac{1}{2^n}} = n, 这其实就是该结果出现时所带来的信息量, 我们这里是均匀分布的关系, 所以是 nn, 也就代表着我们实际获得了 nn bit 的信息, 而我们再看一个反面, 也就是假设这个信源只会输出某个确定的 n 位数, 也就是它的概率为 11, 那么计算出来的负对数就是 log21=0-\log_{2}1 = 0, 我们接收的信息量为 0, 因为我们本来就知道这个结果

上述这个对概率取负对数得到的信息量我们称之为自信息

I(x)=log2p(x)I(x)=-\log_2 p(x)

而我们直接去衡量这个自信息绝对是不够的, 因为这只是某一种情况所传递的信息, 对于一整个信息系统而言, 假设有一个概率很小的信息那么它的自信息会非常大, 但总的信息熵可以很小

所以我们需要更新对整个信息系统的理解, 也就是说我们先验地知道这个信息系统可能处于某几个离散状态, 并且每个状态都有对应的概率, 假设是个 0101 二进制信息系统, 那么未观测时我们只知道它以 P(0)P(0) 输出 00, 以 P(1)P(1) 输出 11, 而经过观测后才确定结果是 00 或者 11, 概率越小的结果越难预测, 观测到它时得到的自信息也就越大

理解这个之后我们也随即可以理解熵的含义, 回过头来看这个公式, 其实就是自信息的期望

H(X)=i=1np(xi)log2p(xi)=E[I(X)]H(X) = -\sum_{i=1}^np(x_{i})\log_2 p(x_{i})=E[I(X)]