作者丨苏剑林

单位丨广州火焰信息科技有限公司

研究方向丨NLP,神经网络

个人主页丨kexue.fm

从第一篇看下来到这里,我们知道所谓“最小熵原理”就是致力于降低学习成本,试图用最小的成本完成同样的事情。所以整个系列就是一个“偷懒攻略”。那偷懒的秘诀是什么呢?答案是“套路”,所以本系列又称为“套路宝典”。

“最小熵系列”前文回顾:

从无监督构建词库看最小熵原理,套路是如何炼成的

再谈最小熵原理:“飞象过河”之句模版和语言结构

本篇我们介绍图书馆里边的套路。

先抛出一个问题:词向量出现在什么时候?是 2013 年 Mikolov 的 Word2Vec?还是 2003 年 Bengio 大神的神经语言模型?都不是,其实词向量可以追溯到千年以前,在那古老的图书馆中。

图书馆一角(图片来源于百度搜索)

走进图书馆

图书馆里有词向量?还是千年以前?在哪本书?我去借来看看。

放书的套路

其实不是哪本书,而是放书的套路。 很明显,图书馆中书的摆放是有“套路”的:它们不是随机摆放的,而是分门别类地放置的,比如数学类放一个区,文学类放一个区,计算机类也放一个区;同一个类也有很多子类,比如数学类中,数学分析放一个子区,代数放一个子区,几何放一个子区,等等。读者是否思考过,为什么要这么分类放置?分类放置有什么好处?跟最小熵又有什么关系? 

有的读者可能觉得很简单:不就是为了便于查找吗?这个答案其实不大准确。如果只是为了方便找书,那很简单,只要在数据库上记录好每一本书的坐标,然后在地面上也注明当前坐标,这样需要借哪本书,在数据库一查坐标,然后就可以去找到那本书了,整个过程不需要用到“图书分类”这一点。所以,如果单纯考虑找书的难易程度,是无法很好的解释这个现象。

省力地借书

其实原因的核心在于:我们通常不只是借一本书。

前面说了,只要建好索引,在图书馆里找一本书是不难的,问题是:如果找两本呢?一般情况下,每个人的兴趣和研究是比较集中的,因此,如果我要到图书馆借两本书,那么可以合理地假设你要借的这两本书是相近的,比如借了一本《神经网络》,那么再借一本《深度学习》的概率是挺大的,但再借一本《红楼梦》的概率就很小了。

借助于数据库,我可以很快找到《神经网络》,那么《深度学习》呢?如果这本书在附近,那么我只需要再走几步就可以找到它了,如果图书是随机打乱放置的,我可能要从东南角走到西北角,才找到我想要的另一本书《深度学习》,再多借几本,我不是要在图书馆里跑几圈我才能借齐我要的书?

这样一来,图书分类的作用就很明显了。图书分类就是把相近的书放在一起,而每个人同一次要借的书也会相近的,所以图书分类会让大多数人的找书、借书过程更加省力。这又是一个“偷懒攻略”。

也就是说,将我们要处理的东西分类放好,相近的放在一起,这也是满足最小熵原理的。生活中我们会将常用的东西分类放在触手可及的地方,也是基于同样的原理。

图书馆规划

下面我们再来从数学角度,更仔细地考察这个过程。

简化的借书模型

假如我们到图书馆去借两本书,分别记为 i,j,假设借第一本书的成本是 d(i),两本书之间的成本函数为 d(i,j),这也就是说,找到第一本书 i 后,我就要再花 d(i,j) 那么多力气才能找到第二本书 j。我们可以考虑这个过程对所有人的平均,即:

其中 p(i) 是 i 这本书被借的概率,p(j|i) 就是借了 i 之后还会再借 j 的概率。图书馆的要把书放好,那么就要使得 S 最小化。

现在我们以图书馆入口为原点,在图书馆建立一个三维坐标系,那么每本书的位置都可以用一个向量 v 来表示,不失一般性,我们可以简单考虑 d(i) 为这本书到图书馆原点的欧氏距离,d(i,j) 为两本书的欧氏距离,那么 S 的表达式变为:

