HMM是生成模型,根据HMM,可以计算P(O,I)P(O,I)P(O,I)的联合概率,其中OOO是观测序列,III是隐藏序列。HMM中三个典型问题:1.概率计算问题 2.模型参数估计问题 3.预测问题
首先,隐马尔科夫模型里有两条假设:
-
假设一:
隐藏的马尔科夫链在任意时刻ttt的状态只依赖前一时刻的状态 -
假设二:
任意时刻的观测只依赖于该时刻的隐状态
由此,引出隐马尔科夫模型的三个重要参数:π,A,B\pi , A,Bπ,A,B
-
π\piπ是初始状态概率向量,πi=P(i1=qi)\pi_i = P(i_1 = q_i)πi=P(i1=qi)是t=1时刻,隐状态为qiq_iqi的概率。
-
AAA是状态转移概率矩阵,假设状态数是NNN,那么AAA是N×NN×NN×N的矩阵,其中aij=P(it=qj∣it−1=qi)a_{ij} = P(i_t = q_j | i_{t-1}=q_i)aij=P(it=qj∣it−1=qi)表示时刻t-1的状态为qiq_iqi的条件下,时刻t的状态为qjq_jqj的概率。
-
BBB是观测概率矩阵,假设观测数是MMM,那么BBB是N×MN×MN×M的矩阵,其中bj(k)=P(ot=vk∣it=qj)b_j(k) = P(o_t=v_k | i_t = q_j)bj(k)=P(ot=vk∣it=qj)表示时刻t为状态qjq_jqj的条件下,生成观测vkv_kvk的概率。
隐马尔科夫模型由初始概率矩阵π\piπ、状态转移概率矩阵AAA和观测概率矩阵BBB决定。π\piπ和AAA决定状态序列,BBB决定观测序列。π,A,B\pi, A, Bπ,A,B称为隐马尔科夫模型的三要素。
隐马尔科夫模型的三个基本问题
-
概率计算问题。给定模型参数λ=(π,A,B)\lambda=(\pi,A,B)λ=(π,A,B)和观测序列O=(o1,o2,...,oT)O=(o_1,o_2,...,o_T)O=(o1,o2,...,oT),计算P(O∣λ)P(O| \lambda )P(O∣λ)
-
学习问题。已知观测序列O=(o1,o2,...,oT)O=(o_1,o_2,...,o_T)O=(o1,o2,...,oT),求解模型参数λ=(π,A,B)\lambda=(\pi,A,B)λ=(π,A,B)使得在该模型参数下,P(O∣λ)P(O| \lambda )P(O∣λ)最大
-
预测问题。给定模型参数λ=(π,A,B)\lambda=(\pi,A,B)λ=(π,A,B)和观测序列O=(o1,o2,...,oT)O=(o_1,o_2,...,o_T)O=(o1,o2,...,oT),求解使得P(I∣O)P(I|O)P(I∣O)最大的状态序列I=(i1,i2,...,iT)I = (i_1,i_2,...,i_T)I=(i1,i2,...,iT)
问题1:概率计算问题
用前向算法或者后向算法求解。
- 前向算法
定义前向概率,αti=P(o1,o2,...,ot,it=qi)\alpha_t^i =P(o_1,o_2,...,o_t,i_t = q_i)αti=P(o1,o2,...,ot,it=qi)。可以通过递推法求解观测序列概率P(O∣λ)P(O| \lambda)P(O∣λ)。
观测序列概率计算的前向算法步骤如下:
输入:隐马尔科夫模型λ\lambdaλ,观测序列OOO
输出:观测序列概率P(O∣λ)P(O| \lambda)P(O∣λ)
step1: 初始化前向概率
α1i=πibi(o1)\alpha_1^i = \pi_i b_i(o_1)α1i=πibi(o1), i=1,2,…,N
step2:递推求解各个时刻的αti\alpha_t^iαti
αti=∑j=1j=Nαt−1jajibi(ot)\alpha_t^i = \sum_{j=1}^{j=N}\alpha_{t-1}^j a_{ji}b_i(o_t)αti=∑j=1j=Nαt−1jajibi(ot),t=2,3,...,Ti=1,2,...,Nt = 2,3,...,T \qquad i=1,2,...,Nt=2,3,...,Ti=1,2,...,N
step3:求得目标观测序列概率P(O∣λ)P(O| \lambda)P(O∣λ)
P(O∣λ)=∑iαTiP(O| \lambda) = \sum _i \alpha_T^iP(O∣λ)=∑iαTi
在step2递推过程中,可以理解为,ttt时刻的状态iii可以由前面时刻任意状态转换而来。
- 后向算法
定义后向概率,βti=P(ot+1,ot+2,...,oT∣it=qi)\beta_t^i=P(o_{t+1},o_{t+2},...,o_T|i_t = q_i)βti=P(ot+1,ot+2,...,oT∣it=qi)。可以通过递推法求解观测序列概率P(O∣λ)P(O| \lambda)P(O∣λ)。
观测序列概率计算的后向算法步骤如下:
输入:隐马尔科夫模型λ\lambdaλ,观测序列OOO
输出:观测序列概率P(O∣λ)P(O| \lambda)P(O∣λ)
step1:初始化后向概率
βTi=1,i=1,2,...,N\beta_T^i = 1, i=1,2,...,NβTi=1,i=1,2,...,N
step2:递推求解各个时刻的βti\beta_t^iβti
βti=∑jβt+1jaijbj(ot+1)\beta_t^i = \sum_j\beta_{t+1}^ja_{ij}b_j(o_{t+1})βti=∑jβt+1jaijbj(ot+1),t=T−1,T−2,...,1i=1,2,...,Nt = T-1,T-2,...,1 \qquad i=1,2,...,Nt=T−1,T−2,...,1i=1,2,...,N
step3:求得目标观测序列概率P(O∣λ)P(O| \lambda)P(O∣λ)
P(O∣λ)=∑jπjβ1jbj(o1)P(O| \lambda) = \sum_j\pi_j\beta_1^jb_j(o_1)P(O∣λ)=∑jπjβ1jbj(o1)
条件概率意味着给定某某,求其他的概率。当反向递推时,只要意识到给定状态iii,可以由它转移到任意概率jjj即可。
- 前向-后向结合
在前向算法中,前向概率αti=P(o1,o2,...,ot,it=qi)\alpha_t^i =P(o_1,o_2,...,o_t,i_t = q_i)αti=P(o1,o2,...,ot,it=qi)
在后向算法中,后向概率βti=P(ot+1,ot+2,...,oT∣it=qi)\beta_t^i=P(o_{t+1},o_{t+2},...,o_T|i_t = q_i)βti=P(ot+1,ot+2,...,oT∣it=qi)
P(O∣λ)=∑i=1N∑j=1Nαtiaijβt+1jbj(ot+1)P(O|\lambda) =\sum_{i=1}^N \sum_{j=1}^N \alpha_t^ia_{ij}\beta_{t+1}^jb_j(o_{t+1})P(O∣λ)=∑i=1N∑j=1Nαtiaijβt+1jbj(ot+1)
我们先讲解问题三:预测问题
给定模型参数λ=(π,A,B)\lambda=(\pi,A,B)λ=(π,A,B)和观测序列O=(o1,o2,...,oT)O=(o_1,o_2,...,o_T)O=(o1,o2,...,oT),求解使得P(I∣O)P(I|O)P(I∣O)最大的状态序列I=(i1,i2,...,iT)I = (i_1,i_2,...,i_T)I=(i1,i2,...,iT)。
用维特比算法求解。
维特比算法是用动态规划思想来求解隐马尔科夫模型预测问题的。我们需要求解使得P(I∣O)P(I|O)P(I∣O)最大的状态序列I=(i1,i2,...,iT)I = (i_1,i_2,...,i_T)I=(i1,i2,...,iT),那么从初始时刻到任意时刻,其对应的状态序列和观测序列的联合概率必须是最大的。
简单来说,我们想找到从A到B的最长路径,途径C。如果A到B的最长路径是lll,那么lACl_{AC}lAC一定是从A到C最长的路径,否则我们可以用更长的lACl_{AC}lAC来代替,那么此时和lll是最长路径矛盾了。因此我们知道对于部分路径,它必须是最长的。根据这一原理,我们可以递推地求解。
定义:γti=maxP(i1,i2,...,it=qi,o1,o2,...,ot)\gamma_t^i = \max P(i_1,i_2,...,i_t=q_i,o_1,o_2,...,o_t)γti=maxP(i1,i2,...,it=qi,o1,o2,...,ot)
可以递推
γt+1i=max1≤j≤Nγtjajibi(ot+1)\gamma_{t+1}^i =\max \limits_{1 \leq j \leq N} \gamma_t^ja_{ji}b_i(o_{t+1})γt+1i=1≤j≤Nmaxγtjajibi(ot+1)
定义ttt时刻状态为iii单个路径概率最大的前一个节点是
pathti=argmax1≤j≤Nγt−1jajipath_t^i = \arg\max \limits_{1 \leq j \leq N} \gamma_{t-1}^ja_{ji}pathti=arg1≤j≤Nmaxγt−1jaji
维特比算法具体步骤:
输入:隐马尔科夫模型λ\lambdaλ,观测序列OOO
输出:最优路径I∗I^*I∗
step1:初始化
γ1i=πibi(o1)\gamma_1^i = \pi_ib_i(o_1)γ1i=πibi(o1), i=1,2,...,Ni=1,2,...,Ni=1,2,...,N
path1i=0path_1^i = 0path1i=0, i=1,2,...,Ni=1,2,...,Ni=1,2,...,N
step2:递推
γti=max1≤j≤Nγt−1jajibi(ot)\gamma_{t}^i = \max \limits_{1 \leq j \leq N} \gamma_{t-1}^ja_{ji}b_i(o_{t})γti=1≤j≤Nmaxγt−1jajibi(ot), i=1,2,...,Ni=1,2,...,Ni=1,2,...,N
pathti=argmax1≤j≤Nγt−1jajipath_t^i = \arg\max \limits_{1 \leq j \leq N} \gamma_{t-1}^ja_{ji}pathti=arg1≤j≤Nmaxγt−1jaji
step3:
P∗=maxiγTiP* = \max \limits_{i} \gamma_T^iP∗=imaxγTi
iT∗=argmaxiγTii_T^* = \arg \max \limits_i \gamma_T^iiT∗=argimaxγTi
step4:最优路径回溯:t=T−1,T−2,...,1t=T-1,T-2,...,1t=T−1,T−2,...,1
it∗=patht+1it+1∗i_t^* = path_{t+1}^{i_{t+1}^*}it∗=patht+1it+1∗
问题2:学习算法
已知观测序列O=(o1,o2,...,oT)O=(o_1,o_2,...,o_T)O=(o1,o2,...,oT),求解模型参数λ=(π,A,B)\lambda=(\pi,A,B)λ=(π,A,B)使得在该模型参数下,P(O∣λ)P(O| \lambda )P(O∣λ)最大
-
监督学习算法
-
非监督学习算法----Baum-Welch算法(EM算法)
第一步:确定完全数据的对数似然函数
第二步:E步,写出Q函数
我们写出Q函数之后后面就要对它进行极大化,也就是说EM算法的M步骤。既然是最大化,那么只要保证不影响最终的结果,对Q函数进行对于最大化来说没有影响的常数因子乘除是可以的。为什么要这么做呢?这是为了后面将概率计算问题中有意义的一些概率计算公式直接套进去。
step3:M步,极大化Q函数