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

能量模型的概念从统计力学中得来,它描述着整个系统的某种状态,系统越有序,系统能量波动越小,趋近于平衡状态,系统越无序,能量波动越大。例如:一个孤立的物体,其内部各处的温度不尽相同,那么热就从温度较高的地方流向温度较低的地方,最后达到各处温度都相同的状态,也就是热平衡的状态。在统计力学中,系统处于某个状态的相对概率为,即玻尔兹曼因子,其中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(xi|xi-),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代码

% Version 1.000
%
% Code provided by Geoff Hinton and Ruslan Salakhutdinov
%
% Permission is granted for anyone to copy, use, modify, or distribute this
% program and accompanying programs and documents for any purpose, provided
% this copyright notice is retained and prominently displayed, along with
% a note saying that the original programs are available from our
% web page.
% The programs and documents are distributed without any warranty, express or
% implied.  As the programs were written for research purposes only, they have
% not been tested to the degree that would be advisable in any important
% application.  All use of these programs is entirely at the user's own risk.% This program trains Restricted Boltzmann Machine in which
% visible, binary, stochastic pixels are connected to
% hidden, binary, stochastic feature detectors using symmetrically
% weighted connections. Learning is done with 1-step Contrastive Divergence.
% The program assumes that the following variables are set externally:
% maxepoch  -- maximum number of epochs
% numhid    -- number of hidden units
% batchdata -- the data that is divided into batches (numcases numdims numbatches)
% restart   -- set to 1 if learning starts from beginning epsilonw      = 0.1;   % Learning rate for weights
epsilonvb     = 0.1;   % Learning rate for biases of visible units
epsilonhb     = 0.1;   % Learning rate for biases of hidden units
weightcost  = 0.0002;
initialmomentum  = 0.5;
finalmomentum    = 0.9;[numcases numdims numbatches]=size(batchdata);if restart ==1,restart=0;epoch=1;% Initializing symmetric weights and biases. vishid     = 0.1*randn(numdims, numhid);hidbiases  = zeros(1,numhid);visbiases  = zeros(1,numdims);poshidprobs = zeros(numcases,numhid);neghidprobs = zeros(numcases,numhid);posprods    = zeros(numdims,numhid);negprods    = zeros(numdims,numhid);vishidinc  = zeros(numdims,numhid);hidbiasinc = zeros(1,numhid);visbiasinc = zeros(1,numdims);batchposhidprobs=zeros(numcases,numhid,numbatches);
endfor epoch = epoch:maxepoch,fprintf(1,'epoch %d\r',epoch); errsum=0;for batch = 1:numbatches,fprintf(1,'epoch %d batch %d\r',epoch,batch); %%%%%%%%% START POSITIVE PHASE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%data = batchdata(:,:,batch);poshidprobs = 1./(1 + exp(-data*vishid - repmat(hidbiases,numcases,1)));    batchposhidprobs(:,:,batch)=poshidprobs;posprods    = data' * poshidprobs;poshidact   = sum(poshidprobs);posvisact = sum(data);%%%%%%%%% END OF POSITIVE PHASE  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%poshidstates = poshidprobs > rand(numcases,numhid);%%%%%%%%% START NEGATIVE PHASE  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%negdata = 1./(1 + exp(-poshidstates*vishid' - repmat(visbiases,numcases,1)));neghidprobs = 1./(1 + exp(-negdata*vishid - repmat(hidbiases,numcases,1)));    negprods  = negdata'*neghidprobs;neghidact = sum(neghidprobs);negvisact = sum(negdata); %%%%%%%%% END OF NEGATIVE PHASE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%err= sum(sum( (data-negdata).^2 ));errsum = err + errsum;if epoch>5,momentum=finalmomentum;elsemomentum=initialmomentum;end;%%%%%%%%% UPDATE WEIGHTS AND BIASES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% vishidinc = momentum*vishidinc + ...epsilonw*( (posprods-negprods)/numcases - weightcost*vishid);visbiasinc = momentum*visbiasinc + (epsilonvb/numcases)*(posvisact-negvisact);hidbiasinc = momentum*hidbiasinc + (epsilonhb/numcases)*(poshidact-neghidact);vishid = vishid + vishidinc;visbiases = visbiases + visbiasinc;hidbiases = hidbiases + hidbiasinc;%%%%%%%%%%%%%%%% END OF UPDATES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% endfprintf(1, 'epoch %4i error %6.1f  \n', epoch, errsum);
end;

posted on 2014-02-28 13:51 Stinky tofu 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/loujiayu/p/3573436.html

