HMM学习笔记(二):监督学习方法与Baum-Welch算法

学习隐马尔可夫模型(HMM),主要就是学习三个问题:概率计算问题,学习问题和预测问题。在前面讲了概率计算问题:前后向算法推导,这里接着讲学习问题,即求模型 λ = ( π , A , B ) \lambda=(\pi,A,B) λ=(π,A,B)的参数,以下分为监督学习和非监督学习来讲学习算法。

记: Q = { q 1 , q 2 , . . . , q N } Q=\{q_1,q_2,...,q_N\} Q={q1,q2,...,qN}表示所有可能的状态集合, V = { v 1 , v 2 , . . . , v M } V=\{v_1,v_2,...,v_M\} V={v1,v2,...,vM}表示所有可能的观测集合。

I = { i 1 , i 2 , . . . , i T } I=\{i_1,i_2,...,i_T\} I={i1,i2,...,iT} 表示状态序列, O = { o 1 , o 2 , . . . , o N } O=\{o_1,o_2,...,o_N\} O={o1,o2,...,oN} 为对应的观测序列。

监督学习方法

假设给定训练集包含了观测序列 O O O和状态序列 I I I(长度均为 T T T),即 { ( 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)}。那么模型 λ = ( π , A , B ) \lambda=(\pi,A,B) λ=(π,A,B)参数的求得可以根据伯努利大数定理的结论 “频率的极限是概率”来给出HMM的参数。

伯努利大数定理:设 μ \mu μ n n n次试验中A发生的次数,一次试验中A发生的概率为 p p p,则对任意正数 ε \varepsilon ε有:

lim ⁡ n − > + ∞ P ( ∣ μ n − p ∣ < ε ) = 1 \lim \limits_{n->+\infty}P(|\frac{\mu}{n}-p|<\varepsilon)=1 n>+limP(nμp<ε)=1

这个式子说明了,当 n n n趋近于无穷的时候,频率等于概率。那么以下直接写出模型参数。

(1)、 π ‾ i = A i ∑ i = 1 N A i \overline{\pi}_i=\frac{A_i}{\sum\limits_{i=1}^{N}A_i} πi=i=1NAiAi

其中 A i A_i Ai表示初始时刻 t = 1 t=1 t=1,状态为 q i q_i qi的频数。

(2)、 a ‾ i j = A i j ∑ j = 1 N A i j \overline{a}_{ij}=\frac{A_{ij}}{\sum\limits_{j=1}^{N}A_{ij}} aij=j=1NAijAij

其中 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的频数。

(3)、 b ‾ i ( k ) = B i k ∑ k = 1 M B i k \overline{b}_i(k)=\frac{B_{ik}}{\sum\limits_{k=1}^{M}B_{ik}} bi(k)=k=1MBikBik

其中 B i k B_{ik} Bik 表示 t t t 时刻,状态为 q i q_i qi观测为 v k v_k vk 的频数。

Baum-Welch算法

Baum-Welch算法其实就是EM算法,用来求HMM,下面统统用EM来说。
如果训练数据只有观测序列而没有状态序列,即 { O 1 , O 2 , . . . , O S } \{O_1,O_2,...,O_S\} {O1,O2,...,OS} 此时HMM的学习就得使用EM算法了,这是非监督学习。

通常,如果给定数据和已经模型,那么求模型参数我们会用极大似然估计法,但是如果变量中含有隐变量,无法用极大似然求解(对数式子里面有求和,难以求出解析解),此时就可以使用EM算法。考虑HMM,观测序列 O O O 是显变量,而状态变量 I I I 则是隐变量,所以HMM实际上是含有隐变量的概率模型

P ( O ∣ λ ) = ∑ I P ( O ∣ I , λ ) P ( I ∣ λ ) P(O|\lambda)=\sum\limits_{I}P(O|I,\lambda)P(I|\lambda) P(Oλ)=IP(OI,λ)P(Iλ)

所以可以使用EM算法来求得模型参数,关于EM算法参考从极大似然估计推出EM算法。

关于EM算法流程,有多个版本,但是仔细学习可以发现是大同小异的,以下使用《统计学习方法》上介绍的EM算法流程。

首先,给定参数初值 λ 0 = ( π 0 , A 0 , B 0 ) \lambda_0=(\pi_0,A_0,B_0) λ0=(π0,A0,B0)
E步:写 Q Q Q 函数

