Shihanmax
十、隐马尔可夫模型(HMM)
1. HMM 的定义与特点
隐马尔可夫模型(Hidden Markov Model, HMM)是一种统计模型,它描述了一个由隐藏状态序列和观测序列组成的系统。在 HMM 中,隐藏状态是不可直接观察的,但可以通过观测到的数据来推断。
- 输入: $\lambda = (A, B, \pi)$
- 输出: 观测序列 $O$
- 用途: HMM 可用于语音识别、自然语言处理等领域。
2. 观测序列生成过程
2.1 输入
- $\lambda = (A, B, \pi)$:模型参数。
- $T$:观测序列的长度。
2.2 输出
- $O = (o_1, o_2, …, o_T)$:生成的观测序列。
2.3 生成过程
- 初始化:选择初始状态 $i_1$ 根据 $\pi$。
- 对于 $t = 1$ 到 $T$:
- 根据当前状态 $i_t$ 和观测概率 $b_{i_t}(o_t)$ 生成观测 $o_t$。
- 根据状态转移概率 $a_{i_t i_{t+1}}$ 转移到下一个状态 $i_{t+1}$。
3. HMM的基本问题
3.1 算法计算问题
3.1.1 直接计算法(直观但计算上不可行)
-
列举所有状态序列,计算 $P(O \lambda) = \sum_{I} P(O I,\lambda)$
3.1.2 前向算法
定义$\alpha_t(i)$:给定$\lambda = (A, B, \pi)$,时刻$t$大部分观测序列为$o_1, o_2, …, o_t$,且状态为$i$的概率。
-
(1) 初始化:$\alpha_1(i) = p(o_1, s_1=i \lambda)$ - (2) 递推:对$t=1, 2, …, T-1$,
-
(3) 终止:$P(O \lambda) = \sum_{i=1}^{N} \alpha_T(i)$
前向算法的时间复杂度$O(N^2T)$
3.1.3 后向算法
定义$\beta_t(i)$:给定$\lambda = (A, B, \pi)$,在时刻$t$状态为$i$的条件下,从时刻$t$到末尾观测序列为$o_{t+1}, o_{t+2}, …, o_T$的概率。
- 输入:$\lambda, O$
-
输出:$P(O \lambda)$ - (1) $\beta_T(i) = 1, \quad i=1,2,…,N$
- (2) 对$t=T-1, T-2, …, 1$,
后向算法的时间复杂度$O(N^2T)$
4. 学习问题
4.1 观测序列 → λ:无监督学习:Baum-Welch算法
4.2 观测序列 → λ:有监督学习
4.2.1 采用极大似然估计算法
参数估计:
\[\hat{\alpha}_{ij} = \frac{A_{ij}}{\sum_{j=1}^{N} A_{ij}}, \quad i,j=1,2,\ldots,N\] \[\hat{b}_j(k) = \frac{B_{jk}}{\sum_{k=1}^{M} B_{jk}}, \quad j=1,2,\ldots,N, \quad k=1,2,\ldots,M\] \[\hat{\pi}_i = \frac{n_i}{\sum_{i=1}^{N} n_i} \rightarrow 初始状态为\pi_i的频率\]4.3 无监督学习情况
假设给定数据仅包含$\lambda = (O_1, O_2, …, O_T)$,没有隐状态序列,目标:学习$\lambda$。
4.3.1 模型假设:含有隐变量的生成模型:
\[P(O|\lambda) = P(O|I,\lambda) \cdot P(I|\lambda)\]4.3.2 Baum-Welch算法(EM算法)
需要实现如下:
-
确定完整数据的对数似然函数: \(\log L(\lambda; I, O) \xrightarrow[]{} 要最大化模型的当前似然值\)
-
E步:求目标函数:$Q(\lambda, \pi)$ \(Q(\lambda, \pi) = E_{T}[ \log P(O,I|\lambda, \pi) ]\)
5. Baum-Welch算法详解
5.1 E步:求Q函数
\[Q(\lambda, \lambda_0) = E_{\pi}[\log p(O, I|\lambda_0, \lambda)]\]由链式法则:
\[p(l_0, l_T|\lambda) = \pi_{i_0} b_{i_0 i_1}(O_1) \cdot a_{i_1 i_2} b_{i_2 i_3}(O_2) \cdots a_{i_{T-1} i_T} b_{i_T i_{T+1}}(O_T)\]则Q函数可写为:
\[Q(\lambda, \lambda_0) = \sum_{I} (\log \pi_i) p(l_0, I|\lambda) + \sum_{t=1}^{T} (\sum_{i,j} \log a_{ij} b_{ij}(O_t)) p(I_0, I|\lambda) + \sum_{I} (\log b_{i_T i_{T+1}}(O_T)) p(C|I|\lambda)\]5.2 M步:最大化Q函数
对上述三项分别进行最大化:
第一项:
利用拉格朗日乘数法:
\[\pi_i = \frac{p(l_0, I|\lambda)}{p(l_0|\lambda)}\]第二项:
\[a_{ij} = \frac{\sum_{t=1}^{T} p(l_0, I_t=i, I_{t+1}=j|\lambda)}{\sum_{j=1}^{M} \sum_{t=1}^{T} p(l_0, I_t=i, I_{t+1}=j|\lambda)}\]第三项:
\[b_j(k) = \frac{\sum_{t=1}^{T} \alpha_t(j) a_{jk} b_k(o_t) \beta_t(j)}{\sum_{t=1}^{T} \alpha_t(j) \beta_t(j)}\]5.3 算法步骤
输入: 观测数据 $O = (o_1, o_2, \ldots, o_T)$
初始化: $\forall t=0$, 选取 $\alpha_{tj}^{(0)}, b_j^{(0)}(k), \pi_i^{(0)}$, 得模型 $\lambda^{(0)} = (A^{(0)}, B^{(0)}, \pi^{(0)})$
迭代更新:
- E步:计算$\gamma_{tij}^{(n)} = (A^{(n)}, B^{(n)}, \pi^{(n)})$
- M步:更新参数
6. 预测算法
包括 维特比算法 和 近似算法
6.1 近似算法
在每日每时刻最有可能出现的状态 $i^*$, 从而得到状态序列,将其作为预测结果。
\[I^* = (i_1^*, i_2^*, \ldots, i_T^*)\] \[Y_t(i) = P(C_t | \lambda) = \frac{\alpha_t(i) \beta_t(i)}{\sum_{j=1}^{N} \alpha_t(j) \beta_t(j)}\] \[\hat{x}_t = \arg\max_{i \in S} Y_t(i)\]优点: 计算简单
缺点: 结果可能存在概率为0的相邻状态, 即可能存在状态 $x_t, x_{t+1}$, 使得 $\alpha_{x_t x_{t+1}} = 0$
6.2 维特比算法 (Viterbi Algorithm)
6.2.1 定义 $\delta_t(i)$:
时刻 $t$ 状态为 $i$ 的所有单个路径 $(x_1, x_2, …, x_t)$ 中概率最大值:
\[\delta_t(i) = \max_{x_1, x_2, ..., x_{t-1}} p(x_1, x_2, ..., x_{t-1}, x_t=i, y_1, y_2, ..., y_t)\]6.2.2 递推公式:
\[\begin{aligned} \delta_{t+1}(j) &= \max_{1 \leq i \leq N} \left[ \delta_t(i) a_{ij} \right] b_j(y_{t+1}), \quad j=1,2,...,N; t=1,2,...,T-1 \\ \psi_{t+1}(j) &= \arg \max_{1 \leq i \leq N} \left[ \delta_t(i) a_{ij} \right], \quad j=1,2,...,N \end{aligned}\]6.2.3 算法步骤
输入:
- $\lambda = (A, B, \pi)$,观测序列 $O = (o_1, o_2, …, o_T)$
- 输出:最优路径 $\pi^* = (x_1^, x_2^, …, x_T^*)$
初始化: \(\begin{aligned} \delta_1(i) &= \pi_i b_i(o_1), \quad i=1,2,...,N \\ \psi_1(i) &= 0, \quad i=1,2,...,N \end{aligned}\)
递推: \(\begin{aligned} \delta_t(i) &= \max_{1 \leq j \leq N} \left[ \delta_{t-1}(j) a_{ji} \right] b_i(o_t), \quad i=1,2,...,N; t=2,3,...,T \\ \psi_t(i) &= \arg \max_{1 \leq j \leq N} \left[ \delta_{t-1}(j) a_{ji} \right], \quad i=1,2,...,N \end{aligned}\)
终止: \(\begin{aligned} P^* &= \max_{1 \leq i \leq N} \delta_T(i) \\ x_T^* &= \arg \max_{1 \leq i \leq N} \delta_T(i) \end{aligned}\)
回溯: \(x_t^* = \psi_{t+1}(x_{t+1}^*), \quad t=T-1, T-2, ..., 1\)
注:本文使用Qwen转换自本人的统计学习方法笔记。