Deep Learning 18:DBM的学习及练习_读论文“Deep Boltzmann Machines”的笔记
前言
论文“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”的笔记的更多相关文章
- 《Deep Learning》(深度学习)中文版 开发下载
<Deep Learning>(深度学习)中文版开放下载 <Deep Learning>(深度学习)是一本皆在帮助学生和从业人员进入机器学习领域的教科书,以开源的形式免费在 ...
- 深度学习 Deep Learning UFLDL 最新 Tutorial 学习笔记 1:Linear Regression
1 前言 Andrew Ng的UFLDL在2014年9月底更新了. 对于開始研究Deep Learning的童鞋们来说这真的是极大的好消息! 新的Tutorial相比旧的Tutorial添加了Conv ...
- Deep Learning深入研究整理学习笔记五
Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...
- 课程一(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 ...
- Deep Learning 16:用自编码器对数据进行降维_读论文“Reducing the Dimensionality of Data with Neural Networks”的笔记
前言 论文“Reducing the Dimensionality of Data with Neural Networks”是深度学习鼻祖hinton于2006年发表于<SCIENCE > ...
- 高光谱图像分类简述+《Deep Learning for Hyperspectral Image Classification: An Overview》综述论文笔记
论文题目<Deep Learning for Hyperspectral Image Classification: An Overview> 论文作者:Shutao Li, Weiwei ...
- 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的简单理解 ...
- Neural Networks and Deep Learning(神经网络与深度学习) - 学习笔记
catalogue . 引言 . 感知器及激活函数 . 代价函数(loss function) . 用梯度下降法来学习-Learning with gradient descent . 用反向传播调整 ...
- The Activation Function in Deep Learning 浅谈深度学习中的激活函数
原文地址:http://www.cnblogs.com/rgvb178/p/6055213.html 版权声明:本文为博主原创文章,未经博主允许不得转载. 激活函数的作用 首先,激活函数不是真的要去激 ...
随机推荐
- Mac下搭建git
一.在本地git库中添加用户名及邮箱 git config --global user.name "username" git config --global user.email ...
- CentOS 6.5下Zabbix的安装配置
1.确保开发环境lamp已经安装 2.下载zabbix 官方下载地址:http://www.zabbix.com/download.php 选择和自己系统对应的版本,这里选择安装与Linux内核为2. ...
- MATLAB的GUI
% 常使用的对象查看和设置函数 % .get.set函数 ) % 获得句柄值为0的对象的属性,即显示器对象属性 plot([:]); % 绘制一幅图 title('示例'); % 增加text对象 % ...
- windows下jenkins常见问题填坑
没有什么高深的东西,1 2天的时间大多数人都能自己摸索出来,这里将自己遇到过的问题分享出来避免其他同学再一次挖坑. 目录 1. 主从节点 2. Nuget自动包还原 3. powershell部署 4 ...
- Delphi XE5-XE8 以上 如何发布文件到工程中
首发在 ① FireMonkey[DELPHI XE5] 165232328 欢迎使用 FMX 开发手机程序的高手来访. (* *********************************** ...
- EditPlus 3.7 中文版已经发布
新一版的 EditPlus 已经在昨天发布了!新版本增加了一个 64位版程序.大家可以到官方网站下载哦. 我同步更新翻译了 32位版应用程序.请点击页面左上角的链接下载.
- iis7 64位 操作excel的一系列问题(未完待续)
查了半天发现是IIS跑在64位环境下引起的.而64位下,是木有Access数据库的驱动的(包括Excel也不行). 解决办法是:在目标网站的应用程序池中选择高级设置,然后将启用32位应用程序设置为tr ...
- 在Mac中保护私密文件,隐藏文件
在个人电脑中我们有些私密文件或者资料是不希望被人发现或者使用.保护私密文件的方式有很多,比如对文件进行加密,隐藏文件,修改文件后缀等.在Mac中我们也可以通过一些简单方式保护私密文件.这里我们简单介绍 ...
- 在.NET中使用JQuery 选择器精确提取网页内容
1. 前言 相信很多人做开发时都有过这样的需求:从网页中准确提取所需的内容.思前想后,方法无非是以下几种:(本人经验尚浅,有更好的方法还请大家指点) 1. 使用正则表达式匹配所需元素.(缺点:同类型的 ...
- iOS开发随笔
突然看到一个搞11年IT的前辈 他的简历给人焕然一新的感觉 IOS:深入理解object-c语言 内存管理(ARC,MRC, 写回传),GCD,RunLoop,RunTime,,Block,Deleg ...