隐马尔科夫模型
1. 历史背景
2. 问题引入
假设有一个由多个可观测的样本组合的序列 $\mathbf{x}=(x_1,x_2,\dots,x_T)$,我们称之为观测序列。观测序列中的 $t$ 可以指时间、染色体或 DNA 上位点的索引或单词在句子中的位置,对于每个 $t\in1,2,\dots,T$,我们希望得到一个对应的感兴趣的隐藏状态变量 $z_t\in \mathcal{Z}$,其中 $\mathcal{Z}$ 是有限的集合,由 $z_t$ 组成的序列称为状态序列 $\mathbf{z}$。例如在词性标注中,观测序列就是文档中的 $t$ 个单词,状态序列就是每个单词对应的词性标签。
试想一下,如果用之前的机器学习方法可以怎么做?
可以用贝叶斯估计,最大似然条件概率 $\displaystyle\arg\max \frac{p(X=\mathbf{x}|Z=\mathbf{z})p(Z=\mathbf{z})}{p(X=\mathbf{x})}$,显然单词间的组合太多了,需要的样本量之多几乎不可能做到,只能利用朴素贝叶斯的思想,假定 $(x_i,z_i)$ 与 $(x_j,z_j)$ 相互独立,这样我们就可以对每一个单词给出一个最大后验概率 $\displaystyle\hat{z}_t=\arg\max p(X_t={x_t}|Z_t={z_t})p(Z_t={z_t})$。但这显然是不合理的,最终只能给出每个单词的所属词性最大概率的一个,但实际上每个单词与前后文相关,而在朴素贝叶斯中却无法体现出来。
为了考虑时序的概率情况,隐马尔科夫模型被提了出来。隐马尔科夫是在马尔科夫链的基础上提出来的,它们之间的不同之处就在于,马尔科夫链中的状态都是可观测的,而隐马尔科夫模型中存在不可观测的状态,但它们之间的根本原理都是无后效性,即未来状态只与当前的状态有关,即
隐马尔科夫模型中存在一个隐藏的马尔科夫链,也就是状态序列 $Z=(Z_0,Z_1,\dots,Z_T)$,状态集合为 $\mathcal{Z}$,对于任意两个状态 $i,j\in\mathcal{Z}$ 都可以给出一个转移概率
因此最终可以得到一个状态转移概率矩阵
同时存在另一个随机变量序列 $X=(X_0,X_2,\dots,X_T)$ 称为观测序列,它的取值来自于观测空间 $\mathcal{X}$,我们假设观测具有独立性,即任意时刻的观测只依赖于该时刻的马尔科夫链的状态,而与其他时刻观测及状态无关。因此,在给定时刻 $t$ 状态 $b_j$ 的情况下,都可以得到对应观测值 $k$ 的概率
进一步地可以得到一个观测概率矩阵
最后还需要确定初始状态概率 $\pi=(\pi_1,\pi_2,\dots,\pi_N)$,其中
通过初始状态概率向量 $\pi$、状态转移概率矩阵 $A$,观测概率矩阵 $B$ 就可以确定隐马尔科夫模型,它们也称为隐马尔科夫模型的三要素
可以发现,隐马尔科夫是基于无后效性和观测独立性假设提出来的。观测独立性假设,即任意时刻的观测结果只与该时刻的马尔科夫链的状态有关,与其他状态及观测无关
有了三要素,给定序列长度 $T$ 就可以生成一个对应的观测序列,而概率矩阵的拟合根据数据是否标记可采用不同的学习算法。最终想要隐马尔科夫模型进行预测需要解决一下三个问题
- 学习问题。已知观测序列 $\mathbf{x}=(x_1,x_2,\dots,x_T)$,估计模型 $\lambda=(A,B,\pi)$ 参数,使得在该模型下的观测序列概率 $P(\mathbf{x}|\lambda)$ 最大,也就是用最大似然估计的方法来估计模型参数。
- 先验概率问题。给定模型 $\lambda=(A,B,\pi)$ 和观测序列 $\mathbf{x}=(x_1,x_2,\dots,x_T)$,计算在模型 $\lambda$ 下观测序列 $\mathbf{x}$ 出现的概率 $P(\mathbf{x}|\lambda)$,也就是先验概率。
- 预测问题。已知模型 $\lambda=(A,B,\pi)$ 和观测序列 $\mathbf{x}=(x_1,x_2,\dots,x_T)$,求在给定观测序列下条件概率 $P(\mathbf{z}|\mathbf{x})$ 最大的状态序列 $\mathbf{z}=(z_1,z_2,\dots,z_T)$。
3. 先验概率计算算法
给定模型 $\lambda=(A,B,\pi)$ 和观测序列 $\mathbf{x}=(x_1,x_2,\dots,x_T)$,计算观测序列 $\mathbf{x}$ 出现的概率 $P(\mathbf{x}|\lambda)$,也就是先验概率。
通过概率公式可以直接计算,通过列举所有长度为 $T$ 可能的状态序列 $\mathbf{z}=(z_1,z_2,\dots,z_T)$,求每个状态序列 $\mathbf{z}$ 与观测序列 $\mathbf{x}$ 的联合概率 $P(\mathbf{x}, \mathbf{z}|\lambda)$,然后对所有可能的状态序列求和,就可以得到先验概率 $P(\mathbf{x}|\lambda)$。
状态序列 $\mathbf{z}=(z_1,z_2,\dots,z_T)$ 的概率
给定状态序列,观测序列的条件概率为
因此状态序列 $\mathbf{z}$ 和观测序列 $\mathbf{x}$ 联合概率为
然后对所有可能的状态序列 $\mathbf{z}$ 求和,得到观测序列 $\mathbf{x}$ 的概率为
状态序列 $\mathbf{z}$ 的可能情况有 $N^T$ 种,因此时间复杂度为 $O(TN^T)$,通过动态规划的思想可以将算法进行优化。
3.1 前向算法
从上可以知道观测序列的概率
对于不同的状态序列都需要重新计算一遍该公式,但依照动态规划的思想,中间计算结果可以保存下来从而减少计算量,假设 $T=3$ 的情况下
我们可以发现
以上 $\alpha_t(z_t)$ 就是每次重复计算的过程结果,如果保存下来的话就可以减少计算量,通过推导可以得到递推公式
$\alpha$ 实际上就是时刻 $t$ 给定部分观测序列 $x_1,x_2,\dots,x_t$ 且状态为 $i$ 的概率,称为前向概率
如果状态空间的数量为 $4$,那么原本需要计算 $444$ 次,而上述算法只需要 $44+44$ 次,时间复杂度由 $O(TN^T)$ 降到了 $O(TN^2)$
有了递推公式之后,动态规划算法还需要初始化状态和终止条件,前向算法如下
- 初始化状态 $\alpha_1(i)=\pi(i)b_i(x_1)$。
- 对于每一时刻 $t=1,2,\dots,T-1$ 计算
- 最终计算结束状态
3.2 后向算法
前向算法是从初始状态向结束状态进行计算,后向算法则是从结束状态向前得到递推公式,同样在假设 $T=3$ 的情况下
对于 $t=2$ 时,根据观测独立性假设有 $P(x_3|z_3) = P(x_3|z_3,z_2)$,因此
并且
通过归纳可以推导出递推公式
$\beta_t$ 即为在时刻 $t$ 状态为 $i$ 的条件下,从 $t+1$ 到 $T$ 的部分观测序列的概率,称为后向概率
后向算法同样需要确定初始化状态和终止条件
- 初始化状态 $\beta_T(i)=1$。
- 对于每一时刻 $t=1,2,\dots,T-1$ 计算
- 最终计算结束状态
3.3 概率计算
有了前向概率和后向概率,可以直接计算一些概率值。
由前向概率和后向概率的定义可以知道
因此,在某一时刻 $t$,观测序列的概率 $P(\mathbf{x}|\lambda)$ 可以由该时刻的前向和后向概率计算
给定观测序列 $\mathbf{x}$ 和模型参数 $\lambda$,在时刻 $t$ 状态为 $i$ 的条件概率为
因此,由前向和后向概率可得
给定观测序列 $\mathbf{x}$ 和模型参数 $\lambda$,在时刻 $t$ 状态为 $i$ 且时刻 $t+1$ 的状态为 $j$ 的条件概率为
通过前向后向概率计算
给定观测序列 $\mathbf{x}$ ,状态 $i$ 出现的期望值
给定观测序列 $\mathbf{x}$ ,由状态 $i$ 转移的期望值
给定观测序列 $\mathbf{x}$ ,由状态 $i$ 转移的期望值
4. 学习算法
隐马尔科夫模型参数的学习可分为监督学习与无监督学习。
4.1 监督学习
在监督学习中,观测序列相当于特征值,状态序列相当于标注结果,假设给出数据集
其中,观测序列 $\mathbf x_i$ 与状态序列 $\mathbf z_i$ 长度均为 $T$,因此可以通过最大似然估计来确定隐马尔科夫模型的参数。
假设样本中时刻 $t$ 处于状态 $i$ 时刻 $t+1$ 转移到状态 $j$ 的频数为 $c_{ij}$,状态空间的总数为 $N$,那么状态转移概率 $a_{ij}$ 的估计为
设样本状态 $j$ 并观测为 $k$ 的频数是 $d_{ij}$,观测空间的总数为 $M$,那么状态为 $j$ 时观测为 $k$ 的概率估计为
初始状态概率 $\pi_i$ 的估计 $\hat{\pi}_i$ 为 $S$ 个样本中初始状态为 $i$ 的频率。
4.2 无监督学习
如果给定训练数据只包含 $S$ 个长度为 $T$ 的观测序列,而缺少状态序列,那么状态序列可以视为不可观测的隐藏变量,隐马尔科夫模型实际上就是一个存在隐藏变量的概率模型
我们可以使用 EM 算法求解上述概率模型,同时应用在 HMM 中的 EM 算法也称为 Baum-Welch 算法。由之前已经推导出,第 $k+1$ 次迭代只需要最大化下式即可。
由隐马尔科夫三要素可以得到完全数据的似然函数为
相应的对数似然函数为
E 步,得到在 $\lambda_k$ 下的上述对数似然函数的期望
M 步,最大化上述期望,可以分别最大化等式中的每一项。
a. 更新初始状态概率 $\pi$
对上式进行优化,$\pi$ 是唯一变量,同时满足约束条件 $\displaystyle\sum_{z_1=i}^N\pi(z_1)=1$,利用拉格朗日乘子法,得到拉格朗日函数
对其求偏导数并令结果为 0
可得
对上式进行合并
条件概率之和为 1,最终可得
因此求得
由前面已经得到
因此解的
b. 更新状态转移概率 $A$
前面已经求得
因此
如同计算初始状态概率,需要满足约束条件 $\displaystyle \sum_j a_{ij}=1$,通过拉格朗日乘子法得到拉格朗日函数
偏导数
根据 $j$ 的所有取值合并上述公式
根据条件概率
因此
最终解得
c. 更新观测概率 $B$
同样具有约束条件 $\displaystyle \sum_{k=1}^Mb_j(k)=1$,因此拉格朗日函数
偏导数
合并 $k$ 个方程,解得 $\displaystyle\theta=-\sum_{t=1}^{T}\gamma_{t}(j)$,因此
注意这里是对 $k$ 求和的结果为 $1$,同时 $b_j(k)$ 相当于固定变量,而 $b_j(x_t)$ 只有在 $x_t=k$ 的情况下才是同一个值,才具有偏导数。
总结
5. 预测算法
已知 $\mathbf{x},\lambda$,求得状态概率 $P(\mathbf{z}|\mathbf{x},\lambda)$ 即为预测问题。
隐马尔科夫模型预测分为近似算法和维特比算法,近似算法相当于路径规划中每走一步只选最短的路线,也就是贪婪算法,而维特比算法则相当于动态规划算法。
5.1 近似算法
由前已知
因此,在给定 $\mathbf{x},\lambda$ 的情况下,想要得到隐藏的状态序列,可以在每一时刻 $t$ 选择最大的条件概率 $P(z_t=i|\mathbf{x},\lambda)$ 对应的隐藏状态 $\hat{z}_t$,由于分母都一样,因此只需要考虑分子即可,即
由此得到状态序列
5.2 维特比算法
近似算法相当于单步最优,要想得到全局最优的结果,则需要根据联合分布函数得到联合概率最大对应的状态,即
我们分步求取当前的联合概率,假设
在最终预测的时候模型参数 $\lambda$ 确定,因此可以省略。联合概率为
定义
对于 $t=2,\dots,T$ 且 $i=1,\dots,N$,$d_t(i)$ 存在以下递归关系
再确定初始化和结束条件,最后完善维特比算法
维特比算法
- 初始化,对于 $i=1,2,\dots,N$,计算 $d_1(i)=\pi(i)b_i(x_1)$
- 对于 $t=2,3,\dots,T$,计算
- 最终得到 $\displaystyle z_T^*=\arg\max_jd_T(j)$
- 回溯,对于 $t=T-1,\dots,1$
- 返回 $\mathbf z^=(z^_1, z^_2, \dots, z^_T)$
当 $T$ 很大时,计算概率时的舍入误差可能会成为问题,为避免问题,可以使用对数计算
递推公式则为
参考
1. Hidden Markov model - Wikipedia
2. 隐马尔科夫模型(HMM)一基本模型与三个基本问题 - zhihu
3. Lecture notes: Hidden Markov Models
4. Lecture 9: Hidden Markov Model
5. History and Theoretical Basicsof Hidden Markov Models
6. Hidden Markov Models