让我们再来解释一下各项的含义,其中 (i,j) 代表着一种借书习惯,即借了书 i 还借书 j,p(i,j) 代表着这种借书习惯出现的概率,实际生活中可以通过图书馆的借书记录去估算它;‖vi‖+‖vi−vj‖ 则代表着先借 i 再借 j 的总成本。其中 ‖vi‖ 这一项要尽量小,意味着我们要将热门的书放在靠近出口(原点)的地方;而 ‖vi−vj‖ 要尽量小,则告诉我们要把相近的书放在一起。

约束优化规划

假如我们拿到了图书馆的借书记录,也就是说已知 p(i,j) 了,那么是不是可以通过最小化 (2) 来得到图书馆的“最佳排书方案”了呢?思想对了,但还不完整,因为很显然式 (2) 的最小值是 0,只需要让所有的 v 都等于 0,也就是说,所有的书都挤在出口的位置。

显然这是不可能的,因为实际上书不是无穷小的,两本书之间有一个最小间距 dmin>0,所以完整的提法应该是:

也就是说,这是一个带约束的极值问题,解决了这个问题,我们就可以得到图书馆对图书的最合理安排了(理论上)。当然,如果真的去给图书馆做规划,我们还要根据图书馆的实际情况引入更多的约束,比如图书馆的形状、过道的设置等,但 (3) 已经不妨碍我们理解其中的根本思想了。

一般成本最小化

现在我们再将问题一般化,从更抽象的视角来观察问题,能得到更深刻的认识。

均匀化与去约束

我们先将成本函数 ‖vi‖+‖vi−vj‖ 代换为一般的 f(vi,vj),即考虑:

同时 v 可以不再局限为 3 维向量,可以是一般的 n 维向量。我们依旧是希望成本最低,但是我们不喜欢诸如 ‖vi−vj‖≥dmin 的约束条件,因为带约束的优化问题往往不容易求解,所以如果能把这个约束直接体现在 f 的选择中,那么就是一个漂亮的“去约束”方案了。

怎么实现这个目的呢?回到图书馆的问题上,如果没有约束的话,理论最优解就是把所有图书都挤在出口的位置,为了防止这个不合理的解的出现,我们加了个约束“两本书之间有一个最小间距 dmin>0”,防止了解的坍缩。其实有很多其他约束可以考虑,比如可以要求所有图书必须尽量均匀地放满图书馆,在这个希望之下,也能够得到合理的解。

“尽量均匀”其实可以理解为某种归一化约束,因为归一,所以不能全部集中在一点,因为只有一点就不归一了。“归一”启发我们可以往概率的方向想,也就是说,先构造概率分布,然后作为成本函数的度量。在这里就不做太多牵强的引导了,直接给出其中一个选择:

最小熵=最大似然

让我们来分步理解一下这个式子。首先如果不看分母 Zi,那么结果就是:

也就是说,这个 f 相当于成本函数为。然后,由于分母的存在,我们知道:

所以实际上定义了一个待定的条件概率分布 q(j|i),说白了,这实际上就是对的一个 softmax 操作,而此时 (4) 实际上就是:

对于固定的 i 而言,最小化上式这不就是相当于最大对数似然了吗?所以结果就是 q(j|i) 会尽量接近 p(j|i),从而全部取 0 不一定就是最优解的,因为全部取 0 对应着均匀分布,而真实的 p(j|i) 却不一定是均匀分布。

现在再来想想,我们从最小成本的思想出发,设计了一个具有概率的负对数形式的 f(vi,vj),然后发现最后的结果是最大似然。这个结果可以说是意料之外、情理之中,因为 −logq(j|i) 的含义就是熵,我们说要最大似然,就是要最小化式 (8),其含义就是最小熵了。最大似然跟最小熵其实具有相同的含义。

Word2Vec

