受限玻尔兹曼机准备知识——MCMC方法和Gibbs采样

先点明几个名词

MCMC方法:马尔可夫链-蒙特卡洛方法  (千万别叫成梅特罗波利斯蒙特卡罗方法了)

Metropolis-Hastings采样:梅特罗波利斯-哈斯廷斯采样

Gibbs采样:吉布斯采样

还是介绍一下学习MCMC和Gibbs采样比较好的一个资料:随机采样方法与整理和受限玻尔兹曼机(RBM)学习笔记(一)预备知识(资料挺好的,本文就差不多是这两个资料的精简版,主要围绕啊MCMC和Gibbs讲解)

吉布斯采样在后面一个博客有matlab代码:http://blog.csdn.net/zb1165048017/article/details/51778694

MCMC方法在后面有理论和代码分析:https://blog.csdn.net/zb1165048017/article/details/80584031

蒙特卡洛方法

回忆一下前面一个文章蒙特卡洛方法,其中有一步骤就是用来计算积分的,转换成一个函数乘以一个概率密度函数。说过一句话样本的容量足够大时,可以认为该事件的发生频率即为其概率”。当n足够大的时候,可以得到


也就是g(x)在p(x)分布上的均值。然后就可以用均值近似积分的值


其实不难发现


还是拿那个用一个圆和其外接正方形理解,就相当于,我们做了N次试验,每次试验都是丢一堆点到这个正方形包围区域,然后正方形内的点数(这个地方这样想比较方便:点构成面,那么我们就可以把正方形的面积想象成无数个点)也就是正方形近似的面积了,同理,被丢到圆内的点构成了圆的面积。回到那个用均值计算积分的累加式上,它就相当于我做了n次丢点的实验,所有的点构成了样本f(x),而1/p(x)就代表了点落在圆内的概率大小。

【注】概率密度函数:表示瞬时值落在某指定范围内的概率,因此是幅值的函数,它随所取范围的幅值而变化。


马尔可夫链蒙特卡洛方法(MCMC方法)

前面已经介绍过关于HMM的相关知识了,主要就是分别用何种方法解决哪三种问题。马尔可夫链(通常我们说的就是一阶的情况)阐述的是事物发生的当前状态只与前面一个状态有关,比如明天天气状态只与今天的天气有关,与前天或者以前的天气状态无关。具体表述就是

代表的是第(t+1)时刻的状态为 i 的概率为它的前一时刻 t 的所有可能状态 k 乘以状态 k 到状态 i 的转移概率。

举个栗子哈~~还是天气的那个以明天的天气为起点,我们想预测后天的天气为晴的概率多大,我们需要知道明天的天气,但是明天天气有很多种可能,由初始概率可以知道明天天气分别为阴、晴、多云等的概率,然后分别乘以阴天到晴天的概率、晴天到晴天的转移概率、多云到晴天的转移概率等,然后相加就可以得到后天晴天的概率。在前面的文章有栗子,有需要可以去看看栗子就可以了。

然后出现了这样一个理论:当我们一直进行状态转移,到达一定次数的时候,这个状态发生的概率就会趋于稳定了,就比如,我们用天气一直预测,今天的比如晴天,我预测明天天气分别为阴、晴、多云的概率,然后用明天可能出现的天气情况预测后天的天气情况,然后我们一直计算,假如计算到达今年12月份最后一天的天气概率,就会发现这个概率跟12月份下旬的每天的天气概率分布情况差不多,差距很小。用数学的方法表示就是:

代表的就是我们以初始状态的天气概率,不断的乘以这个转移矩阵(乘一次就是转移了一次,乘两次就是转移了两次),当乘的次数越来越多的时候,概率分布变化会逐渐趋近与稳定。就像前面MC中说过的,我们不断的采样,最终的状态一定是一个稳定状态,最接近样本分布的状态。

