zoukankan      html  css  js  c++  java
  • 深度学习方法:受限玻尔兹曼机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)下的期望。

    要求前面的条件概率是比較easy一些的。而要求后面的联合概率分布是非常困难的,由于它包括了归一化因子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

    相似的。我们能够非常easy得到:

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

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

    于是,我们非常easy得到,

    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

  • 相关阅读:
    常用git命令
    复制文件
    实现斗地主洗牌、发牌、看牌
    线程池实现多线程
    git无法提交问题
    Js中处理日期加减天数
    form详解
    node.js中exports与module.exports的区别
    css的direction属性
    webstorm基础使用
  • 原文地址:https://www.cnblogs.com/gccbuaa/p/7230965.html
Copyright © 2011-2022 走看看