只要稍微将对象一转变,Word2Vec 就出来了,甚至 everything2vec。

多样的度量

纯粹形式地看,式 (5) 的选择虽然很直观,但并不是唯一的,可取的选择还有:

这以内积为距离度量,希望相近的对象内积越小越好。

Skip Gram

事实上,如果 i,j 分别代表句子窗口里边的一个词,那么式 (9) 就对应了著名的词向量模型——Word2Vec 的 Skip Gram 模型了,也就是说,最小化:

这正好是 Word2Vec 的 Skip Gram 模型的优化目标。

注:Word2Vec 实际上对上下文向量和中心词向量做了区分,也就是用了两套词向量,但这里为了直观理解其中的思想,我们就不区别这一点。

原理类比分析

等等,怎么突然就出来词向量了?

我们再重新捋一下思路:是这样的,我们把每个词当作一本书,每个句子都可以看成每个人的“借书记录”,这样我们就能知道哪两本“书”经常被一起借了是吧?


按照我们前面讨论了一大通的图书馆最佳放书方案,我们就可以把“书”的最佳位置找出来,理论上用 (3),(5) 或 (9) 都可以,这就是词向量了。如果用式 (9),就是 Word2Vec 了。

反过来,找出一个最佳放书方案也就简单了,把图书馆的每个人的借书记录都当成一个句子,每本书当成一个词,设置词向量维度为 3,送入 Word2Vec 训练一下,出来的词向量,就是最佳放书方案了。那些 doc2vec、node2vec、everything2vec,基本上都是这样做的。

所以,开始的问题就很清晰了:将图书馆的每本书的三维坐标记录下来,这不就是一个实实在在的“book embedding”?相近的书的向量也相近呀,跟词向量的特性完美对应。所以,自从有了图书馆,就有了 embedding,尽管那时候还没有坐标系,当然也没有计算机。

再来看看t-SNE

有了“借书记录”,也就是 p(j|i),p(i),我们就可以照搬上述过程,得到一个“最佳位置规划”,这就是向量化的过程。

如果没有呢?

SNE

那就造一个出来呀!比如我们已经有了一堆高维样本 x1,x2,…,xN,它们可以是一堆图像数据集,我们想要得到一个低维表示 z1,z2,…,zN。我们构造一个:


然后还是用式 (5) 作为成本函数(假设 p(i) 是常数,即均匀分布,同时求和不对自身进行),去优化 (4),即:

这便是称为 SNE 的降维方法了。一般来说它还有一些变种,我们就不细抠了,这也不是本文的重点,我们只需要理解基本思想。

SNE 本质上就是尽量保持相对距离的一种降维方案。因为它保持的是相对距离,保持了基本的形状不变,所以降维效果比 PCA 等方法要好。原因是 PCA 等方法仅仅保留主成分,只适用于比较规则的数据(比如具有中心聚拢特性、各向同性的),SNE 的思想可以适用于任意连通形状。

t-SNE

前面说得 SNE 已经体现出降维思想了。但是它会有一些问题,主要的就是“Crowding 问题”。

这个“Crowding 问题”,简单来看,就是因为低维分布 (5) 也是距离的负指数形式,负指数的问题就是在远处迅速衰减到 0,而 (5) 中的 v 是我们要求解的目标,这样一来优化结果是所有的点几乎都拥挤(Crowding)在某处附近(因为指数衰减,距离较远的点几乎不会出现),效果就不够好了。

为了解决这个问题,我们可以把式 (5) 换成衰减没那么快的函数,比如说简单的分式:

这称为 t 分布。

式 (13)、式 (11) 和式 (4) 结合,就是称为 t-SNE 的降维方法,相比 SNE,它改善了 Crowding 问题。

当然,t-SNE 与 SNE 的差别,其实已经不是本文的重点了,本文的重点是揭示 SNE 这类降维算法与 Word2Vec 的异曲同工之处。

