1、Belief Nets and Deep Belief Nets数媒学院-许鹏RBM Review我们知道传统的神经网络一般都是单隐层的,最多两个隐层,而且一旦神经元个数太多,模型参数就是迅速增长,采用随机梯度下降的话一般很难找到最优解,甚至随着层数的增加,如果训练网络时权值初始化的很小,那么模型会很快的陷入局部最优解,而且是一个poor local minima,这是神经网络的优化问题。另外一个主要的原因就是判别模型,因为FNN是判别模型,就是即使神经网络的优化问题可以通过一些手段解决,比如替换神经元激活函数,采用ReLU单元,那么还是有问题,就是训练神经网络的时候需要很大的标签数据,因为深
2、度神经网络的模型参数很多,所以在训练数据少的时候很难找到最优解,也就是深度神经网络不具备解决小样本问题的能力,所以受这些限制,深度的神经网络一度被认为是无法训练的,而90年代出现的支持向量机很好的解决了小样本和优化问题,所以受到人们的推崇。但是Hinton一直没有放弃对于深层神经网络的研究,因为他觉得,支持向量机其实只是感知机引入了一些tricks,比如核方法很好的解决了非线性问题,但是核的选择却深深困扰着所有的机器学习的研究者,另外最大化间隔也就是支持向量提高了模型的泛化能力,但是这些并不是提取非线性特征最有效的方法,所以深层神经网络的研究是很有意义的。以上思想来自于Hinton在cours
3、era的公开课Neural Networks for Machine LearningRBM Review在2006以后深度网络开始兴盛,其实主要原因是,可以解决深层神经网络的优化问题了,也就是2006年Hinton发的文章里面采用的训练方法,逐层训练,而在逐层训练的时候起到最重要作用的受限玻尔兹曼机,这样的逐层训练有什么优点那,它的优点就是很好的解决了前面提到的深层神经网络遇到的两个问题,很容易陷入局部最优和没有大量标签样本。其中的逐层训练解决了优化的问题,因为在逐层用玻尔兹曼机预训练的时候就为整个网络赋予了较好的初始权值,使得网络只要经过微调就可以达到最优解,而不会陷入poor local
4、 minima,另外一个优点是由于受限玻尔兹曼机是一个生成模型,它可以充分利用大量的非标签数据,因为预训练的时候是对不含标签的数据本身进行建模,其中RBM的可见单元是非标签训练数据,隐藏层训练完以后可以看做是数据的特征,这样如果将多个RBM堆叠起来就会起到提取数据非线性特征的效果,所以由此开始了深度学习的热潮。Unsupervised Learning for Generative ModelSupervised Learning for Discriminant ModelPretrainingFine-tuneUnlabeledLabeled上面这个图其实是2006年Hinton最开始进行
5、深度学习时候的思想,其中堆叠RBM是核心的思想,当然最重要的那篇论文中并没有提到判别模型,但是用生成模型一样可以做分类,以后会提到。这整个模型中还有一个重要的知识就是信念网络,它和受限玻尔兹曼机很像,但是它是有向图,而玻尔兹曼机是无向图,它们都是学习一个联合概率分布,下面我们讲解信念网络,这对理解DBN很重要。而DBN可以认为是深度学习复兴的一个开始。Belief NetworkRBM和BN都是属于概率图模型,而BN是有向图,它又叫Bayesian networks,causal networks,在1992年,Radford Neal提出如果BN使用和RBM相同的sigmoid激活单元,我们
6、可以得到Sigmoid Belief Nets。既然两者都属于生成模型,都可以对非标签数据进行建模,解决前面提到的两个问题,那么我们该使用RBM还是BN那,亦或是两者的合体,其实deep belief nets深度信念网络就是两者的合体,我们已经学习了RBM,但是要理解DBN还必须理解BN,还有很长的路要走。BN and Probability Graphical ModelRBM和BN都属于PGM,PGM是图论和概率论的结合,这是人工智能一个重要的领域,因为它解决了很多不确定性的问题,用它们建模得到的都是生成模型,我们回忆一下最开始学习BM的时候最重要的两个问题,一个是学习问题,一个是推断问
7、题(就是从模型中采样),对于BN来说也是一样,如果是稀疏连接的有向无环BN,人们已经发明了很多精确推断的方法,但是对于密集连接的BN来说,推断和学习都是问题。stochastic hidden causesvisible effects当我们有可见变量的时候,一般指的是训练数据,我们要解决的问题有两个:The inference problem:给定可见变量时推断蓝色的不可见变量的状态。现在已经有了很多技术处理这个问题,对于简单的贝叶斯网络,可以用精确推断,即根据贝叶斯公式计算得出隐藏节点的值;对于密集连接的网络,就是概率分布很复杂时,现在有MCMC采样方法和变分推断方法可以使用。The le
8、arning problem:在给定可见单元的训练数据的时候,调整整个网络的变量之间的连接权,使得这个生成模型产生训练数据的概率最大化。其实学习问题中包含推断问题,因为学习权值时,一般都需要知道隐藏节点的状态,所以推断是必要的过程。Graphical Models and versus Neural Networksu 最开始的图模型都是借助专家来定义图 结构和节点之间的条件概率:l 例如会找来一个医学专家,询问他这个 病症怎么影响另一个病症,每个病症都 是图模型中的一个节点,并且每个节点 都有一个条件概率来描述其他节点怎么 影响它,就这样依靠专家来定义一个图 模型。l 这样的图模型一般都是稀
9、疏连接的,因 为都是人为定义的,所以不会太过复杂l 而且这样的图模型一般只关注怎么能正 确地推断,例如知道了病的症状,怎么 推测病因。因为模型是专家定义的,所 以几乎不涉及图的学习问题。u 神经网络只是模型的结构和基本属性需要 人为定义:l 对于神经网络来说,学习才是核心的问题 像早期图模型那样人为定义模型是不可能 的,所以神经网络学习到的模型都来自于 训练数据,而不是专家。l 神经网络不像早期图模型那样希望有很好 的解释性和稀疏连接的性质来使得推断更 加的容易,它更注重学习而非推断。l 当然也有神经网络版本的信念网络,也就 是这样的信念网络结构比较有意义,但是 它是通过数据学得的模型,而不是
10、人为定 义,神经网络的生成模型就有两种。当然其实某些情况下,神经网络和概率图模型的界限并不清晰,只是说图模型更关注推断问题而神经网络更专注采用数据来学习模型的问题。Two Generative Neural Networku Energy-based: 使用对称连接将二值随机神经元连接 起来就形成了玻尔兹曼机,它的每一 状态都对应一个能量,所以是给予能 量的模型,而为了简化模型,使得模 型更容易从数据中学得知识,限制了 玻尔兹曼机的连接,就形成了受限玻 尔兹曼机。u Causal: 用有向无环图的方式将二值随机神经元连 接起来就可以得到Sigmoid Belief Net。注 意RBM是无向图
11、而SBN是有向图。u 虽然我们前面讲过受限玻尔兹曼机用 对比散度的算法很容易学习,但是它 也放弃了一些玻尔兹曼机的优点就是 它没有玻尔兹曼机的层间连接,也就 是学习到的RBM隐藏层没有相互影响 其实这是不正确的,它限制了模型表 达数据的能力,而且它只能学习单隐 层,如果采用多隐层结构,也许就能 避免层间无连接导致的模型表达能力 减弱的问题。u SBN是Neal在1992年提出的,他把SBN和BM 做了对比,发现SBN学习起来稍微容易一些 因为在生成数据时它只需要决定了最上面一 层神经元的状态就可以逐层往下计算,最终 得到一个生成的采样值。stochastic hidden causesvisi
12、ble effects其实当时1992年训练BM还很困难,基本还是基于热平衡采样方法,直到2002年Hinton才发明了CD算法,所以他当时暂时转向了研究SBNLearning SBNSBN的学习算法较BM简单一些,因为不像训练BM时需要两个阶段positive phase和negative phase,训练SBN只需要positive phase,这是因为SBN是局部归一化模型,也就是每个节点的条件概率其实都是归一化的,而BM所服从的玻尔兹曼分布必须有一个配分函数使得每个状态的概率是归一化的而negative阶段就是计算配分函数的,所以SBN不需要。所以SBN简单,在给定在可见单元上面的训练
13、数据时,只要能够对隐藏单元进行采样,就能很容易的对模型进行训练,训练过程中使用的是对最大似然函数进行批量梯度下降。所以现在的难点是如何对隐藏节点的后验概率分布进行采样,之所以采样比较难,是因为一个叫做解释失效的现象(explaining away)。stochastic hidden causesvisible effects一旦SBN的学习完成了,那么生成一个可见单元的样本是很容易的,只需要从上到下逐层计算就可以因为它是一个因果模型。然而即使我们知道了模型参数,在给定可见单元时,推断隐藏节点的后验分布也是很难的,而且随着隐藏节点的增多,难度会越来越大,所以对于一个数百万参数的模型来说,即使只
14、是从后验概率采样也很难,导致了无法进行学习。SBNLearning Rule在讲解怎么从隐藏单元的后验概率分布采样之前,我们先来看看如果能够采样了,那么学习算法是怎么样的。如果我们能够采样了,学习算法很简单,就是最大似然估计的思想,也就是使得可见单元神经元的值尽可能和训练数据对应的值一致,即最大似然,因为这里是sigmoid神经元,所以每个神经元开启的概率和它的所有父节点有关。stochastic hidden causesvisible effects下面我们重新回到前面提到的采样问题上,为什么对隐藏单元的后验分布采样不容易。Explaining Away如果两个节点在先验分布中相互独立,而
15、且它们连接到同一个子节点,那么当子节点的数据已知时,这两个节点将不再独立。这对应于图模型中的多因一果的模型。A考虑右图中三个变量的联合概率分布,其中A和B独立,即对于先验概率分布,A和B独立,可以看出只要A与B中任意一个为1则C就为1,这正是多因一果模型。我们所说的explaining away现象是在推断的时候产生的,即当观测到c的值是1时,我们不知道A和B的取值情况,需要进行推断根据下面的联合概率分布表格即可求出下列概率,这都很符合常理。但是如果我们现在确定了A=1,则无论B是多少都有C=1,即有我们可以看出当观测到C=1,而且知道A=1时,B=1的概率下降了,这就表示A和B的后验概率并不
16、独立了,这就叫explaining awayLearning SBNProblemsWhy its hard to learn sigmoid belief nets one layer at a time如右图假设这里有一个多层隐变量的因果模型,是一个SBN,这个模型能生成最终的观测数据。现在我们想学习这个模型在第一隐层和可见层之间的的权值W。在学习的过程中会遇到几个问题。1.当给定可见层数值时,第一隐层的各个隐层变量之间 并非相互独立,这正是由于explaining away2.因为我们模型有多层,更高层的隐藏变量之间甚至先 验分布都不相互独立,正是这些先验分布刻画了第一 隐藏各隐藏变量之
17、间的相关性。所以想要学习W,必 须知道第一隐层变量的后验分布,而想要知道第一隐 层的后验分布,又得知道第二隐层的先验概率分布。hidden variableshidden variableshidden variablesvisible data3.所以所有隐层的权值W都相关,以此类推,如果我们 想要尽可能的逼近第一隐层的先验概率,必须求出所 有更高隐层的分布,层数越多,越能逼近真实分布。Learning SBNMCMC有上面讨论可以知道,学习SBN的规则并不难,但是知道可见单元数据时,对隐藏层进行采样很难尤其想尽可能逼近第一隐层的先验概率分布时,计算更高层的多个隐藏层是很复杂的。下面我们介绍
18、两种方法。u 第一种就是MCMC方法,我们回忆一下当 时玻尔兹曼机的学习问题,就是采用的蒙 特卡洛马尔科夫链的采样方法,随机初始 化所以隐藏神经元的状态,然后根据概率 公式依次更新所有神经元的状态,直到达 到平稳分布,如果用MCMC方法的话,信 念网络的采样更加简单,因为它不需要负 阶段,只需要将可见单元固定,然后更新 隐藏单元即可。但是和玻尔兹曼机一样, 用MCMC很耗时,因为达到平稳分布需要 很长时间,而且往往无法判断需要多长时 间,无法判断是否达到平稳分布。不过优 点就是只要Gibbs采样进行足够长的时间, 肯定能够对隐藏层进行精确的后验分布采 样,然后有了采样值,就可以训练了。u 另一
19、种就是变分方法,这种方法的思想就是如果一个分布太过复杂,那么使用一个 相对简单一些的分布来近似这个分布,然 后从这个相对简单的分布中采样,优点是 效率更高了,不过它只能是近似采样,不 像蒙特卡洛马尔科夫链采样一样,只要运 行时间足够长就能够精确采样。 最大似然学习要求的是后验分布的精确采 样,而变分方法是从另一个近似分布中采 样的,学习规则依然有效吗,有证明说明 变分方法对于最大似然估计仍然有效。u 现在变分方法已经成为机器学习领域一个重要的分支,而且一般对于推断问题,有 三种方法,就是精确计算,随机采样和变 分推断方法。MCMC方法变分方法Learning SBNwake-sleep我们在提
20、到BN的时候就会无可避免的提到玻尔兹曼机,其实有关信念网络的学习问题,最开始它的研究目的就是想要找到一个可进行权值学习的神经网络结构,但是想让这个结构不仅仅和玻尔兹曼机一样可以对联合概率建模得到一个生成模型,还要比玻尔兹曼机的训练算法更加高效,这里的目的主要是想找到一种模型,使其训练算法消除玻尔兹曼机训练时negative phase所进行的工作。于是Sigmoid belief networks就诞生了。(connectionist learning of belief networks-Neal 1992)而和玻尔兹曼机一样最开始SBN采用的是随机采样的方法,虽然没有了negative p
21、hase,但是算法效率还是不高,而wake-sleep算法是第一个能够高效训练SBN的算法,它背后的思想就是变分思想。前面已经提到过变分方法,变分法的思想就是如果后验概率分布很复杂,很难进行推断,那么我们希望进行错误的推断,但是学习法则依然有效,最好研究表明这种思想对于SBN的训练是可行的。对于每一层,我们错误的假设所有隐藏变量可以进行因子分解,即分解成为一系列独立变量的乘积即忽视explaining away现象。换句话说就是当给定可见单元数据时,隐藏单元相互独立,就和RBM一样,但是在RBM中隐变量独立是正确的,而这里是错误的,只是一种假设或者说近似。一层中三个隐藏神经元各自的概率0.3
22、0.6 0.8某个状态下三个神经元的联合概率Learning SBNwake-sleep下面我们介绍wake-sleep算法,它就是借用的错误的概率分布来进行学习。在这个算法中,我们的网络有两组不同的权值,如图橘黄色的和绿色的分别是两组权值,因为SBN其实是一个生成模型,所以绿色的权值才是模型的一部分,而橘黄色的权值是用来近似后验概率分布的,也就是说我们用这些橘黄色的权值来表示每一层隐变量上面的因子分布,用这个因子分布来近似后验分布。wake phase:使用认知权重(recognition weights)执行从下到上的传递。即给定训练数据,然后从下到上对各个隐藏层的单元计算其开启概率,即s
23、igmoid单元,每层神经元相互独立,这样逐层计算最后得到所有隐藏神经元的值,把这些值就可以当成是从后验概率分布采样得到的值,然后我们就可以做最大似然估计了,即有了后验分布采样值,然后根据权值更新法则进行更新,这时更新的是绿色箭头表示的生成权重(generative weights),即wake phase是使用认知权重来驱动更新生成权重sleep phase:这个阶段正好和wake phase相反,使用生成权值来驱动系统,即最开始随机初始化顶层的隐藏层的神经元状态,然后由先验分布按照规则计算各隐藏神经元的值,这样从上到下生成整个网络的神经元状态值,这是正确使用这个生成模型的方式,最后能产生一
24、个生成样本,然后我们可以看看是否能由这个样本重建隐藏神经元,即使用生成样本来训练认知权重,使得生成样本最可能恢复隐藏神经元。Hinton and Neal-1995-The wake-sleep algorithm for unsupervised neural networksLearning SBNwake-sleep结果表明,如果我们从随机的生成权重和随机的认知权重开始,并且让wake和sleep阶段交替执行最后能学到一个很好的生成模型。就像训练监督学习模型中backpropagation算法的重要性,在训练无监督学习的生成模型的时候,wake-sleep算法也是很重要的,它背后的思想是
25、变分法。This shows a three-layer neural network. Activities in the bottom layer represent the sensory input and activities in higher layers learn to represent the causes ofthe sensory input. The bottom-up “recognition” connections convert the sensory inputinto an internal representation. They can be tra
26、ined by assuming that they are trying To invert a generative process (like computer graphics) that converts hidden causes into sensory data. The assumed generative process is represented in the top-down “generative” connections and it too is learned just by observing sensory data.Hinton-2006-To Reco
27、gnize Shapes, First Learn to Generate ImagesLearning SBNstacked RBMs接下来介绍一种不同的学习sigmoid belief nets的方法,Hinton后来停止了SBN的研究,重新研究玻尔兹曼机,发现了一种新的训练受限玻尔兹曼机的高效的算法,就是contrastive divergence,一个RBM能够有效的学习一层输入数据的非线性特征,再尝试着把这层学习到的非线性特征当做输入数据,学习下一个RBM,则又学习到一层非线性特征来刻画上一层特征的相关关系,就这样将很多RBM堆叠起来学习到很多层非线性特征。Hinton-2006-A
28、 Fast Learning Algorithm for Deep Belief Nets那么这样多个RBM堆叠起来构成一个什么样的模型那,是一个多层受限玻尔兹曼机吗,Hinton的一个研究生发现实际上堆叠这样多个RBM你学习到的是一个更加类似SBN的模型,这正好解决了高效训练深度信念网络(deep belief nets)的问题,也就是我们可以采用训练无向图RBM的方法来训练有向图SBN。能够证明,每次我们采用RBM增加一层特征,就能够提高DBN生成训练的数据的对数概率的变分下界,证明相当复杂并且在实际应用中一般无需证明。这个证明基于一个RBM和一个无限深度信念网络在数学上是等价的,具体证明
29、参见下面论文Learning DBNstacked RBMs(Pretraining)Combine two RBMs to make a DBNtrain this modelthen train this modeldrop上面的模型即为DBN,深度信念网络,它既不是sigmoid belief nets也不是深度restricted boltzmann machine 而是他们的混合模型,最上面一层是一个RBM,下面的所有层都是有向的SBN。DBNgenerate data右图是一个三层的深度信念网络,最上面的两层构成一个受限玻尔兹曼机,生成数据的过程如下:u 右图所示的绿色箭头表示的权
30、值并不是模型的一部分 在逐个训练完每个RBM之后,RBM的对称连接就变成 了单向连接,把绿色的箭头就丢弃掉了,其实他们是 蓝色箭头对应权值的转置。DBN其实本质上是一个生成模型,它是RBM和SBN的结合体,它的发明有两个很关键的地方其中一个是顶层RBM一定程度缓解了explaining away问题,另一个是它可以用堆叠RBM的方式进行快速的预训练,算法的效率也很高。Learning DBNcontrastive version of wake-sleep(fine-tune)一旦我们用堆叠RBM的方式学习到了多层特征,就得到了一个DBN模型,然后我们可以微调这些特征来提高模型的泛化能力,用到
31、的算法是wake-sleep算法的变体,即自下向上调整认知权重,并且自上到下调整生成权重,只不过其中顶层的RBM采用CD算法来训练。1.用认知权重自下向上随机生成神经元状态,然后用这些值调整生成权重,这相当于 标准wake-sleep算法wake phase。2.对于顶层的RBM,迭代的做几次Gibbs采用,然后使用contrastive divergence算法调 整RBM的权值。3. 最后用生成权重自上向下随机生成神经元状态值,然后用这些值调整认知权重,这 相当于标准wake-sleep算法的sleep phase。First learn some RBMs andthen stackin
32、g them upDo contrastive wake-sleepto fine-tune the DBNPretrainingFine-tuneLearning DBNdiscriminative fine-tuning前面我们提到的是把DBN用作生成模型,即训练好以后用于生成数据,而DBN也可用作判别模型预训练方式是一样的,采样堆叠RBM的方式,而微调的时候,不再采用训练生成模型BN的wake-sleep算法,而是采用训练判别模型的算法进行微调。也就是其实不论用于生成模型还是判别模型,DBN的预训练过程是很重要的,这样逐层堆叠RBM的方式叫做Greedy Layer-Wise Train
33、ing,它是最开始提出深度学习时候的核心,正因为这个算法,深度生成模型和深度判别模型的训练才成为可能,因为这个算法将模型的参数做了一个很好的初始化,已经比较接近最优解了,然后只需微调即可。下面讲解怎么对深度判别模型做微调。1.用逐层学习的方法,将多个RBM堆叠起来,构成一个初步的模型,并且认为这是对深度 神经网络做了一个很好的参数初始化。2.前面采用的是wake-sleep算法微调,这里采用backpropagation算法进行fine-tuning。这 样能克服很多标准backpropagation的缺陷,使得其训练深度神经网络成为可能,而且能 够使模型有更好的泛化能力。optimizati
34、onWe dont start backpropagation untilwe already have sensible feature det-ectors that should be very helpful forthe discrimination task. So backpropdo a local search from a sensible sta-rting point rather than a global searchgeneralizationMost of the information in the final weights comes from model
35、ing the distribution of the input vector. Thelabels is only used for the fine-tuningThis type of backprop works well ev-en if most of the training data is unla-beled(discover good features).Learning DBNdiscriminative fine-tuning至此DBN的思想就讲完了,对于判别模型来说,下面的图就是一个简要的概括。举一个例子。Unsupervised Learning for Gene
36、rative ModelSupervised Learning for Discriminant ModelPretrainingFine-tuneUnlabeledLabeled28*28image500 units500 units2000 units右图是一个三隐藏的DBN,先用堆叠RBM的方式进行无监督学习,最上层的2000个神经元学习到数字的特征,这就是一个生成模型,我们可以用它来生成学习到的数字。然后我们学习到的2000个特征对于最终的多分类判别模型有效吗,我们在DBN的顶层再添加一层Softmax分类的神经网络,然后再采用backpropagation算法来微调。所以我们可以认识到,其实深度神经网络虽然听起来很复杂,但是它做的事情很简单,就是特征提取,也就是预训练过程,这才是重点。所以有人说:深度学习是手段,特征学习是目的