隐马尔可夫模型也是一个生成模型。是一个用来描述系统隐性状态的转移和隐性状态的表现概率的概率模型。
什么是隐性状态?
隐性的马尔科夫链随机生成一个状态序列,其中状态是隐性的,也即是外界观察不到的状态。我们称为隐性状态。下文简称状态。
状态之间转移的概率,由一个状态转移概率矩阵 A A A 表示:
A = [ a i j ] N × N a i j = P ( i t + 1 = q j ∣ i t = q i ) , i = 1 , . . . , N ; j = 1 , . . . , N A=[a_{ij}]_{N\times N} \\ a_{ij}=P(i_{t+1}=q_j|i_t=q_i),i=1,...,N;j=1,...,N A=[aij]N×Naij=P(it+1=qj∣it=qi),i=1,...,N;j=1,...,N
a i j a_{ij} aij 表示t时刻下的状态 q i q_i qi 在 t + 1 t+1 t+1 时刻转移到状态 q j q_j qj的概率。
什么是观测?
隐性状态的表现,也就是每个状态会生成一个对应的观测 observation,由此也产生一个观测序列。
观测概率矩阵用 B B B 表示:
B = [ b j ( k ) ] N × N b j ( k ) = P ( o t = v k ∣ i t = q t ) , k = 1 , . . . , M ; j = 1 , . . . , N B=[b_{j}(k)]_{N\times N} \\ b_j(k)=P(o_t=v_k|i_t=q_t),k=1,...,M;j=1,...,N B=[bj(k)]N×Nbj(k)=P(ot=vk∣it=qt),k=1,...,M;j=1,...,N
b j ( k ) b_j(k) bj(k) 表示t时刻下状态 q j q_j qj 生成观测 v k v_k vk 的概率。
初始状态概率分布,用 π \pi π 表示,表示初始时刻下每个状态的概率。
实际上,HMM观测不到系统状态的转移序列,只能观测到系统状态的表现序列。HMM模型可用一个三元组来表示,即 λ = ( A , B , π ) \lambda=(A,B,\pi) λ=(A,B,π) 。
HMM需满足的条件:
给定HMM模型 λ = ( A , B , π ) \lambda=(A,B,\pi) λ=(A,B,π)和当前 T T T 时刻的观测序列 O = ( o 1 , . . . o T ) O=(o_1,...o_T) O=(o1,...oT),计算观测序列出现的概率 P ( O ∣ λ ) P(O|\lambda) P(O∣λ)。
前向概率:给定模型 λ \lambda λ, t t t 时刻观测序列为 o 1 , . . . , o t o_1,...,o_t o1,...,ot,且状态为 q i q_i qi 的概率。其实就是时序上从 t = 1 t=1 t=1 开始往后推
a t ( i ) = P ( o 1 , o 2 , . . . , o t , i t = q i ∣ λ ) a_t(i)=P(o_1,o_2,...,o_t,i_t=q_i|\lambda) at(i)=P(o1,o2,...,ot,it=qi∣λ)
观测序列的概率:
t = 1 : a 1 ( i ) = π i b i ( o 1 ) , i = 1 , 2 , . . . , N t = 1 , 2 , . . . , T − 1 : a t + 1 ( i ) = [ ∑ j = 1 N a t ( j ) a j i ] b i ( o t + 1 ) , i = 1 , 2 , . . . , N P ( O ∣ λ ) = ∑ i = 1 N a T ( i ) t=1:\; a_1(i)=\pi_ib_i(o_1),i=1,2,...,N \\ t=1,2,...,T-1:\;a_{t+1}(i)=[\sum_{j=1}^N a_t(j) a_{ji}]b_i(o_{t+1}),i=1,2,...,N \\ P(O|\lambda)=\sum_{i=1}^N a_T(i) t=1:a1(i)=πibi(o1),i=1,2,...,Nt=1,2,...,T−1:at+1(i)=[j=1∑Nat(j)aji]bi(ot+1),i=1,2,...,NP(O∣λ)=i=1∑NaT(i)
a t + 1 ( i ) a_{t+1}(i) at+1(i) 即当前状态 q i q_i qi 在 t + 1 t+1 t+1 时刻的前向概率。
后向概率:同理,其实就是时序上从 t = T t=T t=T 开始往前推。具体来说,给定模型 λ \lambda λ,从 t + 1 t+1 t+1 时刻到 T T T 时刻观测序列为 o t + 1 , . . . , o T o_{t+1},...,o_T ot+1,...,oT,且状态为 q i q_i qi 的概率。
观测序列的概率:
t = T : β T ( i ) = 1 , i = 1 , 2 , . . . , N t = T − 1 , T − 2 , . . . , 1 : β t ( i ) = ∑ j = 1 N a i j b j ( o t + 1 ) β t + 1 ( j ) , i = 1 , 2 , . . . , N P ( O ∣ λ ) = ∑ i = 1 N π i b i ( o 1 ) β 1 ( i ) t=T:\; \beta_T(i)=1,i=1,2,...,N \\ t=T-1,T-2,...,1:\; \beta_{t}(i)=\sum_{j=1}^N a_{ij} b_j(o_{t+1})\beta_{t+1}(j),i=1,2,...,N \\ P(O|\lambda)=\sum_{i=1}^N \pi_i b_i(o_1) \beta_1(i) t=T:βT(i)=1,i=1,2,...,Nt=T−1,T−2,...,1:βt(i)=j=1∑Naijbj(ot+1)βt+1(j),i=1,2,...,NP(O∣λ)=i=1∑Nπibi(o1)β1(i)
利用前向与后向概率,最终的观测序列的概率定义如下
P ( O ∣ λ ) = ∑ i = 1 N ∑ j = 1 N a t ( i ) a i j b j ( o t + 1 ) β t + 1 ( j ) , t = 1 , . . . , T − 1 P(O|\lambda)=\sum_{i=1}^N\sum_{j=1}^N a_t(i)a_{ij}b_j(o_{t+1})\beta_{t+1}(j),t=1,...,T-1 P(O∣λ)=i=1∑Nj=1∑Nat(i)aijbj(ot+1)βt+1(j),t=1,...,T−1
给定 λ \lambda λ 和观测序列 O O O,t时刻处于状态 q i q_i qi 的概率:
P ( i t = q i ∣ O , λ ) = P ( i t = q i , O ∣ λ ) P ( O ∣ λ ) = α t ( i ) β t ( i ) ∑ j = 1 N α t ( j ) β t ( j ) P(i_t=q_i|O,\lambda)=\dfrac{P(i_t=q_i,O|\lambda)}{P(O|\lambda)}=\dfrac{\alpha_t(i)\beta_t(i)}{\sum_{j=1}^N\alpha_t(j)\beta_t(j)} P(it=qi∣O,λ)=P(O∣λ)P(it=qi,O∣λ)=∑j=1Nαt(j)βt(j)αt(i)βt(i)
给定 λ \lambda λ 和观测序列 O O O,t时刻处于状态 q i q_i qi 且t+1时刻处于状态 q j q_{j} qj 的概率:
P ( i t = q i , i t + 1 = q j ∣ O , λ ) = P ( i t = q i , i t + 1 = q j , O ∣ λ ) P ( O ∣ λ ) = α t ( i ) a i j b j ( o t + 1 ) β t + 1 ( i ) ∑ i = 1 N ∑ j = 1 N α t ( i ) a i j b j ( o t + 1 ) β t + 1 ( i ) P(i_t=q_i,i_{t+1}=q_j|O,\lambda)=\dfrac{P(i_t=q_i,i_{t+1}=q_j,O|\lambda)}{P(O|\lambda)}=\dfrac{\alpha_t(i)a_{ij}b_j(o_{t+1})\beta_{t+1}(i)}{\sum_{i=1}^N\sum_{j=1}^N \alpha_t(i)a_{ij}b_j(o_{t+1})\beta_{t+1}(i)} P(it=qi,it+1=qj∣O,λ)=P(O∣λ)P(it=qi,it+1=qj,O∣λ)=∑i=1N∑j=1Nαt(i)aijbj(ot+1)βt+1(i)αt(i)aijbj(ot+1)βt+1(i)
分为两种学习方法。一种是监督学习,一种是无监督学习。
区分的依据是训练数据的类型。如果训练数据是包括观测序列和对应的状态序列,那可以监督学习来实现,也就是极大似然估计法;如果训练数据是仅有观测序列,那则是要用无监督学习的方法来实现,也就是EM算法。
学习的目标很显然,就是模型 λ = ( A , B , π ) \lambda=(A,B,\pi) λ=(A,B,π) 中的这三个参数。
已知训练样本中有观测序列 O O O 和对应的状态序列 I I I,即 { ( O 1 , I 1 ) , ( O 2 , I 2 ) , . . . , ( O s , I s ) } \{(O_1,I_1),(O_2,I_2),...,(O_s,I_s)\} {(O1,I1),(O2,I2),...,(Os,Is)} 共 s s s 对。
运用极大似然法,可以对模型的参数进行估计。
状态转移概率 a i j a_{ij} aij 可以如下估计:
a ^ i j = A i j ∑ j = 1 N A i j , i = 1 , . . , N ; j = 1 , . . . , N \hat{a}_{ij}=\dfrac{A_{ij}}{\sum_{j=1}^N A_{ij}},\qquad i=1,..,N;j=1,...,N a^ij=∑j=1NAijAij,i=1,..,N;j=1,...,N
其中的 A i j A_{ij} Aij 表示样本中 t t t 时刻状态 i i i 转移到 t + 1 t+1 t+1 时刻的状态 j j j 出现的频数。也就是样本中出现了多少次状态 i i i 在下一时刻转移到状态 j j j。这个还是比较好理解。
而观测概率 b j ( k ) b_j(k) bj(k) 的估计为:
b ^ j ( k ) = B j k ∑ k = 1 M B j k , i = 1 , . . , N ; j = 1 , . . . , M \hat{b}_j(k)=\dfrac{B_{jk}}{\sum_{k=1}^M B_{jk}},\qquad i=1,..,N;j=1,...,M b^j(k)=∑k=1MBjkBjk,i=1,..,N;j=1,...,M
其中, B j k B_{jk} Bjk 表示样本中状态 q j q_j qj 生成观测 v k v_k vk 的频数。
对于初始状态概率 π \pi π 的估计比较简单,就是计算所有样本中,每个初始状态出现的频率。
回顾一下setting,训练样本中只有 S S S 个长度为 T T T 的观测序列 { O 1 , . . . , O s } \{O_1,...,O_s\} {O1,...,Os}时,我们的目标同样是学习模型中的参数。
因为状态序列 I I I 是未知的,HMM变成一个含隐变量的概率模型:
P ( O ∣ λ ) = ∑ P ( O ∣ I , λ ) P ( I ∣ λ ) P(O|\lambda)=\sum P(O|I,\lambda)P(I|\lambda) P(O∣λ)=∑P(O∣I,λ)P(I∣λ)
那问题来了,如何学习这个模型的参数?
答案是EM算法。
我们知道EM算法分为E步和M步。
E就是求期望。首先我们需要初始化一组参数 a i j ( 0 ) , b j ( k ) ( 0 ) , π i ( 0 ) a^{(0)}_{ij},b_j(k)^{(0)},\pi_i^{(0)} aij(0),bj(k)(0),πi(0)。然后定义了一个Q函数,就是对隐变量 I I I 求期望的一个函数。
Q ( λ , λ ^ ) = ∑ I log P ( O ∣ I , λ ) P ( O ∣ I , λ ^ ) Q(\lambda,\hat{\lambda})=\sum_I \log P(O|I,\lambda)P(O|I,\hat{\lambda}) Q(λ,λ^)=I∑logP(O∣I,λ)P(O∣I,λ^)
λ ^ \hat{\lambda} λ^ 表示估计值。进一步的,
Q ( λ , λ ^ ) = ∑ I log P ( O ∣ I , λ ) P ( O ∣ I , λ ^ ) = ∑ I log π i 1 b i 1 ( o 1 ) a i 1 i 2 b i 2 ( o 2 ) . . . a i T − 1 i T b i T ( o T ) P ( O ∣ I , λ ^ ) = ∑ I log π i 1 P ( O ∣ I , λ ^ ) + ∑ I ( ∑ t = 1 T log a i t i t + 1 ) P ( O ∣ I , λ ^ ) + ∑ I ( ∑ t = 1 T log b i t ( o t ) ) P ( O ∣ I , λ ^ ) \begin{aligned} Q(\lambda,\hat{\lambda})&=\sum_I \log P(O|I,\lambda)P(O|I,\hat{\lambda})\\ &=\sum_I \log \pi_{i_1}b_{i_1}(o_1)a_{i_1i_2}b_{i_2}(o_2)...a_{i_{T-1}i_{T}}b_{i_T}(o_T) \;P(O|I,\hat{\lambda}) \\ &=\sum_I \log \pi_{i_1}P(O|I,\hat{\lambda})+\sum_I(\sum_{t=1}^T\log a_{i_t i_{t+1}})P(O|I,\hat{\lambda})+\sum_I(\sum_{t=1}^T\log b_{i_t} (o_t))P(O|I,\hat{\lambda}) \end{aligned} Q(λ,λ^)=I∑logP(O∣I,λ)P(O∣I,λ^)=I∑logπi1bi1(o1)ai1i2bi2(o2)...aiT−1iTbiT(oT)P(O∣I,λ^)=I∑logπi1P(O∣I,λ^)+I∑(t=1∑Tlogaitit+1)P(O∣I,λ^)+I∑(t=1∑Tlogbit(ot))P(O∣I,λ^)
E步就是计算这个函数。
M就是极大化。对上式的三个项分别最大化。
这里是应用拉格朗日乘子法进行推导,过程有点复杂,可以直接参考书上内容,这里就不展开。
最后是可以求解得到参数的估计值:
π i = P ( O , i 1 = i ∣ λ ^ ) P ( O ∣ λ ^ ) \pi_i=\dfrac{P(O,i_1=i|\hat{\lambda})}{P(O|\hat{\lambda})} πi=P(O∣λ^)P(O,i1=i∣λ^)
a i j = ∑ t = 1 T − 1 P ( O , i 1 = i , i t + 1 = j ∣ λ ^ ) ∑ t = 1 T − 1 P ( O , i 1 = i ∣ λ ^ ) a_{ij}=\dfrac{\sum_{t=1}^{T-1} P(O,i_1=i,i_{t+1}=j|\hat{\lambda})}{\sum_{t=1}^{T-1} P(O,i_1=i|\hat{\lambda})} aij=∑t=1T−1P(O,i1=i∣λ^)∑t=1T−1P(O,i1=i,it+1=j∣λ^)
b j ( k ) = ∑ t = 1 T P ( O , i 1 = j ∣ λ ^ ) I ( o t = v k ) ∑ t = 1 T P ( O , i 1 = j ∣ λ ^ ) b_{j}(k)=\dfrac{\sum_{t=1}^{T}P(O,i_1=j|\hat{\lambda})I(o_t=v_k)}{\sum_{t=1}^{T} P(O,i_1=j|\hat{\lambda})} bj(k)=∑t=1TP(O,i1=j∣λ^)∑t=1TP(O,i1=j∣λ^)I(ot=vk)
参考