虽然在深度学习中,我们直接用 t-SNE 这类降维手段的场景并不多,哪怕降维、聚类都有很多更漂亮的方案了,比如降维可以看这篇深度学习中的互信息:无监督提取特征、聚类可以看这个变分自编码器VAE:一步到位的聚类方案。但是 t-SNE 的本质思想在很多场景都有体现,所以挖掘并体味其中的原理,并与其它知识点联系起来,融汇成自己的知识体系,是一件值得去做的事情。

本文总结

本文基于最小成本的思想,构建了一个比较理想化的模型来分析图书馆的图书安排原理,进而联系到了最小熵原理,并且思考了它跟 Word2Vec、t-SNE 之间的联系。

就这样,又构成了最小熵原理的一个个鲜活例子:物以类聚、分门别类,都能降低成本。比如我们现在可以理解为什么预训练词向量能够加快 NLP 任务的收敛、有时还能提升最终效果了,因为词向量事先将词摆在了适合的位置,它的构造原理本身就是为了降低成本。

同时,将很多看似没有关联的东西联系在一起,能够相互促进各自的理解,达到尽可能融会贯通的效果,其妙不言而喻。

点击以下标题查看作者其他文章:

  • 变分自编码器VAE:原来是这么一回事 | 附开源代码

  • 再谈变分自编码器VAE:从贝叶斯观点出发

  • 变分自编码器VAE:这样做为什么能成?

  • 从变分编码、信息瓶颈到正态分布:论遗忘的重要性

  • 深度学习中的互信息:无监督提取特征

  • 全新视角:用变分推断统一理解生成模型

  • 细水长flow之NICE:流模型的基本概念与实现

  • 细水长flow之f-VAEs:Glow与VAEs的联姻

  • 深度学习中的Lipschitz约束:泛化与生成模型

#投 稿 通 道#

让你的论文被更多人看到

如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢? 答案就是:你不认识的人。

总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。

PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学习心得技术干货。我们的目的只有一个,让知识真正流动起来。

来稿标准:

• 稿件确系个人原创作品,来稿需注明作者个人信息(姓名+学校/工作单位+学历/职位+研究方向)

• 如果文章并非首发,请在投稿时提醒并附上所有已发布链接

• PaperWeekly 默认每篇文章都是首发,均会添加“原创”标志

? 投稿邮箱:

• 投稿邮箱:hr@paperweekly.site

• 所有文章配图,请单独在附件中发送

• 请留下即时联系方式(微信或手机),以便我们在编辑发布时和作者沟通

?

现在,在「知乎」也能找到我们了

进入知乎首页搜索「PaperWeekly」

点击「关注」订阅我们的专栏吧

关于PaperWeekly

PaperWeekly 是一个推荐、解读、讨论、报道人工智能前沿论文成果的学术平台。如果你研究或从事 AI 领域,欢迎在公众号后台点击「交流群」,小助手将把你带入 PaperWeekly 的交流群里。

▽ 点击 |阅读原文 | 查看作者博客

