隐马尔可夫模型(HMM)的前向-后向算法原理与计算过程
字数 2186 2025-11-04 08:32:42
隐马尔可夫模型(HMM)的前向-后向算法原理与计算过程
题目描述
前向-后向算法是隐马尔可夫模型(HMM)的核心算法之一,用于计算在给定模型参数 λ = (A, B, π) 和观测序列 O = (o₁, o₂, ..., o_T) 的条件下,任意时刻 t 处于隐藏状态 q_t = i 的概率 γ_t(i),以及时刻 t 和 t+1 处于隐藏状态 i 和 j 的联合概率 ξ_t(i, j)。这些概率是后续参数估计(Baum-Welch算法)和模型学习的基础。本题目将详细讲解前向-后向算法的原理、计算步骤及其意义。
解题过程
-
问题定义
- 设隐藏状态集合 Q = {q₁, q₂, ..., q_N},观测集合 V = {v₁, v₂, ..., v_M}。
- 模型参数 λ 包含:
- 状态转移矩阵 A = [aᵢⱼ],其中 aᵢⱼ = P(q_{t+1} = j | q_t = i)。
- 观测概率矩阵 B = [bⱼ(k)],其中 bⱼ(k) = P(o_t = v_k | q_t = j)。
- 初始状态分布 π = [πᵢ],其中 πᵢ = P(q₁ = i)。
- 目标:计算概率 γ_t(i) = P(q_t = i | O, λ) 和 ξ_t(i, j) = P(q_t = i, q_{t+1} = j | O, λ)。
-
前向算法计算前向概率 α_t(i)
- 定义:前向概率 α_t(i) = P(o₁, o₂, ..., o_t, q_t = i | λ),表示到时刻 t 为止的观测序列且 t 时刻状态为 i 的联合概率。
- 初始化(t = 1):
α₁(i) = πᵢ · bᵢ(o₁), 对于所有状态 i ∈ [1, N]。 - 递推(t = 2 到 T):
α_t(j) = [∑{i=1}^N α{t-1}(i) · aᵢⱼ] · bⱼ(o_t),其中 j ∈ [1, N]。- 解释:在 t 时刻状态为 j 的概率,由 t-1 时刻所有可能状态 i 转移到 j 的概率加权求和,再乘以 j 状态生成观测 o_t 的概率。
- 终止:
观测序列的概率 P(O | λ) = ∑_{i=1}^N α_T(i)。
-
后向算法计算后向概率 β_t(i)
- 定义:后向概率 β_t(i) = P(o_{t+1}, o_{t+2}, ..., o_T | q_t = i, λ),表示在 t 时刻状态为 i 的条件下,从 t+1 到 T 的观测序列的概率。
- 初始化(t = T):
定义 β_T(i) = 1,对于所有状态 i ∈ [1, N](因为 T 时刻后无观测,概率为 1)。 - 递推(t = T-1 到 1):
β_t(i) = ∑{j=1}^N aᵢⱼ · bⱼ(o{t+1}) · β_{t+1}(j),其中 i ∈ [1, N]。- 解释:从状态 i 出发,转移到所有可能状态 j,并生成观测 o_{t+1},再考虑从 j 开始的后继路径概率。
- 注意:P(O | λ) 也可通过后向概率计算:P(O | λ) = ∑_{i=1}^N πᵢ · bᵢ(o₁) · β₁(i)。
-
计算单状态概率 γ_t(i)
- 利用前向和后向概率:
γ_t(i) = P(q_t = i | O, λ) = [α_t(i) · β_t(i)] / P(O | λ)。 - 推导:
- 由条件概率定义,P(q_t = i | O, λ) = P(q_t = i, O | λ) / P(O | λ)。
- 而 P(q_t = i, O | λ) = P(o₁, ..., o_t, q_t = i, o_{t+1}, ..., o_T | λ) = α_t(i) · β_t(i)。
- 因此,γ_t(i) 是 t 时刻处于状态 i 的后验概率,满足 ∑_{i=1}^N γ_t(i) = 1。
- 利用前向和后向概率:
-
计算双状态联合概率 ξ_t(i, j)
- 定义:ξ_t(i, j) = P(q_t = i, q_{t+1} = j | O, λ)。
- 计算公式:
ξ_t(i, j) = [α_t(i) · aᵢⱼ · bⱼ(o_{t+1}) · β_{t+1}(j)] / P(O | λ)。 - 推导:
- 联合概率 P(q_t = i, q_{t+1} = j, O | λ) 可分解为:
前 t 步的路径概率 α_t(i) × 从 i 转移到 j 的概率 aᵢⱼ × j 生成观测 o_{t+1} 的概率 bⱼ(o_{t+1}) × 从 j 开始的后向概率 β_{t+1}(j)。 - 再除以 P(O | λ) 得到条件概率。
- 联合概率 P(q_t = i, q_{t+1} = j, O | λ) 可分解为:
- 注意:∑{i=1}^N ∑{j=1}^N ξ_t(i, j) = 1。
-
算法意义
- γ_t(i) 可用于状态解码(如软分类),ξ_t(i, j) 是 Baum-Welch 算法中重新估计参数 A 和 π 的基础(例如,aᵢⱼ 的估计值正比于 ∑_{t=1}^{T-1} ξ_t(i, j))。
- 前向-后向算法通过动态规划避免直接计算所有路径(复杂度 O(N^T)),将复杂度降低到 O(T · N²)。