放牧代码和思想
专注自然语言处理、机器学习算法
    愛しさ 優しさ すべて投げ出してもいい

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

目录


Restricted Boltzmann Machines

这一节正式开始讲RBM,通过限制隐藏层的连接,可以使得训练更加简单高效。

这些限制是:

  • 只有一个隐藏层

  • 隐藏单元之间不允许连接

2017年05月29日20-48-55.png

这种网络架构其实就是图论里的二分图。

RBM的好处是,如果你将可见单元固定为data vector,你可以在一步之内抵达“热力均衡”。这是因为计算一对2017年05月29日20-51-22.png时,与其他节点完全无关。j激活的概率为:

2017年05月29日20-53-00.png

与其他隐藏单元无关,于是可以并行化地计算。

PCD:RBM上的高效mini-batch训练算法

该方法基于Neal法:

  • Positive phase:将可见单元设为data vector。计算所有可见单元-隐藏单元的2017年05月29日20-55-50.png。对每个2017年05月29日20-55-50.png,在mini-batch上平均。

  • Negative phase:缓存一组fantasy particles,并行更新。对每个2017年05月29日20-58-21.png,在所有fantasy particles上取平均。

图解RBM上的低效Boltzmann machine learning algorithm 

2017年05月29日21-00-45.png

在马尔科夫链上一步步串行更新两个单元,在足够长的时间后达到热力均衡,或称fantasy。此时才能决定权值的更新量:

2017年05月29日21-05-12.png

其中$\epsilon$是学习率。事实上,不用无限长的时间,只跑一些步骤也能得到较好的效果。

Contrastive divergence:一个惊人的捷径

最极端的方法是,在马尔科夫链运行一步后,马上进行更新,然后继续运行:

2017年05月29日21-10-32.png

此时的更新rule:

2017年05月29日21-10-51.png

这违反了对数似然的梯度,因为上面这个负项是错误的。但实践效果就是好。

为什么效果好

从data起步,马尔科夫链会离开数据根据weights往equilibrium distribution发展。我们可以从开始的一两步确定它的发展方向,如果该方向(weights)不对,就不必浪费时间等它抵达equilibrium了。

我们事实上是知道正确的方向的,这个方向受到数据影响更多。也就是降低马尔科夫链产生的概率(心理学家称其为confabulations,虚构),提高数据的概率。一旦两个概率一致了,学习就暂时中止。

图解contrastive divergence learning

2017年05月29日21-25-14.png

绿点是运行马尔科夫链之前的一个datapoint(data vector及其决定的随机hidden vector),运行后得到红点。算法实际上在通过降低datapoint的能量来提高其概率,提高reconstruction的能量来降低其概率。而这种影响是局部的,对较远处的energy surface影响较小。

捷径不适用的情况

当模型偏好与数据相去甚远的区域,该捷径不适用。这些能量陷阱导致归一化项非常大。Persistent particles 会跌入进入,pull up之后又填充下一个。

在速度与准确度之间的平衡是开始的时候先CD1(contrust divergence with one full step to get the negative data),当权值增长大了一点之后(马尔科夫链运行了几步后,偏离数据远了),再CD3、CD5、CD10。

Contrastive Divergence Learning的例子

这一节介绍利用CD学习手写数字2的例子。

2017年05月29日21-43-50.png

学习流程是这样的,将16*16的黑白数字2图片作为真实数据输入,数据会随机激活50个二值单元(feature detector)。增加那些激活的像素(输入单元)-激活的隐藏单元pair上的权值。然后隐藏单元reconstruct一副虚构的图像,这次减小上述pair上的权值。

这个过程实际上是在降低数据点的能量,增大虚构数据点的能量。

feature detector的权值

开始时是随机的,用来破坏对称性:

2017年05月29日21-48-23.png

大约看了100个实例后,权值开始有些pattern了:

2017年05月29日21-49-16.png

2017年05月29日21-49-36.png

你可以看出来许多detector是global的,它们在检测完整的数字2,而且它们变得越来越强烈:

2017年05月29日21-50-55.png

你也会发现有些detector开始关注local特征,并且越来越local:

2017年05月29日21-52-10.png

2017年05月29日21-52-58.png

2017年05月29日21-53-19.png

2017年05月29日21-53-33.png

2017年05月29日21-53-49.png

最终每个detector捕捉不同的特征:

2017年05月29日21-55-55.png

比如红框中的detector在关注2的上部(白色),并且要求黑色部分什么都没有。

模型重建数据的能力

给模型一个新数据,它能从二值feature activation重建这个数据吗?

2017年05月29日21-58-39.png

更有趣的是,如果我们给它一个从不熟悉的其他数字:

2017年05月29日21-59-49.png

模型没有检测3中间的尖端的feature detector,它尝试以2的记忆重塑这个3。

在一个学习了全部10个数字的RBM中,第一个隐藏层的weight如下:

hankcs.com 2017-05-29 下午10.08.39.png

蓝色detector在捕捉8的左边,红色在捕捉数字的宽高(所有数字都被限制在特定像素大小),而绿色在检测笔画的弧度。

RBM用于协同过滤

The Netflix competition

在这个数据集中,数据非常稀疏,或者说很多格子都是缺失的。有一百万用户对1万8千个电影的打分,每个用户只看过很小一部分电影。需要预测每个用户对没看过的电影的喜爱程度。奖金100万美金。

hankcs.com 2017-05-29 下午10.14.59.png

“语言模型”

将数据写成 用户 电影 评分的3元组:

hankcs.com 2017-05-29 下午10.16.32.png

则问题转化为熟知的给定两个单词,预测下一个单词。一般的思路是预训练用户向量和电影向量作为特征向量输入到一个巨大的隐藏层中,但实际上在这个个例中神经网络的效果还比不上传统的线性回归。所以中间直接上一个乘法器(称作matrix-factorization model)就行了。

2017年05月29日22-56-54.png

RBM

利用RBM做协同过滤不是那么直观,需要动动脑筋。

2017年05月29日23-03-05.png

我们可以将每个用户视作一个训练实例(记住,非监督学习)。每个用户是一个电影评分的向量。每个电影对应一个可见单元,但不是二值的,而是5值的softmax。CD学习算法与二值相同。隐藏层使用100个左右的单元。当然看到这里,敏锐的人会担忧可见单元非常多,有一万八那么多,其中一些值在训练实例中是缺失的,需要拟合模型去预测。

避免处理所有缺失的评分

更聪明的方法是网络架构仅仅含有用户评分过的电影对应的可见单元,一个用户一个RBM。所有的RBM共享相同的隐藏单元及能被共享的权值。由于一个用户只是一个训练实例,参数共享还保证了参数得到充分的训练。训练的时候采用CD1、CD3、CD5、CD9的递增方法。

效果如何

Salakhutdinov et al. 2007的工作表示,RBM和matrix-factorization的分数差不多,但它们犯得错误差别巨大。所以如果合并平均这两个模型,则会得到非常棒的结果。

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

评论 欢迎留言

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

我的作品

HanLP自然语言处理包《自然语言处理入门》