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

原文来自:https://victorfang.wordpress.com/2014/04/29/mcmc-the-gibbs-sampler-simple-example-w-matlab-code/

【注】评论区有同学指出译文理论编码有误,请参考更官方的文献,个人当时仅验证过红色字体部分理论与维基百科中二位随机变量吉布斯采样的结果是否对应,其余部分有意见希望可以详细指出,大家互相交流。

MCMC(马尔可夫链蒙特卡洛方法):the Gibbs Sampler(吉布斯采样)

        在之前的博客中,我们对比了在一个多元概率分布p(x)中,分别采用分组(block-wise)和分成分(component-wise)实现梅特罗波利斯哈斯廷斯算法。对于多元变量问题中的MCMC算法,分成分更新权重比分组更新更有效,因为通过使每一个成分/维度独立于其他成分/维度,我们将更可能去接受一个提议采样【注,这个proposed sample应该就是前面博客里面提到的转移提议分布】。然而,提议采样仍然可能被拒绝,导致有些多余的计算,因为他们被拒绝了,计算了但是一直未使用。吉布斯采样是另外一种比较受欢迎的MCMC采样技术,提供了避免这种多余计算的方法。就像分成分实现Metropolis Hastings算法,吉布斯仍然使用分成分更新。然而,不像Metropolis Hastings采样,所有的提议采样将被接受,因此不会有多余的计算。

        基于两个标准,吉布斯采样使用某些类别的问题。给定一个目标分布p(x),其中,第一个标准是以其它所有变量联合起来的联合分布为条件的每一个变量的条件分布有解析(数学)表达式。在形式上,如果目标分布p(x)是D维的,我们必须有D个独立的表达式:

          每一个表达式都定义了在知道其他j(j≠i)维的数值的情况下第i维的概率。具有每一个变量的条件分布代表我们不需要像Metropolis Hastings算法需要提议分布或者接受/拒绝标准。因此,当其他变量固定的时候,我们可以简单的从每一个条件中去采样。第二个标准就是我们必须能够从每一个条件分布中去采样。如果我们想要去实现一个算法,这个附加条件是非常明显的。

          吉布斯采样的工作方法与分成分Metropolis Hastings算法很像,除了取缔借鉴每一个维度的提议分布,然后对于接受或者拒绝提议采样,我们采用简单地依据变量对应的条件分布去选取此维度的值。我们会接受所有选取的值。类似分成分Metropolis Hastings算法,我们依次通过每一个变量,在其它变量固定的时候对它采样。吉布斯采样的步骤大致如下:

1.设置t=0

2.生成初始状态

3.重复直到t=M
{
对于每一个维度i=1...D
中得到 

}
       为了对吉布斯采样有更好的理解,我们下面来实现一下吉布斯采样,去解决与前面提到过的同样的多元变量采样问题。

 

例子:从二元正态分布中采样Example: Sampling from a bivariate a Normal distribution

 

       这个例子与前面一样,从2维的正态分布使用分组和分成分的Metropolis-Hastings算法采样。这里我们展示使用同样的目标分布如何实现吉布斯采样。重复提示一下,目标函数p(x)是一种规范化形式,表示如下:

①均值是

②协方差是

     为了使用吉布斯采样从这个分布中采样,我们需要有变量/维度x1和x2的条件分布

      是第二个维度的前一个状态,是从中得到的第一个维度的状态。有差异的原因是更新x1和x2用的是(t-1)和t时刻的状态,在上一节中的算法大纲第三步可以看出来。第t次迭代,我们首先以变量x2的最近状态即第(t-1)次迭代结果为条件,为x1采样一种新状态。然后再以第t次迭代得到的x1的最新状态为条件采样得到变量x2。
