跳到主要内容

时间上的概率推理与概率编程 — 滤波、HMM 与开宇宙

这一章讲三件事: 给贝叶斯网络加上时间轴要哪些假设; 雨伞世界怎么一步步算出「今天下雨的概率 0.75」; 以及连「世界里有几个对象」都不确定时,模型怎么写。 读完你会看到第 4 章的信念状态升级成概率版——每一步都带着数。

1. 这一章讲什么

第 4 章的信念状态是一张「可能状态清单」;本章给每个状态配上信念度。 建模套路:把世界切成等间隔的时间片,每片有不可观测的状态变量 X_t 和 可观测的证据变量 E_t;转移模型 P(X_t|X_{t−1}) 说世界怎么动, 传感器模型 P(E_t|X_t) 说证据怎么来1

贯穿全章的走查是雨伞世界:地下室的保安看不见天气, 唯一的证据是每天早上主管带没带伞。状态 R_t(下雨),证据 U_t(带伞)2

2. 顶层全景

两大假设把无限历史砍成有限依赖:
马尔可夫假设 P(X_t|X_0:t−1) = P(X_t|X_{t−1})
传感器马尔可夫 P(E_t|X_0:t, E_1:t−1) = P(E_t|X_t)
(再加时间齐次:参数对所有 t 相同)

四大推断任务:
滤波 P(X_t|e_1:t) f_{1:t+1}=Forward(f_{1:t}, e_{t+1})
预测 P(X_{t+k}|e_1:t) 只用转移模型;收敛到平稳分布
平滑 P(X_k|e_1:t) 前向消息 × 后向消息
最可能解释 argmax 维特比:把求和换成 max

三种打包:HMM(离散,矩阵)· 卡尔曼滤波(连续,高斯)· DBN(稀疏,任意分布)

概率编程:RPM(对象已知)→ OUPM(对象数量/身份不确定)

图说:上半是假设与任务,中段是三种「打包方式」,底部把「对象不确定」 这一关也补上。

3. 核心原理

3.1 主走查:雨伞世界的两步滤波

滤波的任务是 P(X_t|e_1:t)。它有递归形式:先预测,再更新—— f_{1:t+1} = α·P(e_{t+1}|X_{t+1})·Σ_{x_t}P(X_{t+1}|x_t)·f_{1:t}(x_t)。 存储与每步时间都是常数,不需要重放全部历史3

代入雨伞世界的数字。先验 P(R0)=〈0.5,0.5〉;转移 P(R_t|R_{t−1}):雨→雨 0.7,晴→雨 0.3;传感器:雨→带伞 0.9,晴→带伞 0.2。

第 1 天(带伞):预测 〈0.5×0.7+0.5×0.3, 0.5×0.3+0.5×0.7〉=〈0.5,0.5〉
更新 α〈0.5×0.9, 0.5×0.2〉= α〈0.45,0.10〉 = 〈0.818,0.182〉
第 2 天(带伞):预测 〈0.818×0.7+0.182×0.3, …〉=〈0.627,0.373〉
更新 α〈0.627×0.9, 0.373×0.2〉= α〈0.565,0.075〉≈〈0.883,0.117〉

(参数取自原书图 14-2;书里给的答案是:第一天后约 2/3,第二天后约 7/8 ——连着两天带伞,下雨的信念从 0.5 涨到 0.75 方向的 0.883。)4

预测就是「不更新证据的滤波」;一直往前推,分布会收敛到转移模型的 平稳分布〈0.5,0.5〉——模型不确定性越大,混合时间越短, 对未来的预测越快「失明」5

平滑给过去打补丁:P(X_k|e_1:t) 拆成前向消息(证据 1..k)与 后向消息(证据 k+1..t)的逐点乘积;后向递归从空证据的 1 开始倒着跑6

最可能解释(维特比)与滤波的唯一差别:把递归里的求和换成 max, 另存每个状态的最优前驱,最后回溯——雨伞序列 [true,true,false,true,true] 的最可能路径就这样读出来7

