深度信念网络 (Deep Belief Network, DBN) 由 Geoffrey Hinton 在 2006 年提出。它是一种生成模型,通过训练其神经元间的权重,我们可以让整个神经网络按照最大概率来生成训练数据。我们不仅可以使用 DBN 识别特征、分类数据,还可以用它来生成数据。下面的图片展示的是用 DBN 识别手写数字:
图 1 用深度信念网络识别手写数字。图中右下角是待识别数字的黑白位图,它的上方有三层隐性神经元。每一个黑色矩形代表一层神经元,白点代表处于开启状态的神经元,黑色代表处于关闭状态的神经元。注意顶层神经元的左下方即使别结果,与画面左上角的对应表比对,得知这个 DBN 正确地识别了该数字。
下面是展示了一个学习了大量英文维基百科文章的 DBN 所生成的自然语言段落:
In 1974 Northern Denver had been overshadowed by CNL, and several Irish intelligence agencies in the Mediterranean region. However, on the Victoria, Kings Hebrew stated that Charles decided to escape during an
alliance. The mansion house was completed in 1882, the second in its bridge are omitted, while closing is the proton reticulum composed below it aims, such that it is the blurring of appearing on any well-paid type of box printer.
DBN 由多层神经元构成,这些神经元又分为显性神经元和隐性神经元(以下简称显元和隐元)。显元用于接受输入,隐元用于提取特征。因此隐元也有个别名,叫特征检测器 (feature detectors)。最顶上的两层间的连接是无向的,组成联合内存 (associative memory)。较低的其他层之间有连接上下的有向连接。最底层代表了数据向量 (data vectors),每一个神经元代表数据向量的一维。
DBN 的组成元件是受限玻尔兹曼机 (Restricted Boltzmann Machines, RBM)。训练 DBN 的过程是一层一层地进行的。在每一层中,用数据向量来推断隐层,再把这一隐层当作下一层 (高一层) 的数据向量。
受限玻尔兹曼机
如前所述,RBM 是 DBN 的组成元件。事实上,每一个 RBM 都可以单独用作聚类器。
RBM 只有两层神经元,一层叫做显层 (visible layer),由显元 (visible units) 组成,用于输入训练数据。另一层叫做隐层 (Hidden layer),相应地,由隐元 (hidden units) 组成,用作特征检测器 (feature detectors)。
图 2 受限玻尔兹曼机的结构。图中的较上一层神经元组成隐层,较下的神经元组成显元。每一层都可以用一个向量来表示,每一维表示每个神经元。注意这两层间的对称 (双向) 连接。
神经元之间的条件独立性
应注意到,显层和隐层内部的神经元都没有互连,只有层间的神经元有对称的连接线。这样的好处是,在给定所有显元的值的情况下,每一个隐元取什么值是互不相关的。也就是说,
同样,在给定隐层时,所有显元的取值也互不相关:
有了这个重要性质,我们在计算每个神经元的取值情况时就不必每次计算一个,而是同时并行地计算整层神经元。
使用 RBM 的过程
假设我们现在已经得到一个训练好的 RBM,每个隐元与显元间的权重用矩阵
W表示,且:
其中Wij代表从第i个显元到第j个隐元的权重,M代表显元的个数,N代表隐元的个数。那么,当我们把一条新来的数据附给 (clamp to) 显层后,RBM 将会依照权值W来决定开启或关闭隐元。具体的操作如下:
首先,将每个隐元的激励值 (activation) 计算出来:
注意,这里用到了前面提到的神经元之间的条件独立性。
然后,将每个隐元的激励值都用 S 形函数进行标准化,变成它们处于开启状 (用 1 表示) 的概率值:
此处的 S 形函数我们采用的是 Logistic 函数:
至此,每个隐元hj开启的概率被计算出来了。其处于关闭状态 (用 0 表示) 的概率自然也就是
那么到底这个元开启还是关闭,我们需要将开启的概率与一个从 0, 1 均匀分布中抽取的随机值
进行如下比较
然后开启或关闭相应的隐元。
给定隐层,计算显层的方法是一样的。
训练 RBM
RBM 的训练过程,实际上是求出一个最能产生训练样本的概率分布。也就是说,要求一个分布,在这个分布里,训练样本的概率最大。由于这个分布的决定性因素在于权值W ,所以我们训练 RBM 的目标就是寻找最佳的权值。为了保持读者的兴趣,这里我们不给出最大化对数似然函数的推导过程,直接说明如何训练 RBM。
G. Hinton 提出了名为对比散度 (Contrastive Divergence) 的学习算法。下面我们来详述它的具体过程。
我们沿用前文的符号记法。
算法1. 对比散度
对于训练集中的每一条记录
如此训练之后的 RBM 就能较为准确地提取显层的特征,或者根据隐层所代表
的特征还原显层了。
前文我们已经介绍了 RBM 的基本结构和其训练、使用过程,接下来我们介绍DBN 的相关内容。
DBN 是由多层 RBM 组成的一个神经网络,它既可以被看作一个生成模型,也可以当作判别模型,其训练过程是:使用非监督贪婪逐层方法去预训练获得权值。
训练过程:
1. 首先充分训练第一个 RBM;
2. 固定第一个 RBM 的权重和偏移量,然后使用其隐性神经元的状态,作为第二个 RBM 的输入向量;
3. 充分训练第二个 RBM 后,将第二个 RBM 堆叠在第一个 RBM 的上方;
4. 重复以上三个步骤任意多次;
5. 如果训练集中的数据有标签,那么在顶层的 RBM 训练时,这个 RBM 的显层中除了显性神经元,还需要有代表分类标签的神经元,一起进行训练:
a) 假设顶层 RBM 的显层有 500 个显性神经元,训练数据的分类一共分成了 10 类;
b) 那么顶层 RBM 的显层有 510 个显性神经元,对每一训练训练数据,相应的标签神经元被打开设为 1,而其他的则被关闭设为 0。
6. DBN 被训练好后如下图: (示意)
图 3 训练好的深度信念网络。图中的绿色部分就是在最顶层 RBM 中参与训练的标签。注意调优 (FINE-TUNING) 过程是一个判别模型
另:
调优过程 (Fine-Tuning) :
生成模型使用 Contrastive Wake-Sleep 算法进行调优,其算法过程是:
1. 除了顶层 RBM,其他层 RBM 的权重被分成向上的认知权重和向下的生成权重;
2. Wake 阶段:认知过程,通过外界的特征和向上的权重 (认知权重) 产生每一层的抽象表示 (结点状态) ,并且使用梯度下降修改层间的下行权重 (生成权重) 。也就是“如果现实跟我想象的不一样,改变我的权重使得我想
象的东西就是这样的”。
3. Sleep 阶段:生成过程,通过顶层表示 (醒时学得的概念) 和向下权重,生成底层的状态,同时修改层间向上的权重。也就是“如果梦中的景象不是我脑中的相应概念,改变我的认知权重使得这种景象在我看来就是这个概
念”。
使用过程 :
1. 使用随机隐性神经元状态值,在顶层 RBM 中进行足够多次的吉布斯抽样;
2. 向下传播,得到每层的状态。
推荐阅读
论文
1. Representation Learning: A Review and New Perspectives, Yoshua Bengio, Aaron Courville, Pascal Vincent, Arxiv, 2012.
2. The monograph or review paper Learning Deep Architectures for AI (Foundations & Trends in Machine Learning, 2009).
3. Deep Machine Learning – A New Frontier in Artificial Intelligence Research – a survey paper by Itamar Arel, Derek C. Rose, and Thomas P. Karnowski.
4. A Fast Learning Algorithm for Deep Belief Nets by Geoffrey E. Hinton and Simon Osindero.
博文和网络教程
1. Introduction to Restricted Boltzmann Machines by Edwin Chen.
2. An Introduction to Restricted Boltzmann Machines by Yuhuan Jiang.
3. Restricted Boltzmann Machine - Short Tutorial by iMonad.
4. 《深度学习学习笔记整理系列》 by Zouxy.
下面是对上一面的补充
Deep Belief Networks深信度网络
DBNs是一个概率生成模型,与传统的判别模型的神经网络相对,生成模型是建立一个观察数据和标签之间的联合分布,对P(Observation|Label)和 P(Label|Observation)都做了评估,而判别模型仅仅而已评估了后者,也就是P(Label|Observation)。对于在深度神经网络应用传统的BP算法的时候,DBNs遇到了以下问题:
(1)需要为训练提供一个有标签的样本集;
(2)学习过程较慢;
(3)不适当的参数选择会导致学习收敛于局部最优解。
DBNs由多个限制玻尔兹曼机(Restricted Boltzmann Machines)层组成,一个典型的神经网络类型如图三所示。这些网络被“限制”为一个可视层和一个隐层,层间存在连接,但层内的单元间不存在连接。隐层单元被训练去捕捉在可视层表现出来的高阶数据的相关性。
首先,先不考虑最顶构成一个联想记忆(associative memory)的两层,一个DBN的连接是通过自顶向下的生成权值来指导确定的,RBMs就像一个建筑块一样,相比传统和深度分层的sigmoid信念网络,它能易于连接权值的学习。
最开始的时候,通过一个非监督贪婪逐层方法去预训练获得生成模型的权值,非监督贪婪逐层方法被Hinton证明是有效的,并被其称为对比分歧(contrastive divergence)。
在这个训练阶段,在可视层会产生一个向量v,通过它将值传递到隐层。反过来,可视层的输入会被随机的选择,以尝试去重构原始的输入信号。最后,这些新的可视的神经元激活单元将前向传递重构隐层激活单元,获得h(在训练过程中,首先将可视向量值映射给隐单元;然后可视单元由隐层单元重建;这些新可视单元再次映射给隐单元,这样就获取新的隐单元。执行这种反复步骤叫做吉布斯采样)。这些后退和前进的步骤就是我们熟悉的Gibbs采样,而隐层激活单元和可视层输入之间的相关性差别就作为权值更新的主要依据。
训练时间会显著的减少,因为只需要单个步骤就可以接近最大似然学习。增加进网络的每一层都会改进训练数据的对数概率,我们可以理解为越来越接近能量的真实表达。这个有意义的拓展,和无标签数据的使用,是任何一个深度学习应用的决定性的因素。
在最高两层,权值被连接到一起,这样更低层的输出将会提供一个参考的线索或者关联给顶层,这样顶层就会将其联系到它的记忆内容。而我们最关心的,最后想得到的就是判别性能,例如分类任务里面。
在预训练后,DBN可以通过利用带标签数据用BP算法去对判别性能做调整。在这里,一个标签集将被附加到顶层(推广联想记忆),通过一个自下向上的,学习到的识别权值获得一个网络的分类面。这个性能会比单纯的BP算法训练的网络好。这可以很直观的解释,DBNs的BP算法只需要对权值参数空间进行一个局部的搜索,这相比前向神经网络来说,训练是要快的,而且收敛的时间也少。
DBNs的灵活性使得它的拓展比较容易。一个拓展就是卷积DBNs(Convolutional Deep Belief Networks(CDBNs))。DBNs并没有考虑到图像的2维结构信息,因为输入是简单的从一个图像矩阵一维向量化的。而CDBNs就是考虑到了这个问题,它利用邻域像素的空域关系,通过一个称为卷积RBMs的模型区达到生成模型的变换不变性,而且可以容易得变换到高维图像。DBNs并没有明确地处理对观察变量的时间联系的学习上,虽然目前已经有这方面的研究,例如堆叠时间RBMs,以此为推广,有序列学习的dubbed
temporal convolutionmachines,这种序列学习的应用,给语音信号处理问题带来了一个让人激动的未来研究方向。
目前,和DBNs有关的研究包括堆叠自动编码器,它是通过用堆叠自动编码器来替换传统DBNs里面的RBMs。这就使得可以通过同样的规则来训练产生深度多层神经网络架构,但它缺少层的参数化的严格要求。与DBNs不同,自动编码器使用判别模型,这样这个结构就很难采样输入采样空间,这就使得网络更难捕捉它的内部表达。但是,降噪自动编码器却能很好的避免这个问题,并且比传统的DBNs更优。它通过在训练过程添加随机的污染并堆叠产生场泛化性能。训练单一的降噪自动编码器的过程和RBMs训练生成模型的过程一样。
个人理解:
在DBNs网络的中其训练是逐层次的,每一层训练好之后才进行下一层的叠加,计算这一层的参数的,
还有就是DBNs可以看做是一种无监督的自编码的过程其最后一层可以加入分类成份进行训练,SAE,SDAE,DBN可以看做是一个大的类型,缺点是只能是一维的数据。