经过一些数学推导(这里先跳过,这里有详细的过程),我们发现目标正态分布的两个条件分布是:

        每一个都是单变量的正态分布,其中均值依赖条件变量的最近状态的值,方差依赖两个变量之间的目标协方差。
       使用上述描述的变量x1和x2的条件概率,我们下面采用matlab实现吉布斯采样,输出的采样如下:

 

        观察上表,发现每一次迭代中吉布斯采样中的马尔可夫链是如何第一次沿着x1方向前进一步,然后沿着x2的方向前进。这展示了吉布斯采样以分成分方法一次单独为每一个变量采样。

总结Wrapping Up

        吉布斯采样是为复杂多元概率分布采样的一个受欢迎的MCMC方法。然而,吉布斯采样不能用于一般的抽样问题。对于许多目标分布,很难或者不可能去获取到所有需要的条件分布的近似表达。在其它情况下,对于所有条件的解析表达式或许存在,但是它或许很难从任意的或者全部的条件分布去采样(在这种情况下,使用单变量( univariate sampling methods)采样比如拒绝抽样(rejection sampling)和Metropolis类型的MCMC技术去逼近每一个条件的样本是比较普遍的)。吉布斯采样是非常受欢迎的贝叶斯方法,模型经常以这种方式设计:所有模型变量的条件表达式非常容易获取,并且采用一种能够被高效采样的众所周知的形式。
吉布斯采样,就像很多MCMC方法,有“慢混合(slow mixing)”的问题。慢混合的发生是在潜在的马尔可夫链需要很长时间去充分探索出x的值,从而给出一个更好的p(x)的表征(characterization)。慢混合是因为一些因素包括马尔可夫链的“随机走动(random walk)”特性,并且马尔可夫链有“卡住”的趋势,因为仅仅采样了x的一个单独区域,这个区域在p(x)下有很高的概率。这种反应对于多模式(multiple modes)或者重尾(heavy tails)中的分布进行采样效果不好,比如混合蒙特卡洛已被发展成一个包含附加动力学(incorporate additional dynamics)的能提高马尔可夫链路径效率的方法。将来会讨论混合蒙特卡洛方法

matlab代码

      实现的应该是给定了一个均值和方差,以及初始的一个样本点,然后采样出5000个符合分布的点

 

%https://victorfang.wordpress.com/2014/04/29/mcmc-the-gibbs-sampler-simple-example-w-matlab-code/
%seed 用来控制 rand 和 randn 
% 如果没有设置seed,每次运行rand或randn产生的随机数都是不一样的
% 用了seed,比如设置rand('seed',0);,那么每次运行rand产生的随机数是一样的,这样对调试程序很有帮助
rand('seed' ,12345);nSamples = 5000;mu = [0 0]; % TARGET MEAN目标均值
rho(1) = 0.8; % rho_21目标方差
rho(2) = 0.8; % rho_12目标方差% INITIALIZE THE GIBBS SAMPLER
propSigma = 1; % PROPOSAL VARIANCE
minn = [-3 -3];
maxx = [3 3];% INITIALIZE SAMPLES
x = zeros(nSamples,2);
x(1,1) = unifrnd(minn(1), maxx(1));%unifrnd生成连续均匀分布的随机数
x(1,2) = unifrnd(minn(2), maxx(2));dims = 1:2; % INDEX INTO EACH DIMENSION% RUN GIBBS SAMPLER
t = 1;
while t < nSamples%总共采样出5000个采样点t = t + 1;T = [t-1,t];for iD = 1:2 % LOOP OVER DIMENSIONS总共两维,注释先讨论第一维% UPDATE SAMPLESnIx = dims~=iD; % *NOT* THE CURRENT DIMENSION找到另外一维nIx=[0 1]logical类型% CONDITIONAL MEANmuCond = mu(iD) + rho(iD)*(x(T(iD),nIx)-mu(nIx));%计算均值=表达式μ(1)+ρ(1)*(x(n,2)-μ(2))其中x(n,2)代表样本第n个数据的第二维% CONDITIONAL VARIANCEvarCond = sqrt(1-rho(iD)^2);%计算方差% DRAW FROM CONDITIONALx(t,iD) = normrnd(muCond,varCond);%正态分布随机函数,计算得到当前第t个数据的第1维数据valueend
end% DISPLAY SAMPLING DYNAMICS
figure;
h1 = scatter(x(:,1),x(:,2),'r.');%scatter描绘散点图,x为横坐标,y为纵坐标% CONDITIONAL STEPS/SAMPLES
hold on;%画出前五十个采样点
for t = 1:50plot([x(t,1),x(t+1,1)],[x(t,2),x(t,2)],'k-');plot([x(t+1,1),x(t+1,1)],[x(t,2),x(t+1,2)],'k-');h2 = plot(x(t+1,1),x(t+1,2),'ko');
endh3 = scatter(x(1,1),x(1,2),'go','Linewidth',3);
legend([h1,h2,h3],{'Samples','1st 50 Samples','x(t=0)'},'Location','Northwest')
hold off;
xlabel('x_1');
ylabel('x_2');
axis square

 

 

 

 

 

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

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

