科学网

 找回密码
  注册
科学网 标签 RBM

tag 标签: RBM

相关帖子

版块 作者 回复/查看 最后发表

没有相关内容

相关日志

DBN的理解
热度 1 jiangqiuhua 2015-5-10 09:49
由于对概率论和信息论的基础太差,使得DBN的学习费了很长时间。好在有google学术的帮助,查找论文方便多了,使得自己能够不断地继续下去。 DBN的学习一般都是从Hinton的论文A Fast Learning Algorithm for Deep Belief Nets开始。如果没有相关的背景知识,不知道问题的来由,这篇论文读起来是相当费劲的。 下面我将自己的学习过程回顾一下,希望能够帮助象我这种基础差的同学。 学习过程中主要参考了三篇文献,尤其是其中第二篇文献。这篇论文被我忽视了很久,造成了学习中很大的困惑。 1、A Fast Learning Algorithm for Deep Belief Nets 2、The wake-sleep algorithm for unsupervised neural networks 3、An Introduction to Restricted Boltzmann Machines 文献【1】总体描述了DBN算法的实现。 我认为DBN算法就是Wake-Sleep算法+RBM,文中讨论了Explaining away,complementary prior两个重要概念。讨论了RBM与Infinite directed model with tied weights的等价性。 但是论文对Wake-Sleep算法解释特别少,因此,我对为什么讨论Explaining away,complementary prior两个概念非常不理解,云里雾里。使得我对为什么要用Wake-Sleep算法+RBM来学习多层神经网络非常难以理解。 文献【2】研究了Wake-Sleep算法。 多层神经网络有很好的特征表达能力,但许多学习算法效率不高。 Wake-Sleep算法是一种有效的多层神经网络学习算法。 它使得训练数据的表示最经济,同时能够准确地重构训练数据。 训练数据的表示分布(representation)记为 ,训练数据的生成分布(generation)记为 。 学习的目标是:使得描述长度(description length)最小。即: 在Wake阶段使得 逼近 ,在Sleep阶段使得 逼近 。 但是,由于 为因子形式分布(factorial distribution),很难准确地匹配 。因为 的公式为: 在一般情况下是不具备因子形式的分布。因此 难以匹配 ,从而加大了学习误差。 为了改善Wake-Sleep算法,需要使得似然分布 对应的后验分布 具有因子形式分布。 互补先验分布(Complementary Prior)就能够保证因子形式的似然分布具有因子形式的后验分布。这点在文献【1】的附录中讨论得很清楚。 RBM的作用就是用来生成似然分布的互补先验分布,使得其后验分布具有因子形式。 因此,DBN算法解决了Wake-Sleep算法表示分布难以匹配生成分布的难题,通过RBM使得训练数据的生成分布具有因子形式,从而提高了学习效率。
个人分类: 统计学习|20621 次阅读|1 个评论
RBM原理的理解
热度 1 jiangqiuhua 2015-3-22 11:04
网络上资料关于深度学习的入门,好多都是从RBM开始,如果没有一定的相关背景知识的话,这些资料让人看得很是摸不着头脑!我是主要参考了Asja Fischer和Christian Igel的介绍性论文《An Introduction to Restricted Boltzmann Machines》进行学习。大家可以从google学术中下载(网上知道的,真的很方便)。 下面是我整理的相关背景知识,以及自己对这些知识的理解。希望能帮助到大家,有不对的地方多交流,同时也提高自己的理解。 一、Graphical Model、MRF、BM和RBM 图模型(Graphical Model)是将随机变量用节点来表示,随机变量之间的相互依赖关系用连接线来表示,一般记为G(V,E)。该模型用来表示多个变量之间的联合分布,这点在刚接触图模型的特别不了解,弄得云里雾里。 随机变量之间最简单关系就是相互独立(朴素贝叶斯估计就是这样假定的),也即联合分布满足: p(v1,v2,...,vn)=p(v1)p(v2)...p(vn). 其中v1,v2,..vn表示单个随机变量。 但是现实中随机变量之间关系具有很复杂的相互依赖性,即上式不成立。于是需要将复杂问题简单化,即寻找满足部分独立的情况进行简化研究。 首先对一种相对简单的依赖关系进行研究,这就是条件独立的依赖关系。即: p(V1,V2|V3)=p(V1|V3)p(V2|V3). 其中V1,V2,V3表示任意的随机变量集合。 这实际上是随机变量之间的Marcov property(马尔科夫性,刚接触这个名字时真的很晕),表示相互之间的独立性。 马尔科夫性就是marcov提出的,将随机变量之间相互依赖关系进行简化。随机变量只与相邻(时间上或空间上)的随机变量有关系,而与不相邻的随机变量之间是条件独立的。当在时间上进行简化时,就得到了Marcov链。因此满足Marcov性的图模型就是Marcov Random Field,简称为MRF。 玻尔兹曼机(Boltzman Machine,简记为BM)是1985年由深度学习鼻祖Hinton提出的。用来解决Hopfield确定性神经网梯度下降法学习容易陷入局部极小点问题的。BM就是一种特殊的MRF。一般神经变量的取值范围是{0,1}。 BM的核心包括两点: 1)网络的状态服从Boltzman分布; 2)学习算法采样模拟退火方法(Simulated Annealing),这是一种随机学习算法,较好地解决了局部极小陷阱问题。 Boltzman分布是统计热力学中的概念,即多粒子系统中,系统的确切状态和能量很难测量,但在温度T时系统的热平衡满足于Boltzman分布,即: (1) 其中,T为温度,E(A)为系统在状态A对应的能量,也称为能量函数,k为玻尔兹曼常数,Z为归一化因子。 可见能量函数的选择也是BM的一个关键点,能量函数决定了系统的概率分布。一般的BM选择的能量函数是: (2) 但在实际的学习过程中,有的随机变量是不可观测的,因此将BM中神经元分为可视变量v和不可视变量h,进一步假设,可视变量v之间条件独立,不可视变量h之间条件独立,这就是受限玻尔兹曼机(简称RBM)。 对应RBM能量函数为: (3) 因此,RBM系统随机变量的概率分布为: (4) 二、RBM参数的基本学习算法 从已知RBM的观测数据集 来估计数据集的概率分布一般采用极大似然函数方法,即寻找在最优的参数(wij、bj、ci),使得似然函数最大: (5) 大家注意,为了简单清晰,这里记号有点要注意,其中v是已经观测的数据,x表示可观测的状态变量取值,大家要注意区分开来,都由v来表示容易搞混,第二项其实是归一因子,与具体的观测数据v无关。可以采用梯度下降算法来求取参数。 似然函数关于wij、bj、ci的梯度如下。 (6) (7) (8) 因为: (9) 其中, 表示随机状态h的除第i个分量以外的其它随分量,所以 因此(9)式成立。仿照(9)进一步还可以对(6)、(7)和(8)进行简化: (10) (11) (12) (10)-(12)式中第二项其实都是条件概率对可观测状态的期望值。 在学习过程中计算上述参数的梯度时,(10)(11)(12)式中第二项的计算复杂性是随机状态分变量数的指数函数,因此直接计算效率太低。可采用马尔科夫蒙特卡罗模拟法(MCMC)来计算这些第二项的期望值(未加深入考察,线性函数的期望值等于期望值的线性函数)。即 MCMC采用的是Gibbs采样方法,其想法是从已知的随机变量的条件分布(边缘分布),模拟生成随机变量的序列(Marcov链),通过统计的方法可得到一个随机变量的联合分布估计,也可以得到随机变量的期望值估计(这点也很重要,提高了计算效率)。 Gibbs采样背后的原理就是Marcov链的细致平稳条件,即: (13) 从状态i转移到状态j的概率与从状态j转移到状体j的概率相等。 Gibbs采样满足Marcov链的细致平稳条件,即: (14) 记状态x为 ,状态y为 ,因此,Gibbs采样满足如下公式: (15) (16) 可以看出(15)与(16)式相等,从而Gibbs采样模拟的稳态序列的统计满足于联合分布。 将Gibbs采样应用于公式(10)-(12),当参数wij,bj,ci确定时,p(x,h)可以计算出来,从而可以计算出条件概率,从而可以模拟采样得到在当前参数下的p(x)的概率分布和变量的期望值。将期望值代入公式(10)-(12)即得到了似然函数关于参数的梯度。 三、RBM的CD学习算法 在实际计算梯度时,Gibbs采用的步数不可能趋向无穷大,因此k取多少合适是CD算法要研究的问题,最简单的k取值为1,在k取有限值时,这时梯度的估计就有偏估计了,在《An Introduction to Restricted Boltzmann Machines》的(37)式中Fischer and Igel给出了估计误差的上界。 好了,花了一个周日整理了将近一个月来对RBM的学习理解,还是很有成就感的。只是本文中对RBM的条件概率公式 没有细写,希望大家能够从p(v,h)的公式中推导,只是要注意h之间相互独立就好了,如果确实有不通的地方请提出来,我继续完善。 初步对博客中写数学公式也熟悉多了,感觉比word还是方便多了,原来时候就是自己太懒,因此总是将笔记写在word中。学习还真是不能太懒,不能象小时候学初级数学似的!
个人分类: 统计学习|28953 次阅读|1 个评论
Coursera: Neural Networks for ML- Lecture 12
zhuwei3014 2014-8-7 13:38
2012_An efficient learning procedure for deep Boltzmann Machine ICML2008_Training restricted Boltzmann machines using approximations to the likelihood gradient(PCD) 1. The Boltzman Machine learning algorithm 2. More efficient ways to get the statistics(Optional) 3. Restricted Boltzmann Machine 4. An example of RBM learning 5. RBM for collabrative filtering
个人分类: Coursera: Neural Networks|2662 次阅读|0 个评论
[转载]受限玻尔兹曼机及matlab代码
zhuwei3014 2014-8-7 08:56
能量模型的概念从统计力学中得来,它描述着整个系统的某种状态,系统越有序,系统能量波动越小,趋近于平衡状态,系统越无序,能量波动越大。例如:一个孤立的物体,其内部各处的温度不尽相同,那么热就从温度较高的地方流向温度较低的地方,最后达到各处温度都相同的状态,也就是热平衡的状态。在统计力学中,系统处于某个状态的相对概率为 ,即玻尔兹曼因子,其中T表示温度, 是玻尔兹曼常数, 是状态 的能量。玻尔兹曼因子本身并不是一个概率,因为它还没有归一化。为了把玻尔兹曼因子归一化,使其成为一个概率,我们把它除以系统所有可能的状态的玻尔兹曼因子之和Z,称为配分函数(partition function)。这便给出了玻尔兹曼分布。 玻尔兹曼机(Boltzmann Machine,BM)是一种特殊形式的对数线性的马尔科夫随机场(Markov Random Field,MRF),即能量函数是自由变量的线性函数。 通过引入隐含单元,我们可以提升模型的表达能力,表示非常复杂的概率分布。限制性玻尔兹曼机(RBM)进一步加一些约束,在RBM中不存在可见单元与可见单元的链接,也不存在隐含单元与隐含单元的链接,如下图所示 能量函数在限制玻尔兹曼机中定义为,b,c,W为模型的参数,b,c分别为可见层和隐含层的偏置,W为可见层与隐含层的链接权重 有了上述三个公式我们可以使用最大似然估计来求解模型的参数:设 。把概率p(x)改写为 。 由于可见单元V和不可见单元h条件独立,利用这一性质,我们可以得到: logistic回归估计v与h取一的概率: 有了以上条件,我们可以推导出参数变化的梯度值: 使用基于马尔可夫链的gibbs抽样,对于一个d维的随机向量x=(x1,x2,…xd),假设我们无法求得x的联合概率分布p(x),但我们知道给定x的其他分量是其第i个分量xi的条件分布,即p(xixi-),xi-=(x1,x2,…xi-1,xi+1…xd)。那么,我们可以从x的一个任意状态(如(x1(0),x2(0),…,xd(0)))开始,利用条件分布p(xi|xi-),迭代地对这状态的每个分量进行抽样,随着抽样次数n的增加,随机变量(x1(n),x2(n),…,xd(n))的概率分布将以n的几何级数的速度收敛到x的联合概率分布p(v)。 基于RBM模型的对称结构,以及其中节点的条件独立行,我们可以使用Gibbs抽样方法得到服从RBM定义的分布的随机样本。在RBM中进行k步Gibbs抽样的具体算法为:用一个训练样本(或者可视节点的一个随机初始状态)初始化可视节点的状态v0,交替进行下面的抽样: 理论上,参数的每次更新需要让上面的链条图形遍历一次,这样带来的性能损耗毫无疑问是不能承受的。 Hinton教授提出一种改进方法叫做对比分歧(Contrastive Divergence),即CD-K。他指出CD没有必要等待链收敛,样本可以通过k步 的gibbs抽样完成,仅需要较少的抽样步数(实验中使用一步)就可以得到足够好的效果。 下面给出RBM用到的CD-K算法伪代码。 关于deeplearning的c++实现放到了github上,由于时间关系只是实现了大致框架,细节方面有待改善,也欢迎大家的参与 :https://github.com/loujiayu/deeplearning   下面附上Geoff Hinton提供的关于RBM的matlab代码 view source print ? 001. % Version 1.000 002. % 003. % Code provided by Geoff Hinton and Ruslan Salakhutdinov 004. % 005. % Permission is granted foranyone to copy, use, modify, or distribute this 006. % program and accompanying programs and documents forany purpose, provided 007. % thiscopyright notice is retained and prominently displayed, along with 008. % a note saying that the original programs are available from our 009. % web page. 010. % The programs and documents are distributed without any warranty, express or 011. % implied. As the programs were written forresearch purposes only, they have 012. % not been tested to the degree that would be advisable in any important 013. % application. All use of these programs is entirely at the user's own risk. 014. 015. % This program trains Restricted Boltzmann Machine in which 016. % visible, binary, stochastic pixels are connected to 017. % hidden, binary, stochastic feature detectors using symmetrically 018. % weighted connections. Learning is done with 1-step Contrastive Divergence. 019. % The program assumes that the following variables are set externally: 020. % maxepoch -- maximum number of epochs 021. % numhid -- number of hidden units 022. % batchdata -- the data that is divided into batches (numcases numdims numbatches) 023. % restart -- set to 1iflearning starts from beginning 024. 025. epsilonw = 0.1; % Learning rate forweights 026. epsilonvb = 0.1; % Learning rate forbiases of visible units 027. epsilonhb = 0.1; % Learning rate forbiases of hidden units 028. weightcost = 0.0002; 029. initialmomentum = 0.5; 030. finalmomentum = 0.9; 031. 032. =size(batchdata); 033. 034. ifrestart ==1, 035. restart=0; 036. epoch=1; 037. 038. % Initializing symmetric weights and biases. 039. vishid = 0.1*randn(numdims, numhid); 040. hidbiases = zeros(1,numhid); 041. visbiases = zeros(1,numdims); 042. 043. poshidprobs = zeros(numcases,numhid); 044. neghidprobs = zeros(numcases,numhid); 045. posprods = zeros(numdims,numhid); 046. negprods = zeros(numdims,numhid); 047. vishidinc = zeros(numdims,numhid); 048. hidbiasinc = zeros(1,numhid); 049. visbiasinc = zeros(1,numdims); 050. batchposhidprobs=zeros(numcases,numhid,numbatches); 051. end 052. 053. forepoch = epoch:maxepoch, 054. fprintf(1,'epoch %d\r',epoch); 055. errsum=0; 056. forbatch = 1:numbatches, 057. fprintf(1,'epoch %d batch %d\r',epoch,batch); 058. 059. %%%%%%%%% START POSITIVE PHASE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 060. data = batchdata(:,:,batch); 061. poshidprobs = 1./(1+ exp(-data*vishid - repmat(hidbiases,numcases,1))); 062. batchposhidprobs(:,:,batch)=poshidprobs; 063. posprods = data' * poshidprobs; 064. poshidact = sum(poshidprobs); 065. posvisact = sum(data); 066. 067. %%%%%%%%% END OF POSITIVE PHASE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 068. poshidstates = poshidprobs rand(numcases,numhid); 069. 070. %%%%%%%%% START NEGATIVE PHASE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 071. negdata = 1./(1+ exp(-poshidstates*vishid' - repmat(visbiases,numcases,1))); 072. neghidprobs = 1./(1+ exp(-negdata*vishid - repmat(hidbiases,numcases,1))); 073. negprods = negdata'*neghidprobs; 074. neghidact = sum(neghidprobs); 075. negvisact = sum(negdata); 076. 077. %%%%%%%%% END OF NEGATIVE PHASE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 078. err= sum(sum( (data-negdata).^2)); 079. errsum = err + errsum; 080. 081. ifepoch5, 082. momentum=finalmomentum; 083. else 084. momentum=initialmomentum; 085. end; 086. 087. %%%%%%%%% UPDATE WEIGHTS AND BIASES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 088. vishidinc = momentum*vishidinc + ... 089. epsilonw*( (posprods-negprods)/numcases - weightcost*vishid); 090. visbiasinc = momentum*visbiasinc + (epsilonvb/numcases)*(posvisact-negvisact); 091. hidbiasinc = momentum*hidbiasinc + (epsilonhb/numcases)*(poshidact-neghidact); 092. 093. vishid = vishid + vishidinc; 094. visbiases = visbiases + visbiasinc; 095. hidbiases = hidbiases + hidbiasinc; 096. 097. %%%%%%%%%%%%%%%% END OF UPDATES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 098. 099. end 100. fprintf(1, 'epoch %4i error %6.1f \n', epoch, errsum); 101. end; 以上转载自:http://www.it165.net/pro/html/201402/9959.html
个人分类: 博客转载|7115 次阅读|0 个评论
Sparse DBN-Sparse deep belief net model for visual area V2
zhuwei3014 2014-7-24 05:04
NIPS_2007_Sparse deep belief net model for visual area V2 这篇文章主要讲的是sparse DBN。 很多比较学习算法的结果与V1区域相似的工作,但是没有与大脑视觉体系更深层次的比较,比如V2、V4,这篇文章量化的比较了sparse DBN与V2学习的特征,V2的结果引用自这篇文章: M. Ito and H. Komatsu. Representation of angles embedded within contour stimuli in area v2 of macaque monkeys. The Journal of Neuroscience, 24(13):3313–3324, 2004. 1. Introduction J. H. van Hateren and A. van der Schaaf. Independent component filters of natural images compared with simple cells in primary visual cortex. Proc.R.Soc.Lond. B, 265:359–366, 1998. 这篇文章研究表明在自然图像中ICA学习到的filter与V1中简单细胞的局部接受野非常相似。 2. Biological comparison 2.1 Features in early visual cortex: area V1 V1中简单细胞的局部接收野是localized, oriented, bandpass filters that resemble gabor filters. 2.2 Features in visual cortex area V2 J. B. Levitt, D. C. Kiper, and J. A. Movshon. Receptive fields and functional architecture of macaque v2. Journal of Neurophysiology, 71(6):2517–2542, 1994. 这篇文章的研究暗示了area V2 may serve as a place where different channels of visual information are integrated. 接下来讲解了第一节中那篇文章对V2中细胞的选择性的分析。 3. Algorithm 3.1 Sparse RBM Gaussian RBM能量函数: compute conditional probability distribution: 是高斯密度。 加入稀疏惩罚,最终优化问题变为: 其中 是给定数据的conditional expectation, 是regularization constant,p是一个常数控制稀疏程度。 3.2 Learning deep networks using sparse RBM 跟DBN的思想一致,本文学习了含有两个隐层的网络。 4. Visualization 4.1 Learning strokes from handwritten digits 首先PCA降维到69维,然后用69-200结构学习出的结果: 4.2 Learning from natural images 用http://hlab.phys.rug.nl/imlib/index.html的自然图片学习,从2000张图片中抽取100000个14*14的patches,200个patches作为一个mini-batch,用196-400的结构学习得到的结果类似V1: 4.3 Learning a two-layer model of natural images using sparse RBMs 5. Evaluation experiments
个人分类: DL论文笔记|3619 次阅读|0 个评论
works of RBM on how to model high dimensional sequence data
justinzhao 2013-4-6 07:50
Great work on high dimensional video sequence modelling using RBM.To read... Learning Multilevel Distributed Representations for High-Dimensional Sequences.Ilya Sutskever and Geoffrey Hinton
个人分类: 读书日记|3500 次阅读|0 个评论
resources on Restricted Boltzmann Machine
justinzhao 2013-4-6 07:44
Useful resources on how to use RBM to handle attentional data: (1) Learning to combine foveal glimpses with a third-order Boltzmann machine. Hugo Larochelle and Geoffrey Hinton, Advances in Neural Information Processing Systems 23 , 2010 this is the first implemented system for combining glimpses that jointly trains a recognition component (the RBM) with an attentional component (the fixation controller). (2) Learning Where to Attend With Deep Architectures for Image. Misha Denil, Loris Bazzani, Hugo Larochelle and Nando de Freitas, Neural Computation , 24(8): 2151-2184, 2012 (3) Learning attentional policies for object tracking and recognition in video with deep networks. L. Bazzani, N. de Freitas, H. Larochelle, V. Murino, and J-A Ting, In International Conference on Machine Learning (ICML), 2011. Links: (1) http://www.lorisbazzani.info/ (2) http://www.dmi.usherb.ca/~larocheh/index_en.html Several very new works.
个人分类: 读书日记|3388 次阅读|0 个评论

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-5-24 04:14

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部