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

Hinton神经网络公开课14 Deep neural nets with generative pre-training

目录

2017年06月01日21-58-20.png2017年06月02日09-47-11.png2017年06月02日10-55-16.png2017年06月02日11-10-34.png2017年06月01日21-44-13.png2017年06月01日21-48-28.png2017年06月01日21-53-55.png这节课介绍另一种训练sigmoid belief net的方法,这种方法的发明可谓无心插柳。Hinton放弃了sigmoid belief net之后又回到了玻尔兹曼机的研究,发现RBM的训练很高效。RBM可以学习一层非线性的特征,如果层叠多个RBM,则可以学习特征之间的关系。那么问题就来了,这些RBM组成的是多层RBM或deep Boltzmann machine吗?

Hinton手下一个聪明的研究生G.Y. Tay发现,得到的模型更加类似sigmoid belief net;真奇怪,通过放弃deep sigmoid belief net得到了训练deep sigmoid belief net的方法,又绕回去了。

通过层叠RBM训练深度网络

第一层feature detector直接将像素作为输入,第二层将第一层的feature作为“像素”进行学习,如此往复。这实际上是一种“贪心”的学习算法,而不是以一个全局目标去做优化。

可以证明每添加一个层就提高了生成训练数据的概率对数的variational lower bound,该证明的中心思想是,RBM等价于无限深的belief net。

合并两个RBM得到一个DBN

2017年06月01日17-02-15.png

从下往上看,$v\leftrightarrow h_1$是一个RBM, $ h_1 \leftrightarrow h_2 $ 是另一个RBM。如果让$W_2=W_1^T$,则第二个RBM马上就是一个相当好的模型。因为RBM只是个二分图模型,不在乎谁是可见单元,谁是隐藏单元。

合并时去掉$v\rightarrow h_1$的连接以去掉对称性,得到右边的单个模型。这个模型的上面两层就是一个无向图模型RBM,但下面两层则是有向图模型sigmoid belief net,整个模型是混血的。至于这么做的原因,后面再详谈。

合并3个RBM

2017年06月01日20-09-42.png

最上面两层依然是RBM,下面的是多层sigmoid belief net。红色的权值是绿色权值的转置,仅用于推断,并不属于这个生成式模型的一部分。

要生成数据,先让最上面两层反复做alternating Gibbs samplingAlternating Gibbs sampling is a modification of classical Gibbs sampling where several variables are simultaneously sampled from their joint conditional distribution)直到equilibrium状态再采样。然后利用该样本从上到下生成所有层的状态,于是就拿到了数据。

平均两个factorial distributions

在RBM中,给定一个datavector,隐藏单元上的后验概率分布是factorial distribution。假设所有向量都是4维的。

比如:

给定v1:$0.9, 0.9, 0.1, 0.1$

给定v2:$0.1, 0.1, 0.9, 0.9$

平均后:$0.5, 0.5, 0.5, 0.5$

这里的平均指的是,假设v1和v2等可能地出现。但平均后得到的并不是factorial distribution。考虑向量$1,1,0,0$,

如果作为v1,则$p(1,1,0,0) = 0.9^4 = 0.43$

如果作为v2,则$p(1,1,0,0) = 0.1^4 = .0001$

两者平均下来,有$p(1,1,0,0) = 0.215$

但在平均后的分布中,却有$p = 0.5^4$,两者相差甚远。这个例子证明了两个factorial distribution的平均并不是factorial distribution。

为什么贪心训练有效

最下面一层RBM的权值W定义了许多不同的分布:$p(v|h);  p(h|v);  p(v,h);  p(h);  p(v)$。后三个可以通过采样并最大似然得到。接下来有个看上去不明所以的公式:

RBM模型可以描述为:

2017年06月01日19-26-18.png

这里的v和h实际上是对称的,两者的计算是同等程度的难。忽略$p(v|h)$,单独优化$p(h)$,最终也会优化$p(v)$。$p(h)$是拟合aggregated posterior的h的先验。aggregated posterior指的是,在所有训练集datavector上对$p(h|v)$的平均。第一个RBM会得到aggregated posterior,让第二RBM在这个aggregated posterior的基础上优化它,得到更好的效果。这就是层叠多个RBM带来的好处。

使用wake-sleep算法的变种继续优化

在学习到了很多层特征表示后,可以利用如下3个过程来进一步优化模型从上到下的generative weights 和从下到上的recognition weights。

  1. 随机bottom-up pass
    用以调整低层的top-down权值,使其更擅长重建下层的特征激活值。这是标准wake-sleep算法的wake phase本职工作。

  2. 让顶层RBM做几次采样
    利用CD法调整权值,这是标准RBM学习算法的本职工作

  3. 随机top-down pass

调整bottom-up 权值,使其更擅长重建上层的特征激活值。这是标准wake-sleep算法的sleep phase本职工作。

这个算法与标准wake-sleep算法的区别是,顶层的RBM为第二层RBM的隐藏单元提供了更好的先验,而不是假设它们是独立的。

DBN应用于建模MNIST手写数字与标签的联合分布

 

2017年06月01日20-15-01.png

