强化学习3——基本概念:状态、动作、状态转移、条件概率

文章目录

一、前言

参考资料:

1.赵世钰《强化学习的数学原理》

GitHub仓库:https://github.com/MathFoundationRL/Book-Mathematical-Foundation-of-Reinforcement-Learning

注:书中有更加易懂和完善的内容,这里只是笔记性质。

二、基本概念

1.1 一个网格世界的例子

考虑如图1.2所示的例子,其中一个机器人在网格世界中移动。该机器人,被称为agent,可以在网格中相邻的单元格之间移动。在每个时间步,它只能占据一个单元格。白色单元格可以进入,橙色单元格禁止进入。有一个目标单元格,机器人想要到达

智能体的最终目标是找到一个"好的"策略,使其能够从任何初始单元格出发到达目标单元格。如何定义策略的"好坏"? 核心思想是智能体应该在不进入任何禁入单元格、不绕不必要的弯路或不与网格边界碰撞的情况下到达目标。

如果智能体知道网格世界的地图,那么规划一条到达目标单元格的路径将是微不足道的。如果智能体事先不知道任何关于环境的信息,那么这项任务就变得不平凡了。然后,智能体必须通过试错法与环境互动,以找到一个好的策略。

图1.2 网格世界

1.2 状态与动作(State and action)

图1.3 状态和动作概念的图示

状态 :智能体的位置。九个状态分别表示为: s 1 , s 2 , . . . , s 9 s_1, s_2, . . . , s_9 s1,s2,...,s9
状态空间 :所有状态的集合。表示为: S = { s 1 , . . . , s 9 } \mathcal{S} = \{s_1, . . . , s_9\} S={s1,...,s9}
动作 :对于每个状态,智能体可以采取五种可能的动作:向上移动、向右移动、向下移动、向左移动和保持静止。表示为: a 1 , a 2 , . . . , a 5 a_1, a_2, . . . , a_5 a1,a2,...,a5
动作空间 :所有动作的集合。表示为: A = { a 1 , a 2 , . . . , a 5 } \mathcal{A} = \{a_1, a_2, . . . , a_5\} A={a1,a2,...,a5}

:不同的状态可以有不同的动作空间。例如,考虑到在状态 s 1 s_1 s1中采取 va_1v或 a 4 a_4 a4会导致与边界碰撞,我们可以将状态 s1的动作空间设置为 A ( s 1 ) = { a 2 , a 3 , a 5 } \mathcal{A}(s_1)= \{a_2, a_3, a_5\} A(s1)={a2,a3,a5}。在本书中,我们考虑最一般的情况:对于所有的 i i i, A ( s i ) = A = { a 1 , . . . , a 5 } \mathcal{A}(s_i)= \mathcal{A}= \{a_1, . . . , a_5\} A(si)=A={a1,...,a5}。

1.3 状态转移(State and action)

表1.1 状态转移过程的表格表示。每个单元格表示智能体在某个状态下采取行动后将转移到的下一个状态。

状态转移 :智能体采取行动后可能会从一个状态转移到另一个状态。例如,如果智能体处于状态 s 1 s_1 s1并选择动作 a 2 a_2 a2(即向右移动),那么智能体将移动到状态 s 2 s_2 s2。表示为 s 1 → a 2 s 2 . s_1 \xrightarrow{a_2} s_2. s1a2 s2.

:此时我们正在考虑一个模拟任务,因此我们可以根据自己的偏好定义状态转移过程,比如在 s 1 s_1 s1采取 a 1 a_1 a1之后是被弹回到原地的 s 1 s_1 s1,还是说能穿墙到另一边(表中示例是弹回到原地),比如从 s 5 s_5 s5采取 a 2 a_2 a2之后是被弹回还是能进入橙色的禁区(表中示例是能进入,不过应该后面谈到reward的时候应该会说它进入禁区会受到惩罚)。在实际应用中,状态转移过程由真实世界的动力学决定。

在数学上,状态转移过程可以用条件概率 来描述。例如,对于 s 1 s_1 s1和 a 2 a_2 a2,条件概率分布
p ( s 1 ∣ s 1 , a 2 ) = 0 , p ( s 2 ∣ s 1 , a 2 ) = 1 , p ( s 3 ∣ s 1 , a 2 ) = 0 , p ( s 4 ∣ s 1 , a 2 ) = 0 , p ( s 5 ∣ s 1 , a 2 ) = 0. \begin{aligned} p(s_1 \mid s_1, a_2) &= 0,\\ p(s_2 \mid s_1, a_2) &= 1,\\ p(s_3 \mid s_1, a_2) &= 0,\\ p(s_4 \mid s_1, a_2) &= 0,\\ p(s_5 \mid s_1, a_2) &= 0. \end{aligned} p(s1∣s1,a2)p(s2∣s1,a2)p(s3∣s1,a2)p(s4∣s1,a2)p(s5∣s1,a2)=0,=1,=0,=0,=0.

这表明,在 s 1 s_1 s1采取 a 2 a_2 a2时,智能体移动到 s 2 s_2 s2的概率为1,而智能体移动到其他状态的概率为零。因此,在 s 1 s_1 s1采取行动 a 2 a_2 a2肯定会导致智能体转移到 s 2 s_2 s2。 条件概率的预备知识在附录A中给出

尽管表格表示法很直观,但它只能描述确定性的状态转移。一般来说,状态转移可以是随机的,并且必须由条件概率分布来描述 。例如,当随机一阵风施加于网格上时,如果在 s 1 s_1 s1处采取行动 a 2 a_2 a2,智能体可能会被吹到 s 5 s_5 s5而不是 s 2 s_2 s2。在这种情况下,我们有 p ( s 5 ∣ s 1 , a 2 ) > 0 p(s_5|s_1, a_2)> 0 p(s5∣s1,a2)>0。尽管如此,为了本书的简洁性,我们仅在网格世界示例中考虑确定性的状态转移。

附录A

随机变量

Random variable: The term "variable" indicates that a random variable can take values from a set of numbers. The term "random" indicates that taking a value must follow a probability distribution.

A random variable is usually denoted by a capital letter. Its value is usually denoted by a lowercase letter. For example, X is a random variable**, and x is a value that X can take.

This book mainly considers the case where a random variable can only take a finite number of values. A random variable can be a scalar or a vector.

Like normal variables, random variables have normal mathematical operations such as summation, product, and absolute value. For example, if X, Y are two random variables, we can calculate X + Y , X + 1, and XY .

随机过程

A stochastic sequence is a sequence of random variables.

One scenario we often encounter is collecting a stochastic sampling sequence { x i } i = 1 n \{x_i\}^n_{i=1} {xi}i=1n of a random variable X. For example, consider the task of tossing a die n times . Let xi be a random variable representing the value obtained for the ith toss. Then, x 1 , x 2 , . . . , x n {x_1, x_2, . . . , x_n} x1,x2,...,xn is a stochastic process.

the task of tossing a die n times:将一颗骰子投掷 n 次的任务

representing the value obtained for the ith toss.:它代表(从)第 i 次投掷(中)所获得的数值。

obtained:被获得的(过去分词作定语,修饰 value)

for the ith toss:对于第 i 次投掷

It may be confusing to beginners why xi is a random variable instead of a deterministic value. In fact, if the sampling sequence is {1,6,3,5,...}, then this sequence is not a stochastic sequence because all the elements are already determined. However, if we use a variable xi to represent the values that can possibly be sampled, it is a random variable since xi can take any value in {1, . . . , 6}. Although xi is a lowercase letter, it still represents a random variable.

概率

Probability: The notation p ( X = x ) p(X = x) p(X=x) or p X ( x ) p_X(x) pX(x) describes the probability of the random variable X taking the value x. When the context is clear, p(X = x) is often written as p(x) for short.

联合概率

Joint probability: The notation p ( X = x , Y = y ) p(X = x, Y = y) p(X=x,Y=y) or p ( x , y ) p(x, y) p(x,y) describes the probability of the random variable X taking the value x and Y taking the value y. One useful identity is as follows:

∑ y p ( x , y ) = p ( x ) . \sum_{y} p(x, y) = p(x). y∑p(x,y)=p(x).

条件概率

Conditional probability: The notation p(X = x|A = a) describes the probability of the random variable X taking the value x given that the random variable A has already taken the value a. We often write p(X = x|A = a) as p(x|a) for short.

It holds that

p ( x , a ) = p ( x ∣ a ) p ( a ) p(x,a) = p(x|a)p(a) p(x,a)=p(x∣a)p(a)

and

p ( x ∣ a ) = p ( x , a ) p ( a ) . p(x|a) = \frac{p(x,a)}{p(a)}. p(x∣a)=p(a)p(x,a).

Since p ( x ) = ∑ a p ( x , a ) p(x) = \sum_{a} p(x, a) p(x)=∑ap(x,a), we have

p ( x ) = ∑ a p ( x , a ) = ∑ a p ( x ∣ a ) p ( a ) , p(x) = \sum_{a} p(x, a) = \sum_{a} p(x|a)p(a), p(x)=a∑p(x,a)=a∑p(x∣a)p(a),

which is called the law of total probability.

问题:如何理解条件概率?
先认识三个"主角"