3.2 三种打包:HMM、卡尔曼、DBN

HMM:一个状态变量+一个证据变量,转移和传感器都是矩阵, 前向-后向全变成矩阵乘法8卡尔曼滤波:连续状态+线性高斯, 后验永远是单个高斯分布(一个「凸起」)。

更新是均值/方差(波动幅度)的解析式。

局限也来自这里——非线性(不成直线比例)的世界要靠线性化(扩展卡尔曼)硬凑9

DBN(动态贝叶斯网络):每个时间片放任意多个状态/证据变量。 它和 HMM 互相可表示,但稀疏性天差地别:n 个 d 值变量、 每个至多 k 个父节点,HMM 的转移矩阵要 O(d^{2n}) 个数,DBN 只要 O(nd^k)。 书里的账:真空机器人 42 个可能脏的位置,从 5×10^29 个参数降到几千个10。 另一个直白的例子:「我的钥匙在哪」是口袋/床头柜/门上/车里几个离散峰, 单个高斯凸起会给「前花园半空中」分出显著概率——离散+连续混合才合理11。 推断时把 DBN 沿时间展开(unroll),变量消元做成「滚雪球」; 够大就上粒子滤波(采样+按似然权重重采样),第 17 章的机器人定位是它的主场12

3.3 传感器坏了怎么办:一个必讲的工程故事

电池机器人连续 20 次读数为 5(满电),第 21、22 次突然读 0。 朴素高斯误差模型会怎么想?「读 0 的概率远大于电池瞬间耗尽的概率」—— 于是它认定电池耗尽,机器人在 t=22 发出求救并关机;第 23 天读数恢复 5, 它又若无其事地认为「电池从没缺过电」。书里的教训一句话: 要让系统扛住传感器故障,传感器模型必须包含故障的可能性13

两级补丁:瞬时故障模型——给「传感器返回完全离谱的值」留一个固定概率 (如 P(BMeter=0|Battery=5)=0.03),信念于是有了「惯性」;持续故障模型—— 加一个 BMBroken 变量,持久边给小故障率(0.001),一旦坏了就一直坏。 两个模型同跑,瞬时故障与持续故障都能被正确归因14

3.4 概率编程:对象不确定时

第 9 章的贝叶斯网络假设变量清单是固定的。**关系概率模型(RPM)**把它升级为 「按类型与函数签名生成基本随机变量」:图书推荐域里, Honest(c)、Kindness(c)、Quality(b)、Recommendation(c,b) 各有一份先验或依赖声明; 10 亿顾客、1000 万本书,世界有 ~10^70×10 个,模型却不到 300 个参数15。 推断靠「落地」成等价贝叶斯网络,再用相关性片段与缓存加速16

真实世界再补一刀:存在不确定(这本书有几个 ISBN?这个登录 ID 是人吗?) 与身份不确定(两条引用是同一篇论文吗?)——书里举了女巫攻击: 一个不诚实的客户有几千个 ID17开宇宙概率模型(OUPM)的答案是 数字语句:#Customer ∼ UniformInt(1,3); #LoginID(Owner=c) ∼ if Honest(c) then Exactly(1) else UniformInt(2,5); 无界数量用泊松分布(均值 λ、方差也是 λ——蚂蚁 100 万只, 标准差只有 1000,即 0.1%)18。推断用 MCMC,但状态之间的迁移 不只改变量取值,还能增删对象;无限世界用「部分世界」采样, 只展开证据与查询的祖先19

4. 作者的判断与证据

  • (书内推导) 滤波的递归形式与雨伞走查全部由模型参数推出, 无一实测成分34

  • (书内经验规律) 「转移模型的不确定性越大,混合时间越短, 长期预测越注定失败」——带习题支撑的经验结论5

  • (作者的工程判断) 电池故事是本章的道德剧:错误不在算法, 在传感器模型缺了故障假设——「最微不足道的问题往往是测量噪声」13

  • (作者的坦白) 半监督(少量带答案的样例+大量不带答案的样例)学习「尚未在实践中被广泛证明有效」(第 21 章同款判断)。

    减少标签依赖有两条正路:一条是无监督式的生成模型(自己造数据、不靠人打标签)。

    另一条是迁移学习(先在大任务上练、再搬到小任务)20

