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

为何Gen.jl的@gen模型中使用观测值列表能提升MH收敛效果?

问题:单观测vs多观测下Gen中MH采样的收敛差异

在Gen框架中,我们对比了两个高度模型的Metropolis-Hastings(MH)采样结果,发现收敛效果差异显著:

单观测模型

@gen function height_model()
    mu = @trace(normal(178, 20), :mu)
    sigma = @trace(uniform(0, 50), :sigma)
    @trace(normal(mu, sigma), :h)
end

该模型仅生成一个观测值:h,MH采样的后验结果完全偏离真实观测值。

多观测模型

@gen function height_model(n)
    mu = @trace(normal(178, 20), :mu)
    sigma = @trace(uniform(0, 50), :sigma)

    for i=1:n
        @trace(normal(mu, sigma), "h-$i")
    end
end

该模型生成n个观测值,MH采样的后验结果更贴近真实观测值。

共用推理程序

两个模型使用完全相同的MH推理代码:

function do_mcmc_inference(model, args, xs, iters)
    observations = choicemap()

    for (i, x) in enumerate(xs)
        observations["h-$i"] = x
    end

    # 生成受约束的初始轨迹
    (trace, _) = generate(model, args, observations)

    # 迭代MH采样
    for i=1:iters
        (trace, _) = metropolis_hastings(trace, Gen.select(:mu)) 
        (trace, _) = metropolis_hastings(trace, Gen.select(:sigma))
    end

    # 提取最终的mu和sigma
    choices = get_choices(trace)

    return (choices[:mu], choices[:sigma])
end

请问为何会出现这种后验收敛效果的差异?


原因分析

  • 观测信息量的约束强度差异:单观测提供的信息极其有限,无法有效缩小mu和sigma的后验取值范围。单个观测值可以由大量不同的mu、sigma组合生成,MH采样在这种模糊的后验空间中容易随机游走,难以收敛到真实参数。而多观测通过多个数据点的联合约束,大幅压缩了参数的合理取值区间,后验分布更尖锐,采样更容易锁定高概率区域。

  • MH采样的接受率反馈效率:单观测场景下,对mu或sigma的提议更新,其生成观测值的概率变化不显著,导致接受率要么过高(随机游走)要么过低(难以探索),无法有效引导采样向真实值靠近。多观测时,参数的微小变动会导致多个观测值的联合似然出现明显变化,MH的接受率能准确反馈参数是否更优,采样的方向性更强,收敛速度和准确性自然提升。

  • 初始轨迹的修正难度:单观测下,若初始轨迹的参数偏离真实值,有限的观测信息无法快速引导采样修正;多观测的初始轨迹即使有偏差,多个数据点的联合似然会快速将采样拉向高概率参数区域,减少了随机游走的可能性。

内容的提问来源于stack exchange,提问作者Hewarathna Ashen Iranga

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 22:57:38