前言

信息论是由克劳德·香农发展,用来找出信号处理与通信操作的基本限制,如数据压缩、可靠的存储和数据传输等。自创立以来,已被应用多个领域,例如自然语言处理(NLP)、机器学习等领域。

定长编码(Block Codes)

让我们从一个例子开始。小明酷爱动物,日常谈吐中经常提及各种动物,包括:狗、猫、鱼和鸟。一天,小明见到小红(原谅我这么俗的名字),两个人决定用二进制的方式来交流。为了交流方便,小明和小红决定制定一套编码规则

此时,若小明要发出“狗 猫 狗 鸟”的信息,需要完成以下过程:

通过以上三个过程,便可以将“狗 猫 狗 鸟”转化为二进制了。

变长编码(Variable Codes)

实际中,通讯往往需要付费,假设通讯按位(bit)收费。为了省钱,小明和小红需要寻找合适的编码策略。在设计编码策略中,小红统计了小明的说话

此时,若按照上面的定长编码,每个字的平均编码长度

L(x)=2×12+2×14+2×18+2×18=2

L(x)=2\times\frac{1}{2}+2\times\frac{1}{4}+2\times\frac{1}{8}+2\times\frac{1}{8}=2

若想进一步压缩平均编码长度,变长编码是一种有效的手段。变长编码的基本思想:出现频率高的字符使用短编码,出现频率低的字符使用长编码。(你可能会问,为什么不让所有的编码都使用短编码?嘿嘿,都使用短编码,还能实现一一对应吗?)基于上述思想,小明和小红重新指定了一套新的编码策略:

此时,每个字的平均编码长度为

L(x)=1×12+2×14+3×18+3×18=1.75

L(x)=1\times\frac{1}{2}+2\times\frac{1}{4}+3\times\frac{1}{8}+3\times\frac{1}{8}=1.75

显然,新的策略能够帮小明和小红省很多钱。那么,小明和小红是如何设计的呢?

无损编码(lossless compression)

为了便于接下来的描述,以下图为例介绍几个名称

其中狗、猫、鱼等称为源符号, 0 0、0101、 110 110等称为码字,整个映射使用 C(x) C(x)表示。

无损编码

小明和小红的交流中,首先要保证信息的无损性,即保证编码后的信息能够无损的复原。若使用定长编码,复原信息轻而易举便可实现,而变长编码则不同。假如使用上图,此时小明给出的代号为

根据约定好的码表,小红既可以理解成“狗 狗 鸟 狗”,也可以理解成“狗 猫 鱼”。显然,这是小明和小红不愿意看到的。通过查阅资料,小明和小红发现他们遇到的问题是“无损编码”问题:

无损编码是一类数据压缩算法,其压缩的数据能够无损的复原为原始数据。

若 C(x) C(x)是无损编码,它需要是:

  • 非奇异编码(Non-singular code): x1≠x2⟹C(x1)≠C(x2) x_1 \neq x_2 \Longrightarrow C(x_1) \neq C(x_2)

在实际中,我们往往需要一次编码一系列字符,而不是一次编码一个字符,因此它需要满足:

  • 可扩展编码(Extension of a code): C(x1,...,xn)=C(x1)...C(xn) C(x_1,...,x_n)=C(x_1)...C(x_n)
  • 唯一可译解码(Unique decodability): xni≠xmj⟹C(xni)≠C(xmj) x_i^n \neq x_j^m \Longrightarrow C(x_i^n) \neq C(x_j^m)

尽管唯一可译解码已经足够强了,但它并不能支撑“收到所有字符以后才进行解码”的情况。例如, C(x) C(x)是

x x 1 2 3 4
C(x)C(x) 10 00 11 110

当收到的代号是 110000 110000,解码为 322 322,而收到的代号是 1100000 1100000,解码为422。显然,当收到所有信息再解码时, 11 11就表示了不同的字符。对于此种问题,前缀编码是一种有效的解决方案,定义如下:

  • x1≠x2⟹C(x1)≠Prefix(C(x2)) x_1 \neq x_2 \Longrightarrow C(x_1) \neq Prefix(C(x_2))

即任意符号的编码都不是其他编码的前缀。基于前缀编码, C(x) C(x)是

x x 1 2 3 4
C(x)C(x) 0 10 110 111

在上面的介绍中,分别介绍了“非奇异编码”、“唯一编码”、“前缀编码”。这些编码方式的相互关系可以通过下图来描述:

通过上面的知识,前缀编码是解决编码复原最好的方式,下面就需要考虑如何优化编码长度。

最优编码

需要注意的是,本文讨论的是源符号有限且已知的编码。更多关于最优编码的知识,可以参考Information Processing and Learning。

码树