5. 边界与局限

  • 一阶马尔可夫是近似:机器人电池耗尽让速度变化带上系统性偏移, 解法是把 Battery 塞进状态——「自给自足」的状态变量集靠对领域物理的理解21
  • 卡尔曼滤波的多峰后验(走廊两侧)无解,只能换粒子滤波。
  • DBN 精确推断=展开后做变量消元,树宽照旧封顶。
  • OUPM 的良构性(无循环依赖、无无限祖先链)一般不可判定,只有语法充分条件22

6. 可带走的

  1. 两条假设(马尔可夫+传感器马尔可夫)+时间齐次=时序模型的全部地基。
  2. 滤波是「预测+更新」两步;常量时间常量空间,这是它配当在线算法的资格证。
  3. 预测的终点是平稳分布:超过混合时间的预测基本是先验的回声。
  4. 维特比=滤波把求和换成 max;多一个 argmax 存储,多一个「最可能故事」。
  5. 参数量(要学的数值个数)对比口诀:HMM 指数、DBN 线性——把状态拆成变量就是省参数。
  6. 传感器模型里永远给「故障」留概率;信念需要惯性。
  7. 模型里先写「数量语句」再写依赖:对象本身是随机变量。

7. 原文地图

主题原书章原文位置
时间片/Δ14.1.1text/10-fm.txt:14988(搜「时间片」)
雨伞世界14.1.1text/10-fm.txt:15000(搜「雨伞」)
马尔可夫假设14.1.2text/10-fm.txt:15038(搜「马尔可夫假设」)
传感器马尔可夫14.1.2text/10-fm.txt:15044(搜「传感器马尔可夫」)
联合分布三件套14.1.2text/10-fm.txt:13428(搜「先验概率分布」)
提高精度两法14.1.2text/10-fm.txt:15077(搜「阶数」)
电池恢复马尔可夫性14.1.2text/10-fm.txt:15093(搜「Batteryt」)
四大推断任务14.2text/10-fm.txt:15100(搜「滤波」)
滤波递归14.2.1text/10-fm.txt:15139(搜「递归估计」)
雨伞两步走查14.2.1text/10-fm.txt:15165(搜「0.5, 0.5」) · text/10-fm.txt:15174(搜「增加了」)
平稳分布14.2.1text/10-fm.txt:15186(搜「平稳分布」)
平滑14.2.2text/10-fm.txt:15204(搜「平滑」)
维特比14.2.3text/10-fm.txt:15308(搜「维特比」)
HMM14.3text/10-fm.txt:15349(搜「隐马尔可夫模型」)
卡尔曼14.4text/10-fm.txt:15515(搜「卡尔曼滤波器」)
DBN 定义14.5text/10-fm.txt:15698(搜「动态贝叶斯网络」)
稀疏性 5×10^2914.5text/10-fm.txt:15719(搜「5×1029」)
钥匙多峰14.5text/10-fm.txt:15726(搜「钥匙」)
电池瞬时故障14.5.1text/10-fm.txt:15763(搜「瞬时故障」) · text/10-fm.txt:15780(搜「寓意」)
持续故障模型14.5.1text/10-fm.txt:15803(搜「持续性」) · text/10-fm.txt:13557(搜「0.001」)
粒子滤波14.5.3text/10-fm.txt:15893(搜「粒子滤波」)
RPM 图书推荐15.1.1text/10-fm.txt:16174(搜「网上图书零售商」) · text/10-fm.txt:16223(搜「RecCPT」)
300 个参数15.1.1text/10-fm.txt:16234(搜「300 个参数」)
TrueSkill15.1.2text/10-fm.txt:16294(搜「TrueSkill」)
存在/身份不确定15.2text/10-fm.txt:16360(搜「身份不确定性」) · text/10-fm.txt:16360(搜「身份不确定性」)
数字语句15.2.1text/10-fm.txt:16393(搜「UniformInt」)
泊松15.2.1text/10-fm.txt:16402(搜「泊松分布」)
对象=生成历史15.2.1text/10-fm.txt:16412(搜「生成历史」)
引文匹配15.2.3text/10-fm.txt:16485(搜「引文匹配」)
文本生成程序15.4text/10-fm.txt:16726(搜「文本阅读」)

