简述一下HMM:(参考资料:《统计学习方法》-李航)
隐马尔可夫模型(Hidden Markov Model,HMM)描述由隐藏的马尔可夫链随机生成观测序列的过程,属于生成模型。
HMM是关于时序的概率模型,描述由一个隐藏的马尔可夫链随机生成不可观测的状态随机序列(状态序列),再由各个状态生成一个观测而产生的观测随机序列(观测序列)的过程。
一堆拗口的术语?下边慢慢道来…
马尔可夫过程
马尔可夫过程指的是:假设一个随机过程中, t + 1 t+1 t+1时刻的状态 i t + 1 i_{t+1} it+1的条件分布,仅仅与其前一个状态 i t i_{t} it有关,即:
p ( i t + 1 ∣ i 1 , i 2 , . . . , i t ) = p ( i t + 1 ∣ i t ) p(i_{t+1}|i_1, i_2, ..., i_t) = p(i_{t+1}|i_t) p(it+1∣i1,i2,...,it)=p(it+1∣it)
隐马尔可夫模型是由马尔可夫链生成随机不可观测的随机状态序列,再由各个状态生成可观测的随机序列:
可以得到上述隐马尔可夫模型的图模型结构,状态序列(不可观测的)为 I = i 1 , i 2 , . . . , i T I={i_1, i_2, ..., i_T} I=i1,i2,...,iT,观测序列为 O = o 1 , o 2 , . . . , o T O = {o_1, o_2, ..., o_T} O=o1,o2,...,oT
根据上述图,去理解HMM的两个基本假设.
齐次马尔可夫假设:假设隐藏的马尔可夫链在任一时刻t的状态只依赖于其前一个时刻的状态:
p ( i t ∣ i t − 1 , o t − 1 , . . . , i 1 , o 1 ) = p ( i t ∣ i t − 1 ) , i = 1 , 2 , . . . , T p(i_t|i_{t-1}, o_{t-1},...,i_1, o_1) = p(i_t|i_{t-1}), i=1, 2, ..., T p(it∣it−1,ot−1,...,i1,o1)=p(it∣it−1),i=1,2,...,T
上式中的 i t i_t it表示 t t t时刻的状态序列值, o t o_t ot表示 t t t时刻的观测序列值,再强调一遍:该假设就是在说当前时刻序列状态只依赖于上一时刻序列状态。
观测独立性假设:假设任意时刻的观测状态 o t o_t ot只依赖于该时刻的马尔可夫链 i t i_t it 的状态,与其他的观测状态及状态都无关。
继续上边的符号表达:
p ( o t ∣ i T , o T , i T − 1 , o T − 1 , . . . , i t + 1 , o t + 1 , . . . . , i 1 , o 1 ) = p ( o t ∣ i t ) p(o_t|i_T, o_T, i_{T-1}, o_{T-1},...,i_{t+1}, o_{t+1}, ...., i_1, o_1) = p(o_t|i_t) p(ot∣iT,oT,iT−1,oT−1,...,it+1,ot+1,....,i1,o1)=p(ot∣it)
1.生成模型:
由生成方法学习到的模型称之为生成模型,生成方法是由数据学习联合分布 P ( X , Y ) P(X, Y) P(X,Y),然后求出条件概率分布 P ( Y ∣ X ) P(Y|X) P(Y∣X)作为预测的模型:
P ( Y ∣ X ) = P ( X , Y ) P ( X ) P(Y|X) = \frac{P(X, Y)}{P(X)} P(Y∣X)=P(X)P(X,Y)
典型的生成模型有:朴素贝叶斯法,隐马尔可夫模型,生成对抗网络(GAN),变分自编码器(VAE);
生成模式有两种:确定性和非确定性的。
确定性生成模式:变化规律固定,能够根据当前状态,确定判断出下一状态,如交通红绿灯的变化;
非确定性生成模式:变化相对多样,不能准确确定下一状态,如天气的变化。
2.判别模型:
由判别方法学习到的模型称之为判别模型,判别方法是由数据直接学习决策函数或者条件概率分布 P ( Y ∣ X ) P(Y|X) P(Y∣X)作为预测的模型。
典型的判别模型有: k k k近邻法,感知机模型,决策树,逻辑回归模型,最大熵模型,支持向量机,提升方法和条件随机场等。
一个比较好的例子去介绍HMM模型,可以参考一下:
http://www.360doc.com/content/13/0226/14/11619026_268005483.shtml
Wikipedia 介绍: https://en.wikipedia.org/wiki/Hidden_Markov_model
简单描述一下这个例子:
假设A与B是两个处于不同地方的朋友,A关心B每天干了什么事情(观测序列)「散步,购物,大扫除」,想要通过B干的事情去推断出B处地的天气变化(隐藏序列)「晴天,雨天」
隐藏序列集合: S h i d d e n = { 晴 天 , 雨 天 } S_{hidden} = \{晴天,雨天\} Shidden={晴天,雨天}
观测序列集合: S o b s e r v a t i o n s = { 散 步 , 购 物 , 大 扫 除 } S_{observations} = \{散步,购物,大扫除\} Sobservations={散步,购物,大扫除}
初始状态概率矩阵:
M s t a r t _ p r o b a b i l i t y = { 雨 天 : 0.6 , 晴 天 : 0.4 } M_{start\_probability}= \{雨天: 0.6, 晴天: 0.4\} Mstart_probability={雨天:0.6,晴天:0.4}
状态转移矩阵:
M t r a n s i t i o n _ p r o b a b i l i t y = { 雨 天 : { 晴 天 : 0.3 , 雨 天 : 0.7 } , 晴 天 : { 晴 天 : 0.6 , 雨 天 : 0.4 } } M_{transition\_probability} = \{雨天: \{晴天: 0.3, 雨天:0.7\}, 晴天: \{晴天: 0.6, 雨天:0.4\}\} Mtransition_probability={雨天:{晴天:0.3,雨天:0.7},晴天:{晴天:0.6,雨天:0.4}}
发射概率矩阵:
M e m i s s i o n _ p r o b a b i l i t y = { 雨 天 : { 散 步 : 0.1 , 购 物 : 0.4 , 大 扫 除 : 0.5 } , 晴 天 : { 散 步 : 0.6 , 购 物 : 0.3 , 大 扫 除 : 0.1 } } M_{emission\_probability}= \{雨天: \{散步: 0.1, 购物:0.4,大扫除:0.5\}, 晴天: \{散步: 0.6, 购物:0.3, 大扫除:0.1\}\} Memission_probability={雨天:{散步:0.1,购物:0.4,大扫除:0.5},晴天:{散步:0.6,购物:0.3,大扫除:0.1}}
隐藏序列:表示无法直接观测到的状态,就上述例子而言就是对方的天气状态;
观测序列:可以直接观测到的状态,就上述例子而言就是获取到的B执行的事情;
初始状态概率矩阵:表示B第一次告诉A的时候,得到的隐藏状态集合中每个状态发生的概率;
状态转移矩阵:表示从一个状态到另一个状态变化的概率,如在上述例子中,从雨天到晴天的概率为0.3;
发射状态矩阵:表示B在相应隐藏状态(天气)下,去执行得到观测状态(执行的动作)的概率,如在雨天,B去散步的概率为0.1;
HMM模型综上描述起来就是五个要素:
两个序列:隐藏序列和观测序列
三个矩阵:初始状态矩阵,发射状态矩阵以及状态转移矩阵
概率计算问题:给定模型和观测序列,计算观测序列出现的概率 P ( O ∣ λ ) P(O|\lambda) P(O∣λ);
学习问题:已知观测序列求解模型参数,使得模型在观测序列下的概率最大 P ( O ∣ λ ) P(O|\lambda) P(O∣λ),最大似然估计求参数;
预测问题:给定观测序列,求有可能的对应的状态序列 I I I
符号说明(借鉴《统计学习方法》–李航):
Q : Q: Q:所有可能的状态集合, Q = { q 1 , q 2 , . . . , q N } Q=\{q_1, q_2, ..., q_N\} Q={q1,q2,...,qN}
V V V: 所有可能的观测状态的集合, V = { v 1 , v 2 , . . . , v M } V=\{v_1, v_2, ..., v_M\} V={v1,v2,...,vM}
O O O: 实际观测序列, O = { o 1 , o 2 , . . . , o T } O=\{o_1, o_2, ..., o_T\} O={o1,o2,...,oT}
I I I: 隐藏的状态序列, I = { i 1 , i 2 , . . . , i T } I=\{i_1, i_2, ..., i_T\} I={i1,i2,...,iT}
A A A: 状态转移矩阵, a i j a_{ij} aij表示 t t t时刻处于状态 q i q_i qi在 t + 1 t+1 t+1时刻转移到 q j q_j qj的概率
B B B: 观测概率矩阵, b j o t b_{jo_t} bjot表示 t t t时刻处于状态 q j q_j qj条件下生成观测 o t o_t ot的概率
π \pi π: 初始状态概率向量,猜猜这个向量的长度为多少?当然是等于所有可能的状态集合啦~~~
根据上式定义,有:
所有的初始状态概率和为1:
∑ i = 1 N π i = 1 \sum_{i=1}^{N}\pi_i =1 i=1∑Nπi=1时刻 t t t转移到一下个所有可能的状态的概率和为1:
∑ j = 1 N a i j = 1 \sum_{j=1}^{N} a_{ij} = 1 j=1∑Naij=1
- 时刻 t t t,由状态 j j j观测到的所有可能的观测值的概率和为1:
∑ k = 1 M b j k = 1 \sum_{k=1}^{M} b_{jk} = 1 k=1∑Mbjk=1
概率计算问题描述:给定模型 λ = ( A , B , π ) \lambda=(A,B,\pi) λ=(A,B,π)和观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1, o_2, ..., o_T) O=(o1,o2,...,oT),计算观测序列出现的概率 P ( O ∣ λ ) P(O|\lambda) P(O∣λ).
1.直接法
直接法,就是直接按照概率公式进行计算,通过穷举出所有可能的长度为 T T T的状态序列和观测序列的联合概率,然后对状态序列求和:
P ( O ∣ λ ) = ∑ I P ( O , I ∣ λ ) = ∑ I P ( O ∣ I , λ ) P ( I ∣ λ ) P(O|\lambda)=\sum_I P(O, I|\lambda) = \sum_I P(O|I, \lambda)P(I|\lambda) P(O∣λ)=I∑P(O,I∣λ)=I∑P(O∣I,λ)P(I∣λ)
根据隐马尔可夫模型的定义,可以计算状态序列 I = ( i 1 , i 2 , . . . , i T ) I=(i_1, i_2, ..., i_T) I=(i1,i2,...,iT)的概率(齐次马尔可夫性假设):
P ( i 1 , i 2 , . . . , i T ∣ λ ) = π i 1 a i 1 i 2 a i 2 i 3 . . . a i T − 1 i T P(i_1, i_2, ..., i_T|\lambda) = \pi_{i_1}a_{i_1i_2}a_{i_2i_3}...a_{i_{T-1}i_T} P(i1,i2,...,iT∣λ)=πi1ai1i2ai2i3...aiT−1iT
计算观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1, o_2, ..., o_T) O=(o1,o2,...,oT)的概率(观测独立性假设):
P ( o 1 , o 2 , . . . , o T ∣ I , λ ) = b i 1 o 1 b i 2 o 2 . . . b i T o T P(o_1, o_2, ..., o_T | I, \lambda) = b_{i_1o_1}b_{i_2o_2}...b_{i_To_T} P(o1,o2,...,oT∣I,λ)=bi1o1bi2o2...biToT
得到他们的联合概率分布如下:
P ( O , I ∣ λ ) = P ( O ∣ I , λ ) P ( I ∣ λ ) = b i 1 o 1 b i 2 o 2 . . . b i T o T π i 1 a i 1 i 2 a i 2 i 3 . . . a i T − 1 i T \begin{aligned} P(O, I|\lambda) & = P(O|I, \lambda)P(I|\lambda) =b_{i_1o_1}b_{i_2o_2}...b_{i_To_T}\pi_{i_1}a_{i_1i_2}a_{i_2i_3}...a_{i_{T-1}i_T} \end{aligned} P(O,I∣λ)=P(O∣I,λ)P(I∣λ)=bi1o1bi2o2...biToTπi1ai1i2ai2i3...aiT−1iT
对状态序列求和:
P ( O ∣ λ ) = ∑ I P ( O , I ∣ λ ) = ∑ I b i 1 o 1 b i 2 o 2 . . . b i T o T π i 1 a i 1 i 2 a i 2 i 3 . . . a i T − 1 i T \begin{aligned} P(O|\lambda) & =\sum_I P(O, I|\lambda)= \sum_I b_{i_1o_1}b_{i_2o_2}...b_{i_To_T}\pi_{i_1}a_{i_1i_2}a_{i_2i_3}...a_{i_{T-1}i_T} \end{aligned} P(O∣λ)=I∑P(O,I∣λ)=I∑bi1o1bi2o2...biToTπi1ai1i2ai2i3...aiT−1iT
分析一下时间复杂度,对于状态序列 I = ( i 1 , i 2 , . . . , i T ) I=(i_1, i_2, ..., i_T) I=(i1,i2,...,iT), i 1 , i 2 , . . . , i T i_1, i_2, ..., i_T i1,i2,...,iT均有 N N N种可能的选择,所以共有 N T N^T NT中方法,加之求和符号,所以直接法总的复杂度为 O ( T N T ) O(TN^T) O(TNT),指数级别的时间复杂度,往往是不可取的。
2.前向算法—动态规划的思想
前向算法的核心:定义前向概率
α t ( i ) = p ( o 1 , o 2 , . . . , o t , i t = q i ∣ λ ) \alpha_t(i) = p(o_1, o_2, ..., o_t, i_t=q_i|\lambda) αt(i)=p(o1,o2,...,ot,it=qi∣λ)
根据定义的公式,简单理解就是为从图红线处断隔开,只考虑前半部分计算前向概率,注意:前向概率定义没有包括对隐状态 i 1 , i 2 , . . . , i t − 1 i_1, i_2, ..., i_{t-1} i1,i2,...,it−1的定义。
如此定义的原因是希望后边能够构建动态规划的递推公式:
根据上述定义:
(1) 计算 t = 1 t=1 t=1时刻定义的前向概率:
α 1 ( i ) = p ( o 1 , i 1 = q 1 ∣ λ ) = p ( o 1 ∣ i 1 , λ ) p ( i 1 ∣ λ ) = b i 1 o 1 π i , i = 1 , 2 , . . . , N \alpha_1(i) = p(o_1, i_1 = q_1 |\lambda)=p(o_1|i_1, \lambda)p(i_1 | \lambda) = b_{i_1o_1}\pi_i,i=1, 2, ..., N α1(i)=p(o1,i1=q1∣λ)=p(o1∣i1,λ)p(i1∣λ)=bi1o1πi,i=1,2,...,N
(2) 构建递推公式(不知道推的过程我是不是复杂化了),对 t = 1 , 2 , . . . , T − 1 t=1, 2, ..., T-1 t=1,2,...,T−1有:
α t + 1 ( i ) = p ( o 1 , o 2 , . . . , o t , o t + 1 , i t + 1 = q i ∣ λ ) = ∑ j = 1 N p ( o 1 , o 2 , . . . , o t , o t + 1 , i t + 1 = q i , i t = q j ∣ λ ) ( 1 ) − 期 望 = ∑ j = 1 N p ( o 1 , o 2 , . . . , o t , i t = q j ∣ o t + 1 , i t + 1 = q i , λ ) p ( o t + 1 , i t + 1 = q i ∣ λ ) ( 2 ) − 贝 叶 斯 公 式 = ∑ j = 1 N p ( o 1 , o 2 , . . . , o t , i t = q j ∣ i t + 1 = q i , λ ) p ( o t + 1 ∣ i t + 1 = q i , λ ) p ( i t + 1 = q i ∣ λ ) ( 3 ) − 贝 叶 斯 公 式 = ∑ j = 1 N p ( o 1 , o 2 , . . . , o t , i t = q j , i t + 1 = q i , λ ) p ( o t + 1 ∣ i t + 1 = q i , λ ) ( 4 ) − 贝 叶 斯 公 式 = ∑ j = 1 N p ( o 1 , o 2 , . . . , o t , i t + 1 = q i ∣ i t = q j , λ ) p ( i t = q j ∣ λ ) p ( o t + 1 ∣ i t + 1 = q i , λ ) ( 5 ) − 贝 叶 斯 公 式 = ∑ j = 1 N p ( o 1 , o 2 , . . . , o t ∣ i t = q j , λ ) p ( i t = q j ∣ λ ) p ( i t + 1 = q i ∣ i i = q j ) p ( o t + 1 ∣ i t + 1 = q i , λ ) ( 6 ) − 贝 叶 斯 公 式 + 隐 马 尔 可 夫 假 设 = ∑ j = 1 N p ( o 1 , o 2 , . . . , o t , i t = q j ∣ λ ) p ( i t + 1 = q i ∣ i i = q j ) p ( o t + 1 ∣ i t + 1 = q i , λ ) ( 7 ) − 贝 叶 斯 公 式 = ∑ j = 1 N α t ( j ) a j i b i o t + 1 , i = 1 , 2 , 3 , . . . , N \begin{aligned} \alpha_{t+1}(i) & = p(o_1, o_2, ..., o_t, o_{t+1} ,i_{t+1}=q_i|\lambda) \\ & = \sum_{j=1}^{N} p(o_1, o_2, ..., o_t, o_{t+1} ,i_{t+1}=q_i, i_t = q_j| \lambda) \qquad \qquad \qquad \qquad \qquad (1)-期望\\ & = \sum_{j=1}^{N} p(o_1, o_2, ..., o_t, i_t = q_j | o_{t+1} ,i_{t+1}=q_i, \lambda)p(o_{t+1} ,i_{t+1}=q_i|\lambda) \qquad (2)-贝叶斯公式\\ & = \sum_{j=1}^{N} p(o_1, o_2, ..., o_t, i_t = q_j |i_{t+1}=q_i, \lambda)p(o_{t+1} | i_{t+1}=q_i, \lambda)p(i_{t+1}=q_i|\lambda) \quad (3)-贝叶斯公式\\ & = \sum_{j=1}^{N} p(o_1, o_2, ..., o_t, i_t = q_j , i_{t+1}=q_i, \lambda)p(o_{t+1} | i_{t+1}=q_i, \lambda) \qquad \qquad (4)-贝叶斯公式\\ & = \sum_{j=1}^{N} p(o_1, o_2, ..., o_t , i_{t+1}=q_i| i_t = q_j, \lambda)p(i_t = q_j|\lambda)p(o_{t+1} | i_{t+1}=q_i, \lambda) \quad(5)-贝叶斯公式\\ & = \sum_{j=1}^{N} p(o_1, o_2, ..., o_t | i_t = q_j, \lambda)p(i_t = q_j|\lambda)p(i_{t+1}=q_i|i_{i}=q_j)p(o_{t+1} | i_{t+1}=q_i, \lambda) \\ & \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad\qquad\qquad (6)- 贝叶斯公式+隐马尔可夫假设\\ & = \sum_{j=1}^{N}p(o_1, o_2, ..., o_t ,i_t = q_j | \lambda)p(i_{t+1}=q_i|i_{i}=q_j)p(o_{t+1} | i_{t+1}=q_i, \lambda) \quad (7)-贝叶斯公式 \\ & = \sum_{j=1}^{N}\alpha_t(j)a_{ji}b_{io_{t+1}}, \qquad \qquad \qquad i=1,2, 3, ..., N \end{aligned} αt+1(i)=p(o1,o2,...,ot,ot+1,it+1=qi∣λ)=j=1∑Np(o1,o2,...,ot,ot+1,it+1=qi,it=qj∣λ)(1)−期望=j=1∑Np(o1,o2,...,ot,it=qj∣ot+1,it+1=qi,λ)p(ot+1,it+1=qi∣λ)(2)−贝叶斯公式=j=1∑Np(o1,o2,...,ot,it=qj∣it+1=qi,λ)p(ot+1∣it+1=qi,λ)p(it+1=qi∣λ)(3)−贝叶斯公式=j=1∑Np(o1,o2,...,ot,it=qj,it+1=qi,λ)p(ot+1∣it+1=qi,λ)(4)−贝叶斯公式=j=1∑Np(o1,o2,...,ot,it+1=qi∣it=qj,λ)p(it=qj∣λ)p(ot+1∣it+1=qi,λ)(5)−贝叶斯公式=j=1∑Np(o1,o2,...,ot∣it=qj,λ)p(it=qj∣λ)p(it+1=qi∣ii=qj)p(ot+1∣it+1=qi,λ)(6)−贝叶斯公式+隐马尔可夫假设=j=1∑Np(o1,o2,...,ot,it=qj∣λ)p(it+1=qi∣ii=qj)p(ot+1∣it+1=qi,λ)(7)−贝叶斯公式=j=1∑Nαt(j)ajibiot+1,i=1,2,3,...,N
(3) 递推终止之后:
P ( O ∣ λ ) = ∑ i P ( O , i t = q i ∣ λ ) = ∑ i = 1 N α T ( i ) P(O|\lambda) = \sum_iP(O, i_t=q_i|\lambda)=\sum_{i=1}^{N}\alpha_T(i) P(O∣λ)=i∑P(O,it=qi∣λ)=i=1∑NαT(i)
此时来计算一下时间复杂度:
α 1 ( i ) \alpha_ 1(i) α1(i)中的 i i i有N种可能性, α t + 1 ( i ) \alpha_{t+1}(i) αt+1(i)中的计算结果都依赖于 α t ( j ) \alpha_t(j) αt(j)对N个状态求和的结果(直接引用,避免了重复计算),每次递推都是在前一次的基础上做的,累加 O ( T ) O(T) O(T)次,所以总的时间复杂度为 O ( N 2 T ) O(N^2T) O(N2T),从指数级别的复杂度降成了多项式级别的复杂度.
3.后向算法—动态规划的思想
后向算法的核心:定义后向概率(时刻 t t t的状态为 q i q_i qi的条件下, t + 1 t+1 t+1到 T T T的部分观测序列为 o t + 1 , o t + 2 , . . . , o T o_{t+1}, o_{t+2}, ..., o_T ot+1,ot+2,...,oT的概率)
β t ( i ) = p ( o t + 1 , o t + 2 , . . . , o T ∣ i t = q i , λ ) \beta_t(i) = p(o_{t+1}, o_{t+2}, ..., o_T | i_t=q_i, \lambda) βt(i)=p(ot+1,ot+2,...,oT∣it=qi,λ)
根据上述后向概率的定义:
(1)计算 t = T t=T t=T时刻的后向概率:
β T ( i ) = 1 , i = 1 , 2 , . . . , T \beta_T(i) = 1, \qquad i = 1, 2, ..., T βT(i)=1,i=1,2,...,T
(2)构建递推公式,递推 t = T − 1 , T − 2 , . . . , 1 t=T-1, T-2, ..., 1 t=T−1,T−2,...,1
β t ( i ) = p ( o t + 1 , o t + 2 , . . . , o T ∣ i t = q i , λ ) = ∑ j p ( o t + 1 , o t + 2 , . . . , o T , i t + 1 = q j ∣ i t = q i , λ ) = ∑ j p ( o t + 1 , o t + 2 , . . . , o T ∣ i t = q i , i t + 1 = q j λ ) p ( i t + 1 = q j ∣ i t = q i , λ ) = ∑ j p ( o t + 1 , o t + 2 , . . . , o T ∣ i t = q i , i t + 1 = q j λ ) a i j = ∑ j p ( o t + 2 , . . . , o T ∣ i t + 1 = q j , λ ) p ( o t + 1 ∣ i t = q i , i t + 1 = q j , λ ) a i j = ∑ j β t + 1 ( j ) b j o t + 1 a i j , i = 1 , 2 , . . . , N \begin{aligned} \beta_t(i)& = p(o_{t+1}, o_{t+2}, ..., o_T | i_t=q_i, \lambda) \\ & = \sum_j p(o_{t+1}, o_{t+2}, ..., o_T, i_{t+1}=q_{j} | i_t=q_i, \lambda) \\ & = \sum_j p(o_{t+1}, o_{t+2}, ..., o_T | i_t=q_i, i_{t+1}=q_{j} \lambda)p(i_{t+1}=q_{j}| i_t=q_i, \lambda) \\ & = \sum_j p(o_{t+1}, o_{t+2}, ..., o_T | i_t=q_i, i_{t+1}=q_{j} \lambda) a_{ij} \\ & = \sum_j p(o_{t+2}, ..., o_T |i_{t+1}=q_{j} ,\lambda)p(o_{t+1}|i_t=q_i, i_{t+1}=q_j, \lambda) a_{ij} \\ & = \sum_j \beta_{t+1}(j)b_{jo_{t+1}}a_{ij}, \qquad \qquad i=1, 2, ..., N \end{aligned} βt(i)=p(ot+1,ot+2,...,oT∣it=qi,λ)=j∑p(ot+1,ot+2,...,oT,it+1=qj∣it=qi,λ)=j∑p(ot+1,ot+2,...,oT∣it=qi,it+1=qjλ)p(it+1=qj∣it=qi,λ)=j∑p(ot+1,ot+2,...,oT∣it=qi,it+1=qjλ)aij=j∑p(ot+2,...,oT∣it+1=qj,λ)p(ot+1∣it=qi,it+1=qj,λ)aij=j∑βt+1(j)bjot+1aij,i=1,2,...,N
(3)计算观测序列的概率:
P ( O ∣ λ ) = ∑ i = 1 N P ( O , i 1 = q i ∣ λ ) = ∑ i = 1 N P ( O ∣ i 1 = q i , λ ) p ( i 1 = q i ∣ λ ) = ∑ i = 1 N β 1 ( i ) π i b i o 1 \begin{aligned} P(O|\lambda) & = \sum_{i=1}^{N} P(O, i_1=q_i|\lambda) = \sum_{i=1}^{N} P(O|i_1=q_i, \lambda)p(i_1= q_i | \lambda) = \sum_{i=1}^{N}\beta_1(i) \pi_ib_{io_1} \end{aligned} P(O∣λ)=i=1∑NP(O,i1=qi∣λ)=i=1∑NP(O∣i1=qi,λ)p(i1=qi∣λ)=i=1∑Nβ1(i)πibio1
同前向算法分析复杂度原理可知,后向算法时间复杂度也为 O ( N 2 T ) O (N^2T) O(N2T)
学习问题包括两种:
给定观测序列和状态序列的学习问题–监督学习;
只给定观测序列的学习问题–非监督学习,Baum-Welch算法。
1. 给定观测序列和状态序列–监督学习
依据大数定理,计算频率近似于概率(此处不详细描述,具体可参见《统计学习方法》-李航)
2. 只给定观测序列–非监督学习,Baum-Welch算法
只给定观测序列的学习问题,主要是指给定观测序列 O = ( o 1 , o 2 , . . . , o t ) O=(o_1, o_2, ..., o_t) O=(o1,o2,...,ot)的情况下,学习模型的参数: λ = ( A , B , π ) \lambda=(A, B, \pi) λ=(A,B,π),在状态序列未知的情况下,其实就是含有隐变量的模型参数求解问题,利用最大似然估计求解:
P ( O ∣ λ ) = ∑ I P ( O ∣ I , λ ) P ( I ∣ λ ) P(O|\lambda) = \sum_IP(O|I, \lambda)P(I|\lambda) P(O∣λ)=I∑P(O∣I,λ)P(I∣λ)
给定观测序列,状态序列未知,熟悉EM算法的应该很容易联想到这个算法了,可以将状态序列看作是EM算法中的隐变量,回顾一下EM算法的求解步骤:
E − s t e p : Q ( θ , θ ( i ) ) = ∑ z l o g P ( x , z , θ ) P ( z ∣ x , θ ( i ) ) M − s t e p : θ ( i + 1 ) : = a r g m a x θ Q ( θ , θ ( i ) ) \begin{aligned} & E-step: \quad Q(\theta, \theta^{(i)}) = \sum_z logP(x,z,\theta)P(z|x, \theta^{(i)})\\ & M-step: \quad \theta^{(i+1)} := argmax_{\theta} Q(\theta, \theta^{(i)}) \end{aligned} E−step:Q(θ,θ(i))=z∑logP(x,z,θ)P(z∣x,θ(i))M−step:θ(i+1):=argmaxθQ(θ,θ(i))
其中 z ( i ) z^{(i)} z(i)表示隐变量, x x x表示输入数据, θ \theta θ表示模型求解的参数
继续回到Baum-Welch算法:
(1) 目标对数似然函数: P ( O , I ∣ λ ) P(O, I|\lambda) P(O,I∣λ);
(2) 利用EM算法求解:
E步骤,求解Q函数:
Q ( λ , λ ~ ) = ∑ I l o g P ( O , I ∣ λ ) p ( I ∣ λ ~ ) = ∑ I l o g P ( O , I ∣ λ ) P ( O , I ∣ λ ~ ) P ( O ∣ λ ~ ) ∝ ∑ I l o g P ( O , I ∣ λ ) P ( O , I ∣ λ ~ ) \begin{aligned} Q(\lambda, \tilde{\lambda}) & =\sum_I logP(O, I|\lambda)p(I| \tilde {\lambda}) =\sum_I logP(O, I|\lambda)\frac{P(O, I|\tilde{\lambda})}{P(O|\tilde {\lambda})} \propto \sum_I logP(O, I|\lambda)P(O, I|\tilde{\lambda}) \end{aligned} Q(λ,λ~)=I∑logP(O,I∣λ)p(I∣λ~)=I∑logP(O,I∣λ)P(O∣λ~)P(O,I∣λ~)∝I∑logP(O,I∣λ)P(O,I∣λ~)
其中 λ ~ \tilde{\lambda} λ~是隐马尔可夫模型参数的当前估计值, λ \lambda λ是要极大化的模型参数。
根据直接计算(直接法)联合概率的公式:
P ( O , I ∣ λ ) = π i a i 1 i 2 a i 2 i 3 . . . a i T − 1 i T b i 1 o 1 b i 2 o 2 . . . b i T o T \begin{aligned} P(O, I | \lambda) = \pi_i a_{i_1i_2}a_{i_2i_3}...a_{i_{T-1}i_T}b_{i_1o_1}b_{i_2o_2}...b_{i_To_T} \end{aligned} P(O,I∣λ)=πiai1i2ai2i3...aiT−1iTbi1o1bi2o2...biToT
取对数函数:
l o g P ( O , I ∣ λ ) = l o g ( π i a i 1 i 2 a i 2 i 3 . . . a i T − 1 i T b i 1 o 1 b i 2 o 2 . . . b i T o T ) = l o g π i + ∑ t = 1 T − 1 l o g a i t i t + 1 + ∑ t = 1 T l o g b i t o t \begin{aligned} logP(O, I|\lambda) & = log(\pi_ia_{i_1i_2}a_{i_2i_3}...a_{i_{T-1}i_T}b_{i_1o_1}b_{i_2o_2}...b_{i_To_T}) \\ & = log \pi_i + \sum_{t=1}^{T-1}loga_{i_ti_{t+1}} + \sum_{t=1}^{T}logb_{i_to_t} \end{aligned} logP(O,I∣λ)=log(πiai1i2ai2i3...aiT−1iTbi1o1bi2o2...biToT)=logπi+t=1∑T−1logaitit+1+t=1∑Tlogbitot
带入Q函数:
∑ I l o g P ( O , I ∣ λ ) P ( O , I ∣ λ ~ ) = ∑ I l o g ( π i a i 1 i 2 a i 2 i 3 . . . a i T − 1 i T b i 1 o 1 b i 2 o 2 . . . b i T o T ) P ( O , I ∣ λ ~ ) = ∑ I ( l o g π i + ∑ t = 1 T − 1 l o g a i t i t + 1 + ∑ t = 1 T l o g b i t o t ) P ( O , I ∣ λ ~ ) \begin{aligned} \sum_I logP(O, I|\lambda)P(O, I|\tilde{\lambda}) & = \sum_I log(\pi_ia_{i_1i_2}a_{i_2i_3}...a_{i_{T-1}i_T}b_{i_1o_1}b_{i_2o_2}...b_{i_To_T}) P(O, I|\tilde {\lambda}) \\ & = \sum_I (log \pi_i + \sum_{t=1}^{T-1}loga_{i_ti_{t+1}} + \sum_{t=1}^{T}logb_{i_to_t})P(O, I|\tilde {\lambda}) \end{aligned} I∑logP(O,I∣λ)P(O,I∣λ~)=I∑log(πiai1i2ai2i3...aiT−1iTbi1o1bi2o2...biToT)P(O,I∣λ~)=I∑(logπi+t=1∑T−1logaitit+1+t=1∑Tlogbitot)P(O,I∣λ~)
M-step 求解模型的参数
上述三个加和拆开,得到三个部分,三个部分分别满足约束条件: ∑ i p i = 1 , ∑ j a i j = 1 , ∑ k b j k = 1 \sum_i p_i = 1, \sum_j a_ij =1, \sum_k b_jk=1 ∑ipi=1,∑jaij=1,∑kbjk=1,分别对这三个部分依次利用拉格朗日求解,即可求解得到模型的参数。
预测算法–(经典算法–维特比算法)-- 参照《统计学习方法》
维特比算法实际是用动态规划解马尔可夫模型预测问题,用动态规划求解概率最大的路径。
定义 t t t时刻状态为 i i i的所有单个路径 ( i 1 ∗ , i 2 ∗ , . . . , i t ∗ ) (i_1^*, i_2^*, ..., i_t^*) (i1∗,i2∗,...,it∗)中概率最大值:
δ t ( i ) = m a x i 1 , i 2 , . . . , i t − 1 P ( i t = i , i t − 1 , . . . , i 1 , o t , o t − 1 , . . . , o 1 ∣ λ ) , i = 1 , 2 , . . . , N \delta_t(i) = max_{i_1, i_2, ..., i_{t-1}}P(i_t=i, i_{t-1}, ..., i_1, o_t, o_{t-1}, ..., o_1| \lambda), \quad i=1, 2, ..., N δt(i)=maxi1,i2,...,it−1P(it=i,it−1,...,i1,ot,ot−1,...,o1∣λ),i=1,2,...,N
由定义和隐马尔可夫假设可以得到变量 δ \delta δ的递推公式,可以推出如下公式:
δ t + 1 ( i ) = m a x i 1 , i 2 , . . . , i t P ( i t + 1 = i , i t , . . . , i 1 , o t + 1 , o t , o t − 1 , . . . , o 1 ∣ λ ) = m a x 1 ≤ j ≤ N [ δ t ( j ) a j i ] b i o t + 1 , i = 1 , 2 , . . . , N ; t = 1 , 2 , . . . , T − 1 \begin{aligned} \delta_{t+1}(i) & = max_{i_1, i_2, ..., i_{t}}P(i_{t+1}=i, i_t, ..., i_1, o_{t+1}, o_t, o_{t-1}, ..., o_1| \lambda) \\ & = max_{1 \leq j \leq N}[\delta_t(j)a_{ji}]b_{io_{t+1}}, \qquad i=1, 2, ..., N; t=1, 2, ..., T-1 \end{aligned} δt+1(i)=maxi1,i2,...,itP(it+1=i,it,...,i1,ot+1,ot,ot−1,...,o1∣λ)=max1≤j≤N[δt(j)aji]biot+1,i=1,2,...,N;t=1,2,...,T−1
定义在时刻 t t t状态为 i i i的所有单个路径 ( i 1 , i 2 , . . . , i t ) (i_1, i_2, ..., i_t) (i1,i2,...,it)中概率最大的路径的第 t − 1 t-1 t−1个结点为:
ϕ t ( i ) = a r g m a x 1 ≤ j ≤ N [ δ t − 1 ( j ) a j i ] , i = 1 , 2 , . . . , N \phi_t(i) = argmax_{1 \leq j \leq N}[\delta_{t-1}(j)a_{ji}], \qquad i=1, 2, ..., N ϕt(i)=argmax1≤j≤N[δt−1(j)aji],i=1,2,...,N
维特比算法:
(1) 初始值: δ 1 ( i ) = π i b i o 1 , i = 1 , 2 , . . . , N ; \delta_1(i) = \pi_ib_{io_1},i=1, 2, ..., N; δ1(i)=πibio1,i=1,2,...,N; ϕ 1 ( i ) = 0 , i = 1 , 2 , . . . , N \phi_1(i) = 0, i=1, 2, ..., N ϕ1(i)=0,i=1,2,...,N
(2)递推:对 t = 2 , 3 , 4 , . . . , T t=2, 3, 4,..., T t=2,3,4,...,T,有:
δ t ( i ) = m a x 1 ≤ j ≤ N [ δ t − 1 ( j ) a j i ] b i o t , i = 1 , 2 , . . . , N ; ϕ t ( i ) = a r g m a x 1 ≤ j ≤ N [ δ t − 1 ( j ) a j i ] , i = 1 , 2 , . . . , N \delta_t(i)= max_{1 \leq j \leq N}[\delta_{t-1}(j)a_{ji}]b_{io_{t}}, \qquad i=1, 2, ..., N;\\ \phi_t(i) = argmax_{1 \leq j \leq N}[\delta_{t-1}(j)a_{ji}], \qquad i=1, 2, ..., N δt(i)=max1≤j≤N[δt−1(j)aji]biot,i=1,2,...,N;ϕt(i)=argmax1≤j≤N[δt−1(j)aji],i=1,2,...,N
(3)终止:
P ∗ = m a x 1 ≤ i ≤ N δ T ( i ) ; i T ∗ = a r g m a x 1 ≤ i ≤ N [ δ T ( i ) ] P^* = max_{1 \leq i \leq N} \delta_T(i); \\ i_T^* = argmax_{1 \leq i \leq N}[\delta_T(i)] P∗=max1≤i≤NδT(i);iT∗=argmax1≤i≤N[δT(i)]
(4)最优路径回溯:对 t = T − 1 , T − 2 , . . . , 1 t= T-1, T-2, ..., 1 t=T−1,T−2,...,1,有:
i t ∗ = ϕ t + 1 ( i t + 1 ∗ ) i_t^* = \phi_{t+1}(i_{t+1}^*) it∗=ϕt+1(it+1∗)
最优路径为: I ∗ = ( i 1 ∗ , i 2 ∗ , . . . , i T ∗ ) I^* = (i_1^*, i_2^*, ..., i_T^*) I∗=(i1∗,i2∗,...,iT∗)
整个算法的流程如上述描述,下边简单介绍一下每一步都在干什么?
(1)定义初始值,针对第一个节点而言,其概率值即为每个状态的概率值乘以每个状态下观测到第一个值的概率,即 π i b i o 1 \pi_i b_{io_1} πibio1;
(2)在初始值给定的条件下,计算产生第二个观测序列值在每一个状态下的概率最大值,即 δ 2 ( i ) \delta_2(i) δ2(i),使用 ϕ 2 ( i ) \phi_2(i) ϕ2(i)来记录到达该最大概率值的上一个状态,依次递推下去。这里 δ t ( i ) \delta_t(i) δt(i)获取的是概率最大值, ϕ t ( i ) \phi_t(i) ϕt(i)获取的是到达概率最大值的上一个状态;
(3)最终计算到最后一个时刻 T T T的最大概率值,并且可以进行最优路径的回溯。
参考资料:
[1] http://www.360doc.com/content/13/0226/14/11619026_268005483.shtml
[2] https://en.wikipedia.org/wiki/Hidden_Markov_model
[3] 统计学习方法,李航著,清华大学出版社