在介绍最优编码之前,首先介绍一下码树和Karft不等式。对于给定码字的全体集合,可以使用码树来表示。对于 r r进制的码树,如下所示,其中左图为二元码树,右边为三元码树。在码树中RR点是树根,从树根伸出树枝,构成 r r元码树。

Karft不等式

对于rr元字母表上的前缀编码,码字长度为 l1,l2,...,lm l_1,l_2,...,l_m必须满足不等式

∑ir−li≤1

\sum_{i} r^{-l_{i}} \leq 1

反之,若给定满足以上不等式的一组码字长度,则存在一个相应的前缀码,其码字长度就是给定长度。其中 r r可以理解成一个节点最多的孩子节点的个数。

正向证明
假设l1≤l2≤...≤lnl_1 \leq l_2 \leq ... \leq l_{n}, A A表示rr进制、深度为 ln l_{n}的码树。对于使用 r r进制表示的l≤lnl \leq l_{n}的任意字符,均能在码树 A A找到对应位置,进而第ii个前缀编码在树 A A中对应节点是viv_{i}。假设 Ai A_{i}表示以节点 vi v_{i}为根的子树,此树的深度为 ln−li l_{n}-l_{i}。根据树的性质可知, Ai A_{i}叶节点的数量为

|Ai|=rln−li

|A_{i}|=r^{l_{n}-l_{i}}

考虑到前缀编码的特性,子树之间不存在叶节点交叉,即:

Ai∩Aj=∅,i≠j

A_{i} \cap A_{j} = \varnothing, i \neq j

因此

|⋃i=1nAi|=|∑i=1nAi|=∑i=1nrln−li≤rln

|\bigcup_{i=1}^{n} A_{i}|=|\sum_{i=1}^{n} A_{i}|=\sum_{i=1}^{n} r^{l_{n}-l_{i}} \leq r^{l_{n}}

其中 rln r^{l_{n}}是所有也节点的数量。

反向证明
假设 l1≤l2≤...≤ln l_1 \leq l_2 \leq ... \leq l_{n}。从整个树的第 l1 l_{1}随机选择一个节点,使其对应第一个字符的编码。因为需要构建前缀编码,因此以该节点为根的子树所有节点都不再使用。这里假设整个这棵树的深度为 ln l_{n}。因此不再考虑的节点个数为 rln−l1 r^{l_{n}-l_{1}}。依次类推,不再考虑的节点个数为

∑i=1nrln−li

\sum_{i=1}^{n}r^{l_{n}-l_{i}}

这时问题就转化为:不再考虑的节点个数是否比总的节点个数( rln r^{l_{n}})多。由于满足Kraft不等式,因此可以构建前缀编码。

至此正向、反向证明均已完成。

最优编码

随机变量 X X的任一rr元前缀码的期望长度

L≥Hr(X)

L \geq H_{r} (X)

当且仅当 r−li=pi r^{-l_{i}}=p_{i},等式成立。

proof: proof:
上面的问题可以转化为

minli∑ipili  subject to:∑ir−li≤1

\min_{l_{i}} \sum_{i} p_{i}l_{i}\ \ subject\ to:\sum_{i}r^{-l_{i}}\leq 1

上面的问题可以转化为不等式约束下的拉格朗日数乘法,即

L(li,λ,u)=∑ipili+λ(∑ir−li−1−u2)

L(l_{i},\lambda,u)=\sum_{i}p_{i}l_{i}+\lambda(\sum_{i}r^{-l_{i}}-1-u^{2})

根据极值满足的条件得:

⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪pi−λ∗r−l∗ilnr=0∑ir−li−1−u2=0−2λu=0

\begin{equation} \begin{cases} p_{i}-\lambda^{*}r^{-l_{i}^{*}}\ln{r}=0\\\\ \sum_{i}r^{-l_{i}}-1-u^{2}=0\\\\ -2\lambda u=0 \end{cases} \end{equation}

显然 λ≠0 \lambda\neq0,则 u=0 u=0。从公式一可知:

r−li=piλlnr

r^{-l_{i}}=\frac{p_{i}}{\lambda\ln{r}}

从公式二可知:

∑ir−li=1=∑ipiλlnr=1λlnr

\sum_{i}r^{-l_{i}}=1=\sum_{i} \frac{p_{i}}{\lambda \ln{r}}=\frac{1}{\lambda \ln{r}}

故 λ∗=1lnr \lambda^{*}=\frac{1}{lnr}。进而 l∗i=logr1pi l^{*}_{i}=\log_{r}{\frac{1}{p_{i}}}。此时最优编码的长度便是熵!

经过上面的证明可知,小明只需要用前缀编码,且码长满足 logr1pi \log_{r}{\frac{1}{p_{i}}}便可获得最优的编码长度。

