最小熵原理(一):无监督学习的原理
By 苏剑林 | 2018-04-18 | 87713位读者 |话在开头 #
在深度学习等端到端方案已经逐步席卷NLP的今天,你是否还愿意去思考自然语言背后的基本原理?我们常说“文本挖掘”,你真的感受到了“挖掘”的味道了吗?
无意中的邂逅 #
前段时间看了一篇关于无监督句法分析的文章,继而从它的参考文献中发现了论文《Redundancy Reduction as a Strategy for Unsupervised Learning》,这篇论文介绍了如何从去掉空格的英文文章中将英文单词复原。对应到中文,这不就是词库构建吗?于是饶有兴致地细读了一番,发现论文思路清晰、理论完整、结果漂亮,让人赏心悦目。
尽管现在看来,这篇论文的价值不是很大,甚至其结果可能已经被很多人学习过了,但是要注意:这是一篇1993年的论文!在PC机还没有流行的年代,就做出了如此前瞻性的研究。虽然如今深度学习流行,NLP任务越做越复杂,这确实是一大进步,但是我们对NLP原理的真正了解,还不一定超过几十年前的前辈们多少。
这篇论文是通过“去冗余”(Redundancy Reduction)来实现无监督地构建词库的,从信息论的角度来看,“去冗余”就是信息熵的最小化。无监督句法分析那篇文章也指出“信息熵最小化是无监督的NLP的唯一可行的方案”。我进而学习了一些相关资料,并且结合自己的理解思考了一番,发现这个评论确实是耐人寻味。我觉得,不仅仅是NLP,信息熵最小化很可能是所有无监督学习的根本。
何为最小熵原理? #
读者或许已经听说过最大熵原理和最大熵模型,现在这个最小熵原理又是什么?它跟最大熵不矛盾吗?
我们知道,熵是不确定性的度量,最大熵原理的意思就是说我们在对结果进行推测时,要承认我们的无知,所以要最大化不确定性,以得到最客观的结果。而对于最小熵原理,我们有两个理解角度:
1、直观的理解:文明的演化过程总是一个探索和发现的过程,经过我们的努力,越多越多的东西从不确定变成了确定,熵逐渐地趋于最小化。因此,要从一堆原始数据中发现隐含的规律(把文明重演出来),就要在这个规律是否有助于降低总体的信息熵,因为这代表了文明演化的方向,这就是“最小熵原理”。
2、稍严谨的理解:“知识”有一个固有信息熵,代表它的本质信息量。但在我们彻底理解它之前,总会有未知的因素,这使得我们在表达它的时候带有冗余,所以按照我们当前的理解去估算信息熵,得到的事实上是固有信息熵的上界,而信息熵最小化意味着我们要想办法降低这个上界,也就意味着减少了未知,逼近固有信息熵。
于是,我沿着“最小熵原理”这条路,重新整理了前人的工作,并做了一些新的拓展,最终就有了这些文字。读者将会慢慢看到,最小熵原理能用一种极具解释性和启发性的方法来导出丰富的结果来。
语言的信息 #
让我们从考究语言的信息熵开始,慢慢进入这个最小熵原理的世界~
信息熵=学习成本 #
从《“熵”不起:从熵、最大熵原理到最大熵模型(一)》我们可以知道,一个对象的信息熵是正比于它的概率的负对数的,也就是
$$I(c)\sim -\log p_c\tag{1.1}$$
如果认为中文的基本单位是字,那么中文就是字的组合,$p_c$就意味着对应字的概率,而$-\log p_c$就是该字的信息量。我们可以通过大量的语料估算每个汉字的平均信息:
$$\mathcal{H}_c = -\sum_{c\in\text{汉字}} p_c\log p_c\tag{1.2}$$
如果$\log$是以2为底的话,那么根据网上流传的数据,这个值约是9.65比特(我自己统计了一些文章,得到的数值约为9.5,两者相当)。类似地,英文中每个字母的平均信息约是4.03比特。
这个数字意味着什么呢?一般可以认为,我们接收或记忆信息的速度是固定的,那么这个信息量的大小事实上也就相当于我们接收这个信息所需要的时间(或者所花费的精力,等等),从而也可以说这个数字意味着我们学习这个东西的难度(记忆负荷)。比如,假设我们每秒只能接收1比特的信息,那么按字来记忆一篇800字文章,就需要$9.65\times 800$秒的时间。
中英文孰优孰劣? #
既然中文单字信息熵是9.65,而英文字母信息熵才4.03,这是不是意味着英文是一种更高效的表达呢?
显然不能这么武断,难道背英语作文一定比背诵汉语作文要容易么?
比如800字的中文作文翻译成英文的话,也许就有500词了,平均每个英文4个字母,那么信息量就是$4.03\times 500\times 4 \approx 9.65\times 800$,可见它们是相当的。换句话说,比较不同文字单元的信息量是没有意义的,有意义的是信息总量,也就是说描述同样的意思时谁更简练。
当两句话的意思一样时,这个“意思”的固有信息量是不变的,但用不同语言表达时,就不可避免引入“冗余”,所以不同语言表达起来的信息量不一样,这个信息量其实就相当于记忆负荷,越累赘的语言信息量越大,记忆负荷越大。就好比教同样的课程,有的老师教得清晰明了,学生轻松地懂了,有的老师教得哆里哆嗦,学生也学得很痛苦。同样是一节课程,本质上它们的知识量是一样的,而教得差的老师,表明授课过程中带来了过多的无关信息量,这就是“冗余”,所以我们要想办法“去冗余”。
上述中英文的估计结果相当,表明中英文都经过长期的优化,双方都大致达到了一个比较优化的状态,并没有谁明显优于谁的说法。
套路之路 #
注意,上面的估算中,我们强调了“按字来记忆”,也许我们太熟悉中文了,没意识到这意味着什么,事实上这代表了一种很机械的记忆方式,而我们事实上不是这样做的。
念经也有学问 #
回顾我们小时候背诵古诗、文言文的情景,刚开始我们是完全不理解、囫囵吞枣地背诵,也就是每个字都认识、串起来就不知道什么含义的那种,这就是所谓的“按字来阅读”了。很显然,这样的记忆难度是很大的。后来,我们也慢慢去揣摩古文的成文规律了,逐渐能理解一些古诗或文言文的含义了,背诵难度就会降下来。到了高中,我们还会学习到文言文中“宾语前置”、“定语后置”之类的语法规律,这对我们记忆和理解文言文都是很有帮助的。
重点来了!
从古文的例子我们就能够感受到,像念经一样逐字背诵是很困难的,组词理解后就容易些,如果能找到一些语法规律,就更加容易记忆和理解了。但是我们接收(记忆)信息的速度还是固定的,这也就意味着分词、语法这些步骤,降低了语言的信息量,从而降低了我们的学习成本!
再细想一下,其实不单单是语言,我们学习任何东西都是这样的,如果只有少数的内容要学习,那么我们强行记住就行了,但学习的东西比较多时,我们就试图找出其中的“套路”,比如中国象棋中就分开局、中局、残局,每种局面都有很多“定式”,用来降低初学者的学习难度,而且也是在复杂局面中应变的基础;再好比我们有《孙子兵法》、《三十六计》,这些都是“套路大全”。通过挖掘“套路”来减轻逐一记忆的负担,“套路”的出现就是一个减少信息量的过程。
说到底,念经念多了,也能发现经文的套路了。
以不变应万变 #
一言以蔽之,我们接收信息的速度是固定的,所以加快我们的学习进度的唯一方法就是降低学习目标的冗余信息量,所谓“去芜存菁”,这就是NLP中的最小熵原理了,也就是一开始所提到的“去冗余”,我们可以理解为是“省去没必要的学习成本”。
事实上,一个高效的学习过程必定能体现出这个思想,同样地,教师也是根据这个思想来设计他们的教学计划的。在教学的时候,教师更倾向于讲授那些“通解通法”(哪怕步骤多一点),也不会选择每一题都讲一种独特的、巧妙的解法;在准备高考时,我们会努力摸索各种出题套路、解题套路。这些都是通过挖掘“套路”来降低信息熵、从而降低学习成本的过程,“套路”就是“去冗余”的方法。
“套路”即“定式”,有了足够多的套路,我们才能以不变应万变。所谓“万变不离其宗”,这个“宗”,也就是套路了吧。当“套路”过多时,我们又会进一步寻找“套套路”——即套路的套路,来减轻我们记忆套路的负担,这是一个层层递进的过程。看来,将个体现象上升为套路,正是人类的智能的体现呢~
好了,空话不宜多说,接下来我们就正式走上修炼套路的旅途。
转载到请包括本文地址:https://kexue.fm/archives/5448
更详细的转载事宜请参考:《科学空间FAQ》
如果您还有什么疑惑或建议,欢迎在下方评论区继续讨论。
如果您觉得本文还不错,欢迎分享/打赏本文。打赏并非要从中获得收益,而是希望知道科学空间获得了多少读者的真心关注。当然,如果你无视它,也不会影响你的阅读。再次表示欢迎和感谢!
如果您需要引用本文,请参考:
苏剑林. (Apr. 18, 2018). 《最小熵原理(一):无监督学习的原理 》[Blog post]. Retrieved from https://kexue.fm/archives/5448
@online{kexuefm-5448,
title={最小熵原理(一):无监督学习的原理},
author={苏剑林},
year={2018},
month={Apr},
url={\url{https://kexue.fm/archives/5448}},
}
April 18th, 2018
期待!!!
April 20th, 2018
期待大神后续的见解!
January 2nd, 2019
个人理解最大熵就是训练过程中希望模型无偏好,能拟合到客观结果。最小熵则是在推理阶段,使用认为最有可能的推论。望指正。
最大熵公平地对待各种可能性,是“承认自己的无知”;最小熵是认为自然界(也可以理解为其他人)在很多情况下都已经达到最优状态,是“接受他人的聪明”。
这跟下棋的道理一样,“最大熵”意味着我们无法断定对手下一步究竟走什么,“最小熵”意味着我们必须假设,对手下一步会走对他那一方最有利的那一步。
哇,这么一解释豁然开朗啊!厉害!
May 26th, 2019
有点意思,特意注册一个账号和苏先生交流一下。
1,从信息论的角度来看,“去冗余”就是信息熵的最小化。这个提法欠妥。
冗余并没有增加熵,只是从信宿的角度,改变了理解信息的难易,信源的entropy或者也就是你说的固有的entropy是没有变的。冗余可能增加或者减少信宿接收处理信息的难易。
2,所谓学习,就是指从信宿的角度如何学习。“所以加快我们的学习进度的唯一方法就是降低学习目标的冗余信息量”,唯一方法应该是重构数据的表现形式,去除冗余或者增加冗余,只要有助于信宿“接受”,“理解”都是好的方法。人脑有人脑的学习模式(如抽象,因果,结构化),机器有机器的学习模式(目前主要是统计学习方法)。无关冗余,而在信宿prefer的“数据表示”也。
November 12th, 2019
联想起侯世达的geb
October 3rd, 2021
[...]数据挖掘:数据清洗——数据噪声处理 - 算法网 算法网首页精品教程数据结构时间复杂度空间复杂度树二叉查找树满二叉树完全二叉树平衡二叉树红黑树B树图队列散列表链表算法常用算法排序算法贪心算法递归算法动态规划分治算法回溯法分支限界法拓扑排序字符串相关算法数组相关算法链表相关算法树相关算法二叉树相关算法LeetCodeOnline Judge剑指offer编程语言javajava并发Java多线程[...]
October 9th, 2021
苏神讲故事也是一把好手啊!
November 18th, 2023
已经看了知乎,但是对式2.9和2.10的推导没看懂,能将详细过程说下吗?谢谢
第二篇文章的问题为啥问到第一篇文章来...
我看了一下,看上去那处不算十分难理解,也许你可以尝试多读几遍。
November 20th, 2023
假设存在语义信息,本文的意思应该是保持语义信息量不变,降低数据信息量,提高训练效率。怎么降低,就是分词,分句等预处理。但是这样能提高网络表现吗?直观感觉会降低网络表现。
高压缩率Tokenizer是目前LLM的基础组件之一。
感谢苏神,这里我理解错了。降低数据信息量,不等于降低数据量。