欢迎转载,转载请注明:本文出自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

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

深度学习方法:受限玻尔兹曼机RBM(三)模型求解,Gibbs sampling相关推荐

  1. 深度学习 --- 受限玻尔兹曼机RBM(MCMC和Gibbs采样)

    上一节我们详细的讲解了马尔科夫过程和马尔科夫链,提及了转移矩阵P,马尔科夫的平稳性(遍历性),需要好好理解马尔科夫的平稳性,因为本节将根据马尔科夫的平稳性进行讲解,同时也介绍了采样的原理和过程.好,到 ...

  2. 深度学习 --- 受限玻尔兹曼机RBM(MCMC接受率详解)

    上节我们提到了,MCMC的接受率问题,在<LDA数学八卦>中作者直接给出了接受率的问题,没讲明原因,感觉很突兀,我彻底搞明白了,只是这个体系比较庞大,说来话长,需要和前面讲过的内容串在一起 ...

  3. 深度学习 --- 受限玻尔兹曼机RBM(直接采样、接受-拒绝采样、重要性采样详解)

    在讲解MCMC和Gibbs采样之前,大家需要理解统计学中的采样,什么是采样?为什么要采样?采样有什么用?大家需要深入理解采样的原理,深入理解的好处不仅容易理解下面的MCMC和Gibbs采样,也更容易掌 ...

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

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

  5. 深度学习 --- 受限玻尔兹曼机详解(RBM)

    本节终于来到了重头戏受限玻尔兹曼机,为了能深入理解本节,我们深入讲了很多基础知识,这些基础知识很重要,是理解本节的基础,同时也是你学习其他算法的基础如强化学习.自然语言处理等.本节的安排是先对比一下受 ...

  6. 【总结】关于玻尔兹曼机(BM)、受限玻尔兹曼机(RBM)、深度玻尔兹曼机(DBM)、深度置信网络(DBN)理论总结和代码实践

    近期学习总结 前言 玻尔兹曼机(BM) 波尔兹曼分布推导过程 吉布斯采样 受限玻尔兹曼机(RBM) 能量函数 CD学习算法 代码实现受限玻尔兹曼机 深度玻尔兹曼机(DBM) 代码实现深度玻尔兹曼机 深 ...

  7. Hopfield网络和玻尔兹曼机对比,总结,以及受限玻尔兹曼机RBM的提出

    7.Hopfield网络 特点: (1)是一个简单的单层全连接神经网络: (2)每个神经元和其他神经元是全连接的关系: (3)在更新网络权重时,有异步工作方式:每次只更新一个神经元的权重,其他权重保持 ...

  8. 简单易学的机器学习算法——受限玻尔兹曼机RBM

    受限玻尔兹曼机(Restricted Boltzmann Machine, RBM)是一种基于能量模型的神经网络模型,在Hinton提出针对其的训练算法(对比分歧算法)后,RBM得到了更多的关注,利用 ...

  9. 受限玻尔兹曼机(RBM)与python在Tensorflow的实现

    任何程序错误,以及技术疑问或需要解答的,请扫码添加作者VX:1755337994 简介 受限玻尔兹曼机是一种无监督,重构原始数据的一个简单的神经网络. 受限玻尔兹曼机先把输入转为可以表示它们的一系列输 ...

最新文章

  1. 使用Nucleus SE实时操作系统
  2. 李子柒爆红:既然做直播能年薪过亿, 为何还要努力高考?
  3. AngularJS 使用ngOption实现下拉列表
  4. string 小知识
  5. Android_SQLite_升级框架
  6. redmine2.4.2 插件安装
  7. 数据结构与算法专题——第三题 最长公共子序列
  8. 11. OD-Delphi程序暴力破解
  9. 基金回撤越大收益越高吗?
  10. vscode 中 eslint 的配置
  11. itext-asian-5.2.0
  12. 自学SAP ERP步骤
  13. 报错 | Cannot find module ‘@better-scroll/core/dist/types/BScroll‘
  14. W5500+STM32F103C8T6进行TCP通信(modbus)
  15. BASH脚本基础:语法检查与调试
  16. 考研一年到底需要花多少钱?这个你必须要知道!!!
  17. windows提权速查流程
  18. JavaSE:抽象类和接口
  19. 【JavaScript】(9)——实例:滑动效果的弹出框
  20. 赛车游戏的2D 编程(VC++)

热门文章

  1. 设置图片圆角 或者圆形
  2. 亚马逊Rekognition发布针对人脸检测、分析和识别功能的多项更新
  3. codeforces 1045 D. Interstellar battle
  4. 深入Java内存模型
  5. 顺大势逆小势策略之代码实现及可行性分析
  6. 系统的Drawable(四)-LayerListDrawable
  7. Nginx(六)-- 配置文件之Gzip
  8. 《数据结构与抽象:Java语言描述(原书第4版)》一P.4.1 标识类
  9. ASP.NET的错误处理机制之一(概念)
  10. ORACLE AUDIT 审计