??隐马尔可夫模型(HMM)是一种标注模型,描述由隐藏的马尔可夫链随机生成观测序列的过程,属于生成模型。其在语音识别,自然语言处理,模式识别等领域有着广泛的应用。
#### 1.基本概念
??友好起见,我们以例子来导出马尔可夫的定义
??大致明白隐马尔可夫模型是什么之后我们需要考虑它是干嘛的,能做什么。事实上隐马尔可夫模型有三个基本问题,解决这三个基本问题的过程也就是解决不同问题的过程,同时其问题描述也很明确,相信看完问题描述之后便对它能做什么有大致的了解。
(1) 概率计算问题。给定隐马尔可夫模型的参数\(\lambda=(A,B,\pi)\)和观测序列\(Y=(y_1,y_2,...,y_t)\),计算在该模型下观测 序列\(Y\)出现的概率\(P(Y|\lambda)\)。
(2) 学习问题。已知观测序列\(Y= (y_1,y_2,...,y_t)\),估计模型的参数\(\lambda=(A,B,\pi)\),使得该模型下的该观测序列发生的概率\(P(Y|\lambda)\)最大,即极大似然估计该模型参数。
(3) 预测问题,也称为解码(decoding)问题。已知模型\(\lambda=(A,B,\pi)\)和观测序列\(Y=(y_1,y_2,...,y_t)\),求使给定序列条件下状态序列的概率\(P(Q|Y)\)最大的状态序列,即给定观测序列,求最有可能生成该观测序列的状态序列。
??后面继续讨论如何计算这些问题以及如何简化这些问题。
??本问题可以通过前向和后向算法进行计算,不过先来看看该问题的直接解法,以及该方法为什么不可行。前面已经说过隐马尔可夫有两个基本假设,其计算基本都是基于它们来化简的,先考虑其基本用法,即一个观测序列可以如何简化表达,以三个观测序列为例\(P(y_1,y_2,y_3)\),其中共有K个状态
\[
\begin{aligned}
P(y_1,y_2,y_3) = & \sum_{q_3}^K\sum_{q_2}^K\sum_{q_1}^KP(y_1,y_2,y_3,q_1,q_2,q_3)\ = &\sum_{q_3}^K\sum_{q_2}^K\sum_{q_1}^KP(y_3|y_1,y_2,q_1,q_2,q_3)\cdot P(y_1,y_2,q_1,q_2,q_3)\ = &\sum_{q_3}^K\sum_{q_2}^K\sum_{q_1}^KP(y_3|q_3)\cdot P(q_3|y_1,y_2,q_1,q_2)\cdot P(y_1,y_2,q_1,q_2)\=& \sum_{q_3}^K\sum_{q_2}^K\sum_{q_1}^KP(y_3|q_3) \cdot P(q_3|q_2) \cdot P(y_1,y_2,q_1,q_2)\& \cdots \cdots\=& \sum_{q_3}^K\sum_{q_2}^K\sum_{q_1}^KP(y_3|q_3) \cdot P(q_3|q_2) \cdot P(y_2|q_2)\cdot P(q_2|q_1) \cdot P(y_1|q_1) \cdot P(q_1)\=& \sum_{q_3}^K\sum_{q_2}^K\sum_{q_1}^KP(y_3|q_3) \cdot P(q_3|q_2) \cdot P(y_2|q_2)\cdot P(q_2|q_1) \cdot P(y_1|q_1) \cdot \pi(\pi_1)
\end{aligned}
\]??虽然这一方法在直接计算法中没有用到,但是是后面化简都会用到的,所以先写在这儿。
?? 回忆问题,给定模型参数和一个观测序列,计算这个观测序列出现的概率\(P(Y,\lambda)\),若要直接计算,需考虑我们有哪些已知条件。首先初始状态概率\(\pi\)知道,状态转移概率矩阵A也知道,那么生成和这个观测序列相同长度的状态序列的概率\(P(Q|\lambda)\)就能表示出来了
\[P(Q|\lambda)=\pi_{q_1} a_{q_1q_2}a_{q_2q_3} \cdots a_{q_{t-1}q_{t}}\]??\(P(Y|\lambda)\)不能直接表达的原因是中间还有隐变量——转移状态,在固定状态下的观测概率B是已知的,那么已经得到了一串状态序列的概率,在这串状态序列下的观测是能够表示的,这便得到了
\[P(Y|Q,\lambda) = b_{q_i}(y_1)\cdot b_{q_2}(y_2)\cdots b_{q_t}(y_t)\]??有了这两个概率,隐变量和观测变量的联合概率分布可表示为
\[
\begin{aligned}
P(Y,Q|\lambda) =&P(Y|Q,\lambda) P(Q|\lambda)\=&\pi_{q_1}b_{q_1}(y_1)a_{q_1q_2}b_{q_2}(y_1)\cdots a_{q_{t-1}q_t}b_{q_t}(y_t)
\end{aligned}
\]??对于联合概率分布,可以求解其一个变量的边缘分布的和或积分得到另一个变量的分布,这是机器学习中常见的 手段,应熟练掌握,现对状态序列求和
\[
\begin{aligned}
P(Y|\lambda) =& \sum_QP(Y|Q,\lambda) P(Q|\lambda)\=& \sum_{q_t}^K \cdots \sum_{q_1}^K\pi_{q_1}b_{q_1}(y_1)a_{q_1q_2}b_{q_2}(y_1)\cdots a_{q_{t-1}q_t}b_{q_t}(y_t)
\end{aligned}
\]??这个计算量是非常大的,T个观测序列,每个序列有K种可能的状态,且内部还有T个乘积需要计算,相当于T个for循环,每个循环执行K次,每次的复杂度T,那么总复杂度\(O(TK^T)\)。
??为了简化,首先定义了前向概率表达,对于隐马尔可夫模型\(\lambda\),定义在时刻 t 的观测序列为\((y_1,y_2,...,y_t)\)且状态为\(q_t = i\)的概率为前向概率\(\alpha_t(i)\),即
\[
\alpha_t(i) = P(y_1,y_2,...,y_t,q_t = i |\lambda)
\]??下面通过这个前向概率推导\(P(Y|\lambda)\)的递推表达式
\[
\begin{aligned}
\alpha_1(i) = & P(y_1,q_1 = i | \lambda)\=&\pi(\pi_i)bi(y_1)\,&\\alpha_2(i)=&P(y_1,y_2,q_2 = i)\=&\sum_jP(y_1,y_2,q_2 = i,q_1 = j)\=&\sum_jP(y_2|q_2 = i)P(q_2 = i|q_1 =j)\cdot \alpha_1(j)\=&P(y_2|q_2)\sum_jP(q_2 = i|q_1 = j) \cdot \alpha_1(j)\&\cdots\\alpha_t(i)=&P(y_t|q_t = i)\sum_jP(q_t = i|q_{t-1} = j) \cdot \alpha_{t-1}(j)\=&b_i(y_t)\sum_ja_{ji}\cdot \alpha_{t-1}(j)
\end{aligned}
\]??注意求第二个前向概率的时候,为了化简式子,引入了\(q_1\)但将它当作边缘概率求和去掉了。这个递推式就这样神奇的得到了 t 时刻状态为 \(q = i\) 的概率,得到t 时刻的前向概率的表达式后,根据它的定义\(\alpha_T(i) = P(y_1,y_2,...,y_T,q_t = i|\lambda)\)可知,计算\(P(Y|\lambda)\)只需要将 t 时刻的所有状态的概率求和就可以了(边缘概率)
\[P(Y|\lambda) = \sum_i^K\alpha_T(i)\]??而且这个递推式极大的简化了计算量,因为在计算下一个时刻的前向概率的时候,上一个时刻的前向概率是已经算出来了的,只需做少量乘法,最后的复杂度为\(O(KT)\)。
??明白前向算法的推导过程后,后向算法的思想其实是一样的,并且得到的结果都一样,只不过后向是从后面往前面推,前向可与后向算法组合在一起表达\(P(Y|\lambda)\)
定义:
??给定隐马尔可夫模型\(\lambda\),定义在 t 时刻 且状态为\(q_t = i\)的条件下,从 t + 1 时刻到 T 时刻的观测序列的概率为后向概率,即
\[\beta_t(i) = P(y_{t+1},y_{t+2},...,y_T| q_t = i, \lambda) \]??注意观测数据是从 t + 1 时刻开始的,并且\(\beta_t(i) = 1\),
\[
\begin{aligned}
\beta_T(i) = & 1\,&\\beta_{T-1}(i)=&P(y_T|q_{T-1} = i,\lambda)\=&\sum_{j}^KP(y_T,q_T=j|q_{T-1} = i,\lambda)\=&\sum_j^KP(y_T|q_T =j)P(q_T = j|q_{T-1} =i)\=&\sum_j^Kb_j(y_T)a_{ij} \beta_T(j)\&,\\beta_{T-2}(i)=&P(y_{T-1},y_T|q_{T-2} = i, \lambda)\=&\sum_{j}^K P(y_{T-1},y_T,q_{T-1} = j|q_{T-2} = i, \lambda)\(乘法公式)=&\sum_{j}^K P(y_T|q_{T-1} = j)\cdot P(y_{T-1}|q_{T-1}=j)\cdot P(q_{T-1}=j|q_{T-2} = i,\lambda)\=&\sum_j^K \beta_{T-1}(j)\cdot b_j(y_{T-1})a_{ij}\&\cdots\\beta_t(i)=&\sum_j^K\beta_{t+1}(j)\cdot b_j(y_{t+1})\cdot a_{ij}
\end{aligned}
\]??同样,得到后向概率的表达式后,根据其定义\(\beta_t(i) = P(y_{t+1},y_{t+2},...,y_T| q_t = i, \lambda)\),所求序列为1-T,但t 至少为1 ,这使得该表达式缺少了第一个观测值的概率,不过这很简单,乘上\(\pi_i b_{i}(y_1)\)即可,通过后向概率得到\(P(Y|\lambda)\)
\[
P(Y|\lambda) = \sum_i^K\pi_i b_i(y_1)\beta_1(i)
\]??从刚刚这个求和运算中发现后向概率的定义从 t + 1 时刻开始似乎不方便,但是当它和前向概率结合时,就会发现,应当如此!
??(1)计算\(P(q_t = i|Y,\lambda),Y = (y_1,y_2,...y_T)\)时,即计算给定一串序列情况下其第 t 时刻的状态为 i 的几率,利用前向与后向概率,先计算t 时刻状态与观测的联合分布
\[
\begin{aligned}
P(Y,q_t = i | \lambda) = &P(Y|q_t = i)\cdot P(q_t = i)\=& P(y_1,\cdots,y_t|q_t = i)\cdot P(y_{t+1},\cdots ,y_T|q_t = i)\cdot P(q_t = i)\=& P(y_1,\cdots,y_t,q_t = i)\cdot P(y_{t+1},\cdots ,y_T|q_t = i)\=& \alpha_t(i)\cdot \beta_t(i)
\end{aligned}
\]??即序列中某个时刻 t 的状态与观测的联合分布可用前向与后向拼接而成,由该联合分布可得观测的分布
\[P(Y|\lambda) = \sum_i^KP(Y,q_t = i|\lambda)=\sum_i^K\alpha_t(i)\beta_t(i)\]??再根据条件概率或乘法公式
\[P(q_t = i|Y,\lambda) =\frac {P(Y,q_t = i|\lambda)} {P(Y|\lambda)}= \frac {\alpha_t (i) \beta_t(i)} {\sum_i\alpha_t(i) \beta_t(i)}\]
??(2)给定模型参数和观测序列Y,求在时刻 t 处于状态 i 且在时刻 t + 1 处于状态 j 的概率,大概已经找到窍门了,就是通过其联合概率和观测概率
\[
\begin{aligned}
P(q_t =i,q_{t+1}=j|Y,\lambda) = & \frac {P(q_t =i ,q_{t+1} = j,Y, \lambda)} {P(Y|\lambda)}\=& \frac {P(q_t =i ,q_{t+1} = j,Y, \lambda)} {\sum_i^K\sum_j^KP(q_t =i ,q_{t+1} = j,Y, \lambda)}\\end{aligned}
\]其中,
\[
\begin{aligned}
P(&q_t =i ,q_{t+1} = j,Y, \lambda)\=&P(Y|q_t=i,q_{t+1} = j)P(q_t=i,q_{t+1} = j)\=&P(y_T,y_{T-1},\cdots,y_{t+1}|q_t=i,q_{t+1}=j)P(y_t,\cdots,y_1|q_t=i,q_{t+1}=j)P(q_{t+1}=j,q_t=i)P(q_t=i)\=&P(y_T,y_{T-1},\cdots,y_{T+2}|q_{t+1}=j)P(y_{T+1}|q_{t+1} = j)P(y_T,\cdots,y_1,q_t=i)P(q_{t+1}=j,q_t = i)\=&\beta_{t+1}(j)b_j(y_{t+1})\alpha_t(i)a_{ij}
\end{aligned}
\]??此过程中应仔细考虑马尔可夫的两个基本假设,确定其中哪些变量是相互独立的,还有哪些是我们之前已经求出来的。这里以 t 和 t + 1 为界将观测量分开,这样时刻 t 和 时刻 t + 1 的状态都只能作用 于其中一边了。带入原式
\[
P(q_t =i,q_{t+1}=j|Y,\lambda) = \frac {\alpha_t(i)a_{ij}b_j(y_{t+1})\beta_{t+1}(j)} { \sum_i^K\sum_j^K\alpha_t(i)a_{ij}b_j(y_{t+1})\beta_{t+1}(j)}
\]
(3)上面计算出的两个概率求和可以方便的表示一些有用的期望
?? 1> 在观测Y下状态 i 出现的期望
\[
\sum_t^TP(q_t=i|Y,\lambda)
\]??2> 在观测Y下由状态 i 转移的期望
\[
\sum_i^{T-1}P(q_t = i | Y, \lambda)
\]?? 3>在观测Y下由状态 i 转移到状态 j 的期望
\[
\sum_i^{T-1} P(q_t = i,q_{t+1} = j|Y, \lambda)
\]
原文:https://www.cnblogs.com/breezezz/p/11180911.html