隐马尔可夫模型

隐马尔可夫模型是关于时序的概率模型,描述由一个隐藏的马尔可夫链随机生成不可观测的状态随机序列。再由各个状态生成一个观测而产生观测随机序列的过程。隐藏的马尔可夫链随机生成的状态的序列,称为状态序列;每个状态生成一个观测,而由此产生的观测的随机序列,称为观测序列。序列的每一个位置又可以看作是一个时刻。

隐马尔科夫模型由初始概率分布、状态转移概率分布以及观测概率分布确定。定义如下:
设Q是所有可能的状态集合,V是所有可能的观测的集合
\(Q={q_1,q_2,\cdots,q_N},V={v_1,v_2,\cdots,v_M}\)
其中N是可能的状态数,M是可能的观测数。
I是长度为T的状态序列(隐藏不可见),O是对应的观测序列
\(I=(i_1,i_2,\cdots,i_T),O=(o_1,o_2,\cdots,o_T)\)
A是状态转移概率矩阵:\(A=[a_{ij}]_{NXN}\),其中\(a_{ij}=P(i_{i+1}=q_j|i_t=q_i),i=1,2,\cdots,N;j=1,2,\cdots,N\)
是在时刻t处于状态\(q_i\)的条件下在时刻t+1转移到状态\(q_j\)的概率
B是观测概率矩阵:\(B=[b_j(k)]_{NXM}\),其中,\(b_j(k)=P(o_t=v_k|i_t=q_j),k=1,2,\cdots,M;j=1,2,\cdots,N\)
是在时刻t处于状态\(q_j\)的条件下生成观测\(v_k\)的概率
\(\pi\)是初始状态概率向量\(\pi=(\pi_i)\),其中,\(\pi=P(i_1=q_i)\)是时刻t=1处于状态\(q_i\)的概率

由初始状态概率向量\(\pi\)、状态转移概率矩阵A和观测概率矩阵B决定。\(\pi\)和A决定状态序列,B决定观测序列。因此,隐马尔科夫模型\(\lambda\)可以用三元符号表示,即\(\lambda=(A,B,\pi)\)
状态转移概率矩阵A与初始状态概率向量\(\pi\)确定了隐藏的马尔可夫链,生成不可观测的状态序列。观测概率矩阵B确定了如何从状态生成观测,与状态序列综合确定了如何产生观测序列。
从定义上看,隐马尔科夫模型作了两个基本假设:
(1)齐次马尔科夫性假设,即假设隐藏的马尔可夫链在任意时刻t的状态只依赖于前一时刻的状态,与其他时刻的状态及观测无关,也与时刻t无关。\(P(i_t|i_{t-1},o_{t-1},\cdots,i_1,o_1)=P(i_t|i_{t-1}),t=1,2,\cdots,T\)
(2)观测独立性假设,即假设任意时刻的观测只依赖于该时刻的马尔可夫链的状态,与其他观测及状态无关
\(P(o_t|i_T,o_T,i_{T-1},o_{T-1},\cdots,i_{t+1},o_{t+1},i_t,i_{t-1},o_{t-1},\cdots,i_1,o_1)=P(o_t|i_t)\)

观测序列的生成
\(i_1 \to i_2 \to \cdots,\to i_T \\ \downarrow \qquad \downarrow \qquad \quad \quad \downarrow \\ o_1 \quad o_2 \qquad \quad \quad o_T\)

隐马尔科夫模型的3个基本问题
(1)概率计算问题,给定模型\(\lambda=(A,B,\pi)\)和观测序列\(O=(o_1,o_2,\cdots,o_T)\),计算在模型\(\lambda\)下观测序列O出现的概率\(P(O|\lambda)\)
(2)学习问题,已知观测序列\(O=(o_1,o_2,\cdots,o_T)\),估计模型\(\lambda=(A,B,\pi)\)参数,使得在改模型下观测序列概率\(P(O|\lambda)\)最大,即用极大似然估计的方法估计参数
(3)预测问题,也称为解码问题。已知模型\(\lambda=(A,B,\pi)\)观测序列\(O=(o_1,o_2,\cdots,o_T)\),求给定观测序列条件概率P(I|O)最大的状态序列\(I=(i_1,i_2,\cdots,i_T)\).即给定观测序列,和模型参数,求最有可能的对应的状态序列(隐序列)

概率计算方法
1.直接计算法
\(P(O|\lambda) = \sum P(O,I|\lambda)=\sum P(O|I,\lambda)P(I|\lambda)\)
计算量很大,是\(O(TN^T)\)