假设我们关心两个随机事件:

  • X :今天是否带伞(取值:x₁=带伞x₂=不带伞
  • A :今天的天气(取值:a₁=下雨a₂=天晴
1. 联合概率   p ( x , a ) p(x,a) p(x,a)

"两者同时发生的概率"

比如:今天既下雨、我又带伞的概率,写作 p ( 带伞 , 下雨 ) p(\text{带伞}, \text{下雨}) p(带伞,下雨)。

2. 边缘概率   p ( a ) p(a) p(a) 或 p ( x ) p(x) p(x)

"只看其中一个变量,不管另一个"的概率

比如:只关心明天下不下雨,不管带不带伞 ------ 这就是 p ( 下雨 ) p(\text{下雨}) p(下雨)。

公式里写的 p ( x ) = ∑ a p ( x , a ) p(x) = \sum_a p(x,a) p(x)=∑ap(x,a),意思就是:把所有"带伞且某天气"的概率加起来,得到的就是"带伞"的总概率。

3. 条件概率  (p(x|a))

"已经知道 A 发生了,再看 X 的概率"

比如:已经确定外面在下雨,这时你带伞的概率会很高,这就是 p ( 带伞 ∣ 下雨 ) p(\text{带伞}|\text{下雨}) p(带伞∣下雨)。


乘法公式:分解"同时发生"

p ( x , a ) = p ( x ∣ a )   p ( a ) p(x,a) = p(x|a)\,p(a) p(x,a)=p(x∣a)p(a)

怎么理解?

"既下雨又带伞"这件事,可以拆成两步想一想:

  1. 先看今天下雨的概率有多大 ------ p ( 下雨 ) p(\text{下雨}) p(下雨);
  2. 如果已经下雨了,带伞的概率有多大 ------ p ( 带伞 ∣ 下雨 ) p(\text{带伞}|\text{下雨}) p(带伞∣下雨)。

两步同时成立,相乘就得到了"又下雨又带伞"的概率。

反过来,把乘法公式移项:

p ( x ∣ a ) = p ( x , a ) p ( a ) p(x|a) = \frac{p(x,a)}{p(a)} p(x∣a)=p(a)p(x,a)

这就是条件概率的定义:用"两者同时发生的比例",把条件事件 a 当成新的"整个世界",重新衡量 x 的发生机会。


全概率公式:从"条件"回到"整体"

p ( x ) = ∑ a p ( x ∣ a )   p ( a ) p(x) = \sum_a p(x|a)\,p(a) p(x)=a∑p(x∣a)p(a)

这是整段话的落脚点。

很多时候,我们没法直接知道 p ( x ) p(x) p(x)(比如总体的带伞率),但很容易知道:

  • 每种天气出现的概率 p ( a ) p(a) p(a);
  • 每种天气下带伞的条件概率 p ( x ∣ a ) p(x|a) p(x∣a)。

全概率公式告诉我们,只要把各种天气情况下的条件概率,按该天气出现的比重加权平均,就能得到总的带伞概率。

用数字举例:

  • 下雨的概率 p ( 雨 ) = 0.3 p(\text{雨}) = 0.3 p(雨)=0.3;下雨时带伞的概率 p ( 带伞 ∣ 雨 ) = 0.9 p(\text{带伞}|\text{雨}) = 0.9 p(带伞∣雨)=0.9
  • 天晴的概率 p ( 晴 ) = 0.7 p(\text{晴}) = 0.7 p(晴)=0.7;天晴时带伞的概率 p ( 带伞 ∣ 晴 ) = 0.1 p(\text{带伞}|\text{晴}) = 0.1 p(带伞∣晴)=0.1

那么随便挑一天,带伞的总概率就是:

p ( 带伞 ) = p ( 带伞 ∣ 雨 )   p ( 雨 ) + p ( 带伞 ∣ 晴 )   p ( 晴 ) = 0.9 × 0.3 + 0.1 × 0.7 = 0.27 + 0.07 = 0.34 \begin{aligned} p(\text{带伞}) &= p(\text{带伞}|\text{雨})\,p(\text{雨}) + p(\text{带伞}|\text{晴})\,p(\text{晴}) \\ &= 0.9 \times 0.3 + 0.1 \times 0.7 \\ &= 0.27 + 0.07 = 0.34 \end{aligned} p(带伞)=p(带伞∣雨)p(雨)+p(带伞∣晴)p(晴)=0.9×0.3+0.1×0.7=0.27+0.07=0.34

这正是 分情况讨论 的思想:

把所有互斥且穷尽的"条件" a a a(比如雨和晴)都考虑到,用它们的概率去加权各自条件下的局部概率,最终拼出完整的全局概率。


一句话总结
  • 乘法公式 p ( x , a ) = p ( x ∣ a ) p ( a ) p(x,a)=p(x|a)p(a) p(x,a)=p(x∣a)p(a):把"同时发生"分解为"先发生 a,再在此基础上发生 x"。
  • 条件概率公式 p ( x ∣ a ) = p ( x , a ) / p ( a ) p(x|a)=p(x,a)/p(a) p(x∣a)=p(x,a)/p(a):把 a 发生后的世界当成新的全集,看 x 在其中占多大比例。
  • 全概率公式 p ( x ) = ∑ a p ( x ∣ a ) p ( a ) p(x)=\sum_a p(x|a)p(a) p(x)=∑ap(x∣a)p(a):想知道 x 的总概率,就按照每种条件 a 的权重,把所有条件下 x 的概率加权求和。

这些关系就像一套"积木":联合概率是完整的方块,条件概率和边缘概率是它的两种拆法,全概率公式则是把它们重新组装回整体的一种技巧。

问题:

条件概率的定义:用"两者同时发生的比例",把条件事件 a 当成新的"整个世界",重新衡量 x 的发生机会。"把 a 发生后的世界当成新的全集,看 x 在其中占多大比例。" ,我感觉这个比喻很拗口,如何理解?

别想"新世界",想"筛选和比例"

我们有一个包含所有可能结果的大池子,比如一个班级的全部学生。池子的总面积代表概率 1。

现在,我们只关注满足条件 A 的那部分人,比如"所有女生"。

条件概率 p ( X ∣ A ) p(X|A) p(X∣A) 问的是:
"在这些女生里,随机抽一个人,她具有特征 X(比如戴眼镜)的比例是多少?"

这个答案显然是:

既是女生又戴眼镜的人数 女生的总人数 \frac{\text{既是女生又戴眼镜的人数}}{\text{女生的总人数}} 女生的总人数既是女生又戴眼镜的人数

如果把"人数"换成"概率"(或者说面积),那就是:

p ( 戴眼镜 ∣ 女生 ) = p ( 戴眼镜 , 女生 ) p ( 女生 ) p(\text{戴眼镜}|\text{女生}) = \frac{p(\text{戴眼镜},\text{女生})}{p(\text{女生})} p(戴眼镜∣女生)=p(女生)p(戴眼镜,女生)


为什么一定要除以 p ( a ) p(a) p(a)?

你可能会问:为什么不能直接用 p ( x , a ) p(x,a) p(x,a) 来代替 p ( x ∣ a ) p(x|a) p(x∣a)?

因为 p ( x , a ) p(x,a) p(x,a) 是在整个大池子里的比例,它被"稀释了"。

比如:

  • 全班 100 人,女生只有 10 人。女生戴眼镜的只有 3 人。
  • p ( 戴眼镜 , 女生 ) = 3 / 100 = 0.03 p(\text{戴眼镜},\text{女生}) = 3/100 = 0.03 p(戴眼镜,女生)=3/100=0.03,这个数字很小,是因为女生本来就少。
  • 但 p ( 戴眼镜 ∣ 女生 ) p(\text{戴眼镜}|\text{女生}) p(戴眼镜∣女生)应该是 3 / 10 = 0.3 3/10 = 0.3 3/10=0.3,这个数字才反映了在女生这个小群体内部的真实比例。

分母 p ( a ) p(a) p(a) 起到的就是去稀释 的作用:

把 p ( x , a ) p(x,a) p(x,a)从"占全体"的比例,拉伸成"占条件组 a"的比例。

除以 p ( a ) p(a) p(a) 本质上就是把 a 的这部分面积重新标定为 1(即 100%),这样在 a 内部的各种情况的概率加起来才会等于 1。

这就像把女生的 10 人圈出来,当成新的"只看女生"的整体,里面的比例自然要按女生的总人数来算。


一张面积图,一看就懂

想象一个大矩形,总面积是 1。

  • 左半边是一个圆,写着 A,面积是 p ( A ) p(A) p(A)。
  • 圆里有一部分阴影,写着 "X 且 A",面积是 p ( X , A ) p(X, A) p(X,A)。

现在,我们把整个大矩形扔掉,眼睛只盯着圆 A 看

我们问:在圆 A 这个范围内,阴影部分占多大比例?

答案不言自明:阴影面积除以圆的面积。

这就是条件概率定义的直观来源:"交集在条件中的占比"。 即在事件A的圆圈里,看交集部分占了多少。

我用"新全集"这个词,想表达的就是"把圆当成现在的全部",但确实不如直接说"在条件 A 的范围内,X 所占的面积比例"来得直接。


一句话回正

所以,你觉得"拗口"的那句,换一种说法就是:

条件概率并不是什么神秘的新定义,它只是在问:当我们把目光锁定在事件 A 已经发生的那些情形时,事件 X 也同时发生的情形在其中占了多大比例。

而公式 p ( x ∣ a ) = p ( x , a ) p ( a ) p(x|a) = \frac{p(x,a)}{p(a)} p(x∣a)=p(a)p(x,a),就是这个"锁定后算比例"的数学写法。

独立性

Independence: Two random variables are independent if the sampling value of one random variable does not affect the other. Mathematically, X and Y are independent if

p ( x , y ) = p ( x ) p ( y ) . p(x,y) = p(x)p(y). p(x,y)=p(x)p(y).

Since p ( x , y ) = p ( x ∣ y ) p ( y ) p(x, y) = p(x|y)p(y) p(x,y)=p(x∣y)p(y), the above equation implies

p ( x ∣ y ) = p ( x ) . p(x|y) = p(x). p(x∣y)=p(x).

条件独立性

Conditional independence: Let X, A, B be three random variables. X is said to be conditionally independent of A given B if

p ( X = x ∣ A = a , B = b ) = p ( X = x ∣ B = b ) . p(X = x | A = a, B = b) = p(X = x | B = b). p(X=x∣A=a,B=b)=p(X=x∣B=b).

In the context of reinforcement learning, consider three consecutive states: s t s_t st , s t + 1 s_{t+1} st+1, s t + 2 s_{t+2} st+2. Since they are obtained consecutively, s t + 2 s_{t+2} st+2 is dependent on s t + 1 s_{t+1} st+1 and also s t s_t st . However, if s t + 1 s_{t+1} st+1 is already given, then s t + 2 s_{t+2} st+2 is conditionally independent of s t s_t st . That is

p ( s t + 2 ∣ s t + 1 , s t ) = p ( s t + 2 ∣ s t + 1 ) . p(s_{t+2}|s_{t+1},s_t) = p(s_{t+2}|s_{t+1}). p(st+2∣st+1,st)=p(st+2∣st+1).

This is also the memoryless property of Markov processes.

问题:如何理解独立性和条件独立性?

我们用信息传递中间人的比喻,就能把独立性和条件独立性看清楚。


一、独立性:两个完全无关的随机事件

定义:

如果知道 Y Y Y 发生了什么,丝毫不影响你对 X X X 的判断,那么 X X X 和 Y Y Y 就是独立的。

数学上的两个等价写法:

  1. 联合概率可以直接分解成边缘概率的乘积: p ( x , y ) = p ( x ) p ( y ) p(x,y)=p(x)p(y) p(x,y)=p(x)p(y)
  2. 条件概率等于无条件概率: p ( x ∣ y ) = p ( x ) p(x|y)=p(x) p(x∣y)=p(x)

举个最典型的例子:

你抛一枚公平硬币,我也同时抛另一枚。

你的结果不影响我的结果。那你抛到正面( X X X)和我抛到正面( Y Y Y)就是独立的。

  • p ( 你正 , 我正 ) = 0.5 × 0.5 = 0.25 p(\text{你正},\text{我正}) = 0.5 \times 0.5 = 0.25 p(你正,我正)=0.5×0.5=0.25
  • 就算已经看到我抛了正面,你抛正面的概率依然是 0.5,没变过。

二、条件独立性:中间人切断信息流

定义:

如果 B B B 已经发生了,那么 A A A 再发生什么,都不会再影响你对 X X X 的判断。

即:

p ( x ∣ a , b ) = p ( x ∣ b ) p(x \mid a, b) = p(x \mid b) p(x∣a,b)=p(x∣b)

等式左边是同时知道了 a a a 和 b b b,右边是只知道 b b b。

这个等式的意思就是:一旦 b b b 给定了, a a a 就是多余的信息 ------它不再能改变你对 x x x 的可能性判断。

经典的生活例子:冰淇淋销量和溺水事件

这两个事件看起来明显正相关 :冰淇淋销量高的时候,溺水事件也往往多。

但它们之间并没有直接的因果关系。其实是有个隐藏的共同原因:天气炎热( B B B)

  • 天热 → 人们爱买冰淇淋( A A A)
  • 天热 → 人们爱去游泳 → 溺水事件增加( X X X)

所以,在你不知道天气时 ,冰淇淋销量 A A A 和溺水事件 X X X 是相关的:得知冰淇淋卖得好,你会猜测天可能很热,从而推断溺水事件可能也多。

一旦你已经知道了"今天天气非常炎热( B B B)"这个事实 ,再告诉你"冰淇淋销量很高( A A A)",就不会再让你调高对溺水事件的预期了

因为天气炎热这个原因已经完全解释了冰淇淋销量和溺水事件之间的关系,额外的 A A A 信息不再提供新的线索。

正式写出来就是:

p ( 溺水多 ∣ 冰淇淋多 , 天热 ) = p ( 溺水多 ∣ 天热 ) p(\text{溺水多} \mid \text{冰淇淋多}, \text{天热}) = p(\text{溺水多} \mid \text{天热}) p(溺水多∣冰淇淋多,天热)=p(溺水多∣天热)

给定 B B B 时, A A A 和 X X X 条件独立


三、强化学习与马尔可夫性质:状态链上的信息阻断

你引用的那段话里,有三个连续状态:

s t → s t + 1 → s t + 2 s_t \rightarrow s_{t+1} \rightarrow s_{t+2} st→st+1→st+2

  • 一般而言, s t + 2 s_{t+2} st+2 既依赖于 s t + 1 s_{t+1} st+1,也依赖于 s t s_t st(因为是连续得到的)。
  • 但是,如果 s t + 1 s_{t+1} st+1 已经给了 ,那么 s t s_t st 就不再提供关于 s t + 2 s_{t+2} st+2 的额外信息:

p ( s t + 2 ∣ s t + 1 , s t ) = p ( s t + 2 ∣ s t + 1 ) p(s_{t+2} \mid s_{t+1}, s_t) = p(s_{t+2} \mid s_{t+1}) p(st+2∣st+1,st)=p(st+2∣st+1)

这就是马尔可夫性质的无记忆性:未来只取决于现在,与过去无关。

直观比喻:下象棋的"马"

想象你在下象棋,马的位置变化:

  • 当前位置是 s t + 1 s_{t+1} st+1(比如在 d4)。
  • 下一位置 s t + 2 s_{t+2} st+2 只由当前位置和走法决定。
  • 至于你是从 c2 跳到 d4,还是从 e6 跳到 d4(这就是历史 s t s_t st),对于预测下一跳去 e6 还是 f3 来说,完全没用

因为所有需要知道的动态信息,已经浓缩在当前状态 s t + 1 s_{t+1} st+1 里了。

这就好像冰淇淋和溺水的例子:天热 B B B 已经解释了所有相关关系,而这里当前状态 s t + 1 s_{t+1} st+1 就是那个"天热",它完全解释了如何从过去过渡到未来。


四、小心一个常犯的误解

条件独立性不等于无条件独立。

在马尔可夫链中, s t + 2 s_{t+2} st+2 和 s t s_t st 通常不是独立的 (如果你不知道 s t + 1 s_{t+1} st+1)。

因为 s t s_t st 会影响 s t + 1 s_{t+1} st+1,而 s t + 1 s_{t+1} st+1 又影响 s t + 2 s_{t+2} st+2,所以 s t s_t st 和 s t + 2 s_{t+2} st+2 之间有统计关联。

只有在你知道了中间状态 s t + 1 s_{t+1} st+1 后,这层关联才被"切断",它们才变成条件独立。

用一个信息管道图来记就很清楚:

复制代码
s_t  ──→ s_{t+1} ──→ s_{t+2}
        ↑ 已知时,左边不再影响右边

这也就是为什么强化学习可以用当前状态来决策,而不用把整个历史背下来------因为中间状态已经包含了所有对未来有用的信息。

问题:如何理解条件独立性这个名字?

我理解了你所说的条件独立性,似乎就是说有一个条件B出现的时候,B对于事件X有更加强的因果关系,所以A不再对于X重要,但是这为什么叫"条件独立性",我没理解这个取名的逻辑

你这个困惑非常到位,因为"条件独立性"这个词如果按字面硬拆,确实容易绕进去。它的命名逻辑其实非常直白,关键在于把"条件 "和"独立性"拆成两截来读。


回顾一个关键顺序:不是"条件独立",是"条件下的独立"

先看无条件独立性的定义:

X 和 Y 独立 ⇔ p(x|y) = p(x)

意思是:在任何情况下,Y 的发生与否都不影响 X 的概率。

再看你刚学的条件独立性定义:

给定 B,X 与 A 条件独立 ⇔ p(x | a, b) = p(x | b)

这个等式的右边是 p(x|b),如果我们暂时把"给定 B"当作背景,把 B 看成固定的已知事实,那这个等式就等价于说:

在 B 已经发生的这个条件世界里,A 和 X 是独立的。

所以,"条件独立性"这个术语,就是"在某个条件下,两个变量之间满足独立性"的意思

全称应该是"以 B 为条件的独立性"(independence conditional on B),缩写成了"条件独立性"(conditional independence)。


用定义来"对齐"一下

把无条件独立性的定义原样照搬到条件概率的世界里:

  • 无条件定义:p(x|a) = p(x)
  • 条件化定义:p(x|a, b) = p(x|b)

你看到没有?第二种就是把所有概率都加上"|b"的后缀,相当于先把整个世界"缩到"B 发生的那块区域,然后要求在这个缩小后的世界里,A 和 X 满足独立性的标准格式。

这就是名字的由来:

  • 无条件 下满足独立性 → 独立
  • 给定 B 的条件 下满足独立性 → 条件独立

为什么会有"多了 B 就不需要 A"的感觉?

你的直觉很准确:B 的出现让 A 变成了多余信息,这恰恰是条件独立性的典型特征,也是它经常被用来表达"中间变量阻断信息流"的原因。

命名没有直接叫"阻断性"或"多余性",而是用了条件独立性 ,是因为数学定义的框架是"独立性"的扩展,而不是全新创设一个概念。

它本质就是在说:把条件 B 固定住之后,A 和 X 在统计上没有关联。

所以拆开念就通了:

  • 条件:给定 B
  • 独立性:A 和 X 独立

不是"条件"与"独立"组合出一个全新的性质,而是"在条件 B 下的(A 与 X 的)独立性"。你一旦这样读,马氏性中的 s t + 2 s_{t+2} st+2 和 s t s_t st 在给定 s t + 1 s_{t+1} st+1 时条件独立,就非常自然------因为那不过是在说"给定现在,过去与未来是独立的"。

问题:过去真的"不重要"了吗?

你怎么看待马尔科夫链,现实世界真的会有这种进入下一个状态之后之前的状态就不再重要了的情况吗?还有条件概率,现实世界真的会多了B就让A成了多余信息吗?事实上每个过去的信息都是有用的吧?为什么会存在有了一个更加重要的信息,不重要的信息就认为是不重要了?

你这个问题提得非常深刻,触及了概率建模最根本的哲学矛盾:模型是对现实的简化,而现实从来不简单。 让我从几个层面来回应。


一、马尔科夫性:过去真的"不重要"了吗?

你质疑得很对:现实中,过去几乎总是有影响的。

比如你走到一个十字路口,你的下一个位置不仅取决于你现在站在哪里,还取决于你原本打算去哪里 (可能来自出发前的规划),甚至取决于五分钟前看到的一家咖啡店(临时转向)。如果只记录物理位置,你的"状态"其实并不包含这些历史信息,那么历史就当然会影响未来。

那么,马尔科夫链的无记忆性为什么还有如此强大的生命力?

关键在于如何定义"状态"

马尔科夫性(给定现在,过去与未来独立)严格来说是一种相对于特定状态定义的性质。现实系统可以变成马尔科夫的,只要你把状态定义得足够充分。

经典名言:"未来独立于过去,仅依赖于现在" ------ 但这完全取决于你把什么放进"现在"

例子:棋类游戏

  • 下象棋时,车在 e4,炮在 h4。你只需要当前棋盘,根本不用管这些棋子是怎么走到这一步的,就足以决定下一步所有合法走法和最优策略。
  • 为什么?因为棋类游戏的状态设计已经编码了所有相关的历史信息:所有棋子的位置、哪方走、是否动过王/车(王车易位权利)、过路兵状态等等。
  • 所以,与其说"过去不重要",不如说:"过去中所有对未来有影响的东西,都已经被压缩到了现在这个状态里。"

反例:视频预测

  • 如果你把状态定义为单帧图像,那么给定当前帧,下一秒会发生什么?仅凭一个画面,你不知道物体的速度和加速度,甚至不知道一个刚消失到画面外的球会不会弹回来。这样,历史帧显然包含了速度、轨迹等额外信息,所以系统不是马尔科夫的。
  • 但是,如果你把状态定义为过去 3 帧,你就编码了速度和加速度,系统就近似马尔科夫了。

所以,现实世界的规律并不是"进入下一个状态后,之前的状态就自动不重要了",而是:

我们可以刻意构建包含足够历史信息的"状态",使得剩余的历史变得多余。

强化学习和动态规划应用马尔科夫决策过程(MDP),正是基于这个前提:状态的定义已经捕获了所有与未来决策有关的信息。 这并非自然界的免费午餐,而是建模者精心设计的结果。


二、条件独立性:多了B,A就真的多余了?

这里的关键词是"对于预测X而言"。

我们回到冰淇淋销量(A)、天气炎热(B)和溺水事件(X)的例子。

  • 你问:"难道冰淇淋销量(A)就完全没有用了吗?现实中我如果知道冰淇淋卖得多,我还是会猜测溺水可能增加啊?"
  • 没错!但这是因为你不知道天气 B 的时候,冰淇淋销量 A 帮你间接推测了天气。它携带了关于 B 的信息,所以对你判断 X 有帮助。
  • 但条件独立性 X \\perp!!!\\perp A \\mid B 说的是:如果你已经精确知道天气炎热这个"直接原因",那么冰淇淋销量不会给你任何关于溺水的额外信息。

换句话说:

A 并不是在所有意义上都多余,它只是相对于 B 来说,不再提供关于 X 的"新"信息。

这可以用信息管道来比喻:

复制代码
A (冰淇淋) ←── B (天热) ──→ X (溺水)

天热是共同源头。A 和 X 之间的统计关联,100% 流经 B。一旦你观测并固定了 B,这条路径就被切断了,A 的波动不再包含关于 X 的新消息。

如果现实中这条管道不完全成立------比如还有一条路径:

复制代码
A (冰淇淋) ←── 另外的因素 C (比如节假日) ──→ X (溺水)

那么给定 B 不等于给定 C,A 仍然可能携带额外信息。这时条件独立性就不成立

因此,条件独立性也是一种建模假设 ,它声明:我们认为 B 已经捕获了 A 和 X 之间的所有共同信息。 在真实世界中,这往往只是近似成立,但在很多问题中,这个近似已经足够好,能让我们把问题大大简化。


三、为什么有了"更重要的信息"就可以把"不重要的"抛掉?

你敏锐地察觉到一个心理上的抵触:

"每个过去的信息都是有用的,凭什么有了一个更强的信息,就认为弱的不重要了?"

这里要分两层理解:

1. 预测意义上,"不重要" = "不再能改变概率"

在概率论中,信息的重要性是相对于已知背景知识而言的。

当你已知 B = 天热,此时 p(X|B) 已经是一个确定的数值(比如溺水概率 0.3)。现在你再告诉我 A = 冰淇淋销量高,条件独立性保证:
p ( X ∣ A , B ) = p ( X ∣ B ) = 0.3 p(X|A, B) = p(X|B) = 0.3 p(X∣A,B)=p(X∣B)=0.3
数字没变 。在这个狭窄的预测任务里,A 确实没有边际贡献。就像你已经知道彩票中奖号码,再有人告诉你"我的幸运数字是7",不会改变你中奖的概率。不是"幸运数字7"本身毫无意义,而是它对于预测中奖号码这件事已经没用了。

2. 实用意义上,"忽略"是为了计算可行

真实世界太过复杂,如果我们坚持使用所有历史信息,模型会爆炸式增长。马尔科夫假设和条件独立性假设是我们强加给世界的简化眼镜。戴上这副眼镜,我们牺牲一定的精度,换来可处理的计算量和可泛化的模型。

就像牛顿力学忽略了相对论和量子效应,但在宏观低速世界,它极其有用。建模的本质就是:

知道哪些信息可以被安全地忽略,而仍能做出足够好的决策。


四、回到你的核心质疑

"现实世界真的会有这种情况吗?"

严格地、数学意义上地,几乎不存在

但在经过精心设计状态、或采纳合理近似的意义上,它极其常见且极其强大

  • 一个棋局状态,把过去压缩得很好,所以马尔科夫性成立。
  • 一个控制系统,如果状态向量包含了位置、速度、加速度,那么更早的历史就可以忽略。
  • 一个因果图,如果关键混杂变量被控制了,那么其他看似相关的因素就会变成条件独立。

所以,这些概念不是描述世界的本来面目,而是我们选择和构建视角的结果。你用"状态"和"条件"去框定世界,世界就会在你框定的范围内呈现出独立性和无记忆性。

你最后的疑问"为什么存在更重要的信息,不重要的就认为不重要了",答案或许是这样的:

在某个特定的决策或预测目标下,如果额外信息无法改变你的信念,无法改变你的最优行动,那么它在这个语境中就是"不重要的"。这并不意味着信息本身没有价值,只是它的价值已经被其它已知信息所覆盖。 认识到这种覆盖关系,正是概率建模赋予我们的一种洞察力:它让我们看清哪些信息是必不可少的,哪些只是嘈杂的回声。

全概率公式

Law of total probability: The law of total probability was already mentioned when we

introduced the concept of conditional probability. Due to its importance, we list it again below:

p ( x ) = ∑ y p ( x , y ) p(x) = \sum_{y} p(x, y) p(x)=y∑p(x,y)

and

p ( x ∣ a ) = ∑ y p ( x , y ∣ a ) . p(x|a) = \sum_{y} p(x, y|a). p(x∣a)=y∑p(x,y∣a).

Chain rule of conditional probability and joint probability. By the definition of conditional probability, we have

p ( a , b ) = p ( a ∣ b ) p ( b ) . p(a,b) = p(a|b)p(b). p(a,b)=p(a∣b)p(b).

This can be extended to

p ( a , b , c ) = p ( a ∣ b , c ) p ( b , c ) = p ( a ∣ b , c ) p ( b ∣ c ) p ( c ) , p(a,b,c) = p(a|b,c)p(b,c) = p(a|b,c)p(b|c)p(c), p(a,b,c)=p(a∣b,c)p(b,c)=p(a∣b,c)p(b∣c)p(c),

and hence p ( a , b , c ) / p ( c ) = p ( a , b ∣ c ) = p ( a ∣ b , c ) p ( b ∣ c ) p(a, b, c)/p(c) = p(a, b|c) = p(a|b, c)p(b|c) p(a,b,c)/p(c)=p(a,b∣c)=p(a∣b,c)p(b∣c). The fact that p ( a , b ∣ c ) = p ( a ∣ b , c ) p ( b ∣ c ) p(a, b|c) = p(a|b, c)p(b|c) p(a,b∣c)=p(a∣b,c)p(b∣c) implies the following property:

p ( x ∣ a ) = ∑ b p ( x , b ∣ a ) = ∑ b p ( x ∣ b , a ) p ( b ∣ a ) . p(x|a) = \sum_{b} p(x,b|a) = \sum_{b} p(x|b,a)p(b|a). p(x∣a)=b∑p(x,b∣a)=b∑p(x∣b,a)p(b∣a).

问题:如何理解?子世界里面的全概率公式和条件概率

这段内容其实是在用更严谨的数学语言,把之前我们讨论过的"拆解"思想系统化。它给出了处理复杂概率问题的两套核心工具:全概率公式(边缘化)链式法则(因式分解)

我们可以像剥洋葱一样,一层一层理解。


一、全概率公式的"完全体":条件版本

你之前学过的全概率公式是:
p ( x ) = ∑ y p ( x , y ) = ∑ y p ( x ∣ y ) p ( y ) p(x) = \sum_y p(x, y) = \sum_y p(x|y) p(y) p(x)=y∑p(x,y)=y∑p(x∣y)p(y)

它的作用是在 "无条件" 的世界里,通过一个中间变量 y y y 把所有情况加总起来,算出 x x x 的总概率。

现在它被扩展到了 "有条件" 的世界:
p ( x ∣ a ) = ∑ y p ( x , y ∣ a ) p(x|a) = \sum_y p(x, y|a) p(x∣a)=y∑p(x,y∣a)

以及
p ( x ∣ a ) = ∑ b p ( x , b ∣ a ) = ∑ b p ( x ∣ b , a ) p ( b ∣ a ) p(x|a) = \sum_b p(x,b|a) = \sum_b p(x|b,a) p(b|a) p(x∣a)=b∑p(x,b∣a)=b∑p(x∣b,a)p(b∣a)

理解的关键:

把" ∣ a |a ∣a"看成一个固定的背景,在这个背景里,原本无条件世界的所有规则都原样适用。

  • 在无条件世界里,我们把所有 y y y 情况下的概率加起来得到 p ( x ) p(x) p(x)。
  • 现在,我们把世界缩小到" a a a 已经发生"的区域,在这个子世界里 ,我们同样可以把所有 b b b 情况下的概率加起来,得到在这个子世界里 x x x 的条件概率 p ( x ∣ a ) p(x|a) p(x∣a)。

公式 p ( x ∣ a ) = ∑ b p ( x ∣ b , a ) p ( b ∣ a ) p(x|a) = \sum_b p(x|b,a) p(b|a) p(x∣a)=∑bp(x∣b,a)p(b∣a) 的直观含义就是:

想知道在 a a a 发生的条件下 x x x 的概率,你可以分两步:先看在 a a a 条件下 b b b 发生的概率 p ( b ∣ a ) p(b|a) p(b∣a),再看在 a a a 和 b b b 都发生的情况下 x x x 的概率,然后对所有可能的 b b b 加权求和。这就像是给"已知 a a a"的这个新世界,又做了一次全概率展开。


二、链式法则:把"同时发生"一层层拆开

链式法则是乘法公式 p ( a , b ) = p ( a ∣ b ) p ( b ) p(a,b) = p(a|b)p(b) p(a,b)=p(a∣b)p(b) 的多变量推广。

三个变量的例子:
p ( a , b , c ) = p ( a ∣ b , c ) ⋅ p ( b ∣ c ) ⋅ p ( c ) p(a,b,c) = p(a|b,c) \cdot p(b|c) \cdot p(c) p(a,b,c)=p(a∣b,c)⋅p(b∣c)⋅p(c)

怎么记?

就像顺着一条因果链或时间线,从后往前(或从前往后)逐步引入条件:

  1. c c c 先发生,概率是 p ( c ) p(c) p(c)。
  2. 在 c c c 发生的条件下, b b b 发生,所以是 p ( b ∣ c ) p(b|c) p(b∣c)。
  3. 在 c c c 和 b b b 都发生的条件下, a a a 发生,所以是 p ( a ∣ b , c ) p(a|b,c) p(a∣b,c)。

将这三步的概率相乘,就得到了三者同时发生的概率。它可以一直延伸到任意多个变量,是处理序列数据、时间序列(比如强化学习中的状态-动作序列)最基础的数学工具。


三、核心推论:条件化的链式与全概率融合

你给出的这段推导,最终要引出的是一个非常重要的恒等式:
p ( x ∣ a ) = ∑ b p ( x , b ∣ a ) = ∑ b p ( x ∣ b , a ) p ( b ∣ a ) p(x|a) = \sum_b p(x,b|a) = \sum_b p(x|b,a)p(b|a) p(x∣a)=b∑p(x,b∣a)=b∑p(x∣b,a)p(b∣a)

这个等式本身是链式法则和全概率公式的结合体。我们来做一遍"看得见"的推导:

  1. 根据条件概率的定义,在条件 a a a 下:
    p ( x , b ∣ a ) = p ( x , b , a ) p ( a ) p(x,b|a) = \frac{p(x,b,a)}{p(a)} p(x,b∣a)=p(a)p(x,b,a)
  2. 同时对分子 p ( x , b , a ) p(x,b,a) p(x,b,a) 连续使用乘法公式(链式法则):
    p ( x , b , a ) = p ( x ∣ b , a ) ⋅ p ( b , a ) = p ( x ∣ b , a ) ⋅ p ( b ∣ a ) ⋅ p ( a ) p(x,b,a) = p(x|b,a) \cdot p(b,a) = p(x|b,a) \cdot p(b|a) \cdot p(a) p(x,b,a)=p(x∣b,a)⋅p(b,a)=p(x∣b,a)⋅p(b∣a)⋅p(a)
  3. 将第二步的结果代入第一步:
    p ( x , b ∣ a ) = p ( x ∣ b , a ) ⋅ p ( b ∣ a ) ⋅ p ( a ) p ( a ) = p ( x ∣ b , a ) p ( b ∣ a ) p(x,b|a) = \frac{p(x|b,a) \cdot p(b|a) \cdot p(a)}{p(a)} = p(x|b,a)p(b|a) p(x,b∣a)=p(a)p(x∣b,a)⋅p(b∣a)⋅p(a)=p(x∣b,a)p(b∣a)
  4. 最后,把 p ( x ∣ a ) p(x|a) p(x∣a) 写成对 b b b 的边缘化求和:
    p ( x ∣ a ) = ∑ b p ( x , b ∣ a ) = ∑ b p ( x ∣ b , a ) p ( b ∣ a ) p(x|a) = \sum_b p(x,b|a) = \sum_b p(x|b,a)p(b|a) p(x∣a)=b∑p(x,b∣a)=b∑p(x∣b,a)p(b∣a)

这个结果非常优美:它告诉我们,任何条件概率都可以通过引入另一个变量 b b b,以"在当前条件 a a a 下, b b b 的概率"为权重,进行加权分解

这其实是贝叶斯推断和很多机器学习模型(如隐马尔可夫模型、卡尔曼滤波)的核心操作:你有一个当前状态 a a a,你想预测 x x x,但中间可以借助一个隐变量 b b b 来建模,只要把所有可能的 b b b 情况加起来就行。


总结:一把瑞士军刀
  • 全概率公式(及其条件版本):让你能把算不了的复杂概率,拆成几个算得了的简单概率的加权和。
  • 链式法则:让你能把一个高维的复杂联合概率,拆成一串简单的条件概率的乘积。
  • 两者的结合 : p ( x ∣ a ) = ∑ b p ( x ∣ b , a ) p ( b ∣ a ) p(x|a) = \sum_b p(x|b,a)p(b|a) p(x∣a)=∑bp(x∣b,a)p(b∣a) 则给了你一个框架:在任何条件背景下,都可以随意引入辅助变量来简化问题。

这些公式不是为了为难你,而是概率论里最精妙的"分解武器"。当你觉得某个概率无从下手时,就想:我能不能加一个中间变量 b b b,然后把它分解成一串好算的条件概率?这就是这些公式存在的意义。

问题:举个例子

我理解了,但是有点抽象,能不能举个例子。还有就是你提到"这其实是贝叶斯推断和很多机器学习模型(如隐马尔可夫模型、卡尔曼滤波)的核心操作",如何理解?

好的,我们用具体数字和故事,把这段抽象公式变成看得见摸得着的推理过程。


一、一个具体例子:生病、症状与检测

想象一个场景:

  • A :你感染了某种病毒(先验条件)。已知在流感季, p ( 感染 ) = 0.1 p(\text{感染}) = 0.1 p(感染)=0.1。
  • B:你是否发烧(中间变量)。
  • X:某项快速检测的结果(阳性/阴性)。

已知医学事实:

  • 如果你感染了,发烧概率很高;即便没感染,也可能因其他原因发烧。
  • 检测的准确率取决于你是否发烧。比如发烧时体内病毒载量高,更容易测出阳性。

具体概率表:

发烧 B 条件概率 p(B|A=感染) p(B|A=未感染)
发烧 0.9 0.2
不发烧 0.1 0.8
检测阳性 X p(X=阳|B, A)
B=发烧, A=感染 0.95
B=发烧, A=未感染 0.30
B=不发烧, A=感染 0.70
B=不发烧, A=未感染 0.02

现在我们想知道:如果已知一个人感染了病毒(A),他检测呈阳性(X)的总概率是多少?

直接应用条件全概率公式

我们要算 p ( X = 阳 ∣ A = 感染 ) p(X=\text{阳} \mid A=\text{感染}) p(X=阳∣A=感染)。直接按照公式:

p ( X ∣ A ) = ∑ B p ( X ∣ B , A ) ⋅ p ( B ∣ A ) p(X|A) = \sum_B p(X \mid B, A) \cdot p(B \mid A) p(X∣A)=B∑p(X∣B,A)⋅p(B∣A)

就在感染人群里,按发烧与否分成两组,分别计算每组内的阳性概率,再乘以该组在感染人群里的占比,然后相加。

  • 感染人群中,发烧比例 p ( B = 发烧 ∣ A ) = 0.9 p(B=\text{发烧} \mid A) = 0.9 p(B=发烧∣A)=0.9,不发烧比例 0.1 0.1 0.1。
  • 发烧且感染时,阳性率 p ( X ∣ B = 发烧 , A ) = 0.95 p(X|B=\text{发烧},A) = 0.95 p(X∣B=发烧,A)=0.95。
  • 不发烧且感染时,阳性率 p ( X ∣ B = 不发烧 , A ) = 0.70 p(X|B=\text{不发烧},A) = 0.70 p(X∣B=不发烧,A)=0.70。

计算:
p ( X ∣ A ) = 0.95 × 0.9 + 0.70 × 0.1 = 0.855 + 0.07 = 0.925 \begin{aligned} p(X|A) &= 0.95 \times 0.9 + 0.70 \times 0.1 \\ &= 0.855 + 0.07 = 0.925 \end{aligned} p(X∣A)=0.95×0.9+0.70×0.1=0.855+0.07=0.925

所以,在已知感染的条件下,不管中间发不发烧,最终检测阳性的概率是 92.5%。

这个例子中,发烧 B 就是那个"辅助变量"。 你不用去管发烧到底怎么影响检测的,你只要把 B 的所有可能情况加权求和,就得到了答案。公式里每一步都是可查可算的简单条件概率。


二、为什么这是贝叶斯推断的核心?

贝叶斯推断要解决的核心问题是:你有一个不可直接观测的变量(比如实际是否感染),你只能拿到相关的观测(比如检测结果、症状),如何倒推原因的概率?

经典贝叶斯公式是:
p ( 感染 ∣ 阳性 ) = p ( 阳性 ∣ 感染 ) p ( 感染 ) p ( 阳性 ) p(\text{感染} \mid \text{阳性}) = \frac{p(\text{阳性} \mid \text{感染}) p(\text{感染})}{p(\text{阳性})} p(感染∣阳性)=p(阳性)p(阳性∣感染)p(感染)

但这里通常有个困难:似然 p ( 阳性 ∣ 感染 ) p(\text{阳性} \mid \text{感染}) p(阳性∣感染) 和边缘似然 p ( 阳性 ) p(\text{阳性}) p(阳性) 往往不是直接已知的,而是依赖其他中间生理变量(比如发烧、抗体水平等)。这时你就必须引入隐变量 B 来分解

p ( 阳性 ∣ 感染 ) = ∑ B p ( 阳性 ∣ B , 感染 ) p ( B ∣ 感染 ) p(\text{阳性} \mid \text{感染}) = \sum_B p(\text{阳性} \mid B, \text{感染}) p(B \mid \text{感染}) p(阳性∣感染)=B∑p(阳性∣B,感染)p(B∣感染)

这就是我们刚才算的那一步。而边缘似然 p ( 阳性 ) p(\text{阳性}) p(阳性) 本身也要对感染状态和隐变量双重求和:
p ( 阳性 ) = ∑ 感染 ∑ B p ( 阳性 ∣ B , 感染 ) p ( B ∣ 感染 ) p ( 感染 ) p(\text{阳性}) = \sum_{\text{感染}} \sum_B p(\text{阳性} \mid B, \text{感染}) p(B \mid \text{感染}) p(\text{感染}) p(阳性)=感染∑B∑p(阳性∣B,感染)p(B∣感染)p(感染)

你看,这个双重求和里反复使用的,正是条件全概率展开链式法则。现代贝叶斯模型的推断引擎,本质上就是在更复杂的图模型上,机械地执行这种"把所有未知中间变量可能取值都加权求和"的操作。


三、在隐马尔可夫模型(HMM)里

隐马尔可夫模型用于时间序列,比如语音识别、词性标注。它的核心假设:

  • 有一个隐藏的状态序列 s 1 , s 2 , . . . , s T s_1, s_2, ..., s_T s1,s2,...,sT(比如真实的词性)。
  • 我们只能观测到 o 1 , o 2 , . . . , o T o_1, o_2, ..., o_T o1,o2,...,oT(比如句子里的词)。
  • 状态转移满足马尔科夫性: p ( s t ∣ s t − 1 , 更早历史 ) = p ( s t ∣ s t − 1 ) p(s_t \mid s_{t-1}, \text{更早历史}) = p(s_t \mid s_{t-1}) p(st∣st−1,更早历史)=p(st∣st−1)。
  • 观测只依赖于当前状态: p ( o t ∣ s t , 其他 ) = p ( o t ∣ s t ) p(o_t \mid s_t, \text{其他}) = p(o_t \mid s_t) p(ot∣st,其他)=p(ot∣st)。

那么,给定一个观测序列,我们想知道某个时刻 t t t 处于某个状态的概率,即 p ( s t ∣ o 1 , . . . , o T ) p(s_t \mid o_1, ..., o_T) p(st∣o1,...,oT)。这就是著名的"前向-后向算法"。

前向算法 就是递归地计算 p ( s t , o 1 , . . . , o t ) p(s_t, o_1, ..., o_t) p(st,o1,...,ot),每一步都在做条件全概率展开
p ( s t , o 1 : t ) = ∑ s t − 1 p ( s t ∣ s t − 1 )   p ( o t ∣ s t )   p ( s t − 1 , o 1 : t − 1 ) p(s_t, o_{1:t}) = \sum_{s_{t-1}} p(s_t \mid s_{t-1}) \, p(o_t \mid s_t) \, p(s_{t-1}, o_{1:t-1}) p(st,o1:t)=st−1∑p(st∣st−1)p(ot∣st)p(st−1,o1:t−1)

这里引入的中间变量是 s t − 1 s_{t-1} st−1(上一个隐藏状态),然后对它的所有可能值加权求和。这和我们刚才用"发烧"来分解"检测阳性"在逻辑上完全一样,只是沿着时间链重复操作。

所以,HMM 的整个推理过程,就是链式法则(把联合概率拆成转移概率×发射概率)和条件全概率(在时间轴上递归边缘化)的反复编织


四、在卡尔曼滤波里

卡尔曼滤波处理的是连续状态空间和高斯噪声。即便没有离散的"求和",思想也是完全对应的。

系统模型:

  • 状态转移: s t = F s t − 1 + 噪声 s_t = F s_{t-1} + \text{噪声} st=Fst−1+噪声
  • 观测: o t = H s t + 噪声 o_t = H s_t + \text{噪声} ot=Hst+噪声

滤波有两个步骤:

  1. 预测步骤 :给定截至 t − 1 t-1 t−1 的观测,预测 t t t 时刻状态的分布 p ( s t ∣ o 1 : t − 1 ) p(s_t \mid o_{1:t-1}) p(st∣o1:t−1)。

    这用的是全概率展开 的连续版本(积分):
    p ( s t ∣ o 1 : t − 1 ) = ∫ p ( s t ∣ s t − 1 )   p ( s t − 1 ∣ o 1 : t − 1 )   d s t − 1 p(s_t \mid o_{1:t-1}) = \int p(s_t \mid s_{t-1}) \, p(s_{t-1} \mid o_{1:t-1}) \, ds_{t-1} p(st∣o1:t−1)=∫p(st∣st−1)p(st−1∣o1:t−1)dst−1

    中间的隐变量就是 s t − 1 s_{t-1} st−1,加权求和变成了积分。

  2. 更新步骤 :拿到新观测 o t o_t ot 后,用贝叶斯公式折叠入新信息:
    p ( s t ∣ o 1 : t ) ∝ p ( o t ∣ s t )   p ( s t ∣ o 1 : t − 1 ) p(s_t \mid o_{1:t}) \propto p(o_t \mid s_t) \, p(s_t \mid o_{1:t-1}) p(st∣o1:t)∝p(ot∣st)p(st∣o1:t−1)

    这本质就是在条件 o 1 : t − 1 o_{1:t-1} o1:t−1 下,用链式法则分解联合概率,再加条件化。

所以,卡尔曼滤波的每个时间步都是**"预测 = 条件全概率展开" + "更新 = 贝叶斯条件化"**,两者根基就是你刚学的这两套公式。


总结一句话

你问"如何理解这些是核心操作"------

因为这些模型处理的都是部分可观测的系统,你必须不断地在已知观测的条件下,对隐藏变量进行猜测、更新、预测。而实现这个"猜测"的数学燃料,就是:

  • 链式法则:把复杂的联合分布拆成容易建模的条件分布的乘积;
  • 条件全概率公式:把难求的预测概率,分解成所有可能中间状态的加权平均。

这就像你有一副拼图,链式法则告诉你拼图块可以怎样拆成更小的块,而条件全概率公式则让你能把所有拼法都攒在一起,算出整幅图画的样子。

问题:

我现在理解大概是怎么回事,你看看我的理解对不对,简单来说就是"套娃式的分类讨论"

联合概率相加表示全概率: x x x可以分为 n n n种情况,每种情况是一个子世界,子世界 a 1 a_1 a1导致了x,子世界 a 2 a_2 a2导致了x...所有情况相加就得到了发生x的概率。 p ( x ) = ∑ a p ( x , a ) p(x) = \sum_{a} p(x, a) p(x)=a∑p(x,a)

用条件概率表示联合概率:子世界a在大世界里面发生的概率(圆a占矩形X的面积p(a)) * a发生情况下x发生的概率(圆a中有x的部分所占的比例p(x|a)) = a发生了且x发生的概率
p ( x , a ) = p ( x ∣ a ) p ( a ) p(x,a) = p(x|a)p(a) p(x,a)=p(x∣a)p(a)

全概率:所有子世界发生的概率相加,p(a)可以看做权重
p ( x ) = ∑ a p ( x , a ) = ∑ a p ( x ∣ a ) p ( a ) p(x) = \sum_{a} p(x, a) = \sum_{a} p(x|a)p(a) p(x)=a∑p(x,a)=a∑p(x∣a)p(a)

子世界a下的全概率: 假设我们无法直接知道a和x的关系,假设子世界a已经发生,引入中间的子世界b,实际上就是在子世界a里面(a已经发生)考虑有多种可能的b,将每种子世界b发生的可能加起来,从而获取到了a和x的关系。
p ( x ∣ a ) = ∑ b p ( x , b ∣ a ) = ∑ b p ( x ∣ b , a ) p ( b ∣ a ) p(x|a) = \sum_b p(x,b|a) = \sum_b p(x|b,a) p(b|a) p(x∣a)=b∑p(x,b∣a)=b∑p(x∣b,a)p(b∣a)

但是我还是没理解你上面的贝叶斯推断的核心、隐马尔可夫模型、卡尔曼滤波

回答:

你的理解完全正确,而且你用"套娃式的分类讨论"来比喻,非常精准。

  • 全概率:把所有可能的子世界(y)里的情况加起来,得到总概率。
  • 乘法公式:把一个子世界里的"联合事件"拆成"发生的权重" × "该条件下的概率"。
  • 条件全概率:在某个子世界(a)已经发生的前提下,在里面再开一层套娃,对更细的子世界(b)做加权求和。

抓住了这个套娃结构,你已经抓住了这些公式的灵魂。


为什么你还是觉得贝叶斯、HMM、卡尔曼滤波没理解透?

因为你可能还没有看到"套娃"在上面这些场景里具体是怎么打开和合上的。它们本质上只是把套娃用在了更动态、更复杂的问题上。我接着用你最熟悉的"子世界"比喻,把它们串起来。


一、贝叶斯推断:把套娃"倒过来"开

你手里的公式是"从原因推结果":已知感染,求阳性的概率。这是正向套娃

但现实中,我们往往先看到结果 (检测阳性),想知道原因 (到底感染没)。这是逆向推理

贝叶斯公式就是在做这件事:
p ( 感染 ∣ 阳性 ) = p ( 阳性 ∣ 感染 ) p ( 感染 ) p ( 阳性 ) p(\text{感染} \mid \text{阳性}) = \frac{p(\text{阳性} \mid \text{感染}) p(\text{感染})}{p(\text{阳性})} p(感染∣阳性)=p(阳性)p(阳性∣感染)p(感染)

现在看分母 p ( 阳性 ) p(\text{阳性}) p(阳性)。我们没法直接知道"全体人群中阳性总概率",因为它混合了感染者和未感染者。单层套娃直接给不出答案。

套娃解法:

我们把"阳性"这个总结果,从原因这个维度撕开

  • 子世界1:感染的人(概率 0.1),里面阳性的概率是 0.925
  • 子世界2:未感染的人(概率 0.9),里面阳性的概率是多少?(假设我们算出来是 0.1)

然后,开一层套娃求和
p ( 阳性 ) = p ( 阳性 ∣ 感染 ) p ( 感染 ) + p ( 阳性 ∣ 未感染 ) p ( 未感染 ) p(\text{阳性}) = p(\text{阳性}|\text{感染})p(\text{感染}) + p(\text{阳性}|\text{未感染})p(\text{未感染}) p(阳性)=p(阳性∣感染)p(感染)+p(阳性∣未感染)p(未感染)

你看,这就是你最熟悉的全概率公式!

贝叶斯推断的核心操作就是:

看到结果 X 后,想推原因 A 的概率,就把结果 X 的总概率用"在所有可能的原因子世界里的概率"加权求和(开套娃),然后看"原因 A 导致的 X"在这堆套娃里占了多大比例。

更复杂的模型(比如有中间变量 B)只不过是多开几层套娃 。比如分母 p ( X ) p(X) p(X) 需要先按 B 拆,再按 A 拆,公式就变成了你之前看到的双重求和。但核心思想就是这一件事。


二、隐马尔可夫模型(HMM):在时间线上连续开套娃

现在加入时间。你想根据一个观测序列 (比如今、昨、前天的股价涨跌),推测背后隐藏的市场状态(牛市/熊市)。

假设:

  • 不知道真实状态(牛市/熊市),只能看到每天的涨跌。
  • 状态会变:今天牛市,明天可能变熊市。
  • 观测只取决于今天的状态。

现在问题:在知道了这三天的涨跌后,今天处于牛市的概率是多少?

这需要算一个叫 p ( 今天的隐藏状态 , 三天所有观测 ) p(\text{今天的隐藏状态}, \text{三天所有观测}) p(今天的隐藏状态,三天所有观测) 的东西,叫前向概率。

套娃解法(前向算法)

我们沿着时间往前推,每一天都把前一天的"所有可能状态"当成一层套娃:

  1. 第一天:直接算"第一天状态为牛市,且第一天涨"的概率。这没有历史,不用开套娃。
  2. 第二天 :想知道"第二天状态为牛市,且第一天涨、第二天跌"的概率。
    • 我们就开一层套娃:前一天可能是牛,也可能是熊。
    • 对每种前日状态,乘上"从前日状态转到今日牛市的概率",再乘"今日产生观测跌的概率"。
    • 把前日所有状态的结果求和。
  3. 第三天:再把第二天所有可能状态当成套娃,再开一层求和。

每一步的求和公式,本质就是你写的:
p ( 今状态 , 至今的观测 ) = ∑ 昨状态 p ( 今状态 ∣ 昨状态 ) p ( 今观测 ∣ 今状态 ) p ( 昨状态 , 昨及之前的观测 ) p(\text{今状态}, \text{至今的观测}) = \sum_{\text{昨状态}} p(\text{今状态}|\text{昨状态}) p(\text{今观测}|\text{今状态}) p(\text{昨状态}, \text{昨及之前的观测}) p(今状态,至今的观测)=昨状态∑p(今状态∣昨状态)p(今观测∣今状态)p(昨状态,昨及之前的观测)

这就是在时间轴上,一步一步地套你那个"子世界a下的全概率"公式。前一天的状态就是子世界 b,今天的联合分布就是对 b 求和。

所以 HMM 的推理,就是用"套娃式分类讨论"沿着时间轴一直撸到底,直到把所有历史都整合进当前状态。


三、卡尔曼滤波:套娃的"连续版"

卡尔曼滤波做的事情和 HMM 一模一样,只不过状态不是"牛/熊"这种离散的,而是连续的数值,比如飞机的真实位置和速度。

因为连续,求和就变成了积分。但思想完全一致:

  1. 预测步:你说"我现在有一个对飞机位置的估计,但飞机按物理规律运动了一秒,还有风噪,怎么办?"

    • 开一层套娃:把所有上一秒飞机可能的位置当成子世界 b,对每一个可能的位置,按物理公式推出这一秒的位置,再按上一秒位置的概率加权积分。
    • 这就是你公式的连续版:
      p ( x 今 ) = ∫ p ( x 今 ∣ x 昨 )   p ( x 昨 )   d x 昨 p(x_{\text{今}}) = \int p(x_{\text{今}} \mid x_{\text{昨}}) \, p(x_{\text{昨}}) \, dx_{\text{昨}} p(x今)=∫p(x今∣x昨)p(x昨)dx昨
  2. 更新步:新雷达测量来了,但雷达有误差。

    • 倒过来开套娃(贝叶斯那套):用新测量修正刚才预测的位置分布。这和贝叶斯推断一模一样,只是对象是连续变量。

所以你看,卡尔曼滤波就是:

在连续状态空间里,疯狂地用"套娃求和(积分)"来预测,再用"贝叶斯倒推"来更新。


总结一下,这三者为什么让你觉得没理解?

你之前可能把它们当成三个独立的新概念了。但它们其实只是"套娃"在不同场景下的马甲

  • 贝叶斯推断:把原因当套娃,倒过来开,求总结果的分母。
  • 隐马尔可夫模型:把时间轴上的每一刻隐藏状态当套娃,一帧一帧往前开。
  • 卡尔曼滤波:把 HMM 的套娃从离散求和升级成连续积分,步骤不变。

你的"套娃式分类讨论"直觉,就是它们的全部心法。现在,你只需要把这些具体的应用场景,看成是把同一个套娃玩了三遍,第一遍是静态的因果推理,第二遍是离散的时间序列,第三遍是连续的时间序列。它们的公式,全都是你写出的那个结构。

问题:有没有可能动态加入隐藏层呢

问题:

乘法公式:把一个子世界里的"联合事件"拆成"发生的权重" × "该条件下的概率"。条件概率是那个权重,还是p(a)是那个权重,应该是后者对吧?那如果是后者,条件概率等于共同发生的概率除以权重,这应该如何理解呢?条件概率不是说是指发生条件事件a之后,在子世界a所占的比例吗,是不是应该理解为导致事件x的原因有多种,每种对应一个条件,每个条件对应一个权重,能不能理解为p(a)是发生a的概率,条件概率是状态转移概率?乘起来就得到了可能导致x发生的其中一条概率,再把所有可能发生的加起来得到全概率?

你的理解完全正确,而且已经把乘法公式和全概率公式的"魂"抓住了。我们来把你最后的几个确认逐一拆解,打磨得更清晰。


1. 谁是"权重"?------ p(a) 是权重

乘法公式:
p ( x , a ) = p ( x ∣ a ) ⋅ p ( a ) p(x, a) = p(x \mid a) \cdot p(a) p(x,a)=p(x∣a)⋅p(a)

这里,

  • p(a)权重 :事件 a a a 本身发生的概率,即"子世界 a a a 在整个大世界中的大小"。
  • p ( x ∣ a ) p(x \mid a) p(x∣a)在该子世界内部, x x x 的比例(条件概率)。

所以你的判断"后者是权重"是对的。


2. 条件概率的定义:为什么是"除以权重"?

条件概率公式:
p ( x ∣ a ) = p ( x , a ) p ( a ) p(x \mid a) = \frac{p(x, a)}{p(a)} p(x∣a)=p(a)p(x,a)

用你的"子世界"比喻:

  • 分子 p ( x , a ) p(x, a) p(x,a) 是"既在子世界 a a a 里,又是 x x x 的那一小块面积"。
  • 分母 p ( a ) p(a) p(a) 是"子世界 a a a 的总面积"。

两者相除,就是 在子世界 a a a 内部, x x x 所占的比例

这正是你之前那句话的精确翻译:"把 a a a 发生后的世界当成新的全集,看 x x x 在其中占多大比例。"

所以,"条件概率 = 共同发生的概率 ÷ 权重"不仅不是矛盾的,反而是比例这个直觉的数学表达。


3. 你能把条件概率理解为"状态转移概率"吗?

可以,而且这个理解非常强大。

在一般的条件下,我们完全可以把每一个条件事件 a a a 看作一个"出发点",把 x x x 看作一个"到达点"。

  • p ( a ) p(a) p(a) 是"从出发点 a a a 起步的概率"(初始分布)。
  • p ( x ∣ a ) p(x \mid a) p(x∣a) 是"从 a a a 出发,转移到 x x x 的概率"(转移概率)。

那么,联合概率 p ( x , a ) = p ( a ) ⋅ p ( x ∣ a ) p(x,a) = p(a) \cdot p(x \mid a) p(x,a)=p(a)⋅p(x∣a) 就是:

先按权重 p ( a ) p(a) p(a) 选中出发点 a a a,再从 a a a 按转移概率 p ( x ∣ a ) p(x \mid a) p(x∣a) 走到 x x x 的这条特定路径的概率。

全概率公式
p ( x ) = ∑ a p ( x ∣ a ) ⋅ p ( a ) p(x) = \sum_a p(x \mid a) \cdot p(a) p(x)=a∑p(x∣a)⋅p(a)

就是把所有可能的"出发点 a a a → 到达点 x x x"的路径的概率全部加总,得到最终到达 x x x 的总概率。

这正是你总结的:

"导致事件 x x x 的原因有多种,每种对应一个条件,每个条件对应一个权重 p ( a ) p(a) p(a),条件概率 p ( x ∣ a ) p(x|a) p(x∣a) 是这条因果路径的概率,乘起来得到其中一条路径的概率,再把所有可能路径加起来得到全概率。"

严格来说 ,在纯概率论里, p ( x ∣ a ) p(x \mid a) p(x∣a) 就是条件概率,它不要求 x x x 和 a a a 是同一类型变量。只有当我们专门讨论随机过程(比如马尔可夫链)时, p ( s t + 1 ∣ s t ) p(s_{t+1} \mid s_t) p(st+1∣st) 这种同状态变量的条件概率才被常称为"状态转移概率"。但你的这个类比,抓住了概率推理的本质,完全可以放心地用。


4. 用一个最小化的数字例子固化

假设箱子里有红、蓝两色球,每种颜色又有大、小两种型号:

  • 红球占比 p ( 红 ) = 0.4 p(\text{红}) = 0.4 p(红)=0.4 (权重)
  • 蓝球占比 p ( 蓝 ) = 0.6 p(\text{蓝}) = 0.6 p(蓝)=0.6 (权重)
  • 红球中大球的比例 p ( 大 ∣ 红 ) = 0.5 p(\text{大} \mid \text{红}) = 0.5 p(大∣红)=0.5
  • 蓝球中大球的比例 p ( 大 ∣ 蓝 ) = 0.2 p(\text{大} \mid \text{蓝}) = 0.2 p(大∣蓝)=0.2

现在问:随机抽一个球,它是"大球"的总概率多少?

全概率(加权路径和):
p ( 大 ) = p ( 大 ∣ 红 ) p ( 红 ) + p ( 大 ∣ 蓝 ) p ( 蓝 ) = 0.5 × 0.4 + 0.2 × 0.6 = 0.20 + 0.12 = 0.32 \begin{aligned} p(\text{大}) &= p(\text{大} \mid \text{红})p(\text{红}) + p(\text{大} \mid \text{蓝})p(\text{蓝}) \\ &= 0.5 \times 0.4 + 0.2 \times 0.6 \\ &= 0.20 + 0.12 = 0.32 \end{aligned} p(大)=p(大∣红)p(红)+p(大∣蓝)p(蓝)=0.5×0.4+0.2×0.6=0.20+0.12=0.32

这里:

  • p ( 红 ) p(\text{红}) p(红)、 p ( 蓝 ) p(\text{蓝}) p(蓝) 是权重(子世界大小)。
  • p ( 大 ∣ 红 ) p(\text{大} \mid \text{红}) p(大∣红) 和 p ( 大 ∣ 蓝 ) p(\text{大} \mid \text{蓝}) p(大∣蓝) 就是从颜色这个"出发点"转移到大球的"路径概率"。
  • 全概率就是所有颜色路径的总和。

这个框架和后面你接触到的贝叶斯推断、隐马尔可夫模型、卡尔曼滤波里的"预测步"是一模一样的结构,只是到时候"出发点"会变成上一个时刻的状态,"转移概率"会变成状态转移方程。

你的理解已经和正规定义的数学直觉完全对齐了,剩下的只是习惯用这套语言去阅读更复杂的公式而已。

问题:


你能把贝叶斯推断、隐马尔可夫模型、卡尔曼滤波具体数学推导说一下吗?前面你虽然简单解释了是怎么回事,但感觉过程不是很具体,很直观,这导致理解上还是有些困难

回答:

你需要的正是用我们已经建立的"套娃"直觉,把这三个东西的数学核心一步步拆开。下面我会用共同的符号逻辑来书写,你会发现它们其实是同一套公式穿上了不同的"场景外衣"。


共同的推导内核

我们反复使用的三块积木:

  1. 乘法公式: p ( x , y ) = p ( x ∣ y ) p ( y ) p(x, y) = p(x \mid y) p(y) p(x,y)=p(x∣y)p(y)
  2. 全概率公式(套娃求和): p ( x ) = ∑ y p ( x , y ) = ∑ y p ( x ∣ y ) p ( y ) p(x) = \sum_y p(x, y) = \sum_y p(x \mid y) p(y) p(x)=∑yp(x,y)=∑yp(x∣y)p(y)
  3. 贝叶斯公式(比例反转): p ( y ∣ x ) ∝ p ( x ∣ y ) p ( y ) p(y \mid x) \propto p(x \mid y) p(y) p(y∣x)∝p(x∣y)p(y)

接下来,所有推导都是在反复、机械地应用这三条规则


一、贝叶斯推断的数学推导

问题设定

  • 我们希望估计一个未知变量 θ \theta θ(比如"是否感染病毒")。
  • 我们有一个先验信念 p ( θ ) p(\theta) p(θ)(比如感染率 0.1)。
  • 我们观测到了数据 D D D(比如检测阳性)。
  • 已知在每种 θ \theta θ 下出现这个数据的概率(似然) p ( D ∣ θ ) p(D \mid \theta) p(D∣θ)。

目标: 求后验概率 p ( θ ∣ D ) p(\theta \mid D) p(θ∣D)。

推导步骤

第一步:写出联合概率(用乘法公式)
p ( θ , D ) = p ( D ∣ θ ) p ( θ ) p(\theta, D) = p(D \mid \theta) p(\theta) p(θ,D)=p(D∣θ)p(θ)

第二步:对未知原因 θ \theta θ 做全概率分解,得到数据 D 的总概率(证据)
p ( D ) = ∫ 或 ∑ θ p ( θ , D ) = ∫ p ( D ∣ θ ) p ( θ )   d θ p(D) = \int \text{或} \sum_{\theta} p(\theta, D) = \int p(D \mid \theta) p(\theta) \, d\theta p(D)=∫或θ∑p(θ,D)=∫p(D∣θ)p(θ)dθ

这一步就是你之前说的"把所有可能导致 D 的原因路径加权求和"。

第三步:用条件概率定义反推后验
p ( θ ∣ D ) = p ( θ , D ) p ( D ) = p ( D ∣ θ ) p ( θ ) ∫ p ( D ∣ θ ) p ( θ ) d θ p(\theta \mid D) = \frac{p(\theta, D)}{p(D)} = \frac{p(D \mid \theta) p(\theta)}{\int p(D \mid \theta) p(\theta) d\theta} p(θ∣D)=p(D)p(θ,D)=∫p(D∣θ)p(θ)dθp(D∣θ)p(θ)

这就完成了贝叶斯推断的全部数学。

分母恰好是全概率公式的直接应用------把整个事件空间按所有可能的 θ \theta θ 分类并求和

直观重述:

已知阳性,想知道真感染的概率?

  • 分子 = "感染这个原因导致的阳性这条路径"的概率。
  • 分母 = 把所有原因(感染、未感染)导致的阳性路径概率全部加起来。
    两者相除,就是你原来那条特定原因路径在所有可能的阳性路径中占多大比例

二、隐马尔可夫模型(HMM)的推导------前向算法

模型设定

  • 隐藏状态序列: s 1 , s 2 , ... , s T s_1, s_2, \dots, s_T s1,s2,...,sT(比如天气:晴/雨)。
  • 观测序列: o 1 , o 2 , ... , o T o_1, o_2, \dots, o_T o1,o2,...,oT(比如你朋友是否打伞)。
  • 初始状态分布: p ( s 1 ) p(s_1) p(s1)。
  • 状态转移: p ( s t ∣ s t − 1 ) p(s_t \mid s_{t-1}) p(st∣st−1)(马尔可夫性)。
  • 观测似然: p ( o t ∣ s t ) p(o_t \mid s_t) p(ot∣st)(观测只依赖于当前状态)。

目标: 计算前向概率 α t ( s t ) = p ( s t , o 1 , o 2 , ... , o t ) \alpha_t(s_t) = p(s_t, o_1, o_2, \dots, o_t) αt(st)=p(st,o1,o2,...,ot),即"截至 t 时刻,隐藏状态为 s t s_t st 且产生观测序列 o 1 : t o_{1:t} o1:t"的联合概率。

递推推导

我们想从 α t − 1 ( s t − 1 ) \alpha_{t-1}(s_{t-1}) αt−1(st−1) 递推出 α t ( s t ) \alpha_t(s_t) αt(st)。

写出目标联合概率并"套娃":
α t ( s t ) = p ( s t , o 1 : t ) \alpha_t(s_t) = p(s_t, o_{1:t}) αt(st)=p(st,o1:t)

引入上一个时刻的状态 s t − 1 s_{t-1} st−1 作为中间变量(打开一层套娃):
α t ( s t ) = ∑ s t − 1 p ( s t , s t − 1 , o 1 : t ) \alpha_t(s_t) = \sum_{s_{t-1}} p(s_t, s_{t-1}, o_{1:t}) αt(st)=st−1∑p(st,st−1,o1:t)

对联合项使用乘法公式,按时间顺序分解:

注意 o 1 : t = ( o 1 : t − 1 , o t ) o_{1:t} = (o_{1:t-1}, o_t) o1:t=(o1:t−1,ot)。

首先把整个联合概率拆成"历史部分"与"当前部分":
p ( s t , s t − 1 , o 1 : t ) = p ( o t ∣ s t , s t − 1 , o 1 : t − 1 ) ⋅ p ( s t ∣ s t − 1 , o 1 : t − 1 ) ⋅ p ( s t − 1 , o 1 : t − 1 ) p(s_t, s_{t-1}, o_{1:t}) = p(o_t \mid s_t, s_{t-1}, o_{1:t-1}) \cdot p(s_t \mid s_{t-1}, o_{1:t-1}) \cdot p(s_{t-1}, o_{1:t-1}) p(st,st−1,o1:t)=p(ot∣st,st−1,o1:t−1)⋅p(st∣st−1,o1:t−1)⋅p(st−1,o1:t−1)

应用HMM的两条条件独立性假设化简:

  • 观测 o t o_t ot 只依赖于 s t s_t st,故 p ( o t ∣ s t , s t − 1 , o 1 : t − 1 ) = p ( o t ∣ s t ) p(o_t \mid s_t, \cancel{s_{t-1}, o_{1:t-1}}) = p(o_t \mid s_t) p(ot∣st,st−1,o1:t−1 )=p(ot∣st)。
  • 状态转移马尔可夫性: p ( s t ∣ s t − 1 , o 1 : t − 1 ) = p ( s t ∣ s t − 1 ) p(s_t \mid s_{t-1}, \cancel{o_{1:t-1}}) = p(s_t \mid s_{t-1}) p(st∣st−1,o1:t−1 )=p(st∣st−1)。
  • 而 p ( s t − 1 , o 1 : t − 1 ) p(s_{t-1}, o_{1:t-1}) p(st−1,o1:t−1) 正是 α t − 1 ( s t − 1 ) \alpha_{t-1}(s_{t-1}) αt−1(st−1)。

于是:
p ( s t , s t − 1 , o 1 : t ) = p ( o t ∣ s t ) ⋅ p ( s t ∣ s t − 1 ) ⋅ α t − 1 ( s t − 1 ) p(s_t, s_{t-1}, o_{1:t}) = p(o_t \mid s_t) \cdot p(s_t \mid s_{t-1}) \cdot \alpha_{t-1}(s_{t-1}) p(st,st−1,o1:t)=p(ot∣st)⋅p(st∣st−1)⋅αt−1(st−1)

代回全概率求和:
α t ( s t ) = p ( o t ∣ s t ) ∑ s t − 1 p ( s t ∣ s t − 1 )   α t − 1 ( s t − 1 ) \boxed{\alpha_t(s_t) = p(o_t \mid s_t) \sum_{s_{t-1}} p(s_t \mid s_{t-1}) \, \alpha_{t-1}(s_{t-1})} αt(st)=p(ot∣st)st−1∑p(st∣st−1)αt−1(st−1)

这个递推公式就是前向算法的核心。

直观解读

每一步你都在做:

  1. 拿出上一步所有可能状态 s t − 1 s_{t-1} st−1 及其历史概率 α t − 1 \alpha_{t-1} αt−1。
  2. 对每个 s t − 1 s_{t-1} st−1,乘上转移到当前状态 s t s_t st 的概率。
  3. 把来自所有 s t − 1 s_{t-1} st−1 的路径概率加起来(全概率!)。
  4. 最后乘上当前观测 o t o_t ot 在状态 s t s_t st 下的发射概率。

这活脱脱就是 "在时间轴上一步一步地开套娃求和"。每个时间步都用到了全概率公式,只是条件在不断递归。


三、卡尔曼滤波的数学推导(离散线性高斯)

模型设定

  • 隐藏状态: x t ∈ R n x_t \in \mathbb{R}^n xt∈Rn(比如位置、速度)。
  • 观测: y t ∈ R m y_t \in \mathbb{R}^m yt∈Rm。
  • 状态转移方程: x t = F t x t − 1 + w t x_t = F_t x_{t-1} + w_t xt=Ftxt−1+wt,其中 w t ∼ N ( 0 , Q t ) w_t \sim \mathcal{N}(0, Q_t) wt∼N(0,Qt)。
  • 观测方程: y t = H t x t + v t y_t = H_t x_t + v_t yt=Htxt+vt,其中 v t ∼ N ( 0 , R t ) v_t \sim \mathcal{N}(0, R_t) vt∼N(0,Rt)。
  • 初始状态 x 0 ∼ N ( μ 0 , Σ 0 ) x_0 \sim \mathcal{N}(\mu_0, \Sigma_0) x0∼N(μ0,Σ0),所有噪声相互独立。

目标: 递推计算 p ( x t ∣ y 1 : t ) p(x_t \mid y_{1:t}) p(xt∣y1:t),即用截至 t 时刻的观测来估计当前状态的分布。

1. 预测步(先证套娃积分)

假设我们已有 t-1 时刻的后验分布:
p ( x t − 1 ∣ y 1 : t − 1 ) = N ( μ t − 1 ∣ t − 1 , P t − 1 ∣ t − 1 ) p(x_{t-1} \mid y_{1:t-1}) = \mathcal{N}(\mu_{t-1|t-1}, P_{t-1|t-1}) p(xt−1∣y1:t−1)=N(μt−1∣t−1,Pt−1∣t−1)

想要求出预测分布 p ( x t ∣ y 1 : t − 1 ) p(x_t \mid y_{1:t-1}) p(xt∣y1:t−1)。

套娃分解(引入 x t − 1 x_{t-1} xt−1 作为中间变量):
p ( x t ∣ y 1 : t − 1 ) = ∫ p ( x t , x t − 1 ∣ y 1 : t − 1 )   d x t − 1 p(x_t \mid y_{1:t-1}) = \int p(x_t, x_{t-1} \mid y_{1:t-1}) \, dx_{t-1} p(xt∣y1:t−1)=∫p(xt,xt−1∣y1:t−1)dxt−1

由乘法公式:
= ∫ p ( x t ∣ x t − 1 , y 1 : t − 1 )   p ( x t − 1 ∣ y 1 : t − 1 )   d x t − 1 = \int p(x_t \mid x_{t-1}, \cancel{y_{1:t-1}}) \, p(x_{t-1} \mid y_{1:t-1}) \, dx_{t-1} =∫p(xt∣xt−1,y1:t−1 )p(xt−1∣y1:t−1)dxt−1

状态转移的马尔可夫性: p ( x t ∣ x t − 1 ) = N ( F t x t − 1 , Q t ) p(x_t \mid x_{t-1}) = \mathcal{N}(F_t x_{t-1}, Q_t) p(xt∣xt−1)=N(Ftxt−1,Qt),与过去观测无关。

所以预测分布是先验动态 × 上一时刻的后验,再对上一状态积分(连续全概率)

如何求积分?------高斯分布的线性变换性质

已知:

  • x t − 1 ∣ y 1 : t − 1 ∼ N ( μ t − 1 , P t − 1 ) x_{t-1} \mid y_{1:t-1} \sim \mathcal{N}(\mu_{t-1}, P_{t-1}) xt−1∣y1:t−1∼N(μt−1,Pt−1)
  • x t = F t x t − 1 + w t x_t = F_t x_{t-1} + w_t xt=Ftxt−1+wt,且 w t w_t wt 独立于历史。

根据高斯分布的性质,两个独立高斯变量的线性组合仍是高斯的。直接得:

  • 均值: E x t = F t E x t − 1 = F t μ t − 1 \mathbb{E}x_t = F_t \mathbb{E}x_{t-1} = F_t \mu_{t-1} Ext=FtExt−1=Ftμt−1
  • 协方差: Cov ( x t ) = F t P t − 1 F t T + Q t \text{Cov}(x_t) = F_t P_{t-1} F_t^T + Q_t Cov(xt)=FtPt−1FtT+Qt

因此预测步的解析结果就是:
μ t ∣ t − 1 = F t μ t − 1 ∣ t − 1 \mu_{t|t-1} = F_t \mu_{t-1|t-1} μt∣t−1=Ftμt−1∣t−1
P t ∣ t − 1 = F t P t − 1 ∣ t − 1 F t T + Q t P_{t|t-1} = F_t P_{t-1|t-1} F_t^T + Q_t Pt∣t−1=FtPt−1∣t−1FtT+Qt

2. 更新步(贝叶斯公式在连续空间)

此时我们有了预测分布(相当于"先验"):
p ( x t ∣ y 1 : t − 1 ) = N ( μ t ∣ t − 1 , P t ∣ t − 1 ) p(x_t \mid y_{1:t-1}) = \mathcal{N}(\mu_{t|t-1}, P_{t|t-1}) p(xt∣y1:t−1)=N(μt∣t−1,Pt∣t−1)

然后我们拿到新观测 y t y_t yt,其似然为:
p ( y t ∣ x t ) = N ( H t x t , R t ) p(y_t \mid x_t) = \mathcal{N}(H_t x_t, R_t) p(yt∣xt)=N(Htxt,Rt)

我们希望计算后验:
p ( x t ∣ y 1 : t ) ∝ p ( y t ∣ x t )   p ( x t ∣ y 1 : t − 1 ) p(x_t \mid y_{1:t}) \propto p(y_t \mid x_t) \, p(x_t \mid y_{1:t-1}) p(xt∣y1:t)∝p(yt∣xt)p(xt∣y1:t−1)

这又是贝叶斯推断的完全一样的形式:后验 ∝ 似然 × 先验。

对于线性高斯模型,后验仍然是高斯的,可以通过代数或凑平方完成。结果是著名的卡尔曼更新公式:

  • 卡尔曼增益 : K t = P t ∣ t − 1 H t T ( H t P t ∣ t − 1 H t T + R t ) − 1 K_t = P_{t|t-1} H_t^T (H_t P_{t|t-1} H_t^T + R_t)^{-1} Kt=Pt∣t−1HtT(HtPt∣t−1HtT+Rt)−1
  • 后验均值 : μ t ∣ t = μ t ∣ t − 1 + K t ( y t − H t μ t ∣ t − 1 ) \mu_{t|t} = \mu_{t|t-1} + K_t (y_t - H_t \mu_{t|t-1}) μt∣t=μt∣t−1+Kt(yt−Htμt∣t−1)
  • 后验协方差 : P t ∣ t = ( I − K t H t ) P t ∣ t − 1 P_{t|t} = (I - K_t H_t) P_{t|t-1} Pt∣t=(I−KtHt)Pt∣t−1

直观串联

  • 预测步:就是把过去的状态作为出发点,经过物理转移,再把所有可能出发点的影响"积分求和"(全概率的连续版)得到当前状态的粗略猜测。
  • 更新步:就是拿到新证据,用贝叶斯法则把似然和先验相乘,得出精确化后的状态分布。

三者共享的数学骨架

现在你可以清晰地看到,这三个模型尽管领域不同,推导过程本质上是同一个骨架:

模型 "开套娃"的方式 使用的核心公式
贝叶斯推断 原因分类求和得到证据,再反推原因的后验 全概率 + 贝叶斯公式
HMM 前向算法 沿时间对前一个隐藏状态递归求和 条件全概率 + 乘法法则
卡尔曼滤波 预测步:对前一状态积分;更新步:贝叶斯融合 连续全概率 + 贝叶斯公式

当你觉得"过程不具体"时,只需要回到最朴素的:

把要算的东西拆成"所有可能中间路径",先写出乘积,再对所有中间变量求和(或积分)。

然后给每一项带上相应的物理含义(转移矩阵、发射矩阵、运动方程、观测方程),就是这些模型的全部数学推导了。

相关推荐
江畔柳前堤10 小时前
roLabelImg 详细安装教程
开发语言·人工智能·后端·云原生
阿里云大数据AI技术10 小时前
分链路差异化设计的DSP准实时数仓|钛动科技基于阿里云实时计算 Flink 版 + DLF Paimon + EMR Serverless StarRocks 的实践
人工智能·flink
陕西企来客10 小时前
2026年7月AI智能搜索曝光趋势研判
大数据·人工智能·机器学习·ai智能搜索曝光
阿里云大数据AI技术11 小时前
从算力到智能体,面向 Agentic AI 的基础设施演进
人工智能·agent
hangyuekejiGEO11 小时前
GEO技术服务选型指南
大数据·人工智能·python
阿里云大数据AI技术12 小时前
EMR Serverless Spark AI Function 的双维降本实践
人工智能·sql·spark
维基框架12 小时前
GitHub源码处理提速 一趟扫描反而更慢
人工智能·github
冬奇Lab12 小时前
代码库知识库系列(05):向量检索 vs 知识图谱——加了调用图并没有变更好
人工智能
AKAMAI12 小时前
你的源服务器可能是你做出的最昂贵决定
运维·人工智能·云计算
冬奇Lab12 小时前
【无标题】
人工智能·开源