相关文章

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

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

显示mnist手写数字

前言 可视化什么的&#xff0c;总是好的 方法一 其实也就是用到了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的模型使用&#xff0c;本文对mnist的训练方式做了部分修改 【注】本文caffe安装路径为E:\CaffeDev-GPU\caffe-master。请自行参考并修改相关路径(debug以及release参考你编译caffe时候采用的模式) 第一步 按照前面的model生成方法的前两步骤制作数据集&#xff…

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

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

【caffe-Windows】以mnist为例lmdb格式数据

前言 前面介绍的案例都是leveldb的格式&#xff0c;但是比较流行和实用的格式是lmdb&#xff0c;原因从此网站摘取 它们都是键/值对&#xff08;Key/Value Pair&#xff09;嵌入式数据库管理系统编程库。虽然lmdb的内存消耗是leveldb的1.1倍&#xff0c;但是lmdb的速度比level…

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

前言 针对上一个caffe文章留下的matlab手写数字识别的问题&#xff0c;感谢caffe中文社区的 ghgzh 的提示&#xff0c;原文请看&#xff1a;caffe中文社区 第一步 手写图片的制作方法我就不说了&#xff0c;直接把我自己画的几个数字放到云盘先&#xff1a; 三通道图像以及…

【caffe-Windows】训练自己数据——数据集格式转换

前言 看了mnist和cifar的实例&#xff0c;是不是想我们现实中一般都是一张张的图片&#xff0c;和实例里面都不一样呢&#xff1f;那么如何来进行训练呢&#xff1f;为了能够简便点&#xff0c;我们就不自己去采集数据集了&#xff0c;因为第一自己采集的数据集量可能不够&…

【caffe-windows】Linux至Windows平台的caffe移植

1、前言 主要参考两篇博客以及很多论坛解决细节问题&#xff1a; http://www.cnblogs.com/trantor/p/4570097.html https://initialneil.wordpress.com/2015/01/11/build-caffe-in-windows-with-visual-studio-2013-cuda-6-5-opencv-2-4-9/ 移植环境&#xff1a;Windows7…

【caffe-matlab】权重以及特征图的可视化

前言 移植了各种caffe&#xff0c;是时候进行下一步操作了&#xff0c;先拿可视化下手吧。大部分内容可能跟网上的方法不一样&#xff0c;大家看完我的博客最好去网上看看大牛们的博客&#xff0c;万一被我误导了&#xff0c;就罪过了o(╯□╰)o&#xff0c;开更.............…

【caffe-matlab】使用matlab训练caffe及绘制loss

前言 此博客主要介绍如何利用matlab一步一步训练caffe模型&#xff0c;类似使用caffe.exe 的train命令。 国际惯例&#xff0c;参考博客&#xff1a; http://caffe.berkeleyvision.org/tutorial/interfaces.html http://www.cnblogs.com/denny402/p/5110204.html 抱怨一…

【caffe-matlab】目标检测R-FCN算法于Windows下配置

