机器学习数学基础 120 章

隐 Markov 模型的概率结构

层级:B|建议先修:05-08、08-02、08-05

隐 Markov 模型(Hidden Markov Model, HMM)描述这样一类序列:系统内部状态按 Markov 链演化,但状态不可直接观察;我们只能看到由状态随机产生的观测。

1. 两条序列

设时间为 t=1,,Tt=1,\ldots,T

  • 隐状态 Zt{1,ldots,K}Z_t\in\{1,ldots,K\}
  • 观测 XtX_t,可以离散,也可以连续。

例如语音识别中,音素状态不可直接看到,声学信号是观测;词性标注中,词性是隐状态,单词是观测。

2. 三组参数

一个基本 HMM 由以下参数组成:

  1. 初始分布 πi=P(Z1=i)\pi_i=P(Z_1=i)
  2. 转移概率 Aij=P(Zt=jZt1=i)A_{ij}=P(Z_t=j\mid Z_{t-1}=i)
  3. 发射分布 p(XtZt)p(X_t\mid Z_t),离散时可写 Bik=P(Xt=kZt=i)B_{ik}=P(X_t=k\mid Z_t=i)

若参数不随时间改变,称为齐次 HMM。

3. 两个核心假设

一阶状态 Markov 假设:

p(ztz1:t1)=p(ztzt1).p(z_t\mid z_{1:t-1})=p(z_t\mid z_{t-1}).

观测条件独立假设:

p(xtz1:T,x1:t1)=p(xtzt).p(x_t\mid z_{1:T},x_{1:t-1})=p(x_t\mid z_t).

即给定当前隐状态后,当前观测不再依赖其他状态和观测。

4. 联合分布因子分解

HMM 的 DAG 是一条状态链,每个状态指向对应观测。因此

p(z1:T,x1:T)=p(z1)p(x1z1)t=2Tp(ztzt1)p(xtzt).p(z_{1:T},x_{1:T}) =p(z_1)p(x_1\mid z_1) \prod_{t=2}^T p(z_t\mid z_{t-1})p(x_t\mid z_t).

这个分解是所有推断与学习算法的起点。

5. 三类基本问题

5.1 评估

给定模型和观测序列,计算

p(x1:T)=z1:Tp(z1:T,x1:T).p(x_{1:T})=\sum_{z_{1:T}}p(z_{1:T},x_{1:T}).

直接枚举有 KTK^T 条状态路径;前向算法把复杂度降到 O(TK2)O(TK^2)

5.2 解码

寻找最可能的完整状态路径:

z1:T=argmaxz1:Tp(z1:Tx1:T).z_{1:T}^*=\arg\max_{z_{1:T}}p(z_{1:T}\mid x_{1:T}).

Viterbi 算法使用“最大值”动态规划。它与逐时刻选择最大边缘概率的结果并不一定相同。

5.3 学习

给定观测序列估计 π,A,B\pi,A,B。状态完全已知时可按频数或极大似然估计;状态隐藏时使用 Baum–Welch 算法,它是 EM 在 HMM 上的特例。

6. 前向变量

定义

αt(i)=p(x1:t,Zt=i).\alpha_t(i)=p(x_{1:t},Z_t=i).

初始化:

α1(i)=πip(x1i).\alpha_1(i)=\pi_i p(x_1\mid i).

递推:

αt(j)=p(xtj)iαt1(i)Aij.\alpha_t(j)=p(x_t\mid j)\sum_i\alpha_{t-1}(i)A_{ij}.

终止:

p(x1:T)=iαT(i).p(x_{1:T})=\sum_i\alpha_T(i).

其本质是把通向同一当前状态的历史路径概率合并。

7. 后向变量与平滑

定义

βt(i)=p(xt+1:TZt=i).\beta_t(i)=p(x_{t+1:T}\mid Z_t=i).

递推为

βt(i)=jAijp(xt+1j)βt+1(j),\beta_t(i)=\sum_jA_{ij}p(x_{t+1}\mid j)\beta_{t+1}(j),

βT(i)=1\beta_T(i)=1。前向与后向量结合可求平滑后验:

p(Zt=ix1:T)αt(i)βt(i).p(Z_t=i\mid x_{1:T}) \propto\alpha_t(i)\beta_t(i).