Q ( λ ∣ λ ‾ ) = ∑ I P ( I ∣ O , λ ‾ ) l o g P ( O , I ∣ λ ) = ∑ I P ( O , I ∣ λ ‾ ) P ( O ∣ λ ‾ ) l o g P ( O , I ∣ λ ) Q(\lambda|\overline{\lambda})=\sum\limits_{I}P(I|O,\overline{\lambda})logP(O,I|\lambda)=\sum\limits_{I}\frac{P(O,I|\overline{\lambda})}{P(O|\overline{\lambda})}logP(O,I|\lambda) Q(λλ)=IP(IO,λ)logP(O,Iλ)=IP(Oλ)P(O,Iλ)logP(O,Iλ)

由于 P ( O ∣ λ ‾ ) P(O|\overline{\lambda}) P(Oλ) 是个常数,将其去掉得到:

Q ( λ ∣ λ ‾ ) = ∑ I P ( O , I ∣ λ ‾ ) l o g P ( O , I ∣ λ ) Q(\lambda|\overline{\lambda})=\sum\limits_{I}P(O,I|\overline{\lambda})logP(O,I|\lambda) Q(λλ)=IP(O,Iλ)logP(O,Iλ)

又因为 P ( O , I ∣ λ ) = π i 1 b i 1 ( o 1 ) a i 1 i 2 . . . a i T − 1 i T b i T ( o T ) = π i 1 ∏ t = 1 T − 1 a i t i t + 1 ∏ t = 1 T b i t ( o t ) P(O,I|\lambda)=\pi_{i_1}b_{i_1}(o_1)a_{i_1i_2}...a_{i_{T-1}i_{T}}b_{i_T}(o_T)=\pi_{i_1}\prod\limits_{t=1}^{T-1}a_{i_ti_{t+1}}\prod\limits_{t=1}^{T}b_{i_t}(o_t) P(O,Iλ)=πi1bi1(o1)ai1i2...aiT1iTbiT(oT)=πi1t=1T1aitit+1t=1Tbit(ot) (关于这个式子 在这篇概率计算问题:前后向算法推导中,直接计算方法中介绍了,实际是根据贝叶斯网络和HMM假设得出),带入到 Q Q Q 函数中,得到:

Q ( λ ∣ λ ‾ ) = ∑ I P ( O , I ∣ λ ‾ ) l o g [ π i 1 ∏ t = 1 T − 1 a i t i t + 1 ∏ t = 1 T b i t ( o t ) ] = ∑ I l o g π i 1 P ( O , I ∣ λ ‾ ) + ∑ I ( ∑ t = 1 T − 1 l o g a i t j t + 1 ) P ( O , I ∣ λ ‾ ) + ∑ I ( ∑ t = 1 T l o g b i t ( o t ) ) P ( O , I ∣ λ ‾ ) Q(\lambda|\overline{\lambda})=\sum\limits_{I}P(O,I|\overline{\lambda})log[\pi_{i_1}\prod\limits_{t=1}^{T-1}a_{i_ti_{t+1}}\prod\limits_{t=1}^{T}b_{i_t}(o_t)]\\=\sum\limits_{I}log\pi_{i_1}P(O,I|\overline{\lambda})+\sum\limits_{I}(\sum\limits_{t=1}^{T-1}loga_{i_tj_{t+1}})P(O,I|\overline{\lambda})+\sum\limits_{I}(\sum\limits_{t=1}^{T}logb_{i_t}(o_t))P(O,I|\overline{\lambda}) Q(λλ)=IP(O,Iλ)log[πi1t=1T1aitit+1t=1Tbit(ot)]=Ilogπi1P(O,Iλ)+I(t=1T1logaitjt+1)P(O,Iλ)+I(t=1Tlogbit(ot))P(O,Iλ)

注意到这个式子三项是分别关于 π i , a i j 和 b j ( k ) \pi_i,a_{ij}和b_j(k) πi,aijbj(k)的,只需要分别计算即可。

(1)、求 π \pi π

∑ I l o g π i 1 P ( O , I ∣ λ ‾ ) = ∑ I l o g π i 1 P ( O , i 1 , i 2 , . . . , i T ∣ λ ‾ ) \sum\limits_{I}log\pi_{i_1}P(O,I|\overline{\lambda})=\sum\limits_{I}log\pi_{i_1}P(O,i_1,i_2,...,i_T|\overline{\lambda}) Ilogπi1P(O,Iλ)=Ilogπi1P(O,i1,i2,...,iTλ)