最小熵原理:“物以类聚”之从图书馆到词向量相关推荐

  1. 最小熵原理(四):“物以类聚”之从图书馆到词向量

    从第一篇看下来到这里,我们知道所谓"最小熵原理"就是致力于降低学习成本,试图用最小的成本完成同样的事情.所以整个系列就是一个"偷懒攻略".那偷懒的秘诀是什么呢? ...

  2. 最小熵原理系列:词向量的维度应该怎么选择?

    ©PaperWeekly 原创 · 作者|苏剑林 单位|追一科技 研究方向|NLP.神经网络 随着 NLP 的发展,像 Word2Vec.Glove 这样的词向量模型,正逐渐地被基于 Transfor ...

  3. 从无监督构建词库看「最小熵原理」,套路是如何炼成的

    作者丨苏剑林 单位丨广州火焰信息科技有限公司 研究方向丨NLP,神经网络 个人主页丨kexue.fm 在深度学习等端到端方案已经逐步席卷 NLP 的今天,你是否还愿意去思考自然语言背后的基本原理?我们 ...

  4. infomap最全面易懂的解释--最小熵原理:“层层递进”之社区发现与聚类

    让我们不厌其烦地回顾一下:最小熵原理是一个无监督学习的原理,"熵"就是学习成本,而降低学习成本是我们的不懈追求,所以通过"最小化学习成本"就能够无监督地学习出很 ...

  5. 词向量技术原理及应用详解(四)——词向量训练

    前文理论介绍完毕,接下来进入实战环节.实践中向量化应用的场景常有不同,但向量文本化的训练和使用方式大同小异.在这里我将采用两种方法:gensim库以及tensorflow来完成词向量实战训练. 一.w ...

  6. 最小自然数原理及其证明过程

    最小自然数原理 正文 设 TTT 是 NNN 的一个非空子集. 那么, 必有 t0∈Tt_{0}\in Tt0​∈T, 使对任意的 t∈Tt\in Tt∈T 有 t0≤tt_{0}\leq tt0​≤ ...

  7. PRN(20201231):驾驶人驾驶决策机制遵循最小作用量原理

    王建强, 郑讯佳, 黄荷叶. 驾驶人驾驶决策机制遵循最小作用量原理[J]. 中国公路学报, 2020, v.33;No.200(04):159-172. 观点: 为提升智能汽车的自主决策能力,使其能够 ...

  8. 系统学习NLP(十三)--词向量(word2vec原理)

    词向量简介 自然语言是一套用来表达含义的复杂系统.在这套系统中,词是表义的基本单元.在机器学习中,如何使用向量表示词? 顾名思义,词向量是用来表示词的向量,通常也被认为是词的特征向量.近年来,词向量已 ...

  9. 词向量Word Embedding原理及生成方法

    前言 Word Embedding是整个自然语言处理(NLP)中最常用的技术点之一,广泛应用于企业的建模实践中.我们使用Word Embedding能够将自然文本语言映射为计算机语言,然后输入到神经网 ...

最新文章

  1. 关于mouseenter、mouseover、mouseout、mouseleave的理解
  2. Java多线程 - 控制线程
  3. java获得一个空闲端口号_Python找出9个连续的空闲端口
  4. 似然估计中为什么要取对数以GMM为例
  5. Rating Methodology – Bank Loan / Facility Rating(CRISL)
  6. QQ浏览器怎么设置主页 QQ浏览器设置默认主页教程
  7. antd 判断input输入内容是否大于_Python基础语法 | 代码规范amp;判断语句amp;循环语句...
  8. ES6学习(五)—数组的扩展
  9. 美河LINUX 内核学习视频
  10. 魔兽世界服务器开启mysql_魔兽世界服务端Trinity编译安装
  11. Fedora14 root用户登陆
  12. 51单片机HS0038红外遥控程序
  13. python红楼梦人物词频统计_用 Python 分析《红楼梦》
  14. html零基础学习入门,nlp网站例:HTML零基础入门-HTML学习大纲.doc
  15. 利用WordPress源代码轻松搭建个人博客站点
  16. 数据的封装与解封装:TCP/IP五层协议
  17. appnode环境软件命令参考 - AppNode帮助中心
  18. 以太坊EVM动态数组越界导致OOM分析
  19. 快速提高微信公众号文章的阅读量的必备神器——阅读红包!
  20. Tomcat下work目录的作用

热门文章

  1. delphi 遍历所有文件夹
  2. 【atcoder】Enclosed Points [abc136F]
  3. js取对象属性需注意
  4. Apache状态监测集重启
  5. (原创)VS2017 C# 运行 Javasrcipt RSA 加密用户名登录 Java开发的服务器
  6. HDU-2102 A计划 dfs
  7. spring中加入log4j
  8. SCI2012年收录的中文期刊
  9. mysql数据库事件不执行_如何查看mysql事件是否执行
  10. struts2漏洞监测_CVE20190233: S2060 拒绝服务漏洞分析