隐马尔可夫模型(Hidden Markov Model)

隐马尔可夫模型(Hidden Markov Model)

隐马尔可夫模型(Hidden Markov Model, HMM)是一个重要的机器学习模型。直观地说,它能够解决一类这样的问题:有某样事物存在必定的状态,但咱们没法得知某个时刻(或位置)它所处在的状态,可是咱们有一个参照事物,咱们知道这个参照事物在某个时刻(或位置)的状态并认为参照事物的状态和原事物的状态存在联系,那么咱们可使用机器学习来推测原事物最有可能在一个时刻(或位置)处在什么样的状态。也就是说,这是一个基于几率统计的模型。算法

举一个直观的例子吧。好比你要预测某市连续\(n\)天内的天气是冷仍是热,可是你不知道这个城市的气温,你只知道某市某天冰淇淋的总销量,那么咱们能够训练隐马尔可夫模型来用上述数据推测城市的某天的天气最有多是冷仍是热。这里,咱们要预测的事物是天气,有 {冷,热} 两个状态,参照事物是冰淇淋销量,有\(\{1, 2, …\}\)等若干种有限的状态,要预测的结果是\(t\)时刻最有可能的天气状态。数组

下面咱们给出隐马尔可夫模型的严格数学定义。机器学习

1、马尔可夫链 (Markov Chain)

要介绍隐马尔可夫模型,必须先介绍马尔可夫链的基本概念。不严格地说,马尔可夫链是一个描述随机过程的数学模型。随机过程是指一个事物有一组状态,会随着时间的流逝按照必定几率随机变化的一个过程。马尔可夫链有两个重要假设,一是在\(t\)时刻事物状态变化的几率只与\(t\)时刻自己事物的状态有关,不与\(t-1\)时刻及以前的事物状态有关,二是从\(i\)状态改变到\(j\)状态的几率只与\(i\)\(j\)状态自己有关,与时间\(t\)的值无关。这些假设能够大大简化咱们对这个随机过程的研究,并且依然能够解释现实世界中的不少现象。函数

好比说,假如一个呼叫中心要接听电话,有两个状态:{没电话,有电话}。没电话时,下一秒有电话来的几率为\(p\),没电话来的几率为\(1-p\);正在打电话时,电话接着打的几率为\(q\),电话挂断的几率为\(1-q\)。这就构成了一个最简单的具备两个状态的以秒为离散时间单位的马尔可夫链。学习

下面咱们给出马尔可夫链的一个严格数学定义。spa

考察一个离散时间的随机过程\(X_n\),这个\(X_n\)在一组有限状态集合\(S=\{1, 2,…, N \}\)上取值,那么对每一个时刻\(t\),若是\(X_1=i_1, …, X_{t-1}=i_{t-1},X_t=i, \mbox{ and } i_1, i_2,…,i_{t-1},i\in S\),咱们定义\(t+1\)时刻\(X_{t+1}=j\)的几率code

\[ P_{ij}=P\{X_{t+1}|X_t=i, X_{t-1}=i_{t-1},…,X_1=i_1\} \]数学

咱们假设\(P_{ij}=P\{X_{t+1}|X_t=i\}\)。知足这个条件,就称此随机过程知足马尔可夫性。it

咱们再假设在任意\(t\)时刻,任意状态\(i\)到状态\(j\)的变化几率\(P_{ij}=p(i, j)\)(与\(t\)无关),\(p\)\(S\times S \rightarrow [0,1]\)的函数。知足这个条件,就称此随机过程知足时齐马尔可夫性。io

因而咱们能够将\(p(i, j)\)写成一个\(N \times N\)矩阵\(A=\{a_{ij}\}\)\(a_{ij}=p(i,j)\)。这个矩阵就是马尔可夫链的转移几率矩阵。

给定初始几率分布\(\phi(i)=P\{X_0=i\}\),那么就能获得任意一个具体的状态转移链的发生几率
\[ P\{X_0=i_0,X_2=i_2,...,X_n=i_n\}=\phi(i_0)p(i_0,i_1)p(i_1,i_2)...p(i_{n-1},i_n) \]

咱们还能够证实,\(n\)步转移几率\(p_n(i,j)\)就是矩阵\(A^n\)\((i,j)\)位置上的元素,即\(P\{X_{n+1}=j|X_n=i\}=A^n_{ij}.\)

咱们用一个图模型就能描述马尔可夫链。令全部的状态\(S=\{1,2,…, {N }\}\)为顶点集合,转移几率矩阵\(A\)描述图上的边,再定义特殊的开始状态和结束状态\(q_0,q_F\),矩阵第\(0\)行表示初始几率分布和初始的边便可。在以后的讨论中,咱们将频繁地用图来描述马尔可夫链。

2、隐马尔可夫模型(HMM)

