参考论文:1、Stacks of Convolutional Restricted Boltzmann Machines for Shift-Invariant Feature Learning  
                  2、Convolutional Deep Belief Networks for Scalable Unsupervised Learning of Hierarchical Representations 
 
预备知识:http://blog.csdn.net/zouxy09/article/details/9993371
。。。写着写着发现论文2的CDBN模型较CRBM模型多了不少细节(如probabilistic max-pooling),文字表示很捉急,因此文章开头是论文2开头,内容实际是CRBM~~总的来说论文1和2内容实质是一样的,论文2只不过是小改了一下模型,理论和算法不变。
       文章开头作者就提出目前的多层生成模型(如DBN)所存在的问题:对高维图像做全尺寸衡量(scaling such models to full-sized)很困难。详细来说传统的多层生成模型DBN有两个方面的挑战:
          ①图像时很高维度的,算法要能够合理的建模,且计算简便;
          ②对象常常分布在图像的局部,要求特征表示对输入的局部变换具有不变性。
 
        接着,作者回想到CNN,其简便的计算和对局部特征的提取令人印象深刻。Bingo!CNN和DBN结合——CDBN!convolutional deep belief networks卷积深信度网络,该方法的关键部分是max-pooling,一种概率的降维技术手段。紧接着说出CDBN是首创的,牛逼之处在于网络的第一、二和三层能够学习到边缘检测、对象局部和对象,如下图:
          正文从序言介绍RBM和DBN开始,列出了RBM和Gaussian-Bernoulli RBM对应的能量函数,主要还是对前人工作的总结。对RBM或Gaussian-Bernoulli RBM的详细计算和推导可以在文章《Learning Multiple Layers of Features from Tiny Images》 BY Alex Krizhevsky,以及《深度学习读书笔记之rbm》自行百度谷歌吧。
 
          接下来干货时间,仔细介绍CDBN。从介绍单层CRBM开始,先放出两个图,图2是单个滤波器在网络中的连接关系,图3是可视层到隐层的卷积计算方式:
一、单层CRBM网络的前向计算过程(positive phase)
        输入为Nv×Nv的2D图像,和CNN一样CRBM可以设置多个特征滤波器(也称为卷积核),假设有K个大小为Nw×Nw的特征滤波器。每个滤波器可以理解成一个通道,某个通道内部计算和其余通道无关。每个滤波器的计算分为convolution和pooling两个部分:          
①是由可视层到隐层的计算,图3形象的表示了计算过程conv2(v,w1,'valid')=a1,a1大小为Nh×Nh(这里Nh=Nv-Nw+1),如图3中Nh=6-3+1=4),用sigmoid函数激活a1后得到滤波器1在隐层的值h1(h1称为一个group);②是隐层到下采样层pooling层的计算,这里采用了max-pooling方法,即按pool的大小poolsize(如poolsize=2,pool区域大小则为2x2)每个区域选取当中最大值(图2中p),区域划为不重叠,这一点和CNN网络的pooling是一样的。最终每个通道计算得到的pooling层大小为NpxNp(其中Np=Nh/poolsize)。本文介绍的CRBM生成模型中pooling仅仅是一项降维操作,在模型训练过程中可以忽略。
          
          下面的两个公式分别对应convolution和pooling的计算:
          其中σ表示sigmoid激活函数
             其中I为  ,Ba表示pooling区域
          
          第二个pooling的公式是由max-pooling机制和P(h=1|v)的概率计算得到的,P(p=0|v)=1-P(h=1|v),这里的P(h=1|v)表示pooling区域内h单元出现1的概率,max-pooling后p单元为1的概率P(p=1|v)=P(h=1|v)→P(p=0|v)=1-P(p=1|v)=1-P(h=1|v)。
          计算所有滤波器通道,得到K个大小为NpxNp(其中Np=(Nv-Nw+1)/poolsize)的group。最后需要做Gibbs sampling,这样才完成了CRBM的前向传播过程positive phase。事实上由于pooling层没有参数需要训练,pooling仅作为一个降维和正则化操作。
          
