隐马尔可夫模型(HMM)的维特比算法原理与计算过程
题目描述
隐马尔可夫模型(HMM)的维特比算法用于解决解码问题:给定观测序列 \(O = (o_1, o_2, ..., o_T)\) 和HMM的参数 \(\lambda = (A, B, \pi)\)(其中 \(A\) 是状态转移矩阵,\(B\) 是观测概率矩阵,\(\pi\) 是初始状态概率分布),如何找到最可能产生该观测序列的隐藏状态序列 \(Q = (q_1, q_2, ..., q_T)\)?维特比算法通过动态规划高效求解最优路径。
解题过程
-
问题定义
- 假设隐藏状态集合为 \(\{s_1, s_2, ..., s_N\}\),观测集合为 \(\{v_1, v_2, ..., v_M\}\)。
- 目标:计算 \(\arg\max_{Q} P(Q \mid O, \lambda)\),即最大化 \(P(Q, O \mid \lambda)\)(因 \(P(O)\) 固定)。
-
动态规划表初始化
- 定义两个表:
- 概率表 \(\delta_t(i)\):在时刻 \(t\),隐藏状态为 \(s_i\) 的所有路径中的最大概率。
- 路径回溯表 \(\psi_t(i)\):记录达到 \(\delta_t(i)\) 时前一个时刻的状态。
- 初始化(\(t=1\)):
- 定义两个表:
\[ \delta_1(i) = \pi_i \cdot b_i(o_1), \quad \psi_1(i) = 0 \quad (1 \leq i \leq N) \]
其中 $ b_i(o_1) $ 是状态 $ s_i $ 生成观测 $ o_1 $ 的概率。
- 递推计算(\(t=2\) 到 \( T \)
- 对每个时刻 \(t\) 和每个状态 \(s_j\):
\[ \delta_t(j) = \max_{1 \leq i \leq N} \left[ \delta_{t-1}(i) \cdot a_{ij} \right] \cdot b_j(o_t) \]
\[ \psi_t(j) = \arg\max_{1 \leq i \leq N} \left[ \delta_{t-1}(i) \cdot a_{ij} \right] \]
这里 $ a_{ij} $ 是从状态 $ s_i $ 转移到 $ s_j $ 的概率。
- 终止与路径回溯
- 最终时刻 \(T\) 的最优概率和状态:
\[ P^* = \max_{1 \leq i \leq N} \delta_T(i), \quad q_T^* = \arg\max_{1 \leq i \leq N} \delta_T(i) \]
- 逆序回溯最优路径(\(t=T-1\) 到 \(1\)):
\[ q_t^* = \psi_{t+1}(q_{t+1}^*) \]
- 示例说明
- 假设HMM有2个状态 \(\{s_1, s_2\}\),观测序列为 \(O = (o_1, o_2)\)。
- 已知参数:
\[ \pi = [0.6, 0.4], \quad A = \begin{bmatrix} 0.7 & 0.3 \\ 0.4 & 0.6 \end{bmatrix}, \quad B = \begin{bmatrix} 0.5 & 0.5 \\ 0.3 & 0.7 \end{bmatrix} \]
观测索引:$ o_1 $ 对应 $ v_1 $,$ o_2 $ 对应 $ v_2 $。
- 计算步骤:
- \(t=1\):
\(\delta_1(1) = 0.6 \times 0.5 = 0.3\),\(\delta_1(2) = 0.4 \times 0.3 = 0.12\) - \(t=2\):
- 对 \(s_1\):
\(\delta_2(1) = \max(0.3 \times 0.7, 0.12 \times 0.4) \times 0.5 = \max(0.21, 0.048) \times 0.5 = 0.105\)
\(\psi_2(1) = \arg\max(0.21, 0.048) = s_1\) - 对 \(s_2\):
\(\delta_2(2) = \max(0.3 \times 0.3, 0.12 \times 0.6) \times 0.7 = \max(0.09, 0.072) \times 0.7 = 0.063\)
\(\psi_2(2) = s_1\)
- 对 \(s_1\):
- 回溯:
\(q_2^* = \arg\max(0.105, 0.063) = s_1\),\(q_1^* = \psi_2(s_1) = s_1\)
- \(t=1\):
- 最优路径:\((s_1, s_1)\)。
关键点
- 维特比算法通过动态规划避免穷举所有路径(复杂度从 \(O(N^T)\) 降至 \(O(T \cdot N^2)\))。
- \(\delta_t(j)\) 始终记录当前最优路径概率,\(\psi_t(j)\) 确保路径可回溯。