放牧代码和思想
专注自然语言处理、机器学习算法
    时间有限,只有GitHub上的issue能及时处理,大约每周末一次。另外,不要叫我楼主,谢谢。

Hinton神经网络公开课12 Restricted Boltzmann machines (RBMs)

目录

2017年05月29日21-10-32.png2017年05月29日23-03-05.png2017年05月29日20-34-51.pnghankcs.com 2017-05-29 下午10.08.39.png2017年05月29日21-59-49.png2017年05月29日21-58-39.png2017年05月29日21-43-50.png2017年05月29日21-25-14.png2017年05月29日21-00-45.png终于到了玻尔兹曼机的训练了,这种简单的模型拥有优雅的理论基础,训练起来却又慢又差,曾一度被认为不实用。这节课讲解几种高效的学习算法,以及RBM应用到协同过滤的例子。

学习目标

这是种无监督学习,只有输入向量的参与。我们想要最大化训练集中的二值向量被玻尔兹曼机赋予的概率之积,当然,一般用概率对数之和。这也等价于,无输入情况下让网络稳定到stationary distribution N次,每次采样一次visible vector;如此能够“回忆起”这N个输入向量的概率。

为何学习很困难

考虑如下链式单元:

2017年05月29日16-58-37.png

2个可见单元,4个隐藏单元。

如果训练集是$(1,0)$和$(0,1)$,则所有权值之积必须是负的。如果是正的,则第一个可见节点被激活的时候,第二个也倾向于激活……最后一个可见节点也会被激活。而如果权值中仅有一个是负数的话,则会使两个可见单元状态“相反”。

这说明,在训练的时候,一个权值需要知道其他权值是什么。比如$w_1$需要知道关于$w_3$的信息,两者进行的更新是相反的。

惊人的事实

上述权值彼此“依赖”的性质带来了一种只需要局部信息的训练算法:

2017年05月29日17-27-09.png

一个权值只需要知道这两个值就知道如何更新自己。在thermal equilibrium 状态下,其一是限定可见单元是$v$时两端状态乘积的期望,其二是不限制时两端状态乘积的期望。前者又称data,鼓励给定数据后按照激活值的大小增大权值,这是Hebbian learning rule的最简形式。该rule称大脑突触可能遵从这样的规则。但如果只遵从这个rule的话,突触的强度只会越来越大。所以需要第二项来平衡一下。第二项指的是这两个单元同时on的概率。

更准确的理解方式是,把第一项看作是Hopfield net的容量,第二项看作是去掉spurious minima(unlearning的精确值)。

为何导数如此简单

在thermal equilibrium 状态下,一组global configuration的概率是能量的指数函数。所以概率的对数就是能量的线性函数,这是个对数线性模型。于是有:

2017年05月29日17-43-39.png

系统进入thermal equilibrium状态的过程实际上仅仅是传播关于权值的信息,而无关“数据”“误差”的信息;这一点与反向传播显著不同。

为何需要第二项

那个带负号的第二项存在理由是什么呢?

刚才简单地说了第二项看作是去掉spurious minima(unlearning的精确值),现在详细地解释一下。

2017年05月29日18-00-19.png

第一项对应分子,是正的,也就是要增加分子、降低$(v,h)$对应的能量;第二项对应分母,是负的,也就是要减小分母、增大竞争者(spurious minima)的能量。

一种效率低的训练方式

训练时需要得到两个统计信息:在用数据中的向量进行clamp可见单元的时候,收集的positive statistics;以及不提供数据、unlearning时的negative statistics。具体说来

  • Positive phase:将可见单元固定为数据向量,将隐藏单元设为随机状态。每次更新一个隐藏单元,直到达到温度为1的thermal equilibrium 。对每个相连的pair,统计2017年05月29日19-16-40.png。在整个数据集上重复此过程,并平均上述采样到的频次。

  • Negative phase:与Positive phase类似,只不过不固定可见单元,而是将所有单元都设置为随机状态。

更加高效的方法

这一节的知识比较高级,如果不感兴趣可以跳过。

更好的统计方法

上面讲的原始方法的弱点是,如果从随机初始状态起步,则需要耗费很长时间才能抵达thermal equilibrium,也不容易判断究竟抵达了没有。更聪明的方法是将抵达thermal equilibrium时的状态与此时的data vector缓存下来,下来遇到一样的data vector时,直接从缓存的状态起步。这些缓存的状态被称作particle。