二、CRBM的反向计算过程negative phase也叫反卷积
         
       如上图及公式,其中带*的w表示滤波器w的转置。在前向传播的说明中提到:pooling层没有自由参数,因此在训练CRBM时可以从隐层出发反向传播回可视层。当然这是
          每个可视层单元v都与K个滤波器相连,因此在逆过程negative phase的重构一定是所有滤波器的共同作用实现的,公式里表示成K个滤波器作用的叠加Σ。计算过程中可以用full的conv2函数实现,如Σ(conv2(h,w','full'))。在论文1中还将可视层分为边缘Vb和中心Vm两个部分做计算(因为前向卷积计算过程中Vb对隐层贡献较小,反卷积很难恢复Vb,论文1没有对边缘部分做重构),仅是技术细节本文跳过不讲。
 
三、稀疏正则化
       由于CRBM隐层单元远大于输入可视层,模型是超完备的。超完备容易容易导致滤波器仅表示单一像素而不是局部特征,一种常用的解决方法就是加入稀疏约束,强制隐层的大部分单元为零,设置整个隐层处于一个低的激活值。Lee还强调说:sparsity regularization during trianing was necessary for learning the oriented edge filters;when this term was removed the algorithm failed to learn oriented edges.没有稀疏约束算法就不能学习到有方向的边缘线条。
 
四、能量函数
       在讲完网络的连接和计算后,给出模型的能量函数(个人以为:大神们的论文中总是将能量函数放在前面讲是为了方便而已,实际设计模型过程中往往是设计好可视层、隐层和池化层的连接关系后再在这个基础上推导出能量函数)。
        可视层到隐层的关系式:
       隐层到可视层的重构   : 
       可以得出能量函数:
 
                                        
          发
 
五、算法
        用类似RBM的contrastive divergence对比分歧算法,该算法是对极大似然函数的近似快速求解,关于RBM的CD算法具体内容见Hinton大神的文章。下面讲CRBM的参数求解:
        
六、模型改进(论文1)
        论文2中将pooling层加入到生成模型中来,强化了pooling层对可视层的表达能力。甚至对两层CRBM构成的CDBN建模,得到一个四层结构(有两层max-pooling层)的生成模型。
 
END

Convolutional Restricted Boltzmann Machines的更多相关文章

  1. (六)6.14 Neurons Networks Restricted Boltzmann Machines

    1.RBM简介 受限玻尔兹曼机(Restricted Boltzmann Machines,RBM)最早由hinton提出,是一种无监督学习方法,即对于给定数据,找到最大程度拟合这组数据的参数.RBM ...

  2. 受限波兹曼机导论Introduction to Restricted Boltzmann Machines

    Suppose you ask a bunch of users to rate a set of movies on a 0-100 scale. In classical factor analy ...

  3. CS229 6.14 Neurons Networks Restricted Boltzmann Machines

    1.RBM简介 受限玻尔兹曼机(Restricted Boltzmann Machines,RBM)最早由hinton提出,是一种无监督学习方法,即对于给定数据,找到最大程度拟合这组数据的参数.RBM ...

  4. Introduction to Restricted Boltzmann Machines

    转载,原贴地址:Introduction to Restricted Boltzmann Machines,by Edwin Chen, 2011/07/18. Suppose you ask a b ...

  5. 限制波尔兹曼机(Restricted Boltzmann Machines)

    能量模型的概念从统计力学中得来,它描述着整个系统的某种状态,系统越有序,系统能量波动越小,趋近于平衡状态,系统越无序,能量波动越大.例如:一个孤立的物体,其内部各处的温度不尽相同,那么热就从温度较高的 ...

  6. Restricted Boltzmann Machines

    转自:http://deeplearning.net/tutorial/rbm.html http://blog.csdn.net/mytestmy/article/details/9150213 能 ...

  7. 受限玻尔兹曼机(RBM, Restricted Boltzmann machines)和深度信念网络(DBN, Deep Belief Networks)

    受限玻尔兹曼机对于当今的非监督学习有一定的启发意义. 深度信念网络(DBN, Deep Belief Networks)于2006年由Geoffery Hinton提出.

  8. 限制Boltzmann机(Restricted Boltzmann Machine)

    起源:Boltzmann神经网络 Boltzmann神经网络的结构是由Hopfield递归神经网络改良过来的,Hopfield中引入了统计物理学的能量函数的概念. 即,cost函数由统计物理学的能量函 ...

  9. 限制玻尔兹曼机(Restricted Boltzmann Machine)RBM

    假设有一个二部图,每一层的节点之间没有连接,一层是可视层,即输入数据是(v),一层是隐藏层(h),如果假设所有的节点都是随机二值变量节点(只能取0或者1值)同时假设全概率分布满足Boltzmann 分 ...

随机推荐

  1. Spring MVC 注解类型

    Spring 2.5 引入了注解 基于注解的控制器的优势 1. 一个控制器类可以处理多个动作,而一个实现了 Controller 接口的控制器只能处理一个动作 2. 基于注解的控制器的请求映射不需要存 ...

  2. 关于传统项目打成war包的的分析

    技术在不断的革新,以前的项目没有jar管理工具时,都是手动将依赖的jar拷贝到项目之下,然后Build Path,之后Maven出现了,出现了jar包中央仓库,所有的jar包资源集中在这里,免去频繁去 ...

  3. 【linux轻松学】修改文件权限

    用chmod修改文件权限,此命令非常重要. 用户范围:u 表示当前用户g 表示当前群组o 除u,g之外的用户和群组a 所有用户和群组 权限代号:r :读,用数字4表示w :写,用数字2表示x :执行, ...

  4. 乘积最大(NOIP2000&NOIP水题测试(2017082301))

    题目链接:乘积最大 这道题显然是道区间dp. 难度不是很大. 思路也很清晰. 我们设计一个三维状态. ans[l][r][k] 这里表示在闭区间[l,r]上操作k次的最大值. 操作就是加乘号. 转移也 ...

  5. Keras的泰坦尼克号的生存率的数据分析

      # coding: utf-8 # In[1]: import urllib.request import os # In[2]: url="http://biostat.mc.vand ...

  6. apm飞行模式

    参考 :https://www.cnblogs.com/jins-note/p/9580054.html   复制别人的,因为很久(几年)玩一次,所以会忘,也不好找,,若作者要求,请给留言,会立即删除 ...

  7. 762. Prime Number of Set Bits in Binary Representation

    static int wing=[]() { std::ios::sync_with_stdio(false); cin.tie(NULL); ; }(); class Solution { publ ...

  8. Java十进制数转二进制的方法

    使用Integer.toBinaryString(num) ,可以把十进制数转换成二进制 //十进制转换成二进制 Integer.toBinaryString(num); binary 二进制 Sys ...

  9. Codeforces Round #510 (Div. 2) D. Petya and Array(离散化+反向树状数组)

    http://codeforces.com/contest/1042/problem/D 题意 给一个数组n个元素,求有多少个连续的子序列的和<t (1<=n<=200000,abs ...

  10. CString成员函数详解[转]

    1.构造函数(常用) CString( const unsigned char* psz );      例:char s[]="abcdef";              cha ...