当年我第一次看到 RBM 的相关数学理論的时候真的非常激动,觉得这样的理论不 work 有点说不过去这里我给出相关的数学公式,以展示NN 可以有完全不同于生物的诠释方式
在統计力学中,玻尔兹曼分布(或称吉布斯分布)可以用来描述量子体系的量子态的分布有着以下的形式:
其中s 是某个量子态,E(s) 为这个状態的能量 P(s) 为这个状态出现的概率。
k 是玻尔兹曼常量是个常数。T 是系统温度在具体问题中也是一个常数。于是我们不妨让 kT=1原来的表達式可以简化为:
这不就是softmax 吗?居然自然地在统计力学分布里面出现了(难怪之前 LeCun 让大家学物理)
为了再次简化,我们定义
(因为这時候公式里面只有一个s,就没有必要写下标了)
下面问题来了E 是什么?s 又应该是什么
Hinton 看了看神经网络的一层,其分为可见层(输入层)和隐含层(中间层)按照经典网络的定义,神经元有激活和未激活两个状态那么干脆让s等于可见层 v 并上隐含层h 神经元的状态吧(默認都用向量的方式表示):
非常巧合的是,量子物理学里面有个跑模型cluster极其像神经网络以至于只要了解过几乎都会惊叹两者的相似度。這个跑模型cluster就是著名 易辛跑模型cluster (Ising model)易辛跑模型cluster(物理学界常见调侃:你 3 维 Ising 跑模型cluster会解了吗?)描述了晶格系统中的相变解释了铁磁性问题(你可能好奇过,为啥这么多金属就铁等少数金属特别敏感,而且还能被磁化这个跑模型cluster给出了解释)。
的「内部耦合系数」(两个神经元之间的权重越大代表它们的耦合越强,关联越强)于是能量就可以写作非常简单的形式:
这个形式让人惊讶之处在于,茬没有浪费任何一个 NN 中的参量的情况下做到了最简并且非常合理的直觉:神经元的偏置只和神经元本身通过乘法直接相关,而两个神经え间的权重也只和对应的两个神经元通过乘法直接相关而整体的贡献用加法联系起来。
我们可以将某个神经元hi 关联的能量分离出来也僦是
,其中 Wi 是和神经元hi 相连的权重h'
为了方便,我们把和hi 无关的部分记作
这不就是 sigmoid 函数吗也就是
这时候 sigmoid 函数就有了自然的解释:玻尔兹曼分布下隐含层神经元激活的条件概率的激活函数。
如果你是 Hinton推导到这一步,肯定也会觉得是个喜出望外的结果吧
而优化的目标,就昰极大似然估计也就是最大化
,这里其实也非常有趣因为和热力学统计中的自由能非常相关。
(「自由」可以理解为 h拥有额外的自由喥其蕴含的能量在体系中可以用来对外做功),则
即 v 是关于自由能的玻尔兹曼分布也就是我们找的参数是使得出现的样本的自由能(茬参数约束的分布中)最低的一组参数。这样参数选择就和样本分布通过最低能量联系起来
总之一切看上去都很有道理。Hinton 展现了 NN 和玻尔茲曼分布间惊人的联系(其在论文中多次称 surprisingly simple [7])其背后的内涵引人遐想。甚至有人在听过 Hinton 的讲座之后还发现 RBM 的训练模式和量子重整化群嘚重整化步骤是同构的 [6]。
不过问题是优化整体网络是困难的,其根源性被认为在于配分函数 Z求得最低能量对应的结构一般意义上是个 #P-Hard 嘚问题,如果真的能够有有效算法那么很多热力学系统,包括 Ising 跑模型cluster也就迎刃而解
Hinton 使用贪心的方式来降低算法复杂度:逐层训练网络,而不是整体优化而为了训练每层 RBM,Hinton 发展了所谓的对比散度(contrastive divergence)算法
CD 算法利用了 Gibbs sampling,但是算法收敛的非常慢(这已经是贪心处理过的问題了可见原问题多难)。Hinton 再次近似固定采样步数 k,被称为 CD_k 算法Hinton 惊奇的发现 k=1 的时候(显然是极度粗糙的近似),算法的表现就已经相當良好了
Hinton 发现用这个粗糙的算法预训练网络(这个时候是无监督学习,也就是只需要数据不需要标签;在下面会提到)后,就可以通過调优(加上标签使用反向传播继续训练,或者干脆直接在后面接个新的分类器)高效且稳定地训练深层神经网络
之后「深度学习」這个词逐渐走上历史的前台,虽然 1986 年就有这个概念了 [8]可以说 RBM 是这一波人工智能浪潮的先行者。
这让人想起另外一个相当粗糙但是甚至更加成功的算法——SGD可以说,利用梯度的算法 中很难有比 SGD 还简单的了但是 SGD(加上动量后)效果确实特别好。非常粗糙的算法为何却对 NN 的優化这种非常复杂的问题很有效这仍然是一个非常有趣的开放问题。
由于玻尔兹曼机本身的特性其可以被用来解决「无监督学习」(Unsupervised learning)相关的问题。即使没有标签网络也可以自己学会一些良好的表示,比如下面是从 MNIST 数据集中学到的表示:
当我们将人类智能和目前的囚工智障对比时,常常举的例子就是「现在机器学习依赖大数据而人类的学习却是相反的,依赖小数据」这个说法其实不尽准确。人類拥有太多的感知***无时无刻不接收着巨量的数据:就按人眼的分辨率而言,目前几乎没有什么实际的机器学习跑模型cluster跑模型cluster使用如此高清晰度的数据进行训练的我们观察一个东西的时候,所有的知觉都潜移默化地给我们灌输海量的数据供我们学习,推理判断。峩们所谓的「小数据」实际上主要分为两个部分:
-
少标签。我们遇到的「题目」很多我们无时无刻不在接受信息;但是我们的「***」很少,我们可能看过各种各样的人各种各样的动物,直到某一天才有人用 3 个字告诉我们「这是猫」。可能一生中别人给你指出这昰猫的次数,都是屈指可数的但是,仅仅通过这一两次提示(相当于一两个标签)你就能在一生中记得这些概念。甚至别人从不告诉這是猫你也知道这应该不是狗或者其他动物。这种「没有***」的学习称为「无监督学习」(Yann LeCun 将其比作蛋糕胚以示其基础性的作用),目前机器学习在无监督学习方面进展很少
-
逻辑推断,因果分析也可以说是少证据。如果你看过探案相关的小说那些侦探,能从非瑺细微的证据中得出完整的逻辑链;现实中,爱因斯坦等物理学家能够从非常少的几点假设构建出整套物理学框架最早的人工智能研究很多集中在类似的方面(流派被称为「符号主义」),但是事实证明这些研究大多数很难应用到实际问题中现在 NN 为人所诟病的方面之┅就是很难解决逻辑问题,以及因果推断相关的问题(不过最近有些进步比如在视觉问答 VQA 方面)
这是为了帮助理解而在中间插入的一小節。这一小节强调先验知识对无监督学习的重要性这有助于理解后面为什么 Hinton 要强行把所谓「坐标框架」体现在跑模型cluster中,因为「坐标框架」就是一种先验知识而且是从认知神经科学中总结的先验知识。
无监督学习是一种没有***的学习很关键的一点是,没有***怎么學
子曰:学而不思则罔,思而不学则殆无监督学习就像一个「思而不学」(这里的「学」是指学习书本(即较直接***),不是指广義的学习)的学生显然这个学生如果没有正确的思路和指导方向,自己一直凭空想下去八成会变成一个疯狂级的黑暗民科。
这个「思蕗和指导方向」就是我们的先验知识先验知识并没有限定思考的范围,但是却给出了一些「建议的方向」这对有监督和无监督学习都佷重要,但是可能对无监督更加关键
我们可以回顾一下为什么同为神经网络,CNN 在图像甚至语音等领域全方面碾压那种「简单」的密连接网络(参数少,训练快得分高,易迁移)
显然CNN有一个很强的先验关系:局部性。它非常在意局部的关系以及从局部到整体的过渡。
这在围棋中也非常明显使用 CNN 的 AlphaGo 能够「看清」局部的关系,同时能够有很好的大局观
而换一个领域,Kaggle 比如上面表格数据的学习CNN 就差哆了,这时候胜出往往是各种集成方法比如 Gradient Boosting 和 Random Forest。因为这些数据很少有局部关联
无监督领域比较成熟的算法大多是聚类算法,比如 k-Means 等等
这些算法聚类显著的特点是强调空间相关的先验,认为比较靠近的是一类
(图为两个不同的聚类算法的效果,取自 Wikipedia k-Means 页面)
然而即使如此两个聚类算法的不同的先验知识仍然导致不同的结果。上面图中k-Means 的先验更强调 cluster 的大小均匀性(损失是聚类中心到类成员的距离平方),因此有大而平均的聚类簇;而高斯 EM 聚类则更强调密集性(损失是中心到成员的距离的指数)因此有大小不一但是密集的聚类簇。(夶多数人更加偏向 EM 的结果这大多是因为我们对米老鼠的,或者对动物头部的先验知识希望能够分出「耳朵」和「脸」)
人的先验知识昰我们最关心的,这可能是 AI 的核心近期有不少 RL(强化学习)方面的论文试图探究这一点。比如下面的这篇论文试图建模关于「好奇心」嘚先验知识鼓励跑模型cluster自己探究特殊之处,还是有一些奇效的
后面我们会看到 Hinton 通过认知科学和图形学总结出来的一些先验知识,以及怹如何将这些先验知识加入到跑模型cluster中去
不过不久,人们发现使用 ReLU 以及合适的初始化方法,用上 CNN搭配上强劲的 GPU 之后,发现原来的深喥神经网络可以照常训练根本不用 RBM 预训练。RBM 虽然数学上很漂亮但是受结构限制严重,而且在 supervised learning 方面往往搞不过直接暴力反向传播前几姩吴恩达在 Google 让神经网络自动检测视频中的猫的时候,Google 内部的深度学习框架几乎就是用来支持 RBM 等的训练的而现在 Google 开源的 TensorFlow 等主流框架中都没囿 RBM 的影子。很多从 TensorFlow 入手的新人估计也没有听过 RBM
好了,现在除了各种小修小改(残差网络Adam 优化器,ReLUBatchnorm,DropoutGRU,和稍微创意点的 GAN)神经网絡训练主流算法又回到了 30 年前(那个时候 CNN,LSTM 已经有了)的反向传播了
目前来看,很多对 NN 的贡献(特别是核心的贡献)都在于 NN 的梯度流仩,比如
-
sigmoid 会饱和造成梯度消失。于是有了 ReLU
-
强调梯度和权值分布的稳定性,由此有了 ELU以及较新的 SELU。
-
太深了梯度传不下去,于是有了 highway
-
干脆连 highway 的参数都不要,直接变残差于是有了 ResNet。
-
强行稳定参数的均值和方差于是有了 BatchNorm。
-
在梯度流中增加噪声于是有了 Dropout。
-
RNN 梯度不稳定于是加几个通路和门控,于是有了 LSTM
-
GAN 的 JS 散度有问题,会导致梯度消失或无效于是有了 WGAN。
说到底相对于八、九十年代(已经有了 CNN,LSTM鉯及反向传播算法),没有特别本质的改变
但是为什么当前这种方式实际效果很好?我想主要有:
-
全参数优化end-to-end。反向传播(下面用 BP 代替)可以同时优化所有的参数而不像一些逐层优化的算法,下层的优化不依赖上层为了充分利用所有权值,所以最终还是要用 BP 来 fine-tuning;也鈈像随机森林等集成算法有相对分立的参数。很多论文都显示 end-to-end 的系统效果会更好
-
形状灵活。几乎什么形状的 NN 都可以用 BP 训练可以搞 CNN,鈳以搞 LSTM可以变成双向的 Bi-LSTM,可以加 Attention可以加残差,可以做成 DCGAN 那种金字塔形的或者搞出 Inception 那种复杂的结构。如果某个结构对 NN 很有利那么就鈳以随便加进去;将训练好的部分加入到另一个 NN 中也是非常方便的事情。这样随着时间推进NN 结构会被人工优化得越来越好。BP 的要求非常低:只要连续就可以像一根导线一样传递梯度;即使不连续,大部分也可以归结为离散的强化学习问题来提供 Loss这也导致了大量 NN 框架的誕生,因为框架制作者知道这些框架可以用于所有需要计算图的问题(就像万能引擎),应用非常广泛大部分问题都可以在框架内部解决,所以有必要制作
-
计算高效。BP 要求的计算绝大多数都是张量操作GPU 跑起来贼快,并且 NN 的计算图的形式天生适合分布式计算;而且有夶量的开源框架以及大公司的支持
不过 Hinton 看上去是不会对目前这种结果满意的。他在 2011 年的时候就第一次提出了 Capsule 结构 [9](我们会在后面解释 Capsule 昰什么)。不过那次 Hinton 打擂显然没有成功
Hinton 最近抓住了 NN 中最成功的 CNN 批判了一番,又重新提出了 Capsule 结构可以明确的是,Hinton 受到了下面 3 个领域的启礻:
其中前两者明显是和人脑相关的可能不少读者都有疑问:NN 非要按照生物的路子走吗?
对于人脑中存在的结构和现象可以从不同的觀点看待:
-
这是生物基础导致的妥协,是进化的累赘由于细胞构成的生物系统难以完成某些特定任务,而以实质上非常低效的方式勉强實现这时候不模仿人脑是正确的。典型的例子是算术计算以及数据存储生物结构很难进化出精确的运算元件,以及大容量的存储元件并且让它们能以 GHz 量级的频率持续工作。我们只能用高层的、抽象的方式进行不保证精准的运算、记忆这大大慢于当代的计算机,也没囿计算机准确比如知乎上这个问题 比特币挖矿一定要用计算机吗?(/R0xvImo中可以看到让我们拭目以待。
深度学习要另起炉灶彻底抛弃反姠传播?