隐马尔科夫模型(HMM)是马尔可夫链的一个拓展。一个HMM含有以下元素:

  1. 一组内部状态序列\(Q=q_1q_2,…,q_T\)\(q_i\in S=\{1, 2, .., N\}\)\(S\)是状态集合,有\(N\)种状态。
  2. 一个\(N\times N\)状态转移几率矩阵\(A=\{a_{ij}\}\). \(a_{ij}\)表示从状态\(i\)转移到状态\(j\)的几率。
  3. 一组对这个状态的外部观察序列\(O=o_1o_2…o_T\), 每一个观察从集合\(V=\{v_1,v_2,…,v_V\}\)中取值。
  4. 一个描述产生某样观察的可能性的序列\(B=b_i(o_t)\),表示\(t\)时刻对状态\(i\)观察到\(o_t\)的几率。
  5. 特殊的开始状态\(q_0\)和结束状态\(q_F\),用\(a_{01}a_{02}…a_{0n}\)表示初始状态到某个状态的几率分布,\(a_{1F}a_{2F}…a_{nF}\)表示某个状态转移到结束状态的几率分布。

对HMM而言以前谈的马尔可夫链的两个假设依然是必要的。

对于一个HMM,有三个根本性的问题须要解决:

  1. Likelihood:给定一个HMM的\(A\)\(B\)\(\lambda=(A,B)\)和观察序列\(O\),判断观察到这个\(O\)的几率\(P(O|\lambda )\)

  2. Decoding:给定一个HMM的\(A\)\(B\)\(\lambda=(A,B)\)和观察到的序列\(O\),判断最有可能的内部状态序列\(Q\)

  3. Learning:给定观察序列\(O\)和状态集合\(S\),学习HMM的参数\(A\)\(B\)

以后将会分别讨论解决这三个问题的算法,第三个会用到前两个的重要结论。

3、The Forward Algorithm

第一个问题的解决方案被称为Forward Algorithm,是一种动态规划算法。其思想是从时刻1开始计算一个时刻的全部状态下这个观察序列产出的几率,计算到时刻\(T\)并将全部状态的几率求和就获得了咱们的结果。

定义$\alpha_t(j) \(为\)t\(时刻产生给定观察序列\)o_1o_2…o_t\(,且内部状态为\)j$的几率。也就是
\[ \alpha_t(j)=P\{o_1,o_2,...,o_t,q_t=j|\lambda\} \]
咱们发现这个问题\(\alpha_t(j)\)只与\(t-1\)时刻的状态有关,由于若是咱们知道了\(t-1\)时刻产生观察序列\(o_1o_2…o_{t-1}\)而且处于状态\(i\)的几率,那么下一时刻处在状态\(j\)的几率就是以前处在状态\(i\)的几率乘以从状态\(i\)转移到状态\(j\)的几率再乘以产生观察\(o_t\)的几率,再将全部的状态$求和便可。

因此有以下递推式
\[ \alpha_t(j)=\sum_{i=1}^{N}\alpha_{t-1}(i)a_{ij}b_j(o_t) \]
初始状态
\[ \alpha_1(j)=a_{0j}b_j(o_1), 1\le j\le N \]
最后结果
\[ P(O|\lambda)=\sum_{i=1}^N\alpha_T(i)a_{iF} \]
这就是动态规划算法的递推式。

4、The Viterbi Algorithm

第二个问题的解决方法和第一个问题很是类似,都是动态规划算法。

相似地,定义\(v_t(j)\)表示前\(t\)时刻观察到了\(o_1o_2…o_t\)序列而且通过了最有可能的状态序列\(q_0q_1…q_{t-1}\),而且在\(t\)时刻处在状态\(j\)的几率,也就是说
\[ v_t(j)=\max_{q_0,q_1,...,q_t-1}P\{q_0,q_1,...,q_{t-1},o_1,o_2,...,o_t,q_t=j|\lambda\} \]
那么有以下递推方程
\[ v_t(j)=\max_{i=1}^{N}v_{t-1}(i)a_{ij}b_j(o_t) \]
初始状态
\[ v_{1j}=a_{0j}b_j(o_1),1\le j\le N \]
最终的最大几率
\[ P=\max_{i=1}^{N}v_T(i)a_{iF} \]

递推过程当中设置标记数组记录每一步选择了哪一个\(i\)就能在递推完后恢复出整个路径。

5、HMM训练:The Forward-Backward Algorithm

回顾一下要解决的问题:给定观察序列\(O\)和状态集合\(S\),学习HMM的参数\(A\)\(B\)。若是咱们学习到了这些参数,给定新的观察序列咱们就能评估出最有可能的内部状态序列。

这个算法的得出过程比较复杂,须要一些数学推导。