Footnotes

  1. 出处:「时间上的概率推理」第 14988 段(text/10-fm.txt:14988,搜「时间片」)与 第 15017 段(text/10-fm.txt:15017,搜「转移模型」)。

  2. 出处:「时间上的概率推理」第 15000 段(text/10-fm.txt:15000,搜「雨伞」)。

  3. 出处:「时间上的概率推理」第 15139 段(text/10-fm.txt:15139,搜「递归估计」)与 第 15160 段(text/10-fm.txt:15160,搜「常量」)。 2

  4. 出处:「时间上的概率推理」第 15165 段(text/10-fm.txt:15165,搜「0.5, 0.5」)与 第 15174 段(text/10-fm.txt:15174,搜「增加了」)。 参数(0.7/0.3 与 0.9/0.2)在图 14-2。 2

  5. 出处:「时间上的概率推理」第 15186 段(text/10-fm.txt:15186,搜「平稳分布」)。 2

  6. 出处:「时间上的概率推理」第 3392 段(text/10-fm.txt:3392,搜「后向」)。

  7. 出处:「时间上的概率推理」第 15308 段(text/10-fm.txt:15308,搜「维特比」)。

  8. 出处:「时间上的概率推理」第 15349 段(text/10-fm.txt:15349,搜「隐马尔可夫模型」)。

  9. 出处:「时间上的概率推理」第 15515 段(text/10-fm.txt:15515,搜「卡尔曼滤波器」)。

  10. 出处:「时间上的概率推理」第 15719 段(text/10-fm.txt:15719,搜「5×1029」)。

  11. 出处:「时间上的概率推理」第 15726 段(text/10-fm.txt:15726,搜「钥匙」)。

  12. 出处:「时间上的概率推理」第 15893 段(text/10-fm.txt:15893,搜「粒子滤波」)。

  13. 出处:「时间上的概率推理」第 15763 段(text/10-fm.txt:15763,搜「瞬时故障」)、 第 15773 段(text/10-fm.txt:15773,搜「神奇地」)与 第 15780 段(text/10-fm.txt:15780,搜「寓意」)。 2

  14. 出处:「时间上的概率推理」第 15783 段(text/10-fm.txt:15783,搜「0.03」)与 第 13557 段(text/10-fm.txt:13557,搜「0.001」)。

  15. 出处:「概率编程」第 16234 段(text/10-fm.txt:16234,搜「300 个参数」)。

  16. 出处:「概率编程」第 16312 段(text/10-fm.txt:16312,搜「落地」)。

  17. 出处:「概率编程」第 16356 段(text/10-fm.txt:16356,搜「女巫」)。

  18. 出处:「概率编程」第 16393 段(text/10-fm.txt:16393,搜「UniformInt」)与 第 16402 段(text/10-fm.txt:16402,搜「泊松分布」)。

  19. 出处:「概率编程」第 2238 段(text/10-fm.txt:2238,搜「部分世界」)。

  20. 出处:「深度学习」第 24872 段(text/10-fm.txt:24872,搜「半监督」)。

  21. 出处:「时间上的概率推理」第 15085 段(text/10-fm.txt:15085,搜「自给自足」)。

  22. 出处:「概率编程」第 3943 段(text/10-fm.txt:3943,搜「不可判定」)。