Hamiltonian Monte Carlo(HMC)采样器
汉密尔顿蒙特卡罗(HMC)采样器是一种基于梯度的马尔可夫链蒙特卡罗采样器,您可以使用概率密度来生成样本P(x).HMC取样要求规格对数P(x)以及它的梯度。
参数向量x必须是无约束的,这意味着x可以是任何实数。为了采样约束参数,在使用HMC采样器之前,将这些参数转换为无约束变量。
创建采样器后,可以使用此类方法计算MAP(最大后验概率)点估计、调整采样器、绘制样本并检查收敛诊断。有关此工作流的示例,请参阅基于哈密顿蒙特卡罗的贝叶斯线性回归.
创建一个汉密尔顿蒙特卡罗(HMC)采样器,返回HMC.
= hmcSampler (日志PDF
,曾经繁荣
)HamiltonianSampler
对象日志PDF
是一个函数句柄,用于计算平衡分布及其梯度的概率密度的对数。列向量曾经繁荣
是开始HMC抽样的起始点。
使用一个或多个名称-值对参数指定其他选项。在所有其他输入参数之后指定名称-值对参数。HMC.
= hmcSampler (___,名称,值
)
日志PDF
- - - - - -目标密度及其梯度的对数目标密度及其梯度的对数,指定为函数句柄。
日志PDF
必须返回两个输出参数:[lpdf, glpdf] = logpdf (X)
.这里,lpdf
基础-E日志概率密度(最多常数),glpdf
是对数密度的梯度,和点X
是一个列向量,其元素数与曾经繁荣
.
输入参数X
到日志PDF
必须是无约束的,这意味着X
可以是任何实数。在使用HMC采样器之前,将任何受约束的采样参数转换为无约束变量。
如果“UseNumericalGradient”
值设置为符合事实的
,然后日志PDF
不需要返回梯度作为第二个输出。使用数值梯度可以更容易,因为日志PDF
不需要计算梯度,但它可以使采样变慢。
数据类型:function_handle
曾经繁荣
- - - - - -开始采样的起始点开始采样的起始点,指定为数字列向量。
数据类型:仅有一个的
|双倍的
指定可选的逗号分隔的对名称,值
论点。名称
参数名和价值
是对应的值。名称
必须出现在引号内。您可以按任意顺序指定多个名称和值对参数,如下所示:name1,value1,...,namen,valuen
.
VariableNames,{“拦截”,“Beta”},“MassVectorTuningMethod”、“海赛”
指定采样变量名称和要使用的质量向量调整方法“海赛”
.
步长
- - - - - -哈密顿动力学的步长0.1
(默认)|积极的标量哈密顿动力学的步长,指定为逗号分隔对,由“步长”
和一个正标量。
为了提出马尔可夫链的新状态,HMC采样器使用蛙跳积分对哈密顿动力学进行积分。此参数控制蛙跳积分的步长。
可以使用自动调整步长tuneSampler
.
例子:“StepSize”,0.2
小步
- - - - - -哈密顿动力学的阶数50
(默认)|正整数哈密顿动力学的步数,指定为逗号分隔对组成“NumSteps”
和一个正整数。
为了给出马尔可夫链的一种新的状态,HMC采样器采用跳越式积分的方法集成了哈密顿动力学。这个参数控制跳跃式集成的步骤数。
您可以使用自动调整步骤数tuneSampler
.
例子:“NumSteps”,20
MassVector.
- - - - - -动量变量的质量矢量一个(大小(起点,1),1)
(默认)|数字栏矢量动量变量的质量矢量,指定为逗号分隔对,由'MassVector'
和一个数值列向量,其值为正值,长度与曾经繁荣
.
在每个马尔可夫链提议中,动量变量与感兴趣变量相关的“质量”控制着哈密顿动力学。
可以使用自动调整质量向量tuneSampler
.
例子:“质量向量”,兰特(3,1)
jittermethod.
- - - - - -抖动步长和步数的方法“两个都抖动”
(默认)|“jitter-numsteps”
|“没有”
用于抖动步长和步数的方法,指定为逗号分隔对,由'jittermethod'
以及以下其中之一:
价值 | 描述 |
---|---|
“两个都抖动” |
随机抖动每个跳过轨迹的步长和步骤数。 |
“jitter-numsteps” |
抖动只是每个跳跃轨迹的步数。 |
“没有” |
没有抖动。 |
通过抖动,采样器随机选择步长或每个蛙跳轨迹的步数,作为小于初始值的值“步长”
和“NumSteps”
值。利用抖动来提高哈密顿动力学跳变积分的稳定性。
例子:“JitterMethod”,“jitter-both”
步长调整法
- - - - - -调整采样器步长的方法'双平均'
(默认)|“没有”
调整采样器步长的方法,指定为包括的逗号分隔对“StepSizeTuningMethod”
和'双平均'
或“没有”
.
如果“StepSizeTuningMethod”
值设置为'双平均'
,然后tuneSampler
调整HMC采样器的蛙跳步长,以达到模拟长度固定值的特定接受率。模拟长度等于步长乘以步数。要设置目标接受率,请使用“TargetAcceptanceRatio”
的名称-值对参数tuneSampler
方法。
例子:“StepSizeTuningMethod”、“没有”
MassVectortuningMethod.
- - - - - -调谐采样器质量矢量的方法“iterative-sampling”
(默认)|“海赛”
|“没有”
调整采样器质量矢量的方法,指定为包括的逗号分隔对'massvectortuningmethod'
和以下值之一
价值 | 描述 |
---|---|
“iterative-sampling” |
调优 |
“海赛” |
|
“没有” |
没有调整 |
要执行调整,请使用tuneSampler
方法。
例子:“MassVectorTuningMethod”、“海赛”
VariableNames
- - - - - -采样变量名{'x1','x2',…}
(默认)|字符串数组|字符向量的单元格阵列采样变量名,指定为逗号分隔对,由“变化无常”
以及字符向量的字符串数组或单元格数组。数组的元素必须是唯一的。数组的长度必须与数组的长度相同曾经繁荣
.
提供一个“变化无常”
使用HMC采样器标记要素样本的矢量组件的值。
例子:'VariableNames',{'Intercept','Beta'}
UseNumericalGradient
- - - - - -使用数值梯度的标志假
(或0
)(默认)|符合事实的
(或1
)使用数值梯度的标志,指定为逗号分隔对组成“UseNumericalGradient”
和任何一种符合事实的
(或1
)或假
(或0
).
如果你设定“UseNumericalGradient”
价值符合事实的
然后,HMC采样器根据以下公式返回的对数密度数值估计梯度:日志PDF
.在这种情况下,日志PDF
函数不需要返回日志密度的梯度作为第二个输出。使用数值梯度会使HMC采样变慢。
例子:“UseNumericalGradient”,真的
步长
- - - - - -哈密顿动力学的步长0.1
(默认)|积极的标量哈密顿动态的步长,指定为正标量。
为了给出马尔可夫链的一种新的状态,HMC采样器采用跳越式积分的方法集成了哈密顿动力学。此属性的值控制跳跃式集成的步长。
小步
- - - - - -哈密顿动力学的阶数50
(默认)|正整数哈密顿动态的步数,指定为正整数。
为了提出马尔可夫链的新状态,HMC采样器使用蛙跳积分来积分哈密顿动力学。此属性的值控制蛙跳集成的步数。
MassVector.
- - - - - -动量变量的质量矢量一个(大小(起点,1),1)
(默认)|数字栏矢量动量变量的质量矢量,指定为具有正值和相同的数字列向量曾经繁荣
.
在每个马尔可夫链提议中,动量变量与感兴趣变量相关的“质量”控制着哈密顿动力学。
jittermethod.
- - - - - -抖动步长和步数的方法“两个都抖动”
(默认)|“jitter-numsteps”
|“没有”
抖动步骤尺寸和步数的方法,指定为以下值之一。
价值 | 描述 |
---|---|
“两个都抖动” |
随机抖动每个跳跃轨迹的步长和步数。 |
“jitter-numsteps” |
抖动只是每个跳跃轨迹的步数。 |
“没有” |
没有抖动。 |
通过抖动,采样器随机选择步长或每个蛙跳轨迹的步数,作为小于初始值的值“步长”
和“NumSteps”
值。利用抖动来提高哈密顿动力学跳变积分的稳定性。
步长调整法
- - - - - -调整采样器步长的方法'双平均'
(默认)|“没有”
调整采样器步长的方法,具体如下'双平均'
或“没有”
.
如果步长调整法
等于'双平均'
,然后tuneSampler
调整HMC采样器的蛙跳步长,以达到模拟长度固定值的特定接受率。模拟长度等于步长乘以步数。要设置目标接受率,请使用“TargetAcceptanceRatio”
的名称-值对参数tuneSampler
方法。
MassVectortuningMethod.
- - - - - -调谐采样器质量矢量的方法“iterative-sampling”
(默认)|“海赛”
|“没有”
调谐采样器质量矢量的方法,指定为下列值之一。
价值 | 描述 |
---|---|
“iterative-sampling” |
调优 |
“海赛” |
设定 |
“没有” |
没有调整 |
要执行调整,请使用tuneSampler
方法。
LogPDF
- - - - - -目标密度及其梯度的对数目标密度及其梯度的对数,指定为函数句柄。
LogPDF
返回两个输出参数:[LPDF,GLPDF] = logpdf(x)
.这里,lpdf
是base-e对数概率密度(最大为加性常数)和glpdf
这一点的对数密度梯度是多少X
.输入参数X
必须是具有相同数量元素的列向量起止点
财产。
如果你设定“UseNumericalGradient”
价值符合事实的
当创建采样器时,那么LogPDF
返回数值梯度glpdf
.
起止点
- - - - - -开始采样的起始点开始采样的起始点,指定为数字列向量。
VariableNames
- - - - - -采样变量名{'x1','x2',…}
(默认)|唯一字符向量的单元格数组采样变量名称,指定为唯一字符向量的单元格数组。
诊断学 | 马尔可夫链蒙特卡罗诊断 |
抽样 | 使用哈密顿蒙特卡罗(HMC)生成马尔可夫链 |
estimateMAP | 对数概率密度最大值的估计 |
tuneSampler | 调谐哈密顿蒙特卡罗(HMC)采样器 |
建立一个哈密顿蒙特卡罗(HMC)采样器,从一个正态分布中采样。
首先,保存函数QuancleDistrad.
在MATLAB®路径上,返回多元正常日志概率密度及其渐变(QuancleDistrad.
在该示例的末尾定义)。然后,调用参数的函数来定义日志PDF
将参数输入到HMCSampler.
函数。
手段= [1; -3];standevs = [1; 2];logpdf = @(theta)normaldistgrad(θ,意味着,stablevs);
为HMC采样器选择一个起始点。
startpoint = Randn(2,1);
创建HMC采样器并显示其属性。
smp = hmcSampler (logpdf,曾经繁荣);
开关电源
smp = HamiltonianSampler with properties: StepSize: 0.1000 NumSteps: 50 MassVector: [2x1 double] JitterMethod: 'jitter-both' StepSizeTuningMethod: 'dual-averaging' MassVectorTuningMethod: ' iter- sampling' LogPDF: @(theta)normalDistGrad(theta,means,standevs) VariableNames: {2x1 cell} StartPoint: [2x1 double]
的QuancleDistrad.
函数返回均值为in的多元正态概率密度的对数亩
和标准偏差Sigma.
,指定为与相同长度的标量或列向量曾经繁荣
.第二个输出参数是相应的渐变。
作用[lpdf,glpdf]=normalDistGrad(X,Mu,Sigma)Z=(X-Mu)。/Sigma;lpdf=sum(-log(Sigma)-.5*log(2*pi)-.5*(Z.^2));glpdf=-Z./Sigma;结束
你点击一个链接对应于这个MATLAB命令:
在MATLAB命令窗口中输入它来运行命令。Web浏览器不支持MATLAB命令。金宝app
您还可以从以下列表中选择网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。