咱们先考虑马尔可夫链的状况。这个时候观察序列\(O\)直接与内部状态序列\(Q\)一一对应,那么咱们能够直接估计其转移几率矩阵。其中从状态\(i\)转移到状态\(j\)的几率\(a_{ij}\),就是从状态\(i\)转移到状态\(j\)的次数,除以从状态\(i\)转移到某个状态的总次数,也就是
\[ a_{ij}=\frac{C(i\rightarrow j)}{\sum_{q\in Q}C(i\rightarrow q)} \]

可是对于HMM,咱们不能从观察序列直接估计内部状态序列的几率。所以,算法的思路是先估计一个\(A\)\(B\),而后不断从新估计…直到收敛,以完成参数的训练。而对几率的估计须要用到前向几率\(\alpha_t(i)\)和后向几率\(\beta_t(i)\)(Forward and backward probabilities)。其中
\[ \alpha_t(i)=P\{o_1,o_2,...,o_t,q_t=i|\lambda\}\\ \beta_t(i)=P\{o_{t+1},o_{t+2},...,o_T|q_t=i,\lambda\} \]
\(\alpha_t(i)\)就是第一个算法里的\(\alpha_t(i)\)\(\beta_t(i)\)与之类似,但注意有所不一样,如此定义是为了其从后向前推导的计算过程与第一个算法相似,也就是
\[ \beta_T(i)=a_{iF}, 1 \le i \le N\\ \beta_t(i)=\sum_{j=1}^{N}a_{ij}b_j(o_{t+1})\beta_{t+1}(j), 1\le i\le N,1\le t < T \]
那么,要怎么估计\(a_{ij}\)呢?令记号\(\hat{a}_{ij}\)表示对\(a_{ij}\)的估计值,那么
\[ \hat a_{ij}=\frac{从状态i到状态j的指望转移次数}{从状态i转走的指望转移次数} \]
\(\xi_t\)为时刻\(t\)为状态\(i\),时刻\(t+1\)时为状态\(j\)的几率,即\(\xi_t(i,j)=P\{q_t=i,q_{t+1}=j|O,\lambda\}\).

这个东西不太好求,可是因为几率论公式
\[ P\{X|Y,Z\}=\frac{P\{X,Y|Z\}}{P\{Y|Z\}} \]
因此
\[ \begin{align} \xi_t(i,j)&=\frac{P\{q_t=i,q_{t+1}=j,O|\lambda\}}{P\{O|\lambda\}}\\ &=\frac{\alpha_t(i)a_{ij}b_j(o_{t+1})\beta_{t+1}(j)}{P\{O|\lambda\}} \end{align} \]
分母就是以前动态规划算法的结果,分子则是用两个动态规划算法的递推矩阵里的值计算。

那么
\[ \hat a_{ij}=\frac{\sum_{t=1}^{T-1}\xi_t(i,j)}{\sum_{t=1}^{T-1}\sum_{k=1}^{N}\xi_t(i,k)} \]

因此说只要给定了一个\(B\)的估计值,\(B=\{b_j(o_t)\}\),咱们就能估计一个\(A=\{a_{ij}\}\).

以后咱们有了一个\(A\),咱们还须要一个方法来估计\(B\)。对\(B\)中的每一个元素,在状态\(j\)观测到观察\(v_k\)的几率的估计是\(\hat{b}_j(v_k)\),咱们将其表示为
\[ \hat{b}_j(v_k)=\frac{状态j而且观测到v_k的总数指望}{状态j出现的总数指望} \]
为了计算\(\hat b_j(v_k)\),咱们须要知道在时间\(t\)处在状态\(j\)的几率\(\gamma_t(j)\)
\[ \gamma_t(j)=P\{q_t=j|O,\lambda\}=\frac{P\{q_t=j,O|\lambda\}}{P\{O|\lambda\}}=\frac{\alpha_t(j)\beta_t(j)}{P\{O|\lambda\}} \]
那么
\[ \hat b_j(v_k)=\frac{\sum_{t=1, s.t. o_t=v_k}^T\gamma_t(j)}{\sum_{t=1}^T\gamma_t(j)} \]
所以,对于算法而言,这是一个EM(Expectation, Maximization)算法,在E阶段咱们计算\(\xi\)\(\gamma\),在M阶段咱们估计\(A\)\(B\)直到收敛。算法伪代码以下

Forward-Backward(长度为T的观察,观察取值集合V,隐藏状态取值集合S):
    初始化A和B
    迭代直到收敛:
        # E阶段
        for each t and j:
            计算gamma[t][j]
        for each t, i and j
            计算xi[t][i][j]
        # M阶段
        计算A[i][j]
        计算B[j][v[k]]
    return A, B

参考文献

  1. Daniel Jurafsky, James H. Martin. Speech and Language Processing. Draft of August 7, 2017.
  2. Gregory F. Lawler. Introduction to Stochastic Processes(Second Edition). China Machine Press.
相关文章
相关标签/搜索