深度学习方法:受限玻尔兹曼机RBM(三)模型求解,Gibbs sampling
欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld。
技术交流QQ群:433250724,欢迎对算法、技术、应用感兴趣的同学增加。
接下来重点讲一下RBM模型求解方法。其有用的依旧是梯度优化方法,可是求解须要用到随机採样的方法。常见的有:Gibbs Sampling和对照散度(contrastive divergence, CD[8])算法。
RBM目标函数
如果给定的训练集合是
參数表示为
当中,
当中
(当中第3个等式左边内条件概率
上面式子的两个部分的含义是期望——左边是梯度
要求前面的条件概率是比較easy一些的。而要求后面的联合概率分布是非常困难的,由于它包括了归一化因子
因此。我们重点就是须要就算
相似的。我们能够非常easy得到:
于是,我们非常easy得到,
上面求出了一个样本的梯度。对于
到这里就比較明白了,主要就是要求出上面三个梯度;可是由于不好直接求概率分布
Gibbs Sampling
非常多资料都有提到RBM能够用Gibbs Sampling来做。可是详细怎么做不讲(是不是有点蛋疼?),可能非常多人也不清楚究竟怎么做。以下略微介绍一下。
吉布斯採样(Gibbs sampling),是MCMC方法的一种,详细能够看我前面整理的随机採样MCMC的文章。
总的来说,Gibbs採样能够从一个复杂概率分布
而RBM模型的特殊性。隐藏层神经元的状态仅仅受可见层影响(反之亦然),并且同一层神经元之间是相互独立的,那么就能够依据例如以下方法依次採样:
也就是说
有了样本
看起来非常简单是不是?可是问题是。每一次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
相关文章
- Python学习-将list列表写入文件并读取方法汇总
- ASP.NET MVC WebApi 返回数据类型序列化控制(json,xml) 用javascript在客户端删除某一个cookie键值对 input点击链接另一个页面,各种操作。 C# 往线程里传参数的方法总结 TCP/IP 协议 用C#+Selenium+ChromeDriver 生成我的咕咚跑步路线地图 (转)值得学习百度开源70+项目
- Visual Studio 2017中使用正则修改部分内容 如何使用ILAsm与ILDasm修改.Net exe(dll)文件 C#学习-图解教程(1):格式化数字字符串 小程序开发之图片转Base64(C#、.Net) jquery遍历table为每一个单元格取值及赋值 。net加密解密相关方法 .net关于坐标之间一些简单操作
- C# (江湖小新)- lambda表达式与匿名方法- (写法就是简洁)
- C#学习记录——抽象类与抽象方法
- (《机器学习》完整版系列)第2章 模型评估与选择 ——2.7 (实战)具体的性能检验方法
- (《机器学习》完整版系列)第13章 半监督学习——13.1 生成式方法详解(样本数据都是由同一个潜在的模型“生成”的)
- 安装Python的机器学习包Sklearn 出错解决方法
- Asp.net读取和写入txt文件方法(实例)!
- 0基础怎么学习Python?Python学习方法汇总!
- C#【通用方法】字节数组添加、移除、获取的方法类(妙用List<byte>,开发中常用)
- 统计学习方法笔记 -- 隐马尔可夫模型
- 大学生后端学习常见问题解答(学习方法+工作实操项目)
- 类的专有方法(__init__)
- pytorch学习: 构建网络模型的几种方法
- controller层直接通过server类调用mapper的通用方法
- Java反射学习总结二(用反射调用对象的私有属性和方法)
- 使用扩展有效对齐 SwiftUI 内容,创建自定义 SwiftUI 方法以快速对齐项目并使您的代码看起来简洁明了(教程含源码)
- php 在服务器端开启错误日志记录方法
- 大数据与机器学习:实践方法与行业案例.2.6 本章小结
- 统计学习的基本方法步骤
- Android学习之子线程更新UI的方法
- 【正点原子STM32连载】第一章 本书学习方法 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1
- Django学习路12_objects 方法(all,filter,exclude,order by,values)