You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用emcee两次生成样本结果完全相同的技术疑问

emcee重复采样得到完全相同样本的原因及解决方法

问题背景

使用emcee基于同一概率函数两次生成样本时,若使用相同初始状态(包括burn-in后的状态),两次采样得到的样本完全一致;仅当初始状态不同时,样本才会有差异。原本认为随机采样应得到不同结果,对此产生疑惑。

复现代码及结果

初始状态相同时的代码:

import emcee
import numpy as np

NWALKERS = 32
NDIM = 2
NSAMPLES = 1000

def ln_gaussian(x):
    # mu = 0, cov = 1
    a = (2*np.pi)** -0.5
    return np.log(a * np.exp(-0.5 * np.dot(x,x)))

p0 = np.random.rand(NWALKERS, NDIM)
sampler1 = emcee.EnsembleSampler(NWALKERS, NDIM, ln_gaussian)
sampler2 = emcee.EnsembleSampler(NWALKERS, NDIM, ln_gaussian)

state1 = sampler1.run_mcmc(p0, 100) # burn in
state2 = sampler2.run_mcmc(p0, 100) # burn in

sampler1.reset()
sampler2.reset()

# run sampler 1k times (x32 walkers)
sampler1.run_mcmc(state1, NSAMPLES)
sampler2.run_mcmc(state2, NSAMPLES)
s1 = sampler1.get_chain(flat=True)
s2 = sampler2.get_chain(flat=True)

s1 - s2

输出结果(所有元素为0):

array([[0., 0.],
       [0., 0.],
       [0., 0.],
       ...,
       [0., 0.],
       [0., 0.],
       [0., 0.]])

当初始状态不同时:

p0 = np.random.rand(NWALKERS, NDIM)
p1 = np.random.rand(NWALKERS, NDIM)

输出结果(元素非零):

array([[-0.70474519, -0.09671908],
       [-0.31555036, -0.33661664],
       [ 0.75735537,  0.01540277],
       ...,
       [ 2.84810783, -2.11736446],
       [-0.55164227, -0.26478868],
       [ 0.01301593, -1.76233017]])

原因分析

MCMC采样的“随机性”完全依赖于随机数生成器(RNG)的输出序列,而emcee的EnsembleSampler默认会使用相同的RNG起点:

  • 当两个采样器从完全相同的初始状态(包括walker的位置、采样器内部的RNG状态)启动时,每一步的随机提议、接受判断逻辑都会完全一致,最终生成的采样路径和样本自然完全相同。
  • 代码中state1和state2不仅存储了burn-in后的walker位置,还包含了采样器当前的RNG状态。因此后续用这两个状态启动采样时,RNG会从相同的位置开始生成随机数,导致结果完全重合。

解决方法

要让两次采样得到不同结果,只需确保两个采样器使用不同的随机种子,有两种常见方式:

1. 初始化采样器时指定不同seed

sampler1 = emcee.EnsembleSampler(NWALKERS, NDIM, ln_gaussian, seed=42)
sampler2 = emcee.EnsembleSampler(NWALKERS, NDIM, ln_gaussian, seed=123)

2. 初始化前重置numpy随机种子

np.random.seed(42)
sampler1 = emcee.EnsembleSampler(NWALKERS, NDIM, ln_gaussian)

np.random.seed(123)
sampler2 = emcee.EnsembleSampler(NWALKERS, NDIM, ln_gaussian)

内容的提问来源于stack exchange,提问作者Glance

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 12:24:24