前言 首先谢谢好友推荐的这篇论文及代码&#xff0c;前面学习的caffe可能比较浅显&#xff0c;想要深入caffe就可以从这个代码下手了&#xff0c;配置方法还是挺简单的&#xff0c;但是可能会出现部分问题。在作者的论文中有github的地址。注意&#xff0c;本文只介绍如何配置…

【写作】Texlive和Texmaker学习

前言 最近要看一些论文做一下笔记&#xff0c;所以准备使用一下比较流行的Texlive和Texmaker写一下。其实CSDN的Markdown也是不错滴。 首先国际惯例&#xff0c;贴几个地址&#xff1a; Texlive镜像下载地址&#xff1a;http://mirror.lzu.edu.cn/CTAN/systems/texlive/Imag…

《Neural Networks for Machine Learning》学习一

前言 最近报了一下Hinton大牛的coursera的神经网络课程&#xff0c;奈何比较懒&#xff0c;一直没看&#xff0c;还是写个博客督促自己比较好 贴一下课程地址&#xff1a;https://www.coursera.org/learn/neural-networks/home/week/1 第一讲主题是为何需要机器学习&#xf…

《Neural Networks for Machine Learning》学习二

前言 课程地址&#xff1a;https://www.coursera.org/learn/neural-networks/home/week/1‘’ 【Lecture 2】百度云下载地址&#xff1a;链接&#xff1a;http://pan.baidu.com/s/1nvMynhR 密码&#xff1a;ru3y 神经网络架构概览 前馈神经网络(Feed-Forward neural network)…

入门 | 初学者必读:解读14个深度学习关键词

作者&#xff1a;Matthew Mayo 机器之心编译 参与&#xff1a;Xuwen Wang、Chen Chen 微信公众号&#xff1a;&#xff08;almosthuman2014&#xff09;授权转载&#xff0c;禁止二次转载&#xff0c;点此为原文链接 本文介绍了包括 LSTM、ANNS、生物神经元、反向传播、多元感知…

深度 | 一篇文章带你进入无监督学习:从基本概念到四种实现模型(附论文)

作者&#xff1a;Eugenio Culurciello 机器之心编译 参与&#xff1a;李亚洲、武竞 微信公众号&#xff1a;&#xff08;almosthuman2014&#xff09;授权转载&#xff0c;禁止二次转载&#xff0c;点此为原文链接 这是今年 6 月份普渡大学副教授 Eugenio Culurciello 写的一篇…

【caffe-Windows】微软官方caffe之 Python接口配置及图片生成实例

前言 发现许多代码还是用python写的&#xff0c;所以还是配置一下接口吧&#xff0c;虽然博主不会Python&#xff0c;咳咳。在这里使用的python安装包是anaconda2&#xff0c;注意使用Python2.7版本的那个安装包。 官网地址&#xff1a;https://www.continuum.io/downloads …

判别模型的玻尔兹曼机论文源码解读

前言 三号要去参加CAD/CG会议&#xff0c;投了一篇关于使用生成模型和判别模型的RBM做运动捕捉数据风格识别的论文。这段时间一直搞卷积RBM了&#xff0c;差点把原来的实验内容都忘记了&#xff0c;这里复习一下判别式玻尔兹曼机的训练流程。 国际惯例&#xff0c;贴几个链接…

Jacobian矩阵和Hessian矩阵

原文转自&#xff1a;http://jacoxu.com/?p146 1. Jacobian 在向量分析中, 雅可比矩阵是一阶偏导数以一定方式排列成的矩阵, 其行列式称为雅可比行列式. 还有, 在代数几何中, 代数曲线的雅可比量表示雅可比簇&#xff1a;伴随该曲线的一个代数群, 曲线可以嵌入其中. 它们全部都…

为什么梯度下降法对于非线性可分数据有效

前言 晚上逛微博看到的&#xff0c;顺便拿过来翻译一下&#xff0c;做做笔记 国际惯例&#xff0c;来个原文链接&#xff1a; 原文地址&#xff1a;Why is gradient descent robust to non-linearly separable data? PDF拷贝&#xff1a;http://download.csdn.net/detail/…