前言

论文“Deep Boltzmann Machines”是Geoffrey Hinton和他的大牛学生Ruslan Salakhutdinov在论文“Reducing the Dimensionality of Data with Neural Networks”合作后的又一次联合发表的一篇有深远影响的论文,这篇论文第一次提出了DBM及其学习方法,对DBM原理、来源都做了详细讲解。

论文内容

前面介绍的都是BM原理及其训练,可以不用管它,下面直接从第3节开始……

3.DBM

一般情况下,我们很少对复杂的全连接的玻尔兹曼机(BM)感兴趣,而是对一个深度多层的BM感兴趣,具体见图2的左边部分。图中的每一层都能从下一层隐藏特征的激活值中提取出更高阶的特征。我们对DBM感兴趣有如下几个原因。第一,与DBN一样,DBM也有学习内部特征的能力且DBM在目标和语音识别方面的作用非常有前途;第二,DBM能从大量的无标签数量中学习出高阶特征,然后再用少量有标签数据对整个模型微调;第三,与DBN不一样,DBM的逼近推导过程,除了有自底向上的传播之外,还包含了自顶向下的反馈,从而使DBM能更好地传播模糊输入的不确定性,因此它的鲁棒性更好。

图2. 左图:一个三层的DBN和一个三层的DBM;右图:预训练一系列RBM,然后把它们组合成一个DBM

对于一个无层内连接的2层的BM(即:RBM),它的能量函数如下:

可视层向量V的概率密度函数如下:

对可视单元和两层隐藏单元的条件概率分布如下:

对于DBM的最大似然函数的逼近学习,仍可用上面提到的普通BM的学习方法,但是学习速率会非常慢,特别是隐含层越多学习速率会越慢。下面一节提出一种快速的算法来初始化模型参数。

3.1 利用逐层贪婪算法预训练DBM

hinton在2006年的论文“A Fast Learning Algorithm for Deep Belief Nets”中介绍了一种逐层贪婪无监督学习算法。在一系列堆叠的RBM中,该算法一次只学习一个RBM,依次学习。在学习完整个堆叠的RBM后,可以把这个用RBM堆积起来的模型看作成一个概率模型,叫“深度信念网络(DBN)”。特别注意,这个模型并不是一个DBM。DBN的最上面两层是一个RBM,它是一个无向图模型,但DBN其余下面的层是一个有向生成模型(见图2)。在学习完DBN中的第一个RBM后,生成模型可写成如下形式:

其中,p(h1;w1)是h1的隐式先验概率。对DBM中的第二个RBM,实际上就是用p(h1;w2)代替原来的p(h1;w1)。如果第2个RBM按照论文“A Fast Learning Algorithm for Deep Belief Nets”中的方法进行正确的初始化,p(h1;w2)就会变为一个更好的h1的后验分布模型,在这个模型中,这个后验分布对于所有训练样本都是一个简单的阶乘后验组合成的非阶乘混合。因为第2个RBM用了一个更好地模式取代了p(h1;w1),那么就可能通过对这两个模型中的h1求平均从而推导出p(h1;w1,w2),具体方法就是把自底向上得到的w1的一半和自顶向下得到的w2的一半相加。这里利用的自底向上得到的w1和自顶向下得到的w2,就相当于重复计算了,因为h2对v是独立的。

为了初始化DBM的模型参数,本文提出了逐层贪婪预训练RBM堆的算法,但是同论文“A Fast Learning Algorithm for Deep Belief Nets”中方法相比,有一个小小的变化,这是为了消除把自顶向下和自底向上联合在一起所带来的重复计算问题。对于最下层的RBM,我们使输入单元加倍且约束住可视层与隐含层间的权值,见图2右边部分。这个用相关参数修改过的RBM对隐藏单元和可视单元的条件概率分布如下:

CD算法用于这个RBM的预训练可得到非常好的结果,而这个修改过的RBM也能很好地重建训练数据。相反地,可把最顶层的RBM的隐藏单元数加倍。最顶层RBM的条件分布如下:

当这两个模块组合成一个模型后,进入第一个隐含层的总输入,有如下h1的条件分布:

对V和h2的条件分布同式16和18一样。

通过观察可发现,上面现个RBM组合而成的模型的条件分布与DBM的条件分布(式11、12、13)是一样的。因此,用贪婪算法预训练这两个修改过的RBM可得到一个权值对称的无向模型——DBM。当用贪婪算法预训练2个以上RBM时,只需要修改最底和最顶的2个RBM。对所有中间的RBM,只需要在组合成DBM的时候,简单把两个方向上的权值均分即可。