上面这个情况称为马氏链定理:对于各态遍历的马尔可夫链(满足两个条件:非周期性,也就是状态转移不是按照某种规律循环,而是随机转移的;另一个条件是不可约,也就是每一个状态都可有其它任何一种状态转移过来,不可能存在一种状态转移的概率为0),不管初始的概率如何取值,随着转移次数的增多,随机变量的取值分布最终会收敛于唯一的平稳分布。这个就是MCMC理论的基础。

现在的问题就是这个转移概率矩阵去怎么选择,让我们的初始状态沿着马尔可夫链按照这个转移概率矩阵去转移,最终得到的平稳分布正好是我们需要的概率分布。采样的时候,我们直接按照这个概率转移几次,达到我们需要的概率分布的时候,便去采样就可以了。随之便出现了下一个方法:梅特罗波利斯哈斯廷斯采样。


梅特罗波利斯哈斯廷斯采样

首先有一个概念需要知道叫做细致平稳条件:

如果非周期的马氏转移矩阵P和分布π(x)满足那么就成π(x)是马氏链的平稳分布。式子被称为细致平稳条件。也就是我们从状态 i 转移到状态 j 的时候损失的概率质量,刚好可以用从 j 到 i 状态转移增加的概率质量补回来。

但是这个细致平稳条件我们一般是达不到的。随后就有大牛想到加入了一个变量叫做转移提议分布Q(j;i)表示当前状态 i 提议转移到 j 状态,用它来建议下一步是个什么状态,然后用一个概率去接受它。就跟相亲一样,老爸老妈给你建议某个妹子的概率是多少,但是这还不够,你还得有一个接受她的概率才能和她结婚。

这个就是接受概率。到底接不接受呢?我们产生一个随机的[0,1] 范围的数,如果α 大于这个数就接受,小于就拒绝转移,保持原状态。

然后细指平稳条件就成了下面酱紫


然后推理一步

可以轻松发现,π(x)分布下的π(j)状态,经过转移,达到的状态依旧是满足π(x)分布,为π(i)。

所以梅特罗波利斯哈斯廷斯采样的精髓在于(自我感觉哈),提出了一个转移提议分布,让细致平稳条件成为可能。此时新的转移矩阵为



那么问题又来了,这里面有一个随机数和接受概率的比较,两个东西都比较随机,造成了这种方法的不稳定性,如果接受概率一直灰常小,那么我每次都拒绝了,这状态还咋转移。于是,大牛又来了~~~


吉布斯采样(Gibbs采样)

后面有篇博文详细介绍了吉布斯采样:http://blog.csdn.net/zb1165048017/article/details/51778694

条件概率的计算公式复习一下先

然后看一个比较有意思的式子推导


可以很清晰的发现,两个状态的相互转移概率其实是相等的,也就是满足细致平稳条件。也就是说,我们固定一个,按照x这个方向去转移状态,到达下一个状态,这个过程是满足细致平稳分布的。

用其它文章的话来说就是


这跟上面的梅特罗波利斯蒙特卡洛方法有什么关系呢?其实关键就在于,Gibbs规定了转移方向,在这个方向是,你的接受概率必须为1,其它方向必须为0,这便消除了随机性的影响。



最后再举一个栗子串一下,还是相亲的栗子。刚开始的时候是满世界找对象,世界上每个妹子在你面前出现的概率叫做初始概率,然后你在世界上行走去每个地方概率为转移概率,然后不断地走,走遍大江南北,世界各地,不断的转移状态,你就会发现,每个地方的妹子的属性(身高、年纪、性格等)分布差不多,给你一个新地方,你不去就能猜到那边妹子的平均身高,平均年龄等特征,这时候,妹子们的状态分布就会趋于一种平稳状态。除非你改变去每个地方的概率,或者世界上突然被外星人抓走了一种类型妹子,这时候就会处于另一种稳态。这种就叫做马尔可夫链蒙特卡洛方法。

然后有的人就很聪明了,他想,我到处吓跑干啥,累死了,走遍各地,让妹子的分布达到稳态,这还不得老了。接着父母就开始忙活了,父母帮儿子找媳妇,父母每次给儿子按照某种提议分布去建议儿子娶这个,娶那个,儿子每看到一个妹子就以一定的接受概率去接受它,这种方法就是梅特罗波利斯哈斯廷斯采样。