限制波尔兹曼机(Restricted Boltzmann Machines)相关推荐

  1. 训练局限玻尔斯曼机(Training Restricted Boltzmann Machines)

        本栏目(Training Restricted Boltzmann Machines)包括内容的介绍.局限玻尔斯曼机与对比差异(CD)的回顾.使用CD时怎样纠正统计.迷你块大小(mini-ba ...

  2. 《Restricted Boltzmann Machines for Collaborative Filtering》理解与资料整理

    1 原文如下 2 理解 这篇文章尝试把RBM应用到协同过滤中,在netflix上的数据集做实验,RBM方法与SVD方法线性插值相结合,能提高系统性能6%左右. 2.1问题描述: 对电影的推荐,用户对电 ...

  3. 训练RBM-Hinton系列论文《A practical guide to training Restricted Boltzmann Machines》

    目录 1 简介 1 2 RBMs和对比散度的概览 1 3 当使用对比散度时如何收集统计信息 2 3.1 更新隐藏状态 2 3.2 更新可见状态 3 4 Mini-batch大小 3 5 监控学习的过程 ...

  4. REINFORCEMENT LEARNING USING QUANTUM BOLTZMANN MACHINES利用量子波兹曼机进行强化学习

    REINFORCEMENT LEARNING USING QUANTUM BOLTZMANN MACHINES 利用量子波兹曼机进行强化学习 Abstract. We investigate whet ...

  5. 受限Boltzmann机(Restricted Boltzmann Machine)

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

  6. 限制性波尔兹曼机RBM and DBN

    ref:https://blog.csdn.net/App_12062011/article/details/54313082 https://blog.csdn.net/yt7589/article ...

  7. 深度学习读书笔记之RBM(限制波尔兹曼机)

    深度学习读书笔记之RBM 声明: 1)看到其他博客如@zouxy09都有个声明,老衲也抄袭一下这个东西 2)该博文是整理自网上很大牛和机器学习专家所无私奉献的资料的.具体引用的资料请看参考文献.具体的 ...

  8. Deep Boltzmann Machines

    转载自:http://blog.csdn.net/win_in_action/article/details/25333671  http://blog.csdn.net/zouxy09/articl ...

  9. tensorflow玻尔兹曼机_受限玻尔兹曼机(Restricted Boltzmann Machine)

    受限玻尔兹曼机(Restricted Boltzmann Machine) 1. 生成模型 2. 参数学习 3. 对比散度学习算法 由于受限玻尔兹曼机的特殊结构,因此可以使用一种比吉布斯采样更有效 的 ...

最新文章

  1. java 异步事件_处理异步事件的三种方式
  2. Linux系统中的函数
  3. Angularjs 设置全局变量的3种方法
  4. C#打开文件对话框和文件夹对话框
  5. python 判断数字序列是否合法_Python:检查对象是否是序列
  6. SNF开发平台WinForm-平板拍照及扫描二维码功能
  7. Oracle开发›如何取出每个分组的第一条记
  8. “出道” 5 年采用率达 78%,Kubernetes 为何如此成功?
  9. 模型修饰在无人机航测实景三维模型生产中的应用——以SVSMeshEditor软件为例
  10. 计算机视觉工作项目方案设计,机器视觉(项目方案设计案例)47.pdf
  11. 有效利用ASP.NET用户控件的事件委托
  12. IBM GTS部门或有重大调整,最快本周见分晓
  13. Selenium调用使用360浏览器,QQ浏览器,遨游浏览器,猎豹浏览器,Chromium
  14. [FPGA基础应用]基于CPLD+ARM架构模拟PC104总线时序
  15. python接收163邮件以及下载附件(以163邮箱为例)
  16. 各种工具配置忽略证书
  17. 怎么样才能彻底消灭猫瘟病毒?
  18. 解决npm ERR! Unexpected end of JSON input while parsing near的方法汇总
  19. 脚本自动化部署docker微服务,取代Jenkins
  20. IP协议首部详细分析

热门文章

  1. 2021年起重机械指挥考试及起重机械指挥考试题
  2. 力扣——42.接雨水(困难难度)——条条大路通罗马
  3. SpringCloud的快速入门教程
  4. h3c 链路聚合测试_链路聚合技术
  5. mxnet手写体识别+预测
  6. 虚幻4渲染编程(环境模拟篇)【第八卷:海洋模拟-中-在UE中实现FFT海洋】
  7. “1分钱”的绿色出行微信交通卡功能正式上线,看看怎么操作吧
  8. 2022-07-04 共享文件samba不能访问linux软连接的问题
  9. flutter问题搜集
  10. office工具栏不见_如何在Office中的快速访问工具栏中添加宏