---
title: "神经后验的校准与模型失配互动实验｜Sandbox Physics"
description: "神经网络算出的后验，怎样知道能不能信？先在大量真值已知的模拟数据上检验它。"
canonical_url: "https://sandboxphysics.com/zh/labs/neural-posterior-calibration/"
language: "zh-CN"
page_type: "lab"
alternate_languages:
  en: "https://sandboxphysics.com/labs/neural-posterior-calibration/"
last_modified: "2026-11-14"
---

# 神经后验的校准与模型失配

**神经网络算出的后验，怎样知道能不能信？** 先在大量真值已知的模拟数据上检验它。如果它给出的 90% 区域大约九成时候都套住真值，它对这类数据就是校准的。真实数据仍可能带着模拟器从没产生过的噪声或信号，那时连精确后验也会偏，所以还要单独检验数据本身合不合模型。

给合成的振荡记录调噪声、加入模型里没有的信号，看冻结的神经后验和精确后验什么时候不再套住真值。

> 交互仿真：在浏览器中打开本页，即可调整参数并运行模型。

模型假设

记录是合成的白化应变：一个振幅和相位已知的衰减正弦，4096 Hz 采样 128 点，叠加水平已知的高斯白噪声。先验在频率 200 到 300 Hz、衰减时间 2 到 10 毫秒上均匀。精确后验在这个模型下用两级 64 乘 64 网格算出。神经网络是五分量混合密度网络，离线用 3070 万条模型正确的模拟训练，噪声水平 0.15 到 0.6；浏览器只运行冻结的权重。泛音、毛刺和噪声偏强这几种情形是教学设定，不是 Kerr 泛音，也不是探测器噪声模型。实时覆盖率统计的是同一个源在不同噪声下的结果；离线图对从先验抽取的源求平均。这里不使用真实探测器数据。

青色：精确网格后验 琥珀色：冻结的神经后验 白色：注入源或名义值

两项检查都没有标出这条记录。

两种后验把源放在哪里

实线为 90% 区域，虚线为 50%，点为网络抽样。拖动白色标记可移动源。

真源落在区域内的频率

同一个源、不断更换噪声。浅色带是诚实的 90% 区域应有的正常波动；选中预设时，右端短点线是保存的 400 条记录参考值。

对整个先验的离线校准

离线情形：噪声在训练范围内，没有失配。

更多数值与离线排名检验

- **实时计数中的记录数**
- **最优信噪比**
- **两种后验的 Jensen–Shannon 散度 · 奈特**
- **精确后验频率均值 · 赫兹**
- **神经后验频率均值 · 赫兹**
- **精确后验衰减时间均值 · 毫秒**
- **神经后验衰减时间均值 · 毫秒**
- **记录里实际的噪声水平**

神经网络的基于模拟校准

2000 个从先验抽取的源，真值在 99 个网络抽样中的排名。实心柱为频率，空心柱为衰减时间，灰带是均匀排名的 99% 范围。

训练：30.7 百万条模拟，23198 个权重，单个 CPU 约 7 分钟。冻结权重 SHA-256 bb213976acf54c96…

## 后验出错的三种方式

**背景** 一段衰减正弦在带噪声的合成数据里振荡。精确网格计算和用模拟训练的神经网络，各自从每条新记录估计它的频率和衰减时间。

**为什么值得理解** 神经后验快到几秒就能分析一次引力波事件，所以在依赖它之前，得先把它会在哪里出错找出来。

- **核心问题**: 看起来很清楚的后验，什么时候不再说实话？
- **一句话直觉**: 在模拟上校准，检验的是网络和模型是否一致；要检验模型本身，必须拿数据来检验。

### 核心数学模型

#### 源参数的 Bayes 定理

$$
p(\theta\mid d)=\frac{p(d\mid\theta)\,p(\theta)}{p(d)}
$$

精确后验由假定模型的似然和先验给出。

#### 高斯白噪声似然

$$
\ln p(d\mid\theta)=-\frac{1}{2\sigma^2}\sum_{k}\bigl[d_k-h_k(\theta)\bigr]^2+\text{const}
$$