这有点像“热启动”,其原理是,如果我们只略微修改了一点权值,则应该只需要额外的少量步骤就能重返thermal equilibrium。

Neal’s method 

具体的做法是:

  • Positive phase:缓存一组data-specific particles,串行地更新每个particle中的某个隐藏单元,之后将相连且为on的2017年05月29日19-37-43.png在所有的particle上取平均。

  • Negative phase:缓存一组fantasy particles,每个particle都是一组global configuration。串行地更新所有单元,取平均。

更新公式依然为2017年05月29日19-41-20.png

这种做法在full-batch上的效果更好。

Neal方法适配mini-batch

mini-batch上效果不好的原因是,mini-batch轮转了几个轮回。下次看到data vector的时候,权值发生了太多改变,particle中缓存的configuration已经离thermal equilibrium太远了。

解决方法是做一个关于人类认知世界的强假设(有点知识论的味道):

当固定了data vector的时候,假设一个模型永远只会给出同一个表达。也就是说即使有些模型可以给出多个好的表达,但我们限制自己只寻找那些只给出一个表达的模型。

simple mean field approximation 

在这种假设下,我们可以使用一种叫做simple mean field approximation 的高效算法。

为了符合统计,隐藏单元必须串行地按照如下概率更新:

2017年05月29日20-01-12.png

红框中的$s_j$也是个随机的二值单元,这决定了串行化。

为了并行化,我们可以将$s_j$替换为随机的0到1之间的实值(也是一个概率):

2017年05月29日20-04-02.png

两者并不是等效的,因为被替换的部分位于非线性的逻辑斯谛函数中,而不是线性函数中。虽然理论上解释不通,但实践效果很好。哪怕并行化更新带来了一些震荡,也可以通过damped mean field来缓解:

2017年05月29日20-07-19.png

这个改进的公式有点平滑的意味。

高效的玻尔兹曼机mini-batch学习算法

于是得到了一种适配mini-batch的高效算法:

  • Positive phase:将所有隐藏单元的概率初始化为0.5。然后可见单元设置为data vector;使用damped mean field方法并行更新隐藏单元直到收敛(概率不发生变化);收敛后记录每个pair的2017年05月29日20-12-03.png,在所有mini-batch上平均。

  • Negative phase:(与Neal方法相同)缓存一组fantasy particles,每个particle都是一组global configuration。串行地更新所有单元,取平均。

进一步并行化

注意到上一小节的Negative phase并没有得到并行化,如果要并行化这部分,则可以改变玻尔兹曼机的架构:

  • 去掉同一个层内的连接

  • 不允许跨层的连接

  • 允许多个隐藏层

2017年05月29日20-17-26.png


这被称作Deep Boltzmann Machine (DBM),本质上是缺失了很多连接的玻尔兹曼机的泛化形式。

虽然我们无法同时更新所有相连的单元,但我们可以只更新其中一端。由于存在很多层,所以每次可以更新一半的节点:

02_OPTIONAL_VIDEO-_More_efficient_ways_to_get_the_statistics_15_mins-3.gif

DBM能够胜任处理MNIST吗

一个评价方法是,看看DBM生成的数据是否接近真实数据。试验证明,的确很像:

2017年05月29日20-34-51.png

右边是真实数据,左边是DBM虚构的。

谜题

试验中只使用了100个negative examples ,怎么能刻画所有可能的configuration呢?configuration space是极度高维的,才100个例子足够吗?

训练提高了effective mixing rate

我暂时不清楚此处的mixing是什么意思,大致的思路是,当fantasy particles的数量比positive data多的时候,该处的能量上升。这使得fantasy particles离开局部最低点,进入下一个最低点。所以fantasy particles的数量少点也行,人少多干活儿就是了。

2017年05月29日20-44-32.png

知识共享许可协议 知识共享署名-非商业性使用-相同方式共享码农场 » Hinton神经网络公开课12 Restricted Boltzmann machines (RBMs)

分享到:更多 ()

评论 欢迎留言

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

我的开源项目

HanLP自然语言处理包基于DoubleArrayTrie的Aho Corasick自动机