Alex_McAvoy

想要成为渔夫的猎手

隐马尔可夫模型的学习

【概述】

对于隐马尔可夫模型的学习问题,即:已知观测序列 $O=(o_1,o_2,\cdots,o_T)$,估计模型 $\lambda(A,B,\pi)$ 的参数,使得在该模型下观测序列概率 $P(O|\lambda)$ 最大,该问题本质上是无监督学习中的概率估计问题

根据训练数据包括观测序列和对应的状态序列,还是只有观测序列,可以分别由极大似然估计和 EM 算法来实现

  • 极大似然估计法:监督学习算法,需要使用标注的训练数据,而人工标注代价很高,往往不使用该方法
  • Baum-Welch 算法:EM 算法在隐马尔可夫模型学习中的具体实现,非监督学习算法

【极大似然估计法】

假设已给训练数据包含 $S$ 个长度相同的观测序列和对应的状态序列 $\{(O_1,I_1),(O_2,I_2),\cdots,(O_S,I_S)\}$,那么可利用极大似然估计来估计隐马尔可夫模型的参数

设样本中 $t$ 时刻处于状态 $i$ 于 $t+1$ 时刻转移到状态 $j$ 的频数为 ,那么状态转移 $a_{ij}$ 的估计为:

设样本中状态为 $j$ 并观测为 $k$ 的频数为 ,那么状态为 $j$ 观测为 $k$ 的概率 $b_j(k)$ 的估计为:

设样本中初始状态为 $q_i$ 的频率为 ,那么初始状态概率 $\pi_i$ 的估计为:

【Baum-Welch 算法】

基本思想

假定给定训练数据只包含 $S$ 个长度为 $T$ 的观测序列 $\{O_1,O_2,\cdots,O_S\}$,目标是学习隐马尔可夫模型 $\lambda=(A,B,\pi)$ 的参数

将观测序列数据看作观测数据 $O$,状态序列数据看作不可观测的隐数据 $I$,那么此时隐马尔可夫模型实际上是一含有隐变量的概率模型,即:

其参数可使用 EM 算法来估计

算法导出

对数似然函数的确定

将所有的观测数据写为 $O=(o_1,o_2,\cdots,o_T)$,所有的隐数据写为 $I=(i_1,i_2,\cdots,i_T)$,完全数据是 $(O,I)=(o_1,o_2,\cdots,o_T,i_1,i_2,\cdots,i_T)$

记 $\lambda$ 为要极大化的隐马尔可夫模型参数,那么 $(O,I)$ 的对数似然函数为:

E 步

记 $\overline{\lambda}$ 为隐马尔可夫模型参数的当前估计值,那么对 Q 函数 $Q(\lambda,\overline{\lambda})$,有:

由于观测序列 $O$ 与状态序列 $I$ 同时出现的联合概率为:

故 Q 函数可写为:

式中,求和均是对所有数据的序列总长度 $T$ 进行的

M 步

根据 $E$ 步,可以得出要极大化的参数在上式中单独的出现在 $3$ 个项中,因此仅需对各项分别极大化

1)对于第一项 $\sum\limits_{I} \log \pi_{i_1} P(O,I|\overline{\lambda})$,有:

可以发现,初始概率分布 $\pi_i$ 满足约束条件 $\sum\limits_{i=1}^N \pi_i = 1$,故利用拉格朗日乘子法,写出拉格朗日函数:

对其求偏导并令结果为 $0$,即:

可得:

对 $i$ 求和,有:

带回求偏导的项,可得:

2)对于第二项 $\sum\limits_{I} \bigg( \sum\limits_{t=1}^{T-1} \log a_{i_t,i_{t+1}} \bigg) P(O,I|\overline{\lambda})$,有:

类似第一项,应用约束条件 $\sum\limits_{i=1}^N a_{ij} = 1$ 的拉格朗日乘子法可求出:

3)对于第三项 $\sum\limits_I \bigg( \sum\limits_{t=1}^T \log b_{i_t}(o_t) \bigg) P(O,I|\overline{\lambda})$,有:

同样利用约束条件 $\sum\limits_{i=1}^N b_{j}(k) = 1$ 的拉格朗日法可求出:

在令该项的偏导为零时,只有在 $o_t=v_k$ 时,$b_j(o_t)$ 对 $b_j(k)$ 的偏导数才不为 $0$,故用 $I(o_t=v_k)$ 来表示

参数估计公式

将上述的三项的各概率分别用 $\gamma_t(i),\xi_t(i,j)$ 表示,那么可将相应的公式写为:

算法流程

输入:观测数据 $O=(o_1,o_2,\cdots,o_T)$

输出:隐马尔可夫模型参数 $A,B,\pi$

参数:迭代参数 $N$

算法步骤:

Step 1:算法初始化,对 $n=0$,选取 $a_{ij}^{(0)},b_j(k)^{(0)},\pi_i^{(0)}$,得到模型 $\lambda^{(0)}=(A^{(0)},B^{(0)},\pi^{(0)})$

Step 2:对 $n=1,2,\cdots,N-1$ 递推

其中,右端各值有观测序列 $O=(o_1,o_2,\cdots,o_T)$ 和模型 $\lambda^{(n)}=(A^{(n)},B^{(n)},\pi^{(n)})$ 计算

Step 3:得到模型参数

感谢您对我的支持,让我继续努力分享有用的技术与知识点!