加权交叉熵_最小熵原理:“层层递进”之社区发现与聚类

bebd3595216c87f238f8144e4d099c54.gif

作者丨苏剑林

单位丨追一科技

研究方向丨NLP,神经网络

个人主页丨kexue.fm

让我们不厌其烦地回顾一下:最小熵原理是一个无监督学习的原理,“熵”就是学习成本,而降低学习成本是我们的不懈追求,所以通过“最小化学习成本”就能够无监督地学习出很多符合我们认知的结果,这就是最小熵原理的基本理念。

这篇文章里,我们会介绍一种相当漂亮的聚类算法,它同样也体现了最小熵原理,或者说它可以通过最小熵原理导出来,名为 InfoMap [1],或者 MapEquation。

事实上 InfoMap 已经是 2007 年的成果了,最早的论文是 Maps of random walks on complex networks reveal community structure [2],虽然看起来很旧,但我认为它仍是当前最漂亮的聚类算法,因为它不仅告诉了我们“怎么聚类”,更重要的是给了我们一个“为什么要聚类”的优雅的信息论解释,并从这个解释中直接导出了整个聚类过程。

63069d49f5ef5723d3a2b6e218385fa2.png

▲ 一个复杂有向图网络示意图。图片来自 InfoMap 最早的论文 Maps of random walks on complex networks reveal community structure

当然,它的定位并不仅仅局限在聚类上,更准确地说,它是一种图网络上的“社区发现”算法。所谓社区发现(Community Detection),大概意思是给定一个有向/无向图网络,然后找出这个网络上的“抱团”情况,至于详细含义,大家可以自行搜索一下。简单来说,它跟聚类相似,但是比聚类的含义更丰富(还可以参考《什么是社区发现?》[3])。

熵与编码

在前面几篇文章中,我们一直用信息熵的概念来描述相关概念,而从这篇文章开始,我们引入信息熵的等价概念——平均编码长度,引入它有助于我们更精确地理解和构建最小熵的目标。

二叉树编码

所谓编码,就是只用有限个标记的组合来表示原始信息,最典型的就是二进制编码,即只用 0 和 1 两个数字。编码与原始对象通常是一一对应的,比如“科”可能对应着 11,“学”对应着 1001,那么“科学”就对应着 (11,1001)。

注意这里我们考虑的是静态编码,即每个被编码对象跟编码结果是一一对应的,同时这里考虑的是无分隔符编码,即不需要额外的分隔符就可以解码出单个被编码对象。这只须要求每个编码不能是其余某个编码的前缀(这样我们每次只需要不断读取编码,直至识别出一个编码对象,然后再开始新的读取)。这就意味着所有编码能够构建成一棵二叉树,使得每个编码对应着这棵树的某个叶子,如图所示。

d4ff518a8840cc8f5682055e233f88d1.png

▲ 每个编码都不是其余某个编码的前缀,所以这些编码可以构成一棵二叉树

在此基础上,我们可以得到一个很有趣也很有意义的结论,就是假设 n 个不同的字符,它们的编码长度分别为f2d90f378e4a7bc34bbbadb42c699d6f.png,那么我们有:

7b1afadb97d703cfb7c2324f20eae7d7.png

这其实就是这种二叉树表示的直接推论了,读者可以自行尝试去证明它。

最短编码长度

现在想象一个“速记”的场景,我们需要快速地记录下我们所听到的文字,记录的方式正是每个字对应一个二进制编码(暂时别去考虑人怎么记得住字与编码间的对应关系),那为了记得更快,我们显然是希望经常出现的字用短的编码,比如“的”通常出现的很频繁,如果用 11000010001 来表示“的”,那么每次听到“的”我们都需要写这么一长串的数字,会拖慢记录速度,反而如果用短的编码比如 10 来表示“的”,那相对而言记录速度就能有明显提升了。

假设一共有 n 个不同的字符,每个字符的出现概率分别是 c4e6244eab4bbdb4ddfdf11c0559dc89.png ,那么我们可能会感兴趣两个问题: 第一是如何找到最优的编码方案,使得总的平均编码长度最短;第二是理论上这个平均编码长度最短是多少?

对于第一个问题,答案是 Huffman 编码,没错,就是 Word2Vec 里边的 Huffman Softmax 的那个 Huffman,但这不是本文的重点,有兴趣的读者自行找资料阅读就好。而第二个问题的答案,是信息论里边的一个基本结果,它正是信息熵

8f9b931e847552d8d4c4c0db7f23612a.png

也就是说,信息熵正好是理论上的最短平均编码长度。注意这是一个非常“强大”的结果,它告诉我们不管你用什么编码(不管是有分隔符还是没分隔符,不管是静态的还是动态的),其平均编码长度都不可能低于  (2) 。

在这里我们就前面说的无分隔符编码场景,给出 (2) 的一个简单的证明。依然设 n 个字符的编码长度分别是f2d90f378e4a7bc34bbbadb42c699d6f.png,那么我们可以计算平均编码长度:

76d5e1b8b7a4f456fe7a3b8011ab6fa8.png

因为我们有不等式 (1),所以定义:

045370e4aa95078f6f58a122d2bc6295.png

上式可以写成:

209e08ab959c1190e1b3d6bf3d9aa812.png

这就是概率分布

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值