深度学习方法:受限玻尔兹曼机RBM(三)模型求解,Gibbs sampling
欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld。
技术交流QQ群:433250724,欢迎对算法、技术、应用感兴趣的同学加入。
接下来重点讲一下RBM模型求解方法,其实用的依然是梯度优化方法,但是求解需要用到随机采样的方法,常见的有:Gibbs Sampling和对比散度(contrastive divergence, CD[8])算法。
RBM目标函数
假设给定的训练集合是S={vi},总数是ns,其中每个样本表示为vi=(vi1,vi2,…,vinv),且都是独立同分布i.i.d的。RBM采用最大似然估计,即最大化
参数表示为θ=(W,a,b),因此统一的参数更新表达式为:
其中,η表示学习速率。因此,很明显,只要我们可以求解出参数的梯度,我们就可以求解RMB模型了。我们先考虑任意单个训练样本(v0)的情况,即
其中v表示任意的训练样本,而v0则表示一个特定的样本。
(其中第3个等式左边内条件概率P(h|v0),因为e−E(v0,h)∑he−E(v0,h)=e−E(v0,h)/Z∑he−E(v0,h)/Z=P(v0,h)P(v0)=P(h|v0))
上面式子的两个部分的含义是期望——左边是梯度∂E(v0,h)∂θ在条件概率分布P(h|v0)下的期望;右边是梯度∂E(v,h)∂θ在联合概率分布P(h,v)下的期望。要求前面的条件概率是比较容易一些的,而要求后面的联合概率分布是非常困难的,因为它包含了归一化因子Z(对所有可能的取值求和,连续的情况下是积分),因此我们采用一些随机采样来近似求解。把上面式子再推导一步,可以得到,
因此,我们重点就是需要就算∑hP(h|v)∂E(v,h)∂θ,特别的,针对参数W,a,b来说,有
类似的,我们可以很容易得到:
于是,我们很容易得到,
上面求出了一个样本的梯度,对于ns个样本有
到这里就比较明确了,主要就是要求出上面三个梯度;但是因为不好直接求概率分布P(v),前面分析过,计算复杂度非常大,因此采用一些随机采样的方法来得到近似的解。看这三个梯度的第二项实际上都是求期望,而我们知道,样本的均值是随机变量期望的无偏估计。
Gibbs Sampling
很多资料都有提到RBM可以用Gibbs Sampling来做,但是具体怎么做不讲(是不是有点蛋疼?),可能很多人也不清楚到底怎么做。下面稍微介绍一下。
吉布斯采样(Gibbs sampling),是MCMC方法的一种,具体可以看我前面整理的随机采样MCMC的文章。总的来说,Gibbs采样可以从一个复杂概率分布P(X)下生成数据,只要我们知道它每一个分量的相对于其他分量的条件概率P(Xk|X−k),就可以对其进行采样。而RBM模型的特殊性,隐藏层神经元的状态只受可见层影响(反之亦然),而且同一层神经元之间是相互独立的,那么就可以根据如下方法依次采样:
也就是说hi是以概率P(hi|v0)为1,其他的都类似。这样当我们迭代足够次以后,我们就可以得到满足联合概率分布P(v,h)下的样本(v,h),其中样本(v)可以近似认为是P(v)下的样本,下图也说明了这个迭代采样的过程:
有了样本(v)就可以求出上面写到的三个梯度(∂LS∂wij,∂LS∂ai,∂LS∂bi)了,用梯度上升就可以对参数进行更新了。(实际中,可以在k次迭代以后,得到样本集合{v},比如迭代100次取后面一半,带入上面梯度公式的后半部分计算平均值。)
看起来很简单是不是?但是问题是,每一次gibbs采样过程都需要反复迭代很多次以保证马尔科夫链收敛,而这只是一次梯度更新,多次梯度更新需要反复使用gibbs采样,使得算法运行效率非常低。为了加速RBM的训练过程,Hinton等人提出了对比散度(Contrastive Divergence)方法,大大加快了RBM的训练速度,将在下一篇重点讲一下。
OK,本篇先到这里。平时工作比较忙,加班什么的(IT的都这样),晚上回到家比较晚,每天只能挤一点点时间写,写的比较慢,见谅。RBM这一块可以看的资料很多,网上一搜一大堆,还包括hinton的一些论文和Bengio的综述[9],不过具体手写出来的思路还是借鉴了[7],看归看,我会自己推导并用自己的语言写出来,大家有什么问题都可以留言讨论。下一篇最后讲一下CD算法,后面有时间再拿code出来剖析一下。
觉得有一点点价值,就支持一下哈!花了很多时间手打公式的说~更多内容请关注Bin的专栏
参考资料
[1] http://www.chawenti.com/articles/17243.html
[2] 张春霞,受限波尔兹曼机简介
[3] http://www.cnblogs.com/tornadomeet/archive/2013/03/27/2984725.html
[4] http://deeplearning.net/tutorial/rbm.html
[5] Asja Fischer, and Christian Igel,An Introduction to RBM
[6] G.Hinton, A Practical Guide to Training Restricted Boltzmann Machines
[7] http://blog.csdn.net/itplus/article/details/19168937
[8] G.Hinton, Training products of experts by minimizing contrastive divergence, 2002.
[9] Bengio, Learning Deep Architectures for AI, 2009
深度学习方法:受限玻尔兹曼机RBM(三)模型求解,Gibbs sampling的更多相关文章
- 深度学习方法:受限玻尔兹曼机RBM(一)基本概念
欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术.应用感兴趣的同学加入. 最近在复习经典机器学习算法的同 ...
- 基于受限玻尔兹曼机(RBM)的协同过滤
受限玻尔兹曼机是一种生成式随机神经网络(generative stochastic neural network), 详细介绍可见我的博文<受限玻尔兹曼机(RBM)简介>, 本文主要介绍R ...
- 深度学习方法:受限玻尔兹曼机RBM(二)网络模型
欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术.应用感兴趣的同学加入 上解上一篇RBM(一)基本概念, ...
- 深度学习方法:受限玻尔兹曼机RBM(四)对比散度contrastive divergence,CD
欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术.应用感兴趣的同学加入 上篇讲到,如果用Gibbs Sa ...
- 受限玻尔兹曼机RBM
相关算法 python代码参考http://blog.csdn.net/zc02051126/article/details/9668439#(作少量修改与注释) #coding:utf8 impor ...
- 受限玻尔兹曼机RBM—简易详解
- SIGAI深度学习第六集 受限玻尔兹曼机
讲授玻尔兹曼分布.玻尔兹曼机的网络结构.实际应用.训练算法.深度玻尔兹曼机等.受限玻尔兹曼机(RBM)是一种概率型的神经网络.和其他神经网络的区别:神经网络的输出是确定的,而RBM的神经元的输出值是不 ...
- 受限玻尔兹曼机(Restricted Boltzmann Machine,RBM)
这篇写的主要是翻译网上一篇关于受限玻尔兹曼机的tutorial,看了那篇博文之后感觉算法方面讲的很清楚,自己收获很大,这里写下来作为学习之用. 原文网址为:http://imonad.com/rbm/ ...
- 关于”机器学习方法“,"深度学习方法"系列
"机器学习/深度学习方法"系列,我本着开放与共享(open and share)的精神撰写,目的是让很多其它的人了解机器学习的概念,理解其原理,学会应用.如今网上各种技术类文章非常 ...
随机推荐
- UVA.10474 Where is the Marble ( 排序 二分查找 )
UVA.10474 Where is the Marble ( 排序 二分查找 ) 题意分析 大水题一道.排序好找到第一个目标数字的位置,返回其下标即可.暴力可过,强行写了一发BS,发现错误百出.应了 ...
- setTimeout()的应用
错误写法:setTimeout(window.close(),5000); 正确写法:setTimeout(window.close,5000); 或者 setTimeout(function(){ ...
- 打开cmd窗口新技巧get
1.在当前目录下,按住shift键+点击右键,选择在此处打开命令窗口 很多时候我们需要打开命令行然后进入到相应目录进行一些操作. 常规的做法是: Win+R打开运行窗口 输入"cmd&quo ...
- 【题解】Huge Mods UVa 10692 欧拉定理
题意:计算a1^( a2^( a3^( a4^( a5^(...) ) ) ) ) % m的值,输入a数组和m,不保证m是质数,不保证互质 裸的欧拉定理题目,考的就一个公式 a^b = a^( b % ...
- oracle xml操作
/*=====================生成\修改xml========================= */ --xmlelement多个标签层级 SELECT XMLELEMENT(& ...
- 主机不能访问虚拟机CentOS中的站点
主机能ping通虚拟机 虚拟机也能ping通主机 主机不能telenet通虚拟机 原因:虚拟机开启了防火墙, 解决办法:关闭虚拟机防火墙. Centos 7 firewall 命令: 查看已经开放的端 ...
- [技巧篇]06.关于防止SQL注入的方式,不使用预处理
在一期,二期阶段,有一些同学,对于SQL语句总是使用字符串的拼接,这是一个比较坏的毛病,这样非常影响我们的程序的安全性,所以一般情况下我们都推荐预处理模式,针对这种模式希望不了解的同学去努力学习,下面 ...
- overflow:auto产生的滚动条在安卓系统下能平滑滚动,而在ios下滚动不平滑
由于系统的问题,加上-webkit-overflow-scrolling : touch; 即可解决平滑滚动问题
- 南阳ACM 题目71:独木舟上的旅行 Java版
独木舟上的旅行 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 进行一次独木舟的旅行活动,独木舟可以在港口租到,并且之间没有区别.一条独木舟最多只能乘坐两个人,且乘客的总 ...
- 在MVC5中使用Ninject 依赖注入
各大主流.Net的IOC框架性能测试比较 : http://www.cnblogs.com/liping13599168/archive/2011/07/17/2108734.html 使用NuGet ...