以上面的贪婪算法预训练DBM的权值,有2个目的。第一,使权值初始化到一个合适的值,见实验结果部分。第二,有一个快速方法进行逼近推导,该方法以通过RBM堆单一向上传播的方式进行。在可视层给一个数据向量,通过自底向上的传递,每个隐含层单元都能被激活,且用自底向上翻倍输入的方式来弥补自上而下反馈的缺乏(除了最高一层没有自上而下的输入外)。这种快速逼近推导方法通常用来初始化平均场方法,该初始化方法比随机初始化法收敛更快。

3.2 评估DBM

最近,Salakhutdinov 和Murray在2008年提出了一种利用退火式重要性抽样(AIS,基于蒙特卡罗的算法,Radford M. Neal于1998年在论文“Annealed Importance Sampling”中首次提出)来评估RBM的配分函数的方法(Estimating Partition Functions of RBM's)。本小节介绍了怎样利用AIS来评估DBM的配分函数。与变分推导一起,就会较好地评估出测试数据对数概率的下界。

3.3 DBM的微调

完成上面的学习后,DBM中每一层的二值特征由原来的激活值变为一个确定的真实概率。DBM将会以下面的方式初始化为一个层数确定的多层神经网络。对于每个输入向量v,通过平均场推导可得到一个近似后验分布q(h|v)。这个近似后验分布的边缘分布q(h2j=1|v)与样本数据一起作为这个深度多层神经网络的“增广”输入,见图3。然后通过标准的后向传播微调这个模型。

图3:学习完成后,DBM被初始化为一个多层神经网络。边缘后验概率q(h2|v)作为另外一个输入。这个网络通过后向传播进行微调。

上面这个不同寻常的输入,实际上只是把DBM转换为一个确定层数的神经网络所得到一个副产品。基于梯度的微调一般会忽略q(h2|v),比如,使第一层的连接权值W2为0就会得到一个标准神经网络模型。相反地,这个模型使第一层的连接权值W1为0就会忽略数据的输入。在我做的实验中,这个模型是用整个增广输入来作预测。

4 实验结果

在实验中,利用了MNIST和NORB数据集。为了加快学习速率,数据集被细分为了很多个mini-batches。每个mini-batches包含了100个样本,每完成一个mini-batches的学习就更新一次权值。fantasy particles(理解:就是一对(vi,hi)形成的系统)用于追踪模型的统计,它的数量为100的平方。对于随机逼近算法,本实验用5步Gibbs采样更新fantasy particles。学习速率初始化为0.005,然后逐渐降到0。对于DBM的微调,实验中在5000个mini-batches基础上用共轭梯度算法进行微调,在每次迭代中对每个mini-batches进行3次线性搜索。

4.1 MNIST数据集

文章中说,通过这个实验发现DBM比DBN要好。原话:Table 1 shows that the estimates of the lower bound on the average test logprobability were −84.62 and −85.18 for the 2- and 3-layer BM’s respectively. This result is slightly better compared to the lower bound of −85.97, achieved by a two-layer deep belief network (Salakhutdinov and Murray, 2008).

图4:  左图:实验中的2个DBM;   右图:训练集中随机抽样出的样本和从2个DBM中通过10万步Gibbs采样所得到对应的样本。图中显示的是已知隐藏单元状态条件下的可视单元概率密度。

2层的BM错误识别率只有0.95%,在该论文之前,这个错误率是最低的。3层的BM的错误识别率为1.01%,而SVM的错误率是1.4%,随机初始化后向传播错误率是1.6%,DBN的错误率是1.2%(hinton  2006)。

4.2 NORB数据集

本实验中的2层BM的错误率为10.8%,SVM的错误率是11.6%,逻辑回归的错误率是22.5%,K均值的错误率是18.4%。

——

Deep Learning 18:DBM的学习及练习_读论文“Deep Boltzmann Machines”的笔记的更多相关文章

  1. 《Deep Learning》(深度学习)中文版 开发下载

    <Deep Learning>(深度学习)中文版开放下载   <Deep Learning>(深度学习)是一本皆在帮助学生和从业人员进入机器学习领域的教科书,以开源的形式免费在 ...

  2. 深度学习 Deep Learning UFLDL 最新 Tutorial 学习笔记 1:Linear Regression

    1 前言 Andrew Ng的UFLDL在2014年9月底更新了. 对于開始研究Deep Learning的童鞋们来说这真的是极大的好消息! 新的Tutorial相比旧的Tutorial添加了Conv ...

  3. Deep Learning深入研究整理学习笔记五

    Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...

  4. 课程一(Neural Networks and Deep Learning),第一周(Introduction to Deep Learning)—— 0、学习目标

    1. Understand the major trends driving the rise of deep learning.2. Be able to explain how deep lear ...

  5. Deep Learning 16:用自编码器对数据进行降维_读论文“Reducing the Dimensionality of Data with Neural Networks”的笔记

    前言 论文“Reducing the Dimensionality of Data with Neural Networks”是深度学习鼻祖hinton于2006年发表于<SCIENCE > ...

  6. Deep Learning 17:DBN的学习_读论文“A fast learning algorithm for deep belief nets”的总结

    1.论文“A fast learning algorithm for deep belief nets”的“explaining away”现象的解释: 见:Explaining Away的简单理解 ...

  7. Neural Networks and Deep Learning(神经网络与深度学习) - 学习笔记

    catalogue . 引言 . 感知器及激活函数 . 代价函数(loss function) . 用梯度下降法来学习-Learning with gradient descent . 用反向传播调整 ...

  8. The Activation Function in Deep Learning 浅谈深度学习中的激活函数

    原文地址:http://www.cnblogs.com/rgvb178/p/6055213.html 版权声明:本文为博主原创文章,未经博主允许不得转载. 激活函数的作用 首先,激活函数不是真的要去激 ...

  9. 吴恩达 Deep learning 第一周 深度学习概论

    知识点 1. Relu(Rectified Liner Uints 整流线性单元)激活函数:max(0,z) 神经网络中常用ReLU激活函数,与机器学习课程里面提到的sigmoid激活函数相比有以下优 ...

随机推荐

  1. 标准模板库(STL)的一个 bug

    今天敲代码的时候遇到 STL 的一个 bug,与 C++ 的类中的 const 成员变量有关.什么,明明提供了默认的构造函数和复制构造函数,竟然还要类提供赋值运算符重载.怎么会这样? 测试代码 Tes ...

  2. mongodb字段类型转化

    最近在使用mongoDB, 发现mongo对字段类型的定义并不是很严格,完全依赖传入数据的类型,在加上PHP是弱类型的语言,所以难免会出现一些错误.如果预想的类型是Int型,但数据存储的是String ...

  3. java的Arrays工具类实战

    java.util.Arrays类能方便地操作数组,它提供的所有方法都是静态的.静态方法是属于类的,不是属于类的对象.所以可以直接使用类名加方法名进行调用.Arrays作为一个工具类,能很好的操作数组 ...

  4. window下安装nodejs

    下载nodejs 去https://nodejs.org/en/download/下载nodejs,有.mis(安装版)和.exe(二进制版) .mis(安装版) 一般下载这个就行,简单方便,自带np ...

  5. CreateToolhelp32Snapshot

    CreateToolhelp32Snapshot CreateToolhelp32Snapshot函数为指定的进程.进程使用的堆[HEAP].模块[MODULE].线程[THREAD])建立一个快照[ ...

  6. redis的内部实现机制

    一 理论基础 redis

  7. 获取所有栈的信息,只有最上面的和最下面的,但是不能获取栈中间的activity信息

    直接在cmd窗口上输入 adb shell后,再输入dumpsys activity activities,可以看到所有的activity以及相关栈状态

  8. 深入浅出WPF文摘

    第一部分 深入浅出XMAL 第一章 XMAL概览 第二章 从零起步认识XMAL 第三章 系统学习XMAL语法 第四章 X名称空间详解 第五章 控件与布局 GUI:图形化用户界面 逻辑树: 可视树: : ...

  9. 【NOIP2014模拟赛No.1】我要的幸福

    OJ题号:ZHOJ1297 思路:搜索. 先预处理注定不能走的路径,然后dfs可以走的路径. #pragma GCC optimize ("O2") #include<cst ...

  10. 配置 Mysql 支持远程访问 并取消域名解析以提高链接速度

    1 配置远程访问 1.1 修改 my.cnf [mysqld] 段 bind-address = 0.0.0.0 //支持所有 ipv4 1.2 建立远程访问用户 mysql> grant al ...