2.前向算法
前向概率
给定隐马尔可夫模型\(\lambda\),定义到时刻t部分观测序列为\(o_1,o_2,\cdots,o_t\)且状态为\(q_i\)的概率为前向概率,记作\(a_t(i)=P(o_1,o_2,\cdots,o_t,i_t=q_t|\lambda)\)
可以递推地求得前向概率\(a_t(i)\)及观测序列概率\(P(O|\lambda)\)
观测序列概率的前向算法
输入:隐马尔科夫模型\(\lambda\),观测序列O
输出:观测序列概率\(P(O|\lambda)\)
(1)初值
\(a_1(i)=P(o_1,i_1=q_i|\lambda)=P(o_1|i_1=q_i,\lambda)P(i_1=q_i|\lambda)=b_i(o_1)\pi_i,i=1,2,\cdots,N\)
(2)递推 对\(t=1,2,\cdots,T-1\)
\(a_{i+1}(i)=[\sum_{j=1}^Na_t(j)a_{ji}]b_i(o_{t+1}),i=1,2,\cdots,N\)
(3)终止
\(P(O|\lambda)=\sum_{i=1}^Na_T(i)\)

预测算法
1.近似算法
近似算法的想法是,在每个时刻t选择在该时刻最有可能出现的状态\(i_t^*\),从而得到一个状态序列\(I^*=(i_1^*,i_2^*,\cdots,i_T^*)\),将它作为预测的结果。
给定隐马尔科夫模型\(\lambda\)和观测序列O,在时刻t处于状态\(q_i\)的概率\(\gamma_t(i)\)\(\gamma_t(i)=\frac{\alpha_t(i)\beta_t(i)}{P(O|\lambda)}=\frac{\alpha_t(t)\beta_t(i)}{\sum_{j=1}^N \alpha_t(j)\beta_t(j)}\)
在每一时刻t最有可能的状态\(i_t^*\)\(i_t^*=argmax_{1 \leq i \leq N[\gamma_t(i)]},t=1,2,\cdots,T\)
从而得到状态序列\(I^*=(i_1^*,\cdots,i_T^*)\)
近似算法的优点是计算简单,其缺点是不能保证预测的状态序列整体是最优可能的状态序列。
2.维特比算法
维特比算法实际是用动态规划解马尔科夫模型预测问题,即用动态规划求概率最大路径,这时一条路径对应着一个状态序列。
根据动态规划原理,最优路径具有这样的特性:如果最优路径在时刻t通过结点\(i_t^*\),那么这一路径从结点\(i_t^*\)到终点\(i_T^*\)的部分路径,对于从\(i_t^*\)\(i_T^*\)的所有可能的部分路径来说,必须是最优点。依据这一原理,我们只需从时刻t=1开始,递推地计算在时刻t状态为i的各条部分路径的最大概率,直至得到时刻t=T状态为i的各条路径的最大概率。时刻t=T的最大概率即为最优路径的概率\(P^*\),最优路径的终结点\(i^*_T\)也同时得到。之后,为了找出最优路径的各个节点,从终结点\(i_T^*\)开始,由后向前逐步求得节点\(i_{T-1}^*,\cdots,i_1^*\),得到最优路径\(I^*=(i_1^*,\cdots,i_T^*)\),这就是维特比算法

首先导入两个变量\(\delta , \psi\).定义在时刻t状态为i的所有单个路径\((i_1,i_2,\cdots,i_t)\)中概率最大值为\(\delta_t(i)=max P(i_t=t,i_{t-1},\cdots,i_1,o_t,\cdots,o_1|\lambda) \\ =max_{1\leq j\leq N}[\delta_t(j)a_{ji}]b_i(o_{t+1}),i=1,2,\cdots,N;t=1,2,\cdots,T-1\)
定义在时刻t状态为i的所有单个路径\((i_1,\cdots,i_{t-1},i)\)中概率最大的路径的第t-1个结点为\(\psi_t(i)=argmax_{1\leq j \leq N}[\delta_{t-1}(j)a_{ji}],i=1,2,\cdots,N\)

维特比算法
输入:模型\(\lambda=(A,B,\pi)\)和观测\(O=(o_1,o_2,\cdots,o_T)\)
输出:最优路径\(I^*=(i_1^*,\cdots,i_T^*)\)
(1)初始化:
\(\delta_1(i)=\pi_ib_i(o_1),i=1,2,\cdots,N \\ \psi_1(i)=0\)
(2)递推,对\(t=2,3,\cdots,T\)
\(\delta_t(i)=max_{1\leq j\leq N}[\delta_{t-1}(j)a_{ji}]b_i(o_{t}),i=1,2,\cdots,N;t=1,2,\cdots,T-1 \\ \psi_t(i)=argmax_{1\leq j \leq N}[\delta_{t-1}(j)a_{ji}]\)
(3)终止
\(P^*=max\delta_T(i)\\ i_T^*=argmax[\delta_T(i)],i=1,\cdots,N\)
(4)最优路径回溯
\(t=T-1,T-2,\cdots,1\)
\(i_t^*=\psi_{t+1}(i_{t+1}^*)\)
求得最优路径\(I^*=(i_1^*,\cdots,i_T^*)\)

posted @ 2018-01-05 18:55  blog_hfg  阅读(251)  评论(0)    收藏  举报