8. 过滤、预测与平滑

  • 过滤:p(Ztx1:t)p(Z_t\mid x_{1:t}),只用截至当前的观测;
  • 预测:p(Zt+hx1:t)p(Z_{t+h}\mid x_{1:t}),预测未来状态;
  • 平滑:p(Ztx1:T)p(Z_t\mid x_{1:T}),用未来观测反推过去状态。

这三类问题在一般状态空间模型中同样存在。

9. Viterbi 递推

定义到达状态 jj 的最佳路径分数

δt(j)=maxz1:t1p(z1:t1,Zt=j,x1:t).\delta_t(j)=\max_{z_{1:t-1}}p(z_{1:t-1},Z_t=j,x_{1:t}).

递推为

δt(j)=p(xtj)maxi[δt1(i)Aij].\delta_t(j)=p(x_t\mid j)\max_i[\delta_{t-1}(i)A_{ij}].

同时保存取得最大值的前驱指针,终点确定后反向回溯整条路径。

10. Baum–Welch 的统计量

E 步通过前向–后向计算:

γt(i)=p(Zt=ix1:T),\gamma_t(i)=p(Z_t=i\mid x_{1:T}),

以及

ξt(i,j)=p(Zt=i,Zt+1=jx1:T).\xi_t(i,j)=p(Z_t=i,Z_{t+1}=j\mid x_{1:T}).

M 步用这些“软计数”更新初始、转移和发射参数。EM 保证观测数据似然不下降,但只能保证收敛到局部驻点。

11. 数值稳定

长序列中大量小概率相乘会下溢。常见处理:

  • 每个时刻对前向、后向量缩放并累计缩放因子;
  • 在对数域计算,把乘法变成加法,并用 log-sum-exp 处理求和;
  • Viterbi 直接在对数域把乘积最大化改为和最大化。

12. HMM 的局限与扩展

HMM 的状态持续时间隐含几何分布,观测只依赖当前离散状态。扩展包括高阶 HMM、隐半 Markov 模型、线性动态系统、切换状态空间模型以及用神经网络参数化转移和发射分布。

13. 易错点

  1. 最可能路径不等于每个时刻最可能状态的拼接。
  2. HMM 的观测序列通常不是独立的;它们通过隐状态相关。
  3. 状态编号可置换,导致参数标签不可识别,但预测分布不变。
  4. 零转移概率会永久禁止某些路径,初始化要谨慎。

常见问答

Q1:为什么“隐”状态仍能学习?
不同状态对观测产生不同分布,序列中的统计模式提供间接证据;EM 对状态后验进行软分配。

Q2:前向算法和 Viterbi 有什么本质区别?
前向对所有路径求和以算总概率;Viterbi 对路径取最大值以找最佳路径。

Q3:HMM 能处理连续观测吗?
可以,只需把发射概率表换成高斯、混合高斯等密度模型。

Q4:为什么 Baum–Welch 对初始化敏感?
观测似然通常非凸,EM 可能收敛到不同局部最优或退化解。

练习

  1. 为两状态、三个时刻的 HMM 写出完整联合概率分解。
  2. 说明直接求 p(x1:T)p(x_{1:T}) 的复杂度为什么是 O(KT)O(K^T),前向算法为何是 O(TK2)O(TK^2)
  3. 写出 p(Zt=ix1:T)p(Z_t=i\mid x_{1:T}) 的归一化表达式。
  4. 比较过滤和平滑所使用的观测范围。

答案与提示

  1. p(z1)p(x1z1)p(z2z1)p(x2z2)p(z3z2)p(x3z3)p(z_1)p(x_1\mid z_1)p(z_2\mid z_1)p(x_2\mid z_2)p(z_3\mid z_2)p(x_3\mid z_3)
  2. 路径数为 KTK^T;动态规划每个时刻的每个新状态对 KK 个旧状态求和,共约 TK2TK^2
  3. αt(i)βt(i)/jαt(j)βt(j)\alpha_t(i)\beta_t(i)/\sum_j\alpha_t(j)\beta_t(j)
  4. 过滤只用 x1:tx_{1:t},平滑使用完整 x1:Tx_{1:T}