Deep learning:十九(RBM简单理解)

  这篇博客主要用来简单介绍下RBM网络,因为deep learning中的一个重要网络结构DBN就可以由RBM网络叠加而成,所以对RBM的理解有利于我们对DBN算法以及deep learning算法的进一步理解。Deep learning是从06年开始火得,得益于大牛Hinton的文章,不过这位大牛的文章比较晦涩难懂,公式太多,对于我这种菜鸟级别来说读懂它的paper压力太大。纵观大部分介绍RBM的paper,都会提到能量函数。因此有必要先了解下能量函数的概念。参考网页http://202.197.191.225:8080/30/text/chapter06/6_2t24.htm关于能量函数的介绍:

  一个事物有相应的稳态,如在一个碗内的小球会停留在碗底,即使受到扰动偏离了碗底,在扰动消失后,它会回到碗底。学过物理的人都知道,稳态是它势能最低的状态。因此稳态对应与某一种能量的最低状态。将这种概念引用到Hopfield网络中去,Hopfield构造了一种能量函数的定义。这是他所作的一大贡献。引进能量函数概念可以进一步加深对这一类动力系统性质的认识,可以把求稳态变成一个求极值与优化的问题,从而为Hopfield网络找到一个解优化问题的应用。

  下面来看看RBM网络,其结构图如下所示:

  

  可以看到RBM网络共有2层,其中第一层称为可视层,一般来说是输入层,另一层是隐含层,也就是我们一般指的特征提取层。在一般的文章中,都把这2层的节点看做是二值的,也就是只能取0或1,当然了,RBM中节点是可以取实数值的,这里取二值只是为了更好的解释各种公式而已。在前面一系列的博文中可以知道,我们设计一个网络结构后,接下来就应该想方设法来求解网络中的参数值。而这又一般是通过最小化损失函数值来解得的,比如在autoencoder中是通过重构值和输入值之间的误差作为损失函数(当然了,一般都会对参数进行规制化的);在logistic回归中损失函数是与输出值和样本标注值的差有关。那么在RBM网络中,我们的损失函数的表达式是什么呢,损失函数的偏导函数又该怎么求呢?

  在了解这个问题之前,我们还是先从能量函数出发。针对RBM模型而言,输入v向量和隐含层输出向量h之间的能量函数值为:

  

  而这2者之间的联合概率为:

  

  其中Z是归一化因子,其值为:

  

  这里为了习惯,把输入v改成函数的自变量x,则关于x的概率分布函数为:

  

  令一个中间变量F(x)为:

  

  则x的概率分布可以重新写为:

  

  这时候它的偏导函数取负后为:

  

  从上面能量函数的抽象介绍中可以看出,如果要使系统(这里即指RBM网络)达到稳定,则应该是系统的能量值最小,由上面的公式可知,要使能量E最小,应该使F(x)最小,也就是要使P(x)最大。因此此时的损失函数可以看做是-P(x),且求导时需要是加上负号的。

  另外在图RBM中,可以很容易得到下面的概率值公式:

  

  此时的F(v)为(也就是F(x)):

  

  这个函数也被称做是自由能量函数。另外经过一些列的理论推导,可以求出损失函数的偏导函数公式为:

  

  很明显,我们这里是吧-P(v)当成了损失函数了。另外,估计大家在看RBM相关文章时,一定会介绍Gibbs采样的知识,关于Gibbs内容可以简单参考上一篇博文:Deep learning:十八(关于随机采样)。那么为什么要用随机采用来得到数据呢,我们不是都有训练样本数据了么?其实这个问题我也一直没弄明白。在看过一些简单的RBM代码后,暂时只能这么理解:在上面文章最后的求偏导公式里,是两个数的减法,按照一般paper上所讲,这个被减数等于输入样本数据的自由能量函数期望值,而减数是模型产生样本数据的自由能量函数期望值。而这个模型样本数据就是利用Gibbs采样获得的,大概就是用原始的数据v输入到网络,计算输出h(1),然后又反推v(1),继续计算h(2),…,当最后反推出的v(k)和k比较接近时停止,这个时候的v(k)就是模型数据样本了。

  也可以参考博文浅谈Deep Learning的基本思想和方法来理解:假设有一个二部图,每一层的节点之间没有链接,一层是可视层,即输入数据层(v),一层是隐藏层(h),如果假设所有的节点都是二值变量节点(只能取0或者1值),同时假设全概率分布p(v, h)满足Boltzmann 分布,我们称这个模型是Restrict  Boltzmann Machine (RBM)。下面我们来看看为什么它是Deep Learning方法。首先,这个模型因为是二部图,所以在已知v的情况下,所有的隐藏节点之间是条件独立的,即p(h|v) =p(h1|v).....p(hn|v)。同理,在已知隐藏层h的情况下,所有的可视节点都是条件独立的,同时又由于所有的v和h满足Boltzmann 分布,因此,当输入v的时候,通过p(h|v) 可以得到隐藏层h,而得到隐藏层h之后,通过p(v|h) 又能得到可视层,通过调整参数,我们就是要使得从隐藏层得到的可视层v1与原来的可视层v如果一样,那么得到的隐藏层就是可视层另外一种表达,因此隐藏层可以作为可视层输入数据的特征,所以它就是一种Deep Learning方法。

  参考资料:

