42 分钟
AI 数学精要

马尔可夫链与 MCMC:按状态转移反复采样

用天气小手算转移矩阵与稳态,再讲「按转移反复采样来估计分布」的 MCMC 直觉,说清 AI 里在哪用

  • 用天气例子手算状态转移矩阵,会算下一步、再下一步的概率分布
  • 理解稳态的含义 πP=π,能手解并验证稳态分布
  • 说清 MCMC 在干什么:构造一条反复跳转的随机链,用它的样本估计目标分布
  • 知道 MCMC 在 AI 里的用途:贝叶斯后验估计、生成模型采样

只看今天,就能猜明天——马尔可夫链把「状态随时间随机跳转」变成矩阵乘法

明天是晴是雨,你不必翻遍过去一个月的天气记录,盯着今天大概率就够了。这种「下一时刻只依赖当前状态、与更早无关」的假设叫马尔可夫性。把它写成一张「今天各状态 → 明天各状态」的概率表(转移矩阵),时间的演化就变成一次次矩阵乘法。而 MCMC 更进一步:用这种反复跳转的随机行走,去估计那些算都算不动的复杂分布。

因果线:生活直觉(天气只看今天)→ 用比例/矩阵写出转移矩阵 → 手算两步后的分布与稳态 → 把「反复按转移采样」连到 MCMC 的直觉 → 说清它在 AI 里估计后验、给生成模型采样的用途。

3.1 生活直觉与高中搭桥:比例、方程组与「转移矩阵」

两个状态:晴、雨。经验告诉我们:今天晴,明天有 0.7 概率仍晴、0.3 概率转雨;今天雨,明天有 0.6 概率转晴、0.4 概率仍雨。把这四条经验概率排成表,行=今天,列=明天: 明天晴 明天雨今天晴 0.7 0.3今天雨 0.6 0.4这张表叫转移矩阵 P。读法:P[i][j] 表示「今天在状态 i、明天跳到状态 j 的概率」,每一行加起来等于 1(明天总得是晴或雨)。

从高中知识搭桥:比例/面积→概率:0.7 就是「10 次里约 7 次」,m3 已讲概率与频率。方程组→矩阵:今天的概率分布 π 是一个行向量 [P(晴), P(雨)],它和 P 相乘就得到明天的分布——这是 m1 矩阵乘(行点列)的直接应用。符号读法:π(读「派」)是分布向量,P 是转移矩阵,πP 读作「π 乘 P」。「稳态」:迭代很久以后分布不再变,即 πP = π(乘完和原来一样)。

3.2 严格表述:π_{t+1} = π_t P,稳态满足 πP = π

严格写:设今天分布 πt = [Pt(晴), Pt(雨)],明天分布 πt+1 = πt · P。展开就是:Pt+1(晴) = Pt(晴)·P[晴→晴] + Pt(雨)·P[雨→晴]Pt+1(雨) = Pt(晴)·P[晴→雨] + Pt(雨)·P[雨→雨]意思是:明天晴的概率,等于「从晴留在晴」和「从雨转到晴」两条路径相加——这正是 m3 的全概率公式。稳态 π* 满足 π*P = π* 且 π* 各分量和为 1。意思是:分布到达这个比例后,再怎么转移都不变,像水推不动它了。

3.3 手算小例:从「今天晴」出发,走两步,并解出稳态

设今天一定晴,π₀ = [1, 0](100% 晴)。第一步:π₁ = π₀·P = [1·0.7 + 0·0.6, 1·0.3 + 0·0.4] = [0.7, 0.3](明天 70% 晴、30% 雨)。第二步:π₂ = π₁·P: 晴概率 = 0.7·0.7 + 0.3·0.6 = 0.49 + 0.18 = 0.67 雨概率 = 0.7·0.3 + 0.3·0.4 = 0.21 + 0.12 = 0.33所以 π₂ = [0.67, 0.33]。第三步 π₃ ≈ [0.667, 0.333],已经几乎不动了。

示例代码(可运行)

手解稳态:设 π* = [s, r](s=晴的长期比例,r=雨的长期比例)。由 π*P = π* 的第一行:s = 0.7s + 0.6r → 0.3s = 0.6r → s = 2r。再由 s + r = 1:2r + r = 1 → 3r = 1 → r = 1/3 ≈ 0.333,s = 2/3 ≈ 0.667。验证:π*P = [2/3, 1/3]·P = [2/3·0.7 + 1/3·0.6, 2/3·0.3 + 1/3·0.4] = [1.4/3+0.6/3, 0.6/3+0.4/3] = [2/3, 1/3],乘完不变,确为稳态。

示例代码(可运行)
分布沿转移矩阵演化,收敛到稳态

π₀ = [1, 0]:今天一定晴

π₁ = [0.7, 0.3]:走一步

0.7 留晴、0.3 转雨