每个采样点的噪声独立、标准差相同；网格对每个候选源算这个和。

#### 90% 区域的覆盖率

$$
\Pr\bigl[\theta^{\ast}\in R_{0.9}(d)\bigr]\approx0.9
$$

校准良好的后验，90% 区域大约十条记录里有九条套住真源。

### 常见难点

#### 似然算得再准，也救不了错的模型

**容易误解** 只要网络和精确后验一致，答案就一定对。

**正确理解** 两种后验用的是同一个假定模型。记录里有模型没有的信号时，它们可以彼此一致，却一起偏离真源。

### 动手实验

1. 01

   #### 看比例稳定下来

   从“训练范围内”开始，让新记录持续生成半分钟。

   **你会看到：** 两条比例线都在 0.9 附近的浅色带内起伏。这里两种后验都校准良好，参数平面上青色和琥珀色区域重合。

2. 02

   #### 走出训练范围

   选择“比训练数据更干净”，或把噪声带边缘拖到 0.15 以下。

   **你会看到：** 精确后验仍在 0.9 附近，网络的比例掉得很低，重要性采样效率也接近零。效率骤降就是警告信号。

3. 03

   #### 让两种分析都看不见一个信号

   依次选择“藏着的第二模式”和“记录里的毛刺”，看效率和残差检验。

   **你会看到：** 两种后验套不住真源的次数都超过十分之一。效率仍然很高，因为网络和假定模型依旧一致。残差检验能抓到毛刺，却很少抓到第二模式：拟合把它吸收进了频率和衰减时间的偏移里。

物理结论

拿精确答案检验网络，拿数据检验模型。

## 相关实验与文章

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

### 从后验到校准，再到模型失配

这条阅读路径里用到本实验的文章，后面跟着它们推荐的其他实验。

1. [文章 **神经网络给出的漂亮后验，怎样证明可以相信**](https://sandboxphysics.com/zh/stories/simulation-based-inference/trusting-a-neural-posterior/)
2. [文章 **后验分布与 90% 可信区域到底保证什么**](https://sandboxphysics.com/zh/stories/simulation-based-inference/posterior-and-credible-regions/)
3. [文章 **用秩统计和覆盖率检查后验是否校准**](https://sandboxphysics.com/zh/stories/simulation-based-inference/rank-tests-for-posterior-calibration/)
4. [文章 **用重要性权重和残差检验找出错误的模拟器**](https://sandboxphysics.com/zh/stories/simulation-based-inference/model-mismatch-and-importance-weights/)
5. [文章 **动手复算振铃后验的校准检验**](https://sandboxphysics.com/zh/stories/simulation-based-inference/recompute-the-ringdown-calibration/)
6. [文章 **读懂 DINGO 论文里的 P–P 图、散度和采样效率**](https://sandboxphysics.com/zh/stories/simulation-based-inference/reading-dingo-calibration-evidence/)

场、流体与物质 · 入门路径

## 从电场到电子显微镜

先看懂电场、学会操控带电粒子，再算出电子的波长，用电子束观察晶体和表面。

[从这里开始 → **看见电场** 在偶极子周围移动探针，看电场是不是总指向电势地形的下坡方向。 观察 · 8 分钟](https://sandboxphysics.com/zh/labs/electric-field/)

1. [1 看见电场](https://sandboxphysics.com/zh/labs/electric-field/)
2. [2 电荷在场中转弯](https://sandboxphysics.com/zh/labs/charged-particle/)
3. [3 电子波长与加速电压](https://sandboxphysics.com/zh/labs/electron-wavelength/)
4. [4 电子衍射与倒空间](https://sandboxphysics.com/zh/labs/electron-diffraction/)
5. [5 TEM 明场、暗场与选区衍射](https://sandboxphysics.com/zh/labs/tem-mode-selector/)
6. [6 SEM 二次电子表面形貌](https://sandboxphysics.com/zh/labs/sem-topography/)

[查看完整路径 →](https://sandboxphysics.com/zh/topics/fields-and-matter/#starter-path)