500个单元的两个隐藏层都是无监督的RBM,然后学习到的feature activities与10个label拼接起来作为无监督data喂给顶层的RBM。当然还执行了上述Contrastive wake-sleep算法调优。最终得到的模型效果如第一节课的视频所示,既擅长分类,又擅长生成数据。

DBN的分类fine-tuning

上一节谈到了fine-tuning使DBN更擅长生成数据,这一节介绍如何增强其分类能力。

首先通过层叠RBM每次学习一个层(Contrastive wake-sleep算法可视作强化模型的生成能力 ),然后将其作为一组良好的pre-training初始权值,在此之上通过局部搜索过程调优。

Contrastive wake-sleep算法相对,反向传播则可以提高模型的分类能力。综合两者可以克服标准反向传播的限制,使得训练深度网络更简单,也使其泛化得更好。

为什么反向传播配合贪心pre-training效果更好

  • 贪心地每次训练一层网络适合多层深度网络,既可以并行化,每层feature detector的局部关联也不因“贪心”而损失

  • 已有良好feature detector(而不是随机初始化的)再执行反向传播有助于分类任务。于是反向传播算法就不再是全局搜索,而是从一个很好的起点开始的局部搜索就行了。

  • 最终权值里的大部分信息都来自在输入向量,而不是标签的那几比特信息。在fine-tuning之前,已经基本上确定好了feature detector。于是对标注数据的数据量要求更少。

  • 最后的fine-tuning只会轻微修改feature detector,去辅助确定分类边界,而不会寻找新的特征。

  • 这样搭配使用反向传播还可以利用到未标注数据,哪怕大部分都是未标注的,也可以用来发现好的特征,优化最终效果。

  • 缺点:当然,在不知道分类目标的时候,可能会学习到很多无助于分类的无用特征。这对弱小的计算机而言是个问题,但对现代的计算机而言则不成问题。

为手写数字建模

2017年06月01日21-00-26.png

第一步进行无监督学习,模型将会学会生成10个类目下的手写数字。其切换分类的时间会很长,因为离开能量峡谷需要时间。通过添加一个10-way  softmax 到顶层的下面,然后利用反向传播fine-tuning,可以让隐藏单元的特征表达帮助模型分类。最终效果与一些传统方法对比如下:

2017年06月01日21-08-02.png

无监督pre-training在数据量大时也能提高效果

Ranzato et. al. (NIPS 2006) 通过更大的数据集与CNN,拿到了0.49,再加上pre-training拿到了0.39,创造了当时的记录。

TIMIT语音识别

2017年06月01日21-15-03.png

这种方法还开启了语音识别的新天地,之前TIMIT的error rate是24.4%,还是多个模型综合的结果。而这种方法将其降到了20.7%。

discriminative fine-tuning期间发生了什么

底层的权值只发生极其微小的改变,而就是这些微小的改变确定了正确的分类边界,带来了分类效果的提升。pre-training使深度网络真正发挥出优于浅层网络的威力。

Learning Dynamics of Deep Nets

下面几张图来自Yoshua Bengio团队,展示了fine-tuning的作用。

2017年06月01日21-44-13.png

fine-tuning前后,感受野(receptive field,估计是“使第一层隐藏单元激活的输入”的黑话)并没有发生多少变化,但就是这些细微变化提升了效果。

在越多层数的网络上,pre-training的效果提升越大:

2017年06月01日21-48-28.png

注意这张图error是作为横轴的,所以越靠近原点越好。另外,红蓝几乎没有交叉,说明效果区别很明显。

有无pre-training情况下,网络深度的效果各不相同。

2017年06月01日21-53-55.png

可见是pre-training使得深度网络效果更好。

虽然从weight vector上来看,有无pre-training的weight差别不大。但如果设计一组test case,让模型在这些输入上的输出组成一个长向量代表它的weight向量,然后用一些降维方法画到2D平面上去,则会发现它们的显著不同:

2017年06月01日21-58-20.png

上面的无pre-training,下面是有pre-training。颜色代表epoch,越蓝epoch越早。说明无pre-training模型的走向很分散,而有pre-training模型的走向很集中。最重要的是,两者没有交叉,说明从效果上来看,两者是本质不同的。

为何无监督pre-training有用

考虑图像分类数据集的制作,我们对某个事物拍照得到照片,然后我们并不根据照片决定它的分类。比如我们不会根据照片的色彩值、对比度、大小、宽高、像素奇偶校验值……来决定该照片的分类:

2017年06月01日22-07-59.png

照片是如何被人工分类的呢?是人根据照片对应的真实世界中的事物进行分类的,比如照片照了一张躺椅,我们把它归入“椅子”类目:

2017年06月01日22-12-23.png

从真实事物流入图像的信息是高带宽的,比如椅子的颜色、大小、光泽、样式等等;而流入到标签的信息则是非常少的,就凭“椅子”一个词,你无法想象这是怎么样的一张椅子。

无监督pre-training实际上在利用大量的feature detector将图像还原成现实世界中的事物,然后在下一步的discriminative fine-tuning中根据现实世界中的事物进行分类。这样得到的模型有道理多了。

知识共享许可协议 知识共享署名-非商业性使用-相同方式共享码农场 » Hinton神经网络公开课14 Deep neural nets with generative pre-training

评论 1

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

我的作品

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