π₂ = [0.67, 0.33]:走两步

全概率两条路径相加

π* = [2/3, 1/3]:稳态

π*P = π*,再转移不变

无论从晴还是雨出发,足够多步后都会收敛到同一个 [2/3, 1/3]

填空题填写空白处的代码
P=[[0.7,0.3],[0.6,0.4]],今天一定晴 pi0=[1,0] # pi1 = [1*0.7 + 0*0.6, ] = [0.7, 0.3] # 稳态 s=2r 且 s+r=1 -> s=、r= # pi*P = pi*,说明到达稳态后再转移(会变/不变)

3.4 为什么 AI / 大模型需要它:MCMC 用「反复跳转的随机行走」估计复杂分布

m3 讲过,贝叶斯要的是后验分布 p(θ|data),但高维、复杂时这个分布根本写不出解析式、也没法直接采样。MCMC(马尔可夫链蒙特卡洛)的想法极其巧妙:不去直接从后验里抽样,而是构造一条「随机行走链」——你现在在某个 θ,按某个提议规则跳到新的 θ′,再按一个接受概率决定「留下」还是「退回」。只要这条链的转移矩阵设计得「平稳分布恰好是你想要的后验」,那么让它走足够多步,走到的各个 θ 的频率分布,就会趋近后验本身。

Metropolis 的核心一句话:提议一个新点 θ′,若它比当前点「更符合目标分布」就一定接受;若更差,也按概率接受(给它一个机会),比例是目标分布在两点处的比值。这样链既会往高处走,又不会困在局部。你不需要证明它为什么收敛(这是马尔可夫链的收敛定理,本节不展开),只要记住:它在做的是「让一条随机行走的长期足迹,画出目标分布的形状」。下面用一个标准正态分布验证:我们只给它未归一化的形状 exp(−(x−2)²/2),看采样出来的均值和标准差是不是接近目标的 2 和 1。

示例代码(可运行)
MCMC 的一次迭代:反复跳转,足迹逼近目标分布

在当前状态 θ

链此刻所在的点

按提议规则跳一步到 θ′

random.gauss(0,1) 附近采样

算接受概率 = min(1, 目标(θ′)/目标(θ))

更优必接,较差按概率接

接受则移到 θ′,拒绝则留在 θ

把 θ 记入样本序列

结果回流,持续迭代(回到第一步循环)

前期样本未收敛要烧掉(burn-in);足够多步后,各点被访问的频率≈目标分布

AI 里它在哪用:贝叶斯推断——权重不是一个点而是一个分布,MCMC 从后验里采样,给出预测的不确定性(m3 的「完整贝叶斯」就靠它或其近似变分推断落地);生成模型采样——从一个已知分布反复跳转、得到大量样本去刻画它的形状,思路贯穿到 MCMC 风格的采样器;任何「目标分布写得出形状、却归一化常数算不出来」的场景(Metropolis 接受率里相除恰好把未知的归一化常数约掉,这是它的精妙之处)。

⚠️三个高频误解

MCMC 不保证你拿的每个样本都好——前期未收敛的「热身」样本必须烧掉(burn-in),且相邻样本相关,不能当独立样本用;转移矩阵行和必为 1,但 πP=π 只在「不可约、非周期」时才唯一收敛到那个稳态,别以为随便写个矩阵都收敛;MCMC 慢——6 万步才估出一维分布,高维下尤其吃力,这就是为什么现代深度学习多用变分推断(把采样变成优化)来近似代替它。

选择题

关于 MCMC「按转移反复采样估计目标分布」,下列理解正确的是?

本节小结

一条线:「明天只看今天」的马尔可夫性写成转移矩阵 P(行=今天、列=明天、行和=1)→ 分布演化 πt+1t P,本例从 [1,0] 走一步 [0.7,0.3]、两步 [0.67,0.33] → 稳态满足 πP=π 且分量和为 1,本例解出 [2/3, 1/3] 并验证乘完不变 → MCMC 把这套「反复按转移跳转」用到估计复杂分布:Metropolis 提议+按目标比值接受,用长期足迹逼近后验(验证采样均值≈2.017、标准差≈0.983,目标 N(2,1))→ 用于贝叶斯后验、生成模型采样,前期要烧样本、高维慢,现代常用变分推断替代。至此,stage11 三块拼图——最小二乘闭式解、雅可比、马尔可夫/MCMC——全部接回 stage17 的线性回归、反向传播与采样主线。

资深工程师加餐

底层原理 · 大厂视角 · 工程经验,点卡片展开

一条样本是一个特征向量,一批样本堆成矩阵,神经网络一层的变换本质就是矩阵乘法加激活。换基/特征值分解相当于找数据的主要方向(PCA 降维),GPU 之所以适合深度学习,正是因为它能大规模并行做矩阵运算。把「向量=对象、矩阵=变换」建立起直觉,后面公式就不再抽象。