Boltzmann Machine 玻尔兹曼机入门
Generative Models
生成模型帮助我们生成新的item,而不只是存储和提取之前的item。Boltzmann Machine就是Generative Models的一种。
Boltzmann Machine
Boltzmann Machine和Hopfield Network对比
- Energy Function是相同的
- 神经元\(x_i\)的取值在0和1之间,而不是Hopfield Network中的-1和1。
- 使用Boltzmann Machine来产生新的状态,而不是提取存储的状态。
- 更新不是确定性的,而是随机性的,使用Sigmoid函数。
Boltzmann Distribution
Boltzmann Distribution是一种在状态空间上的概率分布,公式如下:
\]
- \(E(x)\):energy function
- T:是温度
- Z:partition function,用来保证\(\sum_x p(x)=1\)
通常情况下,直接计算partition function很复杂。但是我们可以利用相邻状态的相对概率通过迭代过程从分布中采样。
Gibbs Sampling
参考博客:https://www.cnblogs.com/aoru45/p/12092453.html
假设我们有一个图像x,对于所有的元素\(x_i=1\)。每一次操作,我们只将一个\(x_i\)变为0,其他的不变,从而得到一个新的图像。
我们用如下的公式来表示两个图像之间的energy function的差:
我们可以得到新图像的Boltzmann Distribution,如下:
因此,对于所有固定的元素,\(x_i\)取得1或者0的概率如下所示:
Boltzmann Machine
Boltzmann Machine的操作和Hopfield Network很像,只是再更新神经元的步骤上又差别!Boltzmann Machine在神经元更新的时候有随机性。
在Hopfield Network中, \(x_i\)的变化使得energy function永远不会增大。但是在Boltzmann Machine中,我们用一个概率来令\(x_i=1\):
换句话说,这个概率有可能让energy function的值变大。所以:
如果这个过程重复迭代很多次,我们最终将会获得一个Boltzmann Distribution中的样本
当\(T\rightarrow \infty\),\(\space p(x_i\rightarrow1)=1/2\)并且\(\space p(x_i\rightarrow0)=1/2\)
当\(T\rightarrow 0\),这个行为将会变得很像Hopfield Network,永远不会让Energy Function增大。\(\space p(x_i\rightarrow1)=0\)
温度T可能是一个固定值,或者它一开始很大,然后逐渐的减小(模拟退火,Simulated Annealing)
Limitations
Boltzmann Machine的局限性在于,每个单元的概率必须是周围单元的线性可分函数。所以,我们可以考虑到的解决办法就是增加隐藏层,将可见的单元和隐藏的单元分开。类似于前馈神经网络中的输入层和隐藏层。目的就是让隐藏单元学习一些隐藏的特征或者潜在的变量,从而帮助系统去对输入进行建模。结构如下图所示:
Restricted Boltzmann Machine
如果我们让所有的可见单元之间和隐藏单元之间互相存在连接,训练网络要花非常长的时间。所以,我们通常限制Boltzmannn Machine只在可见单元和隐藏单元之间存在连接,如下图所示:
这样的网络就被称作Restricted Boltzmann Machine,受限玻尔兹曼机。主要特征是:
输入是二元向量
是两层的双向神经网络
- 可见层,v,visible layer
- 隐藏层,h,hidden layer
没有vis-to-vis或者hidden-to-hidden连接
所有可见单元连接到所有隐藏单元,公式如下:\(E(v, h) = -(\sum_i b_i v_i + \sum_j c_j h_j + \sum_{ij} v_i w_{ij}h_j)\)
- \(\sum_i b_i v_i\):可见层偏差
- \(\sum_j c_j h_j\):隐藏层偏差
- \(\sum_{ij} v_i w_{ij}h_j\):可见单元和隐藏单元之间的连接
训练使数据的期望对数概率最大化
因为输入单位和隐藏单位是解耦的,我们可以计算h在v下的条件分布,反之亦然。
于是,
- :component-wise multiplication
- σ(s) = 1/(1 + exp(-s)) ,是Sigmoid函数
Alternating Gibbs Sampling
在Boltzmann Machine中我们可以从Boltzmann Distribution中进行如下抽样:
- 随机选择\(v_0\)
- 从\(p(h|v_0)\)中抽样\(h_0\)
- 从\(p(v|h_0)\)中抽样\(v_1\)
- 从\(p(h|v_1)\)中抽样\(h_1\)
- ...
Training RBM
Contrastive Divergence
通过对比真实和虚假的图片进行训练,优先选择真实的图片
- 从训练数据中选择一个或者多个positive samples { \(v^{(k)}\) }
- 对于每一个\(v^{(k)}\),从\(p(h|v(k))\)中抽样一个隐藏向量\(h^{(k)}\)
- 通过alternating Gibbs sampling 生成一个fake样本{\(v'^{(k)}\)}
- 对于每一个\(v'^{(k)}\),从\(p(h|v'^{(k)})\)中抽样一个隐藏向量\(h'^{(k)}\)
- 更新\({b_i}\),\(c_j\),\(w_{ij}\)去增大\(log\ p(v^{(k)}, h^{(k)}) - log\ p(v'^{(k)}, h'^{(k)})\)
- \(b_i \leftarrow b_i + \eta(v_i - v'_i)\)
- \(c_j \leftarrow c_j + \eta(h_j - h'_j)\)
- \(w_{ij} \leftarrow w_{ij} + \eta(v_i h_j - v'_i h'_j)\)
Quick Contrastive Divergence
在2000‘s的时候,研究人员注意到,这个过程可以通过只取一个额外的样本来加速,而不是运行多次迭代。
从实数开始,生成隐藏单元,生成假(重构)数字,并分别作为正样本和负样本进行训练
- \(v_0, h_0\): positive sample
- \(v_1, h_1\):negative sample
Deep Boltzmann Machine
和Boltzmann Machine是相同的方法,但是可以迭代的应用于多层网络。
首先训练输入到第一层的权重。然后保持这些权重不变,继续训练第一层到第二层之间的权重,以此类推。
Greedy Layerwise Pretraining
Deep Boltzmann Machine的一个主要应用是Greedy unsupervised layerwise pretraining(贪婪无监督逐层与训练)。
连续的对每一对layers进行训练,训练成RBM。
当模型训练完成之后,权重和偏差会被储存下来,在下一次进行类似的任务时会被当做前馈神经网络的初始权重和偏差,然后再根据当前任务数据进行反向传播训练。
对于Sigmoid或者tanh激活函数,这一类的预训练能够比直接进行随机初始化权重然后训练取得更好的结果。
Boltzmann Machine 玻尔兹曼机入门的更多相关文章
- 受限玻尔兹曼机(Restricted Boltzmann Machine, RBM) 简介
受限玻尔兹曼机(Restricted Boltzmann Machine,简称RBM)是由Hinton和Sejnowski于1986年提出的一种生成式随机神经网络(generative stochas ...
- 受限玻尔兹曼机(Restricted Boltzmann Machine,RBM)
这篇写的主要是翻译网上一篇关于受限玻尔兹曼机的tutorial,看了那篇博文之后感觉算法方面讲的很清楚,自己收获很大,这里写下来作为学习之用. 原文网址为:http://imonad.com/rbm/ ...
- 限制玻尔兹曼机(Restricted Boltzmann Machine)RBM
假设有一个二部图,每一层的节点之间没有连接,一层是可视层,即输入数据是(v),一层是隐藏层(h),如果假设所有的节点都是随机二值变量节点(只能取0或者1值)同时假设全概率分布满足Boltzmann 分 ...
- 受限玻尔兹曼机(Restricted Boltzmann Machine)
受限玻尔兹曼机(Restricted Boltzmann Machine) 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1. 生成模型 2. 参数学 ...
- [Hinton] Neural Networks for Machine Learning - Hopfield Nets and Boltzmann Machine
Lecture 11 — Hopfield Nets Lecture 12 — Boltzmann machine learning Ref: 能量模型(EBM).限制波尔兹曼机(RBM) 高大上的模 ...
- 六.随机神经网络Boltzmann(玻尔兹曼机)
Hopfield网络具有最优计算功能,然而网络只能严格按照能量函数递减方式演化,很难避免伪状态的出现,且权值容易陷入局部极小值,无法收敛于全局最优解. 如果反馈神经网络的迭代过程不是那么死板,可以在一 ...
- 机器学习理论基础学习19---受限玻尔兹曼机(Restricted Boltzmann Machine)
一.背景介绍 玻尔兹曼机 = 马尔科夫随机场 + 隐结点 二.RBM的Representation BM存在问题:inference 精确:untractable: 近似:计算量太大 因此为了使计算简 ...
- [原]Machine Learing 入门 —— 开门第0篇
一.最近懒了 7月没怎么写博客,倒是一直在学Machine Learning的入门知识,在这里给大家推荐一个不错的自学网站:https://www.coursera.org/ ,Andrew Ng是联 ...
- Machine Learing 入门 —— 开门第0篇
一.最近懒了 7月没怎么写博客,倒是一直在学Machine Learning的入门知识,在这里给大家推荐一个不错的自学网站:https://www.coursera.org/ ,Andrew Ng是联 ...
随机推荐
- 安装memcache,步骤
1.先下载emcache.rar安装包<ps:随便安装在哪里文件夹,或者新建文件夹都是可以的> 2.解压安装包<ps:运行里面的程序> 3.然后根据自己的phpstudy的版本 ...
- 怎样学好 java ?
浅谈Java的学习之路--怎样学好JAVA ?Java - 近10年来计算机软件发展过程中的传奇,其在众多开发者心中的地位就如"屠龙刀"."倚天剑". Java ...
- Jmeter请求之cookie处理方式
方法一:增加cookie管理器线程组->配置元件->HTTP Cookie管理器,放在最上方 但该方法不一定有效 方法二:http信息头&正则表达式提取器结合使用, 在登录的htt ...
- 【C语言/C++编程学习笔记】:通俗易懂讲解 - 链表!学不会?不存在的!
C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...
- 利用Image对象,建立Javascript前台错误日志记录
手记:摘自Javascript高级程序设计(第三版),利用Image对象发送请求,确实有很多优点,有时候这也许就是一个创意点,再次做个笔记供自己和大家参考. 原文: 开发 Web 应用程序过程中的一种 ...
- MS SQL SERVER执行大脚本文件时,提示“内存不足”的解决办法
问题描述: 当客户服务器不允许直接备份时,往往通过导出数据库脚本的方式来部署-还原数据库, 但是当数据库导出脚本很大,用Microsoft SQL Server Management Studio执行 ...
- JavaSE学习笔记03流程控制
Java流程控制 1.顺序结构 java的基本结构就是顺序结构,除非特别指明,否则就按照顺序一句一句往下执行. 顺序结构是最简单的算法结构,它是任何一个算法都离不开的一种基本算法结构. 2. 选择结构 ...
- ucore操作系统学习(三) ucore lab3虚拟内存管理分析
1. ucore lab3介绍 虚拟内存介绍 在目前的硬件体系结构中,程序要想在计算机中运行,必须先加载至物理主存中.在支持多道程序运行的系统上,我们想要让包括操作系统内核在内的各种程序能并发的执行, ...
- CDH+Kylin三部曲之二:部署和设置
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- DiskLruCache和Lrucache缓存bitmap
三级缓存,先在内存Lrucache中查找缓存,没有就去外存DiskLrucache中查找,再没有就下载,Lru不会自动删除,所以要设置最大缓存内存,后台运行Lrucache不会消失,关闭程序Diskl ...