鲍姆-韦尔奇算法求解HMM参数
1. HMM模型参数求解概述
HMM模型参数求解根据已知的条件可以分为两种情况。
第一种情况较为简单,就是我们已知DD个长度为TT的观测序列和对应的隐藏状态序列,即{(O1,I1),(O2,I2),...(OD,ID)}{(O1,I1),(O2,I2),...(OD,ID)}是已知的,此时我们可以很容易的用最大似然来求解模型参数。
假设样本从隐藏状态qiqi转移到qjqj的频率计数是AijAij,那么状态转移矩阵求得为:
假设样本隐藏状态为qjqj且观测状态为vkvk的频率计数是BjkBjk,那么观测状态概率矩阵为:
假设所有样本中初始隐藏状态为qiqi的频率计数为C(i)C(i),那么初始概率分布为:
可见第一种情况下求解模型还是很简单的。但是在很多时候,我们无法得到HMM样本观察序列对应的隐藏序列,只有DD个长度为TT的观测序列,即{(O1),(O2),...(OD)}{(O1),(O2),...(OD)}是已知的,此时我们能不能求出合适的HMM模型参数呢?这就是我们的第二种情况,也是我们本文要讨论的重点。它的解法最常用的是鲍姆-韦尔奇算法,其实就是基于EM算法的求解,只不过鲍姆-韦尔奇算法出现的时代,EM算法还没有被抽象出来,所以我们本文还是说鲍姆-韦尔奇算法。
2. 鲍姆-韦尔奇算法原理
鲍姆-韦尔奇算法原理既然使用的就是EM算法的原理,那么我们需要在E步求出联合分布P(O,I|λ)P(O,I|λ)基于条件概率P(I|O,λ¯¯¯)P(I|O,λ¯)的期望,其中λ¯¯¯λ¯为当前的模型参数,然后再M步最大化这个期望,得到更新的模型参数λλ。接着不停的进行EM迭代,直到模型参数的值收敛为止。
首先来看看E步,当前模型参数为λ¯¯¯λ¯, 联合分布P(O,I|λ)P(O,I|λ)基于条件概率P(I|O,λ¯¯¯)P(I|O,λ¯)的期望表达式为:
在M步,我们极大化上式,然后得到更新后的模型参数如下:
通过不断的E步和M步的迭代,直到λ¯¯¯λ¯收敛。下面我们来看看鲍姆-韦尔奇算法的推导过程。
3. 鲍姆-韦尔奇算法的推导
我们的训练数据为{(O1,I1),(O2,I2),...(OD,ID)}{(O1,I1),(O2,I2),...(OD,ID)},其中任意一个观测序列Od={o(d)1,o(d)2,...o(d)T}Od={o1(d),o2(d),...oT(d)},其对应的未知的隐藏状态序列表示为:Od={i(d)1,i(d)2,...i(d)T}Od={i1(d),i2(d),...iT(d)}
首先看鲍姆-韦尔奇算法的E步,我们需要先计算联合分布P(O,I|λ)P(O,I|λ)的表达式如下:
我们的E步得到的期望表达式为:
在M步我们要极大化上式。由于P(I|O,λ¯¯¯)=P(I,O|λ¯¯¯)/P(O|λ¯¯¯)P(I|O,λ¯)=P(I,O|λ¯)/P(O|λ¯),而P(O|λ¯¯¯)P(O|λ¯)是常数,因此我们要极大化的式子等价于:
我们将上面P(O,I|λ)P(O,I|λ)的表达式带入我们的极大化式子,得到的表达式如下:
我们的隐藏模型参数λ=(A,B,Π)λ=(A,B,Π),因此下面我们只需要对上式分别对A,B,ΠA,B,Π求导即可得到我们更新的模型参数λ¯¯¯λ¯
首先我们看看对模型参数ΠΠ的求导。由于ΠΠ只在上式中括号里的第一部分出现,因此我们对于ΠΠ的极大化式子为:
由于πiπi还满足∑i=1Nπi=1∑i=1Nπi=1,因此根据拉格朗日子乘法,我们得到πiπi要极大化的拉格朗日函数为:
其中,γγ为拉格朗日系数。上式对πiπi求偏导数并令结果为0, 我们得到:
令ii分别等于从1到NN,从上式可以得到NN个式子,对这NN个式子求和可得:
从上两式消去γγ,得到πiπi的表达式为:
利用我们在隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率里第二节中前向概率的定义可得:
因此最终我们在M步πiπi的迭代公式为:
现在我们来看看AA的迭代公式求法。方法和ΠΠ的类似。由于AA只在最大化函数式中括号里的第二部分出现,而这部分式子可以整理为:
由于aijaij还满足∑j=1Naij=1∑j=1Naij=1。和求解πiπi类似,我们可以用拉格朗日子乘法并对aijaij求导,并令结果为0,可以得到aijaij的迭代表达式为:
利用隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率里第二节中前向概率的定义和第五节ξt(i,j)ξt(i,j)的定义可得们在M步aijaij的迭代公式为:
现在我们来看看BB的迭代公式求法。方法和ΠΠ的类似。由于BB只在最大化函数式中括号里的第三部分出现,而这部分式子可以整理为:
由于bj(ot)bj(ot)还满足∑k=1Mbj(ot=vk)=1∑k=1Mbj(ot=vk)=1。和求解πiπi类似,我们可以用拉格朗日子乘法并对bj(k)bj(k)求导,并令结果为0,得到bj(k)bj(k)的迭代表达式为:
其中I(o(d)t=vk)I(ot(d)=vk)当且仅当o(d)t=vkot(d)=vk时为1,否则为0. 利用隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率里第二节中前向概率的定义可得bj(ot)bj(ot)的最终表达式为:
有了πi,aij,bj(k)πi,aij,bj(k)的迭代公式,我们就可以迭代求解HMM模型参数了。
4. 鲍姆-韦尔奇算法流程总结
这里我们概括总结下鲍姆-韦尔奇算法的流程。
输入: DD个观测序列样本{(O1),(O2),...(OD)}{(O1),(O2),...(OD)}
输出:HMM模型参数
1)随机初始化所有的πi,aij,bj(k)πi,aij,bj(k)
2) 对于每个样本d=1,2,...Dd=1,2,...D,用前向后向算法计算γ(d)t(i),ξ(d)t(i,j),t=1,2...Tγt(d)(i),ξt(d)(i,j),t=1,2...T
3) 更新模型参数:
4) 如果πi,aij,bj(k)πi,aij,bj(k)的值已经收敛,则算法结束,否则回到第2)步继续迭代。
以上就是鲍姆-韦尔奇算法的整个过程。
转载:http://www.cnblogs.com/pinard/p/6972299.html
http://www.itdadao.com/articles/c15a132036p0.html
鲍姆-韦尔奇算法求解HMM参数的更多相关文章
- 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数
隐马尔科夫模型HMM(一)HMM模型 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数(TODO) 隐马尔科夫模型HMM(四)维特比算法 ...
- <<杰克.韦尔奇自传>>
<<杰克.韦尔奇自传>> 这本书号称是管理学十大经典名著,也是HR老师推荐的一本书.花了几个月时间断断续续拜读了这本书. GE是伟大的公司,杰克韦尔奇是伟大的CEO,这都毋庸置 ...
- 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率
隐马尔科夫模型HMM(一)HMM模型 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数(TODO) 隐马尔科夫模型HMM(四)维特比算法 ...
- 隐马尔科夫模型HMM(四)维特比算法解码隐藏状态序列
隐马尔科夫模型HMM(一)HMM模型 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数 隐马尔科夫模型HMM(四)维特比算法解码隐藏状态 ...
- 隐马尔科夫模型HMM(一)HMM模型
隐马尔科夫模型HMM(一)HMM模型基础 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数(TODO) 隐马尔科夫模型HMM(四)维特比 ...
- 用hmmlearn学习隐马尔科夫模型HMM
在之前的HMM系列中,我们对隐马尔科夫模型HMM的原理以及三个问题的求解方法做了总结.本文我们就从实践的角度用Python的hmmlearn库来学习HMM的使用.关于hmmlearn的更多资料在官方文 ...
- 机器学习理论基础学习13--- 隐马尔科夫模型 (HMM)
隐含马尔可夫模型并不是俄罗斯数学家马尔可夫发明的,而是美国数学家鲍姆提出的,隐含马尔可夫模型的训练方法(鲍姆-韦尔奇算法)也是以他名字命名的.隐含马尔可夫模型一直被认为是解决大多数自然语言处理问题最为 ...
- 隐型马尔科夫模型(HMM) 简介
先介绍一下马尔科夫模型: 马尔可夫模型(Markov Model)是一种统计模型,广泛应用在语音识别,词性自动标注,音字转换,概率文法等各个自然语言处理等应用领域.经过长期发展,尤其是在语音识别中的成 ...
- 隐马尔可夫(HMM)模型
隐马尔可夫(HMM)模型 隐马尔可夫模型,是一种概率图模型,一种著名的有向图模型,一种判别式模型.主要用于时许数据建模,在语音识别.自然语言处理等领域广泛应用. 概率图模型分为两类,一类:使用有向无环 ...
随机推荐
- 扩展欧几里得 hdu 1576
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1576 不知道扩展欧几里得的同学可以参考:https://blog.csdn.net/zhjchengf ...
- 1、__del__ 2、item系列 3、__hash__ 4、__eq__
1.__del__ 析构方法 释放一个空间之前之前 垃圾回收机制 2.item系列 和对象使用[ ]访问值有联系 __getitem__ __setitem__ __delit ...
- Could not get lock /var/lib/dpkg/lock更新问题
发生于apt-get update或apt update时. 常见手段,先试试: sudo rm /var/lib/dpkg/lock sudo rm /var/lib/apt/lists/lock ...
- swift - VFL - 1.循环创建控件 2.metrics使用
1. /// 创建单个热门项目itemView private func creatProcduceItemView(producrName: String , producePrice: Strin ...
- 41-ssm中对象查找正确但是没有将数据库中某个属性值赋给对象的一个成员变量
原因: 变量名虽然与 数据库字段一致,但是 包含下划线,如: a_b,数据库确实也是a_b: 但是ssm开启驼峰命名了,就要将变量名改为 aB , 驼峰命名就可以了.
- POST请求测试地址
http://service.xunjimap.com/xunjiservice/common1_0_4/index?53D2CFEB65F6BBEEEB42836FE18E7E0D params.a ...
- Couchbase学习和使用
Couchbase介绍 couchbase的关键有两点:延后写入和松散存储.延后写入,顾名思义,couchbase在对数据进行增删时会先体现在内存中,而不会立刻体现在硬盘上,从内存的修改到硬盘的修改这 ...
- .net core和.net 4.7区别和联系笔记
1. 简单说,都是.net standard所定义的接口的实现,都是 .net standard的儿子. 3down voteaccepted C# is a programming language ...
- [z]protobuf实现c++与java之间的数据传递,beancopy数据到前台
[z]http://blog.csdn.net/xhyzdai/article/details/46684335 定义proto文件 option java_package = "com.w ...
- 制作根文件系统之内核如何启动init进程
start_kernel其实也是内核的一个进程,它占用了进程号0,start_kernel的内容简写如下: asmlinkage void __init start_kernel(void) //内核 ...