如果我们将这个式子完全展示的话, ∑ I \sum\limits_{I} I实际上是 T T T层求和,分别关于 i 1 , i 2 , . . . , i T i_1,i_2,...,i_T i1i2,...,iT的取值,均有 N N N种取值。 i 1 i_1 i1 N N N种取值,那么 l o g π i 1 log\pi_{i_1} logπi1也是 N N N种取值,方便起见假设 i 1 = q 5 i_1=q_5 i1=q5,那么 P ( O , q 5 , i 2 , . . . , i T ∣ λ ‾ ) P(O,q_5,i_2,...,i_T|\overline{\lambda}) P(O,q5,i2,...,iTλ)不管有多少种取值,展开后求和关于为 l o g π 5 log\pi_{5} logπ5的项为 l o g π 5 [ ∑ i 2 , . . . , i T P ( O , q 5 , i 2 , . . . , i T ∣ λ ‾ ) ] log\pi_{5}[\sum\limits_{i_2,...,i_T}P(O,q_5,i_2,...,i_T|\overline{\lambda})] logπ5[i2,...,iTP(O,q5,i2,...,iTλ)],根据全概率公式(将 i 2 , . . . , i T i_2,...,i_T i2,...,iT看成一项即可)得到
[ ∑ i 2 , . . . , i T P ( O , q 5 , i 2 , . . . , i T ∣ λ ‾ ) ] = P ( O , q 5 ∣ λ ‾ ) [\sum\limits_{i_2,...,i_T}P(O,q_5,i_2,...,i_T|\overline{\lambda})]=P(O,q_5|\overline{\lambda}) [i2,...,iTP(O,q5,i2,...,iTλ)]=P(O,q5λ),所以展开后求和关于为 l o g π 5 log\pi_{5} logπ5的项为 l o g π 5 P ( O , q 5 ∣ λ ‾ ) log\pi_{5}P(O,q_5|\overline{\lambda}) logπ5P(O,q5λ) ,所以有:

∑ I l o g π i 1 P ( O , I ∣ λ ‾ ) = ∑ I l o g π i 1 P ( O , i 1 , i 2 , . . . , i T ∣ λ ‾ ) = ∑ i = 1 N l o g π i P ( O , i 1 = i ∣ λ ‾ ) \sum\limits_{I}log\pi_{i_1}P(O,I|\overline{\lambda})=\sum\limits_{I}log\pi_{i_1}P(O,i_1,i_2,...,i_T|\overline{\lambda})\\=\sum\limits_{i=1}^{N}log\pi_iP(O,i_1=i|\overline{\lambda}) Ilogπi1P(O,Iλ)=Ilogπi1P(O,i1,i2,...,iTλ)=i=1NlogπiP(O,i1=iλ)

其中 i 1 = i i_1=i i1=i也就是 i 1 = q i i_1=q_i i1=qi,只是为了方便才那样写了。

注意到: ∑ i = 1 N π i = 1 \sum\limits_{i=1}^{N}\pi_i=1 i=1Nπi=1,构造拉格朗日函数

L = ∑ i = 1 N l o g π i P ( O , i 1 = i ∣ λ ‾ ) + α [ ∑ i = 1 N π i − 1 ] L=\sum\limits_{i=1}^{N}log\pi_iP(O,i_1=i|\overline{\lambda})+\alpha[\sum\limits_{i=1}^{N}\pi_i-1] L=i=1NlogπiP(O,i1=iλ)+α[i=1Nπi1]

π i \pi_i πi求导,令导数为0

∂ L ∂ π i = P ( O , i 1 = i ∣ λ ‾ ) π i + α = 0 \frac{\partial L}{\partial \pi_i}=\frac{P(O,i_1=i|\overline{\lambda})}{\pi_i}+\alpha=0 πiL=πiP(O,i1=iλ)+α=0
= > P ( O , i 1 = i ∣ λ ‾ ) = − α π i =>P(O,i_1=i|\overline{\lambda})=-\alpha\pi_i =>P(O,i1=iλ)=απi (1)
两边求和( ∑ i = 1 N \sum\limits_{i=1}^{N} i=1N)
− α = ∑ i = 1 N P ( O , i 1 = i ∣ λ ‾ ) = P ( O ∣ λ ‾ ) -\alpha=\sum\limits_{i=1}^{N}P(O,i_1=i|\overline{\lambda})=P(O|\overline{\lambda}) α=i=1NP(O,i1=iλ)=P(Oλ),带入到(1)式,得到:

π i = P ( O , i 1 = i ∣ λ ‾ ) P ( O ∣ λ ‾ ) \pi_i=\frac{P(O,i_1=i|\overline{\lambda})}{P(O|\overline{\lambda})} πi=P(Oλ)P(O,i1=iλ)

(2)、求 a i j a_{ij} aij

