目录
这节课介绍另一种训练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
从下往上看,$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
最上面两层依然是RBM,下面的是多层sigmoid belief net。红色的权值是绿色权值的转置,仅用于推断,并不属于这个生成式模型的一部分。
要生成数据,先让最上面两层反复做alternating Gibbs sampling(Alternating 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模型可以描述为:
这里的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。
-
随机bottom-up pass
用以调整低层的top-down权值,使其更擅长重建下层的特征激活值。这是标准wake-sleep算法的wake phase本职工作。 -
让顶层RBM做几次采样
利用CD法调整权值,这是标准RBM学习算法的本职工作 -
随机top-down pass
调整bottom-up 权值,使其更擅长重建上层的特征激活值。这是标准wake-sleep算法的sleep phase本职工作。
这个算法与标准wake-sleep算法的区别是,顶层的RBM为第二层RBM的隐藏单元提供了更好的先验,而不是假设它们是独立的。
DBN应用于建模MNIST手写数字与标签的联合分布
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,去辅助确定分类边界,而不会寻找新的特征。
-
这样搭配使用反向传播还可以利用到未标注数据,哪怕大部分都是未标注的,也可以用来发现好的特征,优化最终效果。
-
缺点:当然,在不知道分类目标的时候,可能会学习到很多无助于分类的无用特征。这对弱小的计算机而言是个问题,但对现代的计算机而言则不成问题。
为手写数字建模
第一步进行无监督学习,模型将会学会生成10个类目下的手写数字。其切换分类的时间会很长,因为离开能量峡谷需要时间。通过添加一个10-way softmax 到顶层的下面,然后利用反向传播fine-tuning,可以让隐藏单元的特征表达帮助模型分类。最终效果与一些传统方法对比如下:
无监督pre-training在数据量大时也能提高效果
Ranzato et. al. (NIPS 2006) 通过更大的数据集与CNN,拿到了0.49,再加上pre-training拿到了0.39,创造了当时的记录。
TIMIT语音识别
这种方法还开启了语音识别的新天地,之前TIMIT的error rate是24.4%,还是多个模型综合的结果。而这种方法将其降到了20.7%。
discriminative fine-tuning期间发生了什么
底层的权值只发生极其微小的改变,而就是这些微小的改变确定了正确的分类边界,带来了分类效果的提升。pre-training使深度网络真正发挥出优于浅层网络的威力。
Learning Dynamics of Deep Nets
下面几张图来自Yoshua Bengio团队,展示了fine-tuning的作用。
fine-tuning前后,感受野(receptive field,估计是“使第一层隐藏单元激活的输入”的黑话)并没有发生多少变化,但就是这些细微变化提升了效果。
在越多层数的网络上,pre-training的效果提升越大:
注意这张图error是作为横轴的,所以越靠近原点越好。另外,红蓝几乎没有交叉,说明效果区别很明显。
有无pre-training情况下,网络深度的效果各不相同。
可见是pre-training使得深度网络效果更好。
虽然从weight vector上来看,有无pre-training的weight差别不大。但如果设计一组test case,让模型在这些输入上的输出组成一个长向量代表它的weight向量,然后用一些降维方法画到2D平面上去,则会发现它们的显著不同:
上面的无pre-training,下面是有pre-training。颜色代表epoch,越蓝epoch越早。说明无pre-training模型的走向很分散,而有pre-training模型的走向很集中。最重要的是,两者没有交叉,说明从效果上来看,两者是本质不同的。
为何无监督pre-training有用
考虑图像分类数据集的制作,我们对某个事物拍照得到照片,然后我们并不根据照片决定它的分类。比如我们不会根据照片的色彩值、对比度、大小、宽高、像素奇偶校验值……来决定该照片的分类:
照片是如何被人工分类的呢?是人根据照片对应的真实世界中的事物进行分类的,比如照片照了一张躺椅,我们把它归入“椅子”类目:
从真实事物流入图像的信息是高带宽的,比如椅子的颜色、大小、光泽、样式等等;而流入到标签的信息则是非常少的,就凭“椅子”一个词,你无法想象这是怎么样的一张椅子。
无监督pre-training实际上在利用大量的feature detector将图像还原成现实世界中的事物,然后在下一步的discriminative fine-tuning中根据现实世界中的事物进行分类。这样得到的模型有道理多了。
知识共享署名-非商业性使用-相同方式共享:码农场 » Hinton神经网络公开课14 Deep neural nets with generative pre-training