总结

通过上面的讨论,我们找到了小明和小红信息交流的理论依据。在后面的博客中,我会带来更多知识!

6.信息论(一):信息量、熵和最优编码相关推荐

  1. 信息论基础(信息量、熵、KL散度、交叉熵)

    信息论基础(信息量.熵.KL散度.交叉熵) 文章目录 信息论基础(信息量.熵.KL散度.交叉熵) 1. 信息量与熵 2. KL散度与交叉熵 交叉熵与LogisticLogisticLogistic回归 ...

  2. 我理解的信息论——自信息、熵、互信息

    原文:http://blog.sina.com.cn/s/blog_5fc770cd0100ia5k.html 信息论    信息是关于事物的运动状态和规律的认识,它可以脱离具体的事物而被摄取.传输. ...

  3. UA MATH636 信息论6 微分熵

    UA MATH636 信息论6 微分熵 Differential Entropy Conditional Differential Entropy Differential Entropy of Ga ...

  4. 信息论中的熵(香农熵)

    表示一个数所需最少位bit 很简单, 如果数为x, 则最少需要 lb(x) = log2(x) 位bit来表示 很明显这个对大多数x得到的是一个小数 则 LOG2(x) = [log2(x)] 其中 ...

  5. 信息论基础——信源熵及其性质研究

    本文仅供学习使用,如有侵权请及时联系,博主会第一时间进行处理 信源熵及其性质研究 一.实验目的 二.实验原理及内容 三.实验设备与材料 四.实验步骤 五.实验程序及运行结果 六.实验总结 一.实验目的 ...

  6. 信息论:信息量的计算

    香农定义,一个事件包含信息量的大小由这个事件消除了多少不确定性决定 计算得出的信息称为 Shannon information content 信息量在某些情况下是可加的,比如: 得知一个六面骰子投掷 ...

  7. 熵,交叉熵,散度理解较为清晰

    20210511 https://blog.csdn.net/qq_35455503/article/details/105714287 交叉熵和散度 自己给自己编码肯定是最小的 其他的编码都会比这个 ...

  8. AI入门:通俗讲解熵、交叉熵和 KL 散度

    全文共 4351 字,23 幅图, 预计阅读时间 22 分钟. 本文被以下三份资料所启发,纯纯的致敬! [Christopher Colah] - Visual Information Theory ...

  9. 熵、KL散度、交叉熵公式及通俗理解

    熵 根据香农信息论中对于熵的定义,给定一个字符集,假设这个字符集是X,对x∈X,其出现概率为P(x),那么其最优编码(哈夫曼编码)平均需要的比特数等于这个字符集的熵. 如果字符集中字符概率越趋于平均, ...

最新文章

  1. P2P之UDP穿透NAT的原理与实现(转)
  2. js合并同类数组里面的对象_通过同类群组保留估算客户生命周期价值
  3. 阿里云产品头条(2017年12月刊)
  4. PYTHON之计算机语言基础知识 —— 字符编码
  5. 18. strings
  6. Solr优化案例分析
  7. refprop物性库_refprop 9.1 下载-refprop(制冷剂物性查询运算软件)附中文教程 9.1 最新免费版 - 河东下载站...
  8. go语言 过滤 html,golang 去除html标签-Go语言中文社区
  9. 马斯克:让我成功的其实是工程思维
  10. 国家计算机考试培训心得,最新计算机培训心得总结5篇
  11. 如何使用 AVIF 图片格式
  12. 关于宽哥英语课,本人的遭遇
  13. 【剑桥摄影协会】色彩管理之色彩空间
  14. Java 埃拉托色尼筛选法
  15. 解决NVIDIA GeForce系列显卡NVENC并发Session数目限制问题
  16. 0930-值得纪念的一天,永远不要心存侥幸
  17. html5新特性(一)
  18. CSS水平居中与垂直居中
  19. Rocket 要以硬件隔离引潮流,Docker说” NO”
  20. GDB调试错误显示没有文件,退出代码127

热门文章

  1. 输出直角三角形图案-c++
  2. Java-多人聊天小程序
  3. TextView.setText()为什么会出错
  4. 【java感悟】接口,抽象类的关系
  5. DBCA创建数据库实例
  6. 华为台式机擎云W515 PGUV-WBY0安装银河麒麟V10
  7. 计算机安全应急演练简报,开封市网络安全应急演练表彰大会在计算机与信息工程学院举行...
  8. 取消IPV4自动配置
  9. 设置git使用vimdiff比较差异
  10. 停车还能360全方位影像_新款途锐2.0版、3.0版均能升级的原厂360全景影像及盲点辅助系统...