MCMC 是一种随机的近似推断,其核心就是基于采样的随机近似方法蒙特卡洛方法。对于采样任务来说,有下面一些常用的场景:
- 采样作为任务,用于生成新的样本
- 求和/求积分
采样结束后,我们需要评价采样出来的样本点是不是好的样本集:
- 样本趋向于高概率的区域
- 样本之间必须独立
具体采样中,采样是一个困难的过程:
- 无法采样得到归一化因子,即无法直接对概率 %3D%5Cfrac%7B1%7D%7BZ%7D%5Chat%7Bp%7D(x)#card=math&code=%C2%A0p%28x%29%3D%5Cfrac%7B1%7D%7BZ%7D%5Chat%7Bp%7D%28x%29) 采样,常常需要对 CDF 采样,但复杂的情况不行
- 如果归一化因子可以求得,但是对高维数据依然不能均匀采样(维度灾难),这是由于对 维空间,总的状态空间是 这么大,于是在这种情况下,直接采样也不行
因此需要借助其他手段,如蒙特卡洛方法中的拒绝采样,重要性采样和 MCMC。
蒙特卡洛方法
蒙特卡洛方法旨在求得复杂概率分布下的期望值:%5D%3D%5Cint%20p(z%7Cx)f(z)dz%5Csimeq%5Cfrac%7B1%7D%7BN%7D%5Csum%5Climits%7Bi%3D1%7D%5ENf(z_i)#card=math&code=%5Cmathbb%7BE%7D%7Bz%7Cx%7D%5Bf%28z%29%5D%3D%5Cint%20p%28z%7Cx%29f%28z%29dz%5Csimeq%5Cfrac%7B1%7D%7BN%7D%5Csum%5Climits_%7Bi%3D1%7D%5ENf%28z_i%29),也就是说,从概率分布中取 个点,从而近似计算这个积分。采样方法有:
- 概率分布采样,首先求得概率密度的累积密度函数 CDF,然后求得 CDF 的反函数,在0到1之间均匀采样,代入反函数,就得到了采样点。但是实际大部分概率分布不能得到 CDF。
- Rejection Sampling 拒绝采样:对于概率分布 #card=math&code=p%28z%29),引入简单的提议分布 #card=math&code=q%28z%29),使得 %5Cge%20p(z_i)#card=math&code=%5Cforall%20z_i%2CMq%28z_i%29%5Cge%20p%28z_i%29)。我们先在 #card=math&code=%C2%A0q%28z%29) 中采样,定义接受率:%7D%7BMq(z%5Ei)%7D%5Cle1#card=math&code=%5Calpha%3D%5Cfrac%7Bp%28z%5Ei%29%7D%7BMq%28z%5Ei%29%7D%5Cle1)。算法描述为:
- 取 #card=math&code=z%5Ei%5Csim%20q%28z%29)。
- 在均匀分布中选取 。
- 如果 ,则接受 ,否则,拒绝这个值。
- Importance Sampling:直接对期望:%7D%5Bf(z)%5D#card=math&code=%5Cmathbb%7BE%7D%7Bp%28z%29%7D%5Bf%28z%29%5D) 进行采样。![](https://g.yuque.com/gr/latex?%5Cmathbb%7BE%7D%7Bp(z)%7D%5Bf(z)%5D%3D%5Cint%20p(z)f(z)dz%3D%5Cint%20%5Cfrac%7Bp(z)%7D%7Bq(z)%7Df(z)q(z)dz%5Csimeq%5Cfrac%7B1%7D%7BN%7D%5Csum%5Climits%7Bi%3D1%7D%5ENf(z_i)%5Cfrac%7Bp(z_i)%7D%7Bq(z_i)%7D%0A#card=math&code=%5Cmathbb%7BE%7D%7Bp%28z%29%7D%5Bf%28z%29%5D%3D%5Cint%20p%28z%29f%28z%29dz%3D%5Cint%20%5Cfrac%7Bp%28z%29%7D%7Bq%28z%29%7Df%28z%29q%28z%29dz%5Csimeq%5Cfrac%7B1%7D%7BN%7D%5Csum%5Climits_%7Bi%3D1%7D%5ENf%28z_i%29%5Cfrac%7Bp%28z_i%29%7D%7Bq%28z_i%29%7D%0A)
于是采样在 #card=math&code=%C2%A0q%28z%29) 中采样,并通过权重计算和。重要值采样对于权重非常小的时候,效率非常低。重要性采样有一个变种 Sampling-Importance-Resampling,这种方法,首先和上面一样进行采样,然后在采样出来的 个样本中,重新采样,这个重新采样,使用每个样本点的权重作为概率分布进行采样。
MCMC
马尔可夫链式一种时间状态都是离散的随机变量序列。我们关注的主要是齐次的一阶马尔可夫链。马尔可夫链满足:%3Dp(X%7Bt%2B1%7D%7CX_t)#card=math&code=p%28X%7Bt%2B1%7D%7CX1%2CX_2%2C%5Ccdots%2CX_t%29%3Dp%28X%7Bt%2B1%7D%7CXt%29)。这个式子可以写成转移矩阵的形式 ![](https://g.yuque.com/gr/latex?p%7Bij%7D%3Dp(X%7Bt%2B1%7D%3Dj%7CX_t%3Di)#card=math&code=p%7Bij%7D%3Dp%28X_%7Bt%2B1%7D%3Dj%7CX_t%3Di%29)。我们有:
%3D%5Cint%5Cpii(x)p%7Bx%5Cto%20x%5E*%7Ddx%0A#card=math&code=%5Cpi%7Bt%2B1%7D%28x%5E%2A%29%3D%5Cint%5Cpi_i%28x%29p%7Bx%5Cto%20x%5E%2A%7Ddx%0A)
如果存在 ,有上式成立,这个序列就叫马尔可夫链 的平稳分布,平稳分布就是表示在某一个时刻后,分布不再改变。MCMC 就是通过构建马尔可夫链概率序列,使其收敛到平稳分布 #card=math&code=p%28z%29)。引入细致平衡:p%7Bx%5Cto%20x%5E%7D%3D%5Cpi(x%5E)p%7Bx%5E*%5Cto%20x%7D#card=math&code=%5Cpi%28x%29p%7Bx%5Cto%20x%5E%2A%7D%3D%5Cpi%28x%5E%2A%29p%7Bx%5E%2A%5Cto%20x%7D)。如果一个分布满足细致平衡,那么一定满足平稳分布(反之不成立):
p%7Bx%5Cto%20x%5E%7Ddx%3D%5Cint%5Cpi(x%5E)p%7Bx%5E%5Cto%20x%7Ddx%3D%5Cpi(x%5E)%0A#card=math&code=%5Cint%5Cpi%28x%29p%7Bx%5Cto%20x%5E%2A%7Ddx%3D%5Cint%5Cpi%28x%5E%2A%29p%7Bx%5E%2A%5Cto%20x%7Ddx%3D%5Cpi%28x%5E%2A%29%0A)
细致平衡条件将平稳分布的序列和马尔可夫链的转移矩阵联系在一起了,通过转移矩阵可以不断生成样本点。假定随机取一个转移矩阵 #card=math&code=%28Q%3DQ_%7Bij%7D%29),作为一个提议矩阵。我们有:
%5Ccdot%20Q%7Bz%5Cto%20z%5E%7D%5Calpha(z%2Cz%5E)%3Dp(z%5E*)%5Ccdot%20Q%7Bz%5E%5Cto%20z%7D%5Calpha(z%5E%2Cz)%0A#card=math&code=p%28z%29%5Ccdot%20Q%7Bz%5Cto%20z%5E%2A%7D%5Calpha%28z%2Cz%5E%2A%29%3Dp%28z%5E%2A%29%5Ccdot%20Q%7Bz%5E%2A%5Cto%20z%7D%5Calpha%28z%5E%2A%2Cz%29%0A)
取 :
%3D%5Cmin%5C%7B1%2C%5Cfrac%7Bp(z%5E)Q_%7Bz%5E%5Cto%20z%7D%7D%7Bp(z)Q%7Bz%5Cto%20z%5E*%7D%7D%5C%7D%0A#card=math&code=%5Calpha%28z%2Cz%5E%2A%29%3D%5Cmin%5C%7B1%2C%5Cfrac%7Bp%28z%5E%2A%29Q%7Bz%5E%2A%5Cto%20z%7D%7D%7Bp%28z%29Q_%7Bz%5Cto%20z%5E%2A%7D%7D%5C%7D%0A)
则
%5Ccdot%20Q%7Bz%5Cto%20z%5E%7D%5Calpha(z%2Cz%5E)%3D%5Cmin%5C%7Bp(z)Q%7Bz%5Cto%20z%5E%7D%2Cp(z%5E)Q%7Bz%5E%5Cto%20z%7D%5C%7D%3Dp(z%5E)%5Ccdot%20Q%7Bz%5E%5Cto%20z%7D%5Calpha(z%5E%2Cz)%0A#card=math&code=p%28z%29%5Ccdot%20Q%7Bz%5Cto%20z%5E%2A%7D%5Calpha%28z%2Cz%5E%2A%29%3D%5Cmin%5C%7Bp%28z%29Q%7Bz%5Cto%20z%5E%2A%7D%2Cp%28z%5E%2A%29Q%7Bz%5E%2A%5Cto%20z%7D%5C%7D%3Dp%28z%5E%2A%29%5Ccdot%20Q%7Bz%5E%2A%5Cto%20z%7D%5Calpha%28z%5E%2A%2Cz%29%0A)
于是,迭代就得到了序列,这个算法叫做 Metropolis-Hastings 算法:
- 通过在0,1之间均匀分布取点
- 生成 #card=math&code=z%5E%2A%5Csim%20Q%28z%5E%2A%7Cz%5E%7Bi-1%7D%29)
- 计算 值
- 如果 ,则 ,否则
这样取的样本就服从 %3D%5Cfrac%7B%5Chat%7Bp%7D(z)%7D%7Bz_p%7D%5Csim%20%5Chat%7Bp%7D(z)#card=math&code=p%28z%29%3D%5Cfrac%7B%5Chat%7Bp%7D%28z%29%7D%7Bz_p%7D%5Csim%20%5Chat%7Bp%7D%28z%29)。
下面介绍另一种采样方式 Gibbs 采样,如果 的维度非常高,那么通过固定被采样的维度其余的维度来简化采样过程:#card=math&code=zi%5Csim%20p%28z_i%7Cz%7B-i%7D%29):
- 给定初始值
- 在 时刻,采样 #card=math&code=zi%5E%7Bt%2B1%7D%5Csim%20p%28z_i%7Cz%7B-i%7D%29),从第一个维度一个个采样。
Gibbs 采样方法是一种特殊的 MH 采样,可以计算 Gibbs 采样的接受率:
Q%7Bz%5E*%5Cto%20z%7D%7D%7Bp(z)Q%7Bz%5Cto%20z%5E%7D%7D%3D%5Cfrac%7Bp(z_i%5E%7Cz%5E_%7B-i%7D)p(z%5E%7B-i%7D)p(z_i%7Cz%7B-i%7D%5E)%7D%7Bp(zi%7Cz%7B-i%7D)p(z_%7B-i%7D)p(z_i%5E%7Cz%7B-i%7D)%7D%0A#card=math&code=%5Cfrac%7Bp%28z%5E%2A%29Q%7Bz%5E%2A%5Cto%20z%7D%7D%7Bp%28z%29Q%7Bz%5Cto%20z%5E%2A%7D%7D%3D%5Cfrac%7Bp%28z_i%5E%2A%7Cz%5E%2A%7B-i%7D%29p%28z%5E%2A%7B-i%7D%29p%28z_i%7Cz%7B-i%7D%5E%2A%29%7D%7Bp%28zi%7Cz%7B-i%7D%29p%28z%7B-i%7D%29p%28z_i%5E%2A%7Cz%7B-i%7D%29%7D%0A)
对于每个 Gibbs 采样步骤,,这是由于每个维度 采样的时候,其余的参量保持不变。所以上式为1。于是 Gibbs 采样过程中,相当于找到了一个步骤,使得所有的接受率为 1。
平稳分布
定义随机矩阵:
这个矩阵每一行或者每一列的和都是1。随机矩阵的特征值都小于等于1。假设只有一个特征值为 。于是在马尔可夫过程中:
%3D%5Csum%5Climits%7Bi%3D1%7D%5EKq%5Et(x%3Di)Q%7Bij%7D%5C%5C%0A%5CRightarrow%20q%5E%7Bt%2B1%7D%3Dq%5Et%5Ccdot%20Q%3Dq%5E1Q%5Et%0A#card=math&code=q%5E%7Bt%2B1%7D%28x%3Dj%29%3D%5Csum%5Climits%7Bi%3D1%7D%5EKq%5Et%28x%3Di%29Q%7Bij%7D%5C%5C%0A%5CRightarrow%20q%5E%7Bt%2B1%7D%3Dq%5Et%5Ccdot%20Q%3Dq%5E1Q%5Et%0A)
于是有:
如果 足够大,那么,#card=math&code=%5CLambda%5Em%3Ddiag%280%2C0%2C%5Ccdots%2C1%2C%5Ccdots%2C0%29),则: ,则趋于平稳分布了。马尔可夫链可能具有平稳分布的性质,所以我们可以构建马尔可夫链使其平稳分布收敛于需要的概率分布(设计转移矩阵)。
在采样过程中,需要经历一定的时间(燃烧期/混合时间)才能达到平稳分布。但是 MCMC 方法有一些问题:
- 无法判断是否已经收敛
- 燃烧期过长(维度太高,并且维度之间有关,可能无法采样到某些维度),例如在 GMM 中,可能无法采样到某些峰。于是在一些模型中,需要对隐变量之间的关系作出约束,如 RBM 假设隐变量之间无关。
- 样本之间一定是有相关性的,如果每个时刻都取一个点,那么每个样本一定和前一个相关,这可以通过间隔一段时间采样。