深度学习方法:受限玻尔兹曼机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采用最大似然估计,即最大化

lnLS=lni=1nsP(vi)=i=1nslnP(vi)

参数表示为θ=(W,a,b),因此统一的参数更新表达式为:

θ=θ+ηlnLSθ

其中,η表示学习速率。因此,很明显,只要我们可以求解出参数的梯度,我们就可以求解RMB模型了。我们先考虑任意单个训练样本(v0)的情况,即
LS=lnP(v0)=ln(1ZheE(v0,h))=lnheE(v0,h)lnv,heE(v,h)

其中v表示任意的训练样本,而v0则表示一个特定的样本。

LSθ=lnP(v0)θ=θ(lnheE(v0,h))θ(lnv,heE(v,h))=1heE(v0,h)heE(v0,h)E(v0,h)θ+1v,heE(v,h)v,heE(v,h)E(v,h)θ=hP(h|v0)E(v0,h)θ+v,hP(h,v)E(v,h)θ

(其中第3个等式左边内条件概率P(h|v0),因为eE(v0,h)heE(v0,h)=eE(v0,h)/ZheE(v0,h)/Z=P(v0,h)P(v0)=P(h|v0)

上面式子的两个部分的含义是期望——左边是梯度E(v0,h)θ在条件概率分布P(h|v0)下的期望;右边是梯度E(v,h)θ在联合概率分布P(h,v)下的期望。要求前面的条件概率是比较容易一些的,而要求后面的联合概率分布是非常困难的,因为它包含了归一化因子Z(对所有可能的取值求和,连续的情况下是积分),因此我们采用一些随机采样来近似求解。把上面式子再推导一步,可以得到,

LSθ=hP(h|v0)E(v0,h)θ+vP(v)hP(h|v)E(v,h)θ

因此,我们重点就是需要就算hP(h|v)E(v,h)θ,特别的,针对参数W,a,b来说,有

hP(h|v)E(v,h)wij=hP(h|v)hivj=hP(hi|v)P(hi|v)hivj=hiP(hi|v)hiP(hi|v)hivj=hiP(hi|v)hivj=(P(hi=1|v)1vj+P(hi=0|v)0vj)=P(hi=1|v)vj

类似的,我们可以很容易得到:

hP(h|v)E(v,h)ai=vi

hP(h|v)E(v,h)bj=P(hi=1|v)

于是,我们很容易得到,

lnP(v0)wij=hP(h|v0)E(v0,h)wij+vP(v)hP(h|v)E(v,h)wij=P(hi=1|v0)v0jvP(v)P(hi=1|v)vj

lnP(v0)ai=v0ivP(v)vi

lnP(v0)bi=P(hi=1|v0)vP(v)P(hi=1|v)

上面求出了一个样本的梯度,对于ns个样本有

LSwij=m=1ns[P(hi=1|vm)vmjvP(v)P(hi=1|v)vj]

LSai=m=1ns[vmivP(v)vi]

LSbi=m=1ns[P(hi=1|vm)vP(v)P(hi=1|v)]

到这里就比较明确了,主要就是要求出上面三个梯度;但是因为不好直接求概率分布P(v),前面分析过,计算复杂度非常大,因此采用一些随机采样的方法来得到近似的解。看这三个梯度的第二项实际上都是求期望,而我们知道,样本的均值是随机变量期望的无偏估计。

Gibbs Sampling

很多资料都有提到RBM可以用Gibbs Sampling来做,但是具体怎么做不讲(是不是有点蛋疼?),可能很多人也不清楚到底怎么做。下面稍微介绍一下。

吉布斯采样(Gibbs sampling),是MCMC方法的一种,具体可以看我前面整理的随机采样MCMC的文章。总的来说,Gibbs采样可以从一个复杂概率分布P(X)下生成数据,只要我们知道它每一个分量的相对于其他分量的条件概率P(Xk|Xk),就可以对其进行采样。而RBM模型的特殊性,隐藏层神经元的状态只受可见层影响(反之亦然),而且同一层神经元之间是相互独立的,那么就可以根据如下方法依次采样:

这里写图片描述

也就是说hi是以概率P(hi|v0)为1,其他的都类似。这样当我们迭代足够次以后,我们就可以得到满足联合概率分布P(v,h)下的样本(v,h),其中样本(v)可以近似认为是P(v)下的样本,下图也说明了这个迭代采样的过程:
这里写图片描述
有了样本(v)就可以求出上面写到的三个梯度(LSwij,LSai,LSbi)了,用梯度上升就可以对参数进行更新了。(实际中,可以在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

转载于:https://www.cnblogs.com/yihaha/p/7265316.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/272592.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

推荐一款PC端的远程软件-Remote Utilities

远程控制软件非常之多,但小编自己用过的就那么3个:teamviewer:在家远程办公时基本上都靠它连回公司的电脑,速度快、稳定、不需要公网IP。vnc:要开启vpn才能连回公司的网络,速度够快。系统自带远程桌面&…

原生js追加html代码,原生js实现给指定元素的后面追加内容

复制代码 代码如下:var header1 document.getElementById("header");var p document.createElement("p"); // 创建一个元素节点insertAfter(p,header1); // 因为js没有直接追加到指定元素后面的方法 所以要自己创建一个方法function insertAfter( newEle…

这些才是Win10真正好用之处:瞬对Win7无爱

自从将家里的笔电、台式机全部升级到Win10之后,小编可是切切实实感受到了它的强大,非常多的改进、非常多人性化的设计。和之前的测试版不同,作为主力系统后自然要匹配日常的工作。很多设置、操作也要顺应以前的使用习惯。经过这几天折腾&…

html5 保存 搜索历史,html5 – 如何有效处理Dart中的浏览器历史记录(即后退按钮)?...

HTML5定义了用于操作历史记录的新API,允许您在不重新加载窗口的情况下更改位置.有一篇关于Dive Into HTML5的精彩文章,展示了如何使用历史API在单页面应用中模拟多页面导航.它很容易翻译成Dart.在带导航的单页应用程序中,我通常设置客户端代码的方式类似于在服务器上设置RoR或D…

多个DataSet数据合并

DataSet ds myIAppSet.GetHomeHottestList(siteID, 0, time); DataSet ds1 myIAppSet.GetHomeHottestList(siteID, 1, time);if (ds1 ! null && ds1.Tables[0].Rows.Count > 0){ds.Merge(ds1);} Merge方法,用于DataSet、DataTable,多个字段…

math.js:灵活强大的JavaScript数学库

最近为期权开发一些基本技术指标,用到一些C的数学库,刚好看到JavaScript的math.js库,这里对math.js做一下简单介绍。一、什么是math.jsmath.js是一个广泛应用于JavaScript 和 Node.js的数学库,它的特点是灵活表达式解析器&#xf…

html的闪烁字,HTML最简单的文字闪烁代码

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼Titlekeyframes blink{0%{opacity: 1;}50%{opacity: 1;}50.01%{opacity: 0;}100%{opacity: 0;}}-webkit-keyframes blink {0% { opacity: 1; }50% { opacity: 1; }50.01% { opacity: 0; }100% { opacity: 0; }}-moz-keyframes blin…

video和dvd audio区别:

VIDEO 是视频,AUDIO是音频。DVD- Audio 是目前流行的DVD光碟格式的一种扩展,区别在于它能够传输先前所有音频载体格式无法携带的全新标准的高质量音频数据。最引人注目的特点是它多声道音频的能力。转载于:https://www.cnblogs.com/zjqqqq/p/5060931.htm…

Win10非常好用的6个使用技巧

很多人已经用上了Win10系统,为了提高使用效率掌握使用技巧尤为重要,今天我为大家分享win10的6个使用技巧。第一个:快速查找文件(win键E)想要打开某个文件,直接使用这个快捷键就可以打开资源管理器&#xff…

servlet html登录,Servlet实现用户登录

1、登录过程分析:通过表单收集用户的数据,Servlet通过request对象获得用户提交的数据,服务器还需要从数据库中通过sql语句查询有没有表单提交的数据中的用户。有则登录成功,否则,登录失败。2、工程结构:3、…

HTML5拖放API

HTML5拖放API 拖放事件 HTML5拖放API 拖放事件事件提供了拖放可以控制几乎所有方面的拖放操作。棘手的部分是确定每个事件触发:在拖项目火;别人火下降的目标。 拖动项时,以下事件(按照这个顺序):拖曳开始拖…

C#easyui combotree 设置节点折叠

树实体public class Combotree{public string id { get; set; }public string text { get; set; }public string state { get; set; }public List<Combotree> children { get; set; }} 只需要在初始化数据的时候给state 设置为 closed注意&#xff1a;不要在最后一级节点…

用于大型的科学计算的计算机,科学计算器广泛适用于大、中、小学生、教师、科研人员及其他各界...

科学计算器广泛适用于大、中、小学生、教师、科研人员及其他各界人士。相关句子1、机器人广泛应用于弧焊&#xff0c;点焊&#xff0c;涂胶&#xff0c;切割&#xff0c;搬运&#xff0c;码垛&#xff0c;喷漆&#xff0c;科研及教学。3、可以满足大学本科和研究生有关实验课教…

C#中AssemblyInfo.cs文件详解

1、.Net工程的Properties文件夹下自动生成一个名为AssemblyInfo.cs的文件&#xff0c;一般情况下我们很少直接改动该文件。但我们实际上通过另一个形式操作该文件。那就是通过在鼠标右键点击项目的属性进入“应用程序”->“程序集信息”&#xff0c;然后修改信息。2、通过特…

谈项目需求

&#xfeff;&#xfeff;三种客户类型&#xff1a; 1 的确很专业。能提供基本可用的文档&#xff0c;能给出要求规范&#xff0c;能向你提出有价值疑问和担心。能快速回答你的问题。2 以为自己很专业。 给的文档基本没法用。没法提供规范和标准&#xff0c;喜欢指指点点和挑毛…

html复制文字兼容手机,JavaScript+Html5实现按钮复制文字到剪切板功能(手机网页兼容)...

新学习JavaScript&#xff0c;就碰到这么一个需求&#xff0c;几乎网上的方法都试过了。写出了总结下使用的方法&#xff1a;clipboard插件下载地址&#xff1a;https://github.com/zenorocha/clipboard.js/tree/master引入插件&#xff1a;目录\clipboard.js-master\dist\clip…

MVC5 Controller构造方法获取User为空解决方法

用如下方法获取UserId报空引用异常 public class BaseController : Controller {protected SiteContext db new SiteContext();protected Guid userId;public BaseController(){userId Guid.Parse(User.Identity.GetUserId());} } 由于Controller未初始化完成&#xff0c;Use…

计算机应用领域的CIMS,计算机的应用领域

计算机的应用领域近年来&#xff0c;计算机技术得到了飞跃发展&#xff0c;超级并行计算机技术、高速网络技术、多媒体技术、人工智能技术等相互渗透&#xff0c;改变了人们使用计算机的方式&#xff0c;从而使计算机几乎渗透到人类生产和生活的各个领域&#xff0c;对工业和农…

VS2015企业版专业版密钥

亲测可用&#xff0c;有需要的可以mark一下&#xff01;专业版&#xff1a;HMGNV-WCYXV-X7G9W-YCX63-B98R2企业版&#xff1a;HM6NR-QXX7C-DFW2Y-8B82K-WTYJV

Thinkphp编辑器扩展类kindeditor用法

一&#xff0c; 使用前的准备。 使用前请确认你已经建立好了一个Thinkphp站点项目。1&#xff0c;Keditor.class.php和JSON.class.php 是编辑器扩展类文件&#xff0c;将他们拷贝到你的站点项目的ThinkPHP\Lib\ORG\Net 目录下。2&#xff0c;editor目录是kindeditor的核心包。将…