跳到主要内容
Sandbox Physics
从模拟里学到的后验能不能信

用秩统计和覆盖率检查后验是否校准

Sandbox Physics ·

从先验里抽一个真值,生成数据,再从后验里抽样,数一数有几个样本比真值小。后验精确时,这个数(叫作秩)取每个可能值的机会都一样。把几千次模拟的秩画成直方图,应该是平的。中间鼓包说明后验太宽,两头翘起成凹槽说明太窄,整体倾斜说明后验偏到了一边。

本章接着 后验分布与 90% 可信区域到底保证什么,沿用同一个共轭高斯模型。新用到的工具是二项分布和卡方检验,用到时再介绍。文中数字都来自 方法教程 里保存的那次运行。

精确后验的秩为什么是均匀的

模拟校准(SBC)把下面四步重复 NN 次。

  1. 从先验 p(θ)p(\theta) 抽一个真值 θ~\tilde\theta。
  2. 按似然 p(y∣θ~)p(y\mid\tilde\theta) 生成数据 y~\tilde y。
  3. 从待检验的后验 q(θ∣y~)q(\theta\mid\tilde y) 抽 LL 个样本 θ1,…,θL\theta_1,\dots,\theta_L。
  4. 记下秩 r=#{ℓ:θℓ<θ~}r=\#\{\ell:\theta_\ell<\tilde\theta\},它是 00 到 LL 之间的整数。

(θ~,y~)(\tilde\theta,\tilde y) 这一对是从 p(θ) p(y∣θ)p(\theta)\,p(y\mid\theta) 抽出来的。由贝叶斯定理,它等于 p(y) p(θ∣y)p(y)\,p(\theta\mid y),所以给定 y~\tilde y 以后,真值本身就是从精确后验里抽的一个样本。如果 qq 就是精确后验,那么 θ~,θ1,…,θL\tilde\theta,\theta_1,\dots,\theta_L 是同一个连续分布的 L+1L+1 个独立样本,任何一种排列顺序都同样可能,真值排在 L+1L+1 个位置中的哪一个,机会都相等:

Pr⁡(r=k)=1L+1,k=0,1,…,L.\Pr(r=k)=\frac{1}{L+1},\qquad k=0,1,\dots,L .

这是 Talts 等人整套方法的核心结论。Talts 等,2018,第 4.1 节 论证里没用到后验必须是正态、参数必须只有一个;实际使用时一次检验一个参数。

每根柱子该有多高

保存的那次运行取 N=4000N=4000 次模拟、L=99L=99 个样本,秩一共有 100 种可能。每五个秩并成一根柱子,就是 20 根。后验精确时,每次模拟落进某根柱子的概率是 1/201/20,各次互不相干,所以一根柱子的计数 cc 服从 4000 次试验、成功概率 0.050.05 的二项分布,均值和标准差分别是

⟨c⟩=4000×0.05=200,σc=4000×0.05×0.95≃13.8.\langle c\rangle=4000\times0.05=200,\qquad \sigma_c=\sqrt{4000\times0.05\times0.95}\simeq13.8 .

这个二项分布中间 99% 的范围是 165165 到 236236。Talts 等人把这条带画在直方图后面。单单一根柱子出了带,并不说明什么:20 根柱子里,精确后验也有不小的机会偏出一根。要整体判断,可以算卡方统计量

X2=∑b=120(cb−200)2200,X^2=\sum_{b=1}^{20}\frac{(c_b-200)^2}{200},

cbc_b 是第 bb 根柱子的计数。直方图平的时候,X2X^2 服从自由度为 19 的卡方分布;尾部概率很小,就是警告。

警告也会碰巧出现。保存的那次运行里,精确后验自己就得到 X2=36.5X^2=36.5,尾部概率 0.00930.0093,有两根柱子出了带。这次结果原样保留,没有换随机种子重跑。另做了一项研究,把整个实验独立重复 200 次:在 1% 的门槛下,精确后验被标出 2 次,和门槛本身许诺的 1% 误报率差不多;下面每一种错误的后验,200 次全被标出。

从形状读出毛病

保存的运行拿四种故意做错的后验和精确后验对比。错误的后验也都是正态分布,所以不必模拟,就能预先算出它们的秩直方图。令 z=(θ~−μ)/vz=(\tilde\theta-\mu)/\sqrt v,即以精确后验的标准差为单位量出的真值,zz 服从标准正态分布;错误后验里比真值小的那部分比例,是 zz 的一个已知函数。中心对、宽度乘了 kk 的后验,这个比例是 u(z)=Φ(z/k)u(z)=\Phi(z/k),秩就服从成功概率为 u(z)u(z) 的二项分布。

表 3.1 共轭高斯检验里的错误后验,n=4n=4、s=1s=1、N=4000N=4000、L=99L=99。
后验直方图形状落在 99% 带外的柱子数90% 中央区间覆盖率(模拟)90% 中央区间覆盖率(预测)
精确平220.9140.9140.9000.900
整体上移半个标准差向右下降的斜坡15150.8640.8640.8580.858
宽度乘 1.51.5鼓包15150.9880.9880.9860.986
宽度乘 0.60.6凹槽16160.6850.6850.6760.676
先验标准差取 0.50.5凹槽15150.7040.7040.7020.702

窄后验的预测覆盖率一行就能算出。它的 90% 区间离中心最远 1.645×0.6≃0.9871.645\times0.6\simeq0.987 个精确标准差,而 zz 服从标准正态,所以覆盖率是 2Φ(0.987)−1≃0.6762\Phi(0.987)-1\simeq0.676。宽后验换成 1.645×1.51.645\times1.5,同样算得 0.9860.986。