最后,有人就发现,有些类型的妹子我非常喜欢,有些不喜欢,有些又有点拿捏不定,怎么办?这时候,我不想麻烦了,不喜欢和拿捏不定的,我统统不要,我就要一种风格的妹子(妹子的各种属性满足某种分布,几分萌萌哒,几分瘦,几分年纪等),然后看到从样本中找到第一个这样风格的妹子,接下来按照上一个选中的妹子风格和我们希望的风格分布,不断采样,找这种风格的妹子,当我找到数量足够的妹子(即Gibbs里面的n),这时候我就得到了我喜欢的风格的妹子们了(期望的样本分布)。


好吧,如果有什么不对的,谢谢大家指正,我会不断完善的~~~~谢谢啦~~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/246725.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

受限玻尔兹曼机——简单证明

花了很久看了一下玻尔兹曼机,感觉水有点深,总之一步一步来嘛~~~~ 先说一下一个非常好的参考资料: 受限玻尔兹曼机(RBM)学习笔记 ,有兴趣的可以再看看这篇文章的参考文献或者博客,写的也非常好&…

受限玻尔兹曼机RBM实现及能量值思考——matlab实现

网址:http://www.cs.toronto.edu/~hinton/MatlabForSciencePaper.html 这个代码主要是在mnist上做手写数字识别的代码,贴出来的目的主要是想研究一下在迭代过程中能量的变化情况。 1. 标准能量函数 标准的能量函数的表达式为: 那么就将这个…

Cheat_Sheet ---Keras、Matlab、Matplotlib、Numpy、Pandas、Scikit-Learn、SciPy

Cheat_Sheet ---KerasCheat_Sheet ---MatlabCheat_Sheet ---MatplotlibCheat_Sheet ---NumpyCheat_Sheet ---PandasCheat_Sheet ---Scikit-LearnCheat_Sheet ---SciPy参考文献 http://ddl.escience.cn/f/IDkq#path%2F8215264

WPF中DataContext的绑定技巧-粉丝专栏

(关注博主后,在“粉丝专栏”,可免费阅读此文) 先看效果: 上面的绑定值都是我们自定义的属性,有了以上的提示,那么我们可以轻松绑定字段,再也不用担心错误了。附带源码。 …

matlab实现unix时间戳到标准时间的转换

【注】给定时间精确到小时的情况下的转换 函数: function [ date ] ConvertDate( x ) %将unix时间戳转换为标准时间 % date datestr(1426406400/86400 datenum(1970,1,1)); date datestr((x-3600*248*3600)/86400 70*36519datenum(1900,1,0)); end结果&#…

failed to initialize nvml driver/library version mismatch ubuntu

英伟达驱动版本是384.130显示的NVRM version: NVIDIA UNIX x86_64 Kernel Module是:384.130。 若是旧的版本就会出现如下问题。 这个问题出现的原因是kernel mod 的 Nvidia driver 的版本没有更新,一般情况下,重启机器就能够解决,…

Recall(召回率) Precision(准确率) F-Measure E值 sensitivity(灵敏性) specificity(特异性)漏诊率 误诊率 ROC AUC

Berkeley Computer Vision page Performance Evaluation 机器学习之分类性能度量指标 : ROC曲线、AUC值、正确率、召回率 True Positives, TP:预测为正样本,实际也为正样本的特征数 False Positives,FP:预测为正样本,实际为负…

Linux的常用经典命令(持续更新)

找工作笔试面试那些事儿(16)—linux相关知识点(1) 找工作笔试面试那些事儿(17)—linux测试题 vim编辑器操作命令大全-绝对全 - CSDN博客 Linux进阶资源 Command line one-liners the-art-of-command-line Linux工具快速教程 快乐的 Linux 命令行 Linux Tutorial UNIX Tutoria…

【caffe-Windows】cifar实例编译之model的使用

