版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37334135/article/details/86302735
学习隐马尔可夫模型(HMM),主要就是学习三个问题:概率计算问题,学习问题和预测问题。在前面讲了概率计算问题:前后向算法推导,这里接着讲学习问题,即求模型
λ=(π,A,B)的参数,以下分为监督学习和非监督学习来讲学习算法。
记:
Q={q1,q2,...,qN}表示所有可能的状态集合,
V={v1,v2,...,vM}表示所有可能的观测集合。
I={i1,i2,...,iT} 表示状态序列,
O={o1,o2,...,oN} 为对应的观测序列。
监督学习方法
假设给定训练集包含了观测序列
O和状态序列
I(长度均为
T),即
{(O1,I1),(O2,I2),...,(OS,IS)}。那么模型
λ=(π,A,B)参数的求得可以根据伯努利大数定理的结论 “频率的极限是概率”来给出HMM的参数。
伯努利大数定理:设
μ是
n次试验中A发生的次数,一次试验中A发生的概率为
p,则对任意正数
ε有:
n−>+∞limP(∣nμ−p∣<ε)=1
这个式子说明了,当
n趋近于无穷的时候,频率等于概率。那么以下直接写出模型参数。
(1)、
πi=i=1∑NAiAi
其中
Ai表示初始时刻
t=1,状态为
qi的频数。
(2)、
aij=j=1∑NAijAij
其中
Aij表示时刻
t状态为
qi到时刻
t+1状态为
qj的频数。
(3)、
bi(k)=k=1∑MBikBik
其中
Bik 表示
t 时刻,状态为
qi观测为
vk 的频数。
Baum-Welch算法
Baum-Welch算法其实就是EM算法,用来求HMM,下面统统用EM来说。
如果训练数据只有观测序列而没有状态序列,即
{O1,O2,...,OS} 此时HMM的学习就得使用EM算法了,这是非监督学习。
通常,如果给定数据和已经模型,那么求模型参数我们会用极大似然估计法,但是如果变量中含有隐变量,无法用极大似然求解(对数式子里面有求和,难以求出解析解),此时就可以使用EM算法。考虑HMM,观测序列
O 是显变量,而状态变量
I 则是隐变量,所以HMM实际上是含有隐变量的概率模型
P(O∣λ)=I∑P(O∣I,λ)P(I∣λ)
所以可以使用EM算法来求得模型参数,关于EM算法参考从极大似然估计推出EM算法。
关于EM算法流程,有多个版本,但是仔细学习可以发现是大同小异的,以下使用《统计学习方法》上介绍的EM算法流程。
首先,给定参数初值
λ0=(π0,A0,B0)
E步:写
Q 函数
Q(λ∣λ)=I∑P(I∣O,λ)logP(O,I∣λ)=I∑P(O∣λ)P(O,I∣λ)logP(O,I∣λ)
由于
P(O∣λ) 是个常数,将其去掉得到:
Q(λ∣λ)=I∑P(O,I∣λ)logP(O,I∣λ)
又因为
P(O,I∣λ)=πi1bi1(o1)ai1i2...aiT−1iTbiT(oT)=πi1t=1∏T−1aitit+1t=1∏Tbit(ot) (关于这个式子 在这篇概率计算问题:前后向算法推导中,直接计算方法中介绍了,实际是根据贝叶斯网络和HMM假设得出),带入到
Q 函数中,得到:
Q(λ∣λ)=I∑P(O,I∣λ)log[πi1t=1∏T−1aitit+1t=1∏Tbit(ot)]=I∑logπi1P(O,I∣λ)+I∑(t=1∑T−1logaitjt+1)P(O,I∣λ)+I∑(t=1∑Tlogbit(ot))P(O,I∣λ)
注意到这个式子三项是分别关于
πi,aij和bj(k)的,只需要分别计算即可。
(1)、求
π
I∑logπi1P(O,I∣λ)=I∑logπi1P(O,i1,i2,...,iT∣λ)
如果我们将这个式子完全展示的话,
I∑实际上是
T层求和,分别关于
i1,i2,...,iT的取值,均有
N种取值。
i1有
N种取值,那么
logπi1也是
N种取值,方便起见假设
i1=q5,那么
P(O,q5,i2,...,iT∣λ)不管有多少种取值,展开后求和关于为
logπ5的项为
logπ5[i2,...,iT∑P(O,q5,i2,...,iT∣λ)],根据全概率公式(将
i2,...,iT看成一项即可)得到
[i2,...,iT∑P(O,q5,i2,...,iT∣λ)]=P(O,q5∣λ),所以展开后求和关于为
logπ5的项为
logπ5P(O,q5∣λ) ,所以有:
I∑logπi1P(O,I∣λ)=I∑logπi1P(O,i1,i2,...,iT∣λ)=i=1∑NlogπiP(O,i1=i∣λ)
其中
i1=i也就是
i1=qi,只是为了方便才那样写了。
注意到:
i=1∑Nπi=1,构造拉格朗日函数
L=i=1∑NlogπiP(O,i1=i∣λ)+α[i=1∑Nπi−1]
对
πi求导,令导数为0
∂πi∂L=πiP(O,i1=i∣λ)+α=0
=>P(O,i1=i∣λ)=−απi (1)
两边求和(
i=1∑N)
−α=i=1∑NP(O,i1=i∣λ)=P(O∣λ),带入到(1)式,得到:
πi=P(O∣λ)P(O,i1=i∣λ)
(2)、求
aij
同样地 第二项:
I∑(t=1∑T−1logaitjt+1)P(O,I∣λ)=i=1∑Ni=1∑Nt=1∑T−1logaijP(O,it=i,it+1=j∣λ)
约束条件是
j=1∑Naij=1,同样使用拉格朗日乘子法得到:
aij=t=1∑T−1P(O,it=i∣λ)t=1∑T−1P(O,it=i,it+1=j∣λ)
(3)、求
bj(k)
同样地,第三项:
I∑(t=1∑Tlogbit(ot))P(O,I∣λ)=i=1∑Nt=1∑Tlogbi(ot)P(O,it=i∣λ)
约束条件是
k=1∑Mbi(k)=1,还是使用拉格朗日乘子法,得到
bi(k)=t=1∑TP(O,it=i∣λ)t=1∑TP(O,it=i∣λ)I(ot=vk)
I(ot=vk)为指示函数,
I(true)=1,I(false)=0,因为只有在
ot=vk时候,
bi(ot)对
bi(k)求导才不为0。
在概率计算问题:前后向算法推导中,最后推导了一些结论,直接用在这里来表示这些模型参数吧。
πi=γ1(i)
aij=t=1∑T−1γt(i)t=1∑T−1ξt(i,j)
bi(k)=t=1∑Tγt(i)t=1,ot=vk∑Tγt(i)