每种形状都能直接读懂。后验太窄,真值常常落在所有样本之外,秩就堆到两头的柱子里,成了凹槽。后验太宽,几乎总把真值围在中间,秩聚到中部,成了鼓包。后验整体上移,大多数样本都比真值大,小的秩就多。后验用的先验比生成数据用的先验更窄,就会往零收缩得过头,结果也偏窄,同样给出凹槽。Talts 等人在一个用了过窄先验的回归模型里,看到的正是这种凹槽。Talts 等,2018,第 4.2 节和第 6.1 节

每个水平上的期望覆盖率

秩直方图一次只看一个参数。Hermans 等人定义的期望覆盖率改用后验自己的最高密度区域,因此能检验几个参数的联合分布。对每一对模拟出来的真值和数据,找出恰好把真值包进去的最高密度区域,记下它的可信水平 α\alpha。后验校准时,α\alpha 在零到一之间均匀分布,于是对任何水平,α\alpha 低于它的模拟所占的比例就等于这个水平。曲线落在对角线下方,说明区域画得过于自信。Hermans 等,2022,第 2 节

Lab 里冻结的神经后验沿用 Papamakarios 和 Murray 的混合密度做法。它学习合成振铃的双参数后验:网络输出若干高斯分量之和,只用模拟出来的“源—记录”对训练。Papamakarios 与 Murray,2016 从先验里重新抽 2000 个源来考它,它的 90% 联合区域罩住真实源的比例是 0.8970.897,和精确网格后验一样。秩检验的尾部概率,频率是 0.4620.462,衰减时间是 0.8000.800。

对先验求平均会漏掉什么

上面每项检验,都是对从先验里抽出的源取平均。平均值里能藏住三种毛病。

第一种,一维的每一块都对,联合分布却错了。搭建 Lab 的时候,网络的抽样程序在控制频率与衰减时间相关性的那一项上写错了。秩检验照样通过,尾部概率是 0.4620.462 和 0.7810.781。直接比较抽样结果的矩和密度函数本身的矩,才把它抓出来:两者相差 0.2230.223,修好以后只差 0.00380.0038。

第二种,后验根本不看数据。如果 q(θ∣y)q(\theta\mid y) 直接交回先验,真值和样本又成了同一个分布的独立样本,秩完全是平的。秩检验查的是校准,不查后验够不够窄。

第三种,平均下来对,参数空间某个角落却不对。把 400 次模拟一组的检验按噪声水平分开,就能看出校准是不是在整个训练范围里都成立。

表 3.2 训练范围各部分里网络 90% 区域的覆盖率,每组 400 条合成记录。
子集网络精确网格
噪声水平 0.150.15 到 0.250.250.8980.8980.9030.903
噪声水平 0.250.25 到 0.40.40.9150.9150.9150.915
噪声水平 0.40.4 到 0.60.60.9030.9030.9100.910
衰减时间 22 到 33 毫秒0.9400.9400.9250.925

400 条记录时,覆盖率在 0.90.9 附近的标准误约为 0.9×0.1/400=0.015\sqrt{0.9\times0.1/400}=0.015。四行都和 0.90.9 相符,彼此之间也只差两三个标准误以内;而且每一行里,网络都紧跟着精确网格。

Lab 任务

打开 神经后验 Lab,展开数据行下方的离线秩检验。

  1. 预测:如果网络是精确的,每个参数的 20 根柱子里,你预计有几根落在 99% 带外?然后数一数。
  2. 比较:换到“微弱短促的振荡”,等累计覆盖率稳定后读数。这是网络的毛病,还是精确后验在靠近先验边缘的固定源上本来就有的性质?
  3. 解释:为什么训练条件下的离线曲线在每个水平上都贴着对角线,而一个固定源的累计曲线却可以低于 0.90.9?

练习

  1. N=1000N=1000 次模拟、20 根柱子,后验精确时一根柱子计数的均值和标准差各是多少?
  2. 一个后验宽度正确,但中心偏低半个标准差。秩直方图哪一头会堆高?
  3. 为什么秩直方图是平的,还不足以说明后验有用?
答案
  1. 每根柱子服从 1000 次试验、概率 0.050.05 的二项分布。均值是 5050,标准差是 1000×0.05×0.95≃6.9\sqrt{1000\times0.05\times0.95}\simeq6.9。Talts 等人建议每根柱子至少约 20 次模拟,所以 1000 次模拟最多分 50 根左右。
  2. 现在大多数样本都比真值小,秩通常很大,高的一头堆起来,成了向右上升的斜坡,正好是表 3.1 里上移那一行的镜像。
  3. 先验本身就能通过这项检验,因为对数据取平均后,精确后验就回到先验。有用的后验还得在数据有信息量的地方足够窄,这要靠另一种量度,比如区域宽度,或者真值处对数密度的平均值。

来源

  1. Talts 等,2018,第 4.1 节
  2. Hermans 等,2022,第 2 节
  3. Papamakarios 与 Murray,2016

继续阅读

这一页直接连着哪些内容

从模拟里学到的后验能不能信 · 阅读路径

从后验到校准,再到模型失配

  1. 文章神经网络给出的漂亮后验,怎样证明可以相信
  2. 文章后验分布与 90% 可信区域到底保证什么
  3. 当前页面用秩统计和覆盖率检查后验是否校准
  4. 文章用重要性权重和残差检验找出错误的模拟器
  5. 文章动手复算振铃后验的校准检验
  6. 文章读懂 DINGO 论文里的 P–P 图、散度和采样效率
这个页面有错误、看不明白,或者缺了什么?告诉我们
反馈类型

提交时会附带本页地址、Lab ID、网站语言和设备类型。请不要填写个人信息。反馈最多保存 12 个月。隐私政策