同样地 第二项:
∑ I ( ∑ t = 1 T − 1 l o g a i t j t + 1 ) P ( O , I ∣ λ ‾ ) = ∑ i = 1 N ∑ i = 1 N ∑ t = 1 T − 1 l o g a i j P ( O , i t = i , i t + 1 = j ∣ λ ‾ ) \sum\limits_{I}(\sum\limits_{t=1}^{T-1}loga_{i_tj_{t+1}})P(O,I|\overline{\lambda})=\sum\limits_{i=1}^{N}\sum\limits_{i=1}^{N}\sum\limits_{t=1}^{T-1}loga_{ij}P(O,i_t=i,i_{t+1}=j|\overline{\lambda}) I(t=1T1logaitjt+1)P(O,Iλ)=i=1Ni=1Nt=1T1logaijP(O,it=i,it+1=jλ)

约束条件是 ∑ j = 1 N a i j = 1 \sum\limits_{j=1}^{N}a_{ij}=1 j=1Naij=1,同样使用拉格朗日乘子法得到:

a i j = ∑ t = 1 T − 1 P ( O , i t = i , i t + 1 = j ∣ λ ‾ ) ∑ t = 1 T − 1 P ( O , i t = i ∣ λ ‾ ) a_{ij}=\frac{\sum\limits_{t=1}^{T-1}P(O,i_t=i,i_{t+1}=j|\overline{\lambda})}{\sum\limits_{t=1}^{T-1}P(O,i_t=i|\overline{\lambda})} aij=t=1T1P(O,it=iλ)t=1T1P(O,it=i,it+1=jλ)

(3)、求 b j ( k ) b_j(k) bj(k)

同样地,第三项:

∑ I ( ∑ t = 1 T l o g b i t ( o t ) ) P ( O , I ∣ λ ‾ ) = ∑ i = 1 N ∑ t = 1 T l o g b i ( o t ) P ( O , i t = i ∣ λ ‾ ) \sum\limits_{I}(\sum\limits_{t=1}^{T}logb_{i_t}(o_t))P(O,I|\overline{\lambda})=\sum\limits_{i=1}^{N}\sum\limits_{t=1}^{T}logb_{i}(o_t)P(O,i_t=i|\overline{\lambda}) I(t=1Tlogbit(ot))P(O,Iλ)=i=1Nt=1Tlogbi(ot)P(O,it=iλ)

约束条件是 ∑ k = 1 M b i ( k ) = 1 \sum\limits_{k=1}^{M}b_i(k)=1 k=1Mbi(k)=1,还是使用拉格朗日乘子法,得到

b i ( k ) = ∑ t = 1 T P ( O , i t = i ∣ λ ‾ ) I ( o t = v k ) ∑ t = 1 T P ( O , i t = i ∣ λ ‾ ) b_i(k)=\frac{\sum\limits_{t=1}^{T}P(O,i_t=i|\overline{\lambda})I(o_t=v_k)}{\sum\limits_{t=1}^{T}P(O,i_t=i|\overline{\lambda})} bi(k)=t=1TP(O,it=iλ)t=1TP(O,it=iλ)I(ot=vk)

I ( o t = v k ) I(o_t=v_k) I(ot=vk)为指示函数, I ( t r u e ) = 1 , I ( f a l s e ) = 0 I(true)=1,I(false)=0 I(true)=1,I(false)=0,因为只有在 o t = v k o_t=v_k ot=vk时候, b i ( o t ) b_i(o_t) bi(ot) b i ( k ) b_i(k) bi(k)求导才不为0。

在概率计算问题:前后向算法推导中,最后推导了一些结论,直接用在这里来表示这些模型参数吧。

π i = γ 1 ( i ) \pi_i=\gamma_1(i) πi=γ1(i)

a i j = ∑ t = 1 T − 1 ξ t ( i , j ) ∑ t = 1 T − 1 γ t ( i ) a_{ij}=\frac{\sum\limits_{t=1}^{T-1}\xi_t(i,j)}{\sum\limits_{t=1}^{T-1}\gamma_t(i)} aij=t=1T1γt(i)t=1T1ξt(i,j)

b i ( k ) = ∑ t = 1 , o t = v k T γ t ( i ) ∑ t = 1 T γ t ( i ) b_i(k)=\frac{\sum\limits_{t=1,o_t=v_k}^{T}\gamma_t(i)}{\sum\limits_{t=1}^{T}\gamma_t(i)} bi(k)=t=1Tγt(i)t=1,ot=vkTγt(i)

你可能感兴趣的:(机器学习)