欢迎转载,转载请注明:本文出自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=ln∏i=1nsP(vi)=∑i=1nslnP(vi)

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

θ=θ+η∂lnLS∂θ

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

LS=lnP(v0)=ln(1Z∑he−E(v0,h))=ln∑he−E(v0,h)−ln∑v,he−E(v,h)

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

∂LS∂θ=∂lnP(v0)∂θ=∂∂θ(ln∑he−E(v0,h))−∂∂θ(ln∑v,he−E(v,h))=−1∑he−E(v0,h)∑he−E(v0,h)∂E(v0,h)∂θ+1∑v,he−E(v,h)∑v,he−E(v,h)∂E(v,h)∂θ=−∑hP(h|v0)∂E(v0,h)∂θ+∑v,hP(h,v)∂E(v,h)∂θ

(其中第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(对所有可能的取值求和,连续的情况下是积分),因此我们采用一些随机采样来近似求解。把上面式子再推导一步,可以得到,

∂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(h−i|v)hivj=−∑hiP(hi|v)∑h−iP(h−i|v)hivj=−∑hiP(hi|v)hivj=−(P(hi=1|v)⋅1⋅vj+P(hi=0|v)⋅0⋅vj)=−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)v0j−∑vP(v)P(hi=1|v)vj
∂lnP(v0)∂ai=v0i−∑vP(v)vi
∂lnP(v0)∂bi=P(hi=1|v0)−∑vP(v)P(hi=1|v)

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

∂LS∂wij=∑m=1ns[P(hi=1|vm)vmj−∑vP(v)P(hi=1|v)vj]
∂LS∂ai=∑m=1ns[vmi−∑vP(v)vi]
∂LS∂bi=∑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|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的更多相关文章

  1. 深度学习方法:受限玻尔兹曼机RBM(一)基本概念

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术.应用感兴趣的同学加入. 最近在复习经典机器学习算法的同 ...

  2. 基于受限玻尔兹曼机(RBM)的协同过滤

    受限玻尔兹曼机是一种生成式随机神经网络(generative stochastic neural network), 详细介绍可见我的博文<受限玻尔兹曼机(RBM)简介>, 本文主要介绍R ...

  3. 深度学习方法:受限玻尔兹曼机RBM(二)网络模型

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术.应用感兴趣的同学加入 上解上一篇RBM(一)基本概念, ...

  4. 深度学习方法:受限玻尔兹曼机RBM(四)对比散度contrastive divergence,CD

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术.应用感兴趣的同学加入 上篇讲到,如果用Gibbs Sa ...

  5. 受限玻尔兹曼机RBM

    相关算法 python代码参考http://blog.csdn.net/zc02051126/article/details/9668439#(作少量修改与注释) #coding:utf8 impor ...

  6. 受限玻尔兹曼机RBM—简易详解

  7. SIGAI深度学习第六集 受限玻尔兹曼机

    讲授玻尔兹曼分布.玻尔兹曼机的网络结构.实际应用.训练算法.深度玻尔兹曼机等.受限玻尔兹曼机(RBM)是一种概率型的神经网络.和其他神经网络的区别:神经网络的输出是确定的,而RBM的神经元的输出值是不 ...

  8. 受限玻尔兹曼机(Restricted Boltzmann Machine,RBM)

    这篇写的主要是翻译网上一篇关于受限玻尔兹曼机的tutorial,看了那篇博文之后感觉算法方面讲的很清楚,自己收获很大,这里写下来作为学习之用. 原文网址为:http://imonad.com/rbm/ ...

  9. 关于”机器学习方法“,&quot;深度学习方法&quot;系列

    "机器学习/深度学习方法"系列,我本着开放与共享(open and share)的精神撰写,目的是让很多其它的人了解机器学习的概念,理解其原理,学会应用.如今网上各种技术类文章非常 ...

随机推荐

  1. IOI2000 Post Office (POJ1160)

    前言 昨天XY讲课!讲到这题!还是IOI的题!不过据说00年的时候DP还不流行. 题面 http://poj.org/problem?id=1160 分析  § 1 中位数 首先我们考虑,若有x1 & ...

  2. 【神仙DP】【单调队列】【模拟题】区间覆盖

    传送门 Description 给出数轴上的n个线段,保留最多k条线段,问这些被保留下来的线段的并集长度为最多为多少. Input 第一行两个数n和k 接下来n行,每行两个数,表示一条线段的左右端点. ...

  3. JavaScript去除空格trim()的原生实现

    W3C那帮人的脑袋被驴踢了,直到javascript1.8.1才支持trim函数(与trimLeft,trimRight),可惜现在只有firefox3.5支持.由于去除字符串两边的空白实在太常用,各 ...

  4. java 解析http返回xml数据

    //post 请求 private static String sendPost(String url, String urlParameters) throws Exception { URL ob ...

  5. Atlantis HDU - 1542 (线段树扫描线)

    There are several ancient Greek texts that contain descriptions of the fabled island Atlantis. Some ...

  6. nodejs+react构建仿知乎的小Demo

    一.命令行进入指定项目文件夹 二.相关命令安装环境和项目工具 npm init npm install react -- save npm install -g gulp npm install -- ...

  7. sublime 常用插件 感觉比较全了 够用了

    插件介绍 Package Control 功能:安装包管理 简介:sublime插件控制台,提供添加.删除.禁用.查找插件等功能 使用:https://sublime.wbond.net/instal ...

  8. MS SQL 启用标识插入

    解决MSSQL字段为标识不能插入办法http://www.veryhuo.com 2009-09-21 Liehuo.Net 投递稿件 我有话说当 IDENTITY_INSERT 设置为 OFF 时, ...

  9. [洛谷P2261] [CQOI2007]余数求和

    洛谷题目链接:[CQOI2007]余数求和 题目背景 数学题,无背景 题目描述 给出正整数n和k,计算G(n, k)=k mod 1 + k mod 2 + k mod 3 + - + k mod n ...

  10. flask-login源码梳理