Infomation and Entropy (4 ~ 5) Errors & Probablities
Abstract. 两章好像都没有什么深刻的内容,所以写一起。摘录一些有价值的内容。
Chapter 4. Error 讲了 error detection and correction。其中一个重点是 Hamming 码,一种很妙的朴素编码,可以纠正一位的错误。
Chapter 5. Probability 讲了一些基础的概率。
Errors
显然传输信息的时候会发生损失或者混入噪音,这是一个需要解决的问题。两个关键的步骤是错误的 Detection 和 Correction
Hamming Distance
Definition.(Hamming Distance) 对于两个等长的字符串 $S$ 和 $S’$,定义他们的 Hamming Distance 为
$$
\#\{S_i \ne S’_i\}
$$
错误的 effect 即为输入和输出的 Hamming Distance。
那么如果想要做 Detection,如果已知错误的 effect 最多为 $i$,就必须保证编码中两个有效编码之间的 Hamming Distance 要大于 $i$。
一个简单的例子如下。
Problem. 发送一个 $n$ 位的信息,但是传输过程中可能有一位被随机反转。想要传输之后还原出正确的信息,编码的长度至少是多少?
Solution.
首先用上面的性质得到长度必须满足的不等式。如果一个串长度为 $m$,那么有 $m$ 个串和它的 Hamming Distance 为 $1$,因此需要满足
$$
2^n \times m \leq 2^m
$$
在一般的范围内 $m / log m$ 是单调递增的。注意到一个显然的下界是
$$
m = n + \log_2 n + 1
$$
考虑构造一种方案到达这个下界。我们的编码由三部分组成。
第一部分为原来的长度为 $n$ 的字符串。
第二部分为 $\log_2 n$ 个 Parity Code。其中第 $i$ 个是原字符串中,下标二进制第 $i$ 位是 $1$ 的所有位的异或和。
第三部分为第二部分的 Parity Code,为第二部分所有位的异或和。
首先可以确认错误是否发生在第二、三部分。否则,通过第二部分出错的位置可以定位到第一部分出错的位置。
其实这个做法类似于 Hamming Code,只是 Hamming Code 的排列方式更高妙一点。这标志着我们能想到的东西的最近年代来到了 20 世纪(雾)。
Single Bits
为了 dectect 和 correct 一个位的错误我们采用的方法是反复发送。发送两次称为 double redundant,三次称为 triple redundant。
定义.(Code rate) 称一个编码的 code rate 为原始信息长度除以编码长度。
可以用 code rate 衡量一个编码的效率。
Multiple Bits
Parity
奇偶校验位。考虑将信息八位一组,后附八位的异或和。
Rectangular Code
将信息摆成 $2\times n$ 的矩形,然后对每行每列求 parity 并摆在对应的行列,再求 parity 的 parity 摆在右下角。
可以纠正一位错误和检验两位错误。
Hamming Code
第 $0$ 位是废位,$2^i$ 位是校验位,扣掉这些位置后,顺次在其他位置上填写有效信息。第 $i$ 个校验位存放所有二进制第 $i$ 位为 $1$ 的位置的异或和。
回忆我们在 Hamming Distance 中提出的编码的原理。这个编码的长度同样符合该节中的不等式给出的下界。纠错方法为将二进制第 $i$ 位为 $1$ 的所有位置的值异或起来,这就是错误位的二进制第 $i$ 位。
Block Code
称一个长度为 $n$,有效数据(除开 parity bit)的长度为 $k$,编码之间最小 Hamming Distance 为 $(n, k, d)$ Block Code。
Advanced Code
诸如 Bose-Chaudhuri-Hocquenhem (BCH) Codes 和 Reed-Solomon Codes 等。
这些编码都用了比前述朴素编码要高级一些的代数。一般会将信息看成 $\mathbb{F}_2[x]$ 中的多项式。
Probability
出现了很多术语,中英文对照一下。
Outcome. 结果。
Event. 事件,实验所有可能结果的一个子集。
Fundamental Event. 基本事件,即单个结果构成的事件。
Universal Event, Null Event 必然事件和不可能事件,对应全集和空集。
Mutal Exclusive, Exhaustive 互斥,完备。
将完备的事件分成若干个互斥的成分称为 Partition,如果每个成分都是 fundamental event 称为 Fundamental Partition。
定性地可以将 partition 分为 coarse-grained partition 和 fine-grained partition(粗/细粒度划分)两类。
接下来讲了一些东西诸如 Joint Event,Conditional Probability 等。其中 Bayes 公式比较有用,摘录如下
$$
P(A_i | M) = \frac{P(A_i)P(M|A_i)}{P(M)}
$$
Information
考虑如何衡量我们对一个事件的不确定度。下面是一个例子:
现有 $32$ 人,其中有 $2$ 女 $30$ 男,从中随机选出一个人,要表示这个人需要 $5$ 个 bit。
假设我们现在知道了这个人是女的,那么我们就只需要 $1$ bit 就能表示这个人,这里我们得到了 $4$ bit 的信息。类似地如果知道了这个人是男的,那么我们就只需要 $\log_2 30$ bit,得到了 $\log_2 \frac{32}{30}$ 的信息。
形式化地,给定了一个 partiton $A_1, A_2, …, A_n$,如果确定了结果属于 $A_i$,那么我们得到的信息量为
$$
\log_2(\sum |A_i|) - \log_2(|A_i|) = \log_2\left(\frac 1{P(A_i)}\right)
$$
若仅已知此划分而不知结果具体属于哪一个分事件,我们可以计算得到的信息量的期望为
$$
I = \sum_{i=1}^nP(A_i)\log_2\left(\frac{1}{P(A_i)}\right)
$$
假定划分中有两个事件,一个概率为 $p$,一个概率为 $1-p$,那么信息量为
$$
I = p\log(1/p) + (1-p)\log(1/(1-p))
$$
简单计算可以知道,当 $p$ 取 $0.5$ 时 $I$ 最大,达到了 $1$ bit。这告诉我们一个 01 串如果是等概率随机的,那么它的信息量最大(雾)
然而我们知道文本并不会是等概率在随机,所以说信息量可能不会很大,比如 $I < \log_2(n)$,这时候我们就有比定长编码更高效的编码,如 Huffman 编码(疑似可以做到平均长度 $I < E <I+1$,预计在下一章会有证明)