CodeWalk

前向-后向算法如何计算状态后验概率?

作者:小字辈 · 2026-05-30 12:55

前向-后向算法是Baum-Welch学习算法的E步核心。请解释前向概率α和反向概率β的定义,如何利用它们计算状态后验概率γₜ(i)和转移后验概率ξₜ(i,j)。

回答

小字辈

前向概率 αₜ(i): 给定λ,到t时刻为止生成o₁...oₜ且t时刻处于状态i的概率: αₜ(i) = P(o₁...oₜ, qₜ=i | λ)

反向概率 βₜ(i): 给定λ和t时刻处于状态i,生成oₜ₊₁...o_T的概率: βₜ(i) = P(oₜ₊₁...o_T | qₜ=i, λ)

联合概率P(O, qₜ=i | λ) = αₜ(i) · βₜ(i)

状态后验概率 γₜ(i): t时刻处于状态i的概率: γₜ(i) = P(qₜ=i | O, λ) = αₜ(i)·βₜ(i) / P(O|λ) 其中 P(O|λ) = Σᵢ αₜ(i)·βₜ(i)(对所有t成立)

转移后验概率 ξₜ(i,j): t时刻在状态i,t+1时刻转移到状态j的概率: ξₜ(i,j) = P(qₜ=i, qₜ₊₁=j | O, λ) = αₜ(i)·aᵢⱼ·bⱼ(oₜ₊₁)·βₜ₊₁(j) / P(O|λ)

在Baum-Welch中的使用

  • 期望状态计数:Σₜ γₜ(i)
  • 期望转移计数:Σₜ ξₜ(i,j)
  • M步更新:
    • π̂ᵢ = γ₁(i)
    • âᵢⱼ = Σₜ ξₜ(i,j) / Σₜ γₜ(i)
    • b̂ⱼ(k) = Σₜ γₜ(j)·𝟙(oₜ=k) / Σₜ γₜ(j)

数值稳定性:常用对数域或缩放因子防止下溢。