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)下的期望。要求前面的条件概率是比较容易一些的,而要求后面的联合概率分布是非常困难的,因为它包含了归一化因子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

  • 相关阅读:
    pat 甲级 1065. A+B and C (64bit) (20)
    pat 甲级 1064. Complete Binary Search Tree (30)
    pat 甲级 1010. Radix (25)
    pat 甲级 1009. Product of Polynomials (25)
    pat 甲级 1056. Mice and Rice (25)
    pat 甲级 1078. Hashing (25)
    pat 甲级 1080. Graduate Admission (30)
    pat 甲级 团体天梯 L3-004. 肿瘤诊断
    pat 甲级 1099. Build A Binary Search Tree (30)
    Codeforce 672B. Different is Good
  • 原文地址:https://www.cnblogs.com/yihaha/p/7265316.html
Copyright © 2011-2022 走看看