本文讲解如何对网上下载的一个图片利用训练好的cifar模型进行分类 第一步 上一篇文章训练好以后会得到两个文件 从网上查阅资料解释来看,第一个caffemodel是训练完毕得到的模型参数文件,第二个solverstate是训练中断以后,可以用此文件从中断…

Python 命令汇总

python 库windows安装 兵种:python程序员。 等级:二级。 攻击:较高。 防御:普通。 价格:低。 天赋:胶水,我方有c程序员时,速度可达到c程序员的80%。 天赋:成熟&…

【PTVS+Theano+CPU/GPU】在windows下使用VS安装theano深度学习工具

唉。好不容易折腾完毕caffe,突然发现caffe比较适合搭建卷积神经网络,而对于DBN和LSTM的搭建好像比较麻烦,相关教程没有找到,手头上又有一个theano的代码想调试看看,所以入坑了。 准备工具: VS2013:链接&a…

人工神经网络——【BP】反向传播算法证明

第一步:前向传播 【注】此BP算法的证明仅限sigmoid激活函数情况。本博文讲道理是没错的,毕竟最后还利用代码还核对了一次理论证明结果。 关于更为严谨的BP证明,即严格通过上下标证明BP的博客请戳这里 简单的三层网络结构如下 参数定义&…

【caffe-Windows】微软官方caffe之 matlab接口配置

前言 按照微软的官方地址配置可能会出现一个问题caffe_.mexw64找不到引用模块问题,或者在matlab里面压根找不到caffe_这个函数,下面会提到这两个问题。还是按照步骤来吧 【PS1】有GPU同样按照下述步骤,进行即可 【PS2】文章在matlab2013a、…

【混淆矩阵】matlab画混淆矩阵

主要借鉴此博客代码:http://blog.csdn.net/sherry_gp/article/details/50560003 但是这个博主的代码达不到我想要的效果,所以修改了一下 我想要实现的效果是:给定一列的预测标签,以及这一列标签的哪一部分理应属于哪一部分标签。…

【caffe-Windows】mnist实例编译之model的生成

其实这个和cifar的实例基本相同,只不过数据转换的方法不一样 【说明,此博客按照我自己的路径设置的相关操作,读者如果自行选择其他路径,记得在bat和prototxt等文件修改路径】 第一步 下载数据集THE MNIST DATABASE of handwrit…

吉布斯采样——原理及matlab实现

原文来自:https://victorfang.wordpress.com/2014/04/29/mcmc-the-gibbs-sampler-simple-example-w-matlab-code/ 【注】评论区有同学指出译文理论编码有误,请参考更官方的文献,个人当时仅验证过红色字体部分理论与维基百科中二位随机变量吉…

【matlab知识补充】conv2、filter2、imfilter函数原理

原文地址:http://www.ilovematlab.cn/thread-293710-1-1.html -------------------------------------conv2函数---------------------------------------- 1、用法 Cconv2(A,B,shape); %卷积滤波 复制代码A:输入图像,B:卷积核假设输入图像A大…

显示mnist手写数字

前言 可视化什么的,总是好的 方法一 其实也就是用到了Ruslan Salakhutdinov and Geoff Hinton提供的工具包 % Version 1.000 % % Code provided by Ruslan Salakhutdinov and Geoff Hinton % % Permission is granted for anyone to copy, use, modify, or distr…

【caffe-Windows】mnist实例编译之model的使用-classification

仿照cifar10的模型使用,本文对mnist的训练方式做了部分修改 【注】本文caffe安装路径为E:\CaffeDev-GPU\caffe-master。请自行参考并修改相关路径(debug以及release参考你编译caffe时候采用的模式) 第一步 按照前面的model生成方法的前两步骤制作数据集&#xff…

误差error,偏置bias,方差variance的见解

更新日志:2020-3-10 谢谢ProQianXiao的指正。偏差-方差的确是在测试集中进行的。 之前的误解是,偏差和方差的计算是同一个模型对不同样本的预测结果的偏差和方差;而实际上是不同模型对同一个样本的预测结果的偏差和方差。 这时候就要祭出网…