http://202.197.191.225:8080/30/text/chapter06/6_2t24.htm

http://deeplearning.net/tutorial/rbm.html

http://edchedch.wordpress.com/2011/07/18/introduction-to-restricted-boltzmann-machines/

Deep learning:十八(关于随机采样)

浅谈Deep Learning的基本思想和方法

转载于:https://www.cnblogs.com/daleloogn/p/4435794.html

【转载】Deep learning:十九(RBM简单理解)相关推荐

  1. Deep learning:十九(RBM简单理解)

    这篇博客主要用来简单介绍下RBM网络,因为deep learning中的一个重要网络结构DBN就可以由RBM网络叠加而成,所以对RBM的理解有利于我们对DBN算法以及deep learning算法的进 ...

  2. 深度学习Deep learning:四十九(RNN-RBM简单理解)

    前言: 本文主要是bengio的deep learning tutorial教程主页中最后一个sample:rnn-rbm in polyphonic music. 即用RNN-RBM来model复调 ...

  3. [转载]Deep Learning·NLP·Representation

    原文地址:Mr.Scofield ----- csdn From RxNLP. Indexing: 〇.序 一.DeepNLP的核心关键:语言表示(Representation) 二.NLP词的表示方 ...

  4. 【js学习笔记三十九】简单工厂模式

    目录 前言 导语 代码部分 总结 前言 我是歌谣 我有个兄弟 巅峰的时候排名c站总榜19 叫前端小歌谣 曾经我花了三年的时间创作了他 现在我要用五年的时间超越他 今天又是接近兄弟的一天人生难免坎坷 大 ...

  5. PostgreSQL的学习心得和知识总结(八十九)|深入理解PostgreSQL数据库开源MPP扩展Citus再平衡函数rebalance_table_shards的实现原理

    目录结构 注:提前言明 本文借鉴了以下博主.书籍或网站的内容,其列表如下: 1.参考书籍:<PostgreSQL数据库内核分析> 2.参考书籍:<数据库事务处理的艺术:事务管理与并发 ...

  6. (十九)深入理解蓝牙BLE之“低功耗蓝牙dongle”

    目录 什么是蓝牙dongle: 为什么要买dongle: 为什么最好买nordic的dongle: 如何选择dongle:

  7. 网上某位牛人的deep learning学习笔记汇总

    目录(?)[-] 作者tornadomeet 出处httpwwwcnblogscomtornadomeet 欢迎转载或分享但请务必声明文章出处 Deep learning一基础知识_1 Deep le ...

  8. Deep learning笔记

    Deep learning:一(基础知识_1) 出处:http://www.cnblogs.com/tornadomeet 欢迎转载或分享,但请务必声明文章出处. 前言: 最近打算稍微系统的学习下de ...

  9. 大牛deep learning集合

    作者1:tornadomeet 出处:http://www.cnblogs.com/tornadomeet 作者1:denghp83 出处:http://blog.csdn.net/denghp83/ ...

最新文章

  1. 20180827-Java网络编程
  2. 【Android 插件化】VirtualAppEx 编译运行 ( VirtualAppEx 简介 | 配置 VirtualAppEx 编译环境 | 编译运行 VirtualAppEx 代码 )
  3. 吴恩达 coursera ML 第十五课总结+作业答案
  4. 一个“登录框“引发的安全问题
  5. DreamFactory 第9章 性能注意事项
  6. android爬虫_进行Android Web爬虫改造
  7. Windows Workflow Foundation开发环境配置
  8. 机器人煮面机创始人_煮面机器人会是未来的「食神」吗?
  9. 课程设计之学生选课管理系统
  10. JavaScript函数的返回值
  11. 分享:映像编辑工具Ghostexp
  12. 初始化 Hilbert 矩阵
  13. html5 embed居中,HTML5标签embed详解
  14. 电信宽带连接数限制的一个坑
  15. 域名链接到服务器指定端口
  16. Xcode自动编译、打包、上传到蒲公英应用分发平台
  17. 如何使用UltraISO制作U盘系统盘用于重装系统
  18. candence16.6出现license 类似retrieval of allegro_pcb_design_gxl的问题
  19. 贝索斯的蓝色起源完成第五次太空旅游,将 6 人送入亚轨道飞行;三星英特尔频出招追赶台积电;
  20. 睡觉睡到自然醒,数钱数到手抽筋

热门文章

  1. 自动化测试框架设计模式
  2. 高德sdk定位当前位置_单次定位-获取位置-开发指南-iOS 定位SDK | 高德地图API
  3. Metasploit reload命令使用技巧
  4. Xcode_7_GM_seed.dmg下载
  5. linux 运行lua脚本语言,你知道在linux下搭建lua脚本语言的编程环境?
  6. C什么k什么_G、D、C、Z、T、K、L、Y,这些字母和火车级别有什么关系
  7. java多线程发牌 一个发牌 三个玩家_JAVA代码之斗地主发牌
  8. php中表头不跟着滑动,JS实现table表格固定表头且表头随横向滚动而滚动
  9. 虚幻引擎UE4-命令行使用的一些技巧
  10. 评审关上了你CVPR的门?这还有Rebuttal的窗,7个小技巧送上