君子博学而日参省乎己 则知明而行无过矣

博客园 首页 新随笔 联系 订阅 管理
隐马尔可夫模型相关算法书上写得不够直观,反正我是不好记,看完之后就不记得了;下面我用图形化的方式阐释之,比较容易理解:

在下面的评估问题与解码问题中,假设转移矩阵为:
图片
转移矩阵里面表示三种隐含状态[Suny Cloud Rain]的转移概率
混淆矩阵为:
图片
混淆矩阵里面表示三种隐含状态[Suny Cloud Rain]分别向四种观察状态[Dry Dryish Damp Soggy]的生成概率
初始状态概率为:图片
观察序列为[Dry Damp Soggy]


一、首先是评估问题,即已知模型参数,计算观察序列的概率,采用前向算法
如图,下面是时间t的某个状态的局部概率的计算,它综合了上一时刻各种状态向当前时刻的某种状态的转移概率,貌似是百川交汇形成大江大河:
图片 
每一个中间节点(前向变量)表示到当前时刻t对应的部分观察序列的最大概率,最后结果为最终时刻T的状态的概率之和
图片
(中间状态节点的概率由上一时刻的各个状态节点的概率来计算,转移概率类似于权重参数,整个计算过程类似于神经网络的前向算法)

(一) 时刻t=1的各状态的局部概率
当t=1时,图片,下面是向量表示: 
图片

(二)时刻t=2的各状态的局部概率
当t=2时,图片

图片

(中间的矩阵为转移矩阵的转置 )

(三)时刻t=3的各状态的局部概率
这里直接用矩阵表示了:
图片图片
 (中间的矩阵为转移矩阵的转置 )
最后将上面最后时刻三个局部概率相加,即得观察序列的概率:
图片
 
二、其次是解码问题,即模型参数,计算生成观察序列的最优路径,采用维特比算法
解码问题即是要找一条最优的路径,使得当前观察序列的概率最大
图片

最优路径可以一对多,不能多对一;与前向算法不同,这里不是综合所有路径的概率,而是其中最优
图片
(解码问题寻找最优路径:弱水三千,只取一瓢)



假设初始状态和转移矩阵和混淆矩阵以及观察状态序列与前向算法中相同,下面是解码问题的算法
(一)时刻t=1的各状态的最优概率
计算公式为图片,下面是向量表示:
图片

(二)时刻t=2的各状态的最优概率
图片 
选择图片状态节点的上个节点路径:
图片
选择图片状态节点的上个节点路径:
图片
接着选择图片状态节点的上个节点路径:
图片 
选择上面三个向量中最大的分量组成新的向量与观测状态对应混淆矩阵中的行向量相乘:
图片
 
(三)时刻t=3的各状态的最优概率
选择图片状态节点的上个节点路径: 
图片 
选择图片状态节点的上个节点路径:  
 图片
选择图片状态节点的上个节点路径:
图片 
选择上面三个向量中最大的分量组成新的向量与观测状态对应混淆矩阵中的行向量相乘:
图片  

因此最大概率为0.01107421875,最优路径为[0, 1, 2]
图片 
即上图中红色的路径概率最大。 

 
总结:前向算法与维特比算法是类似的,前向算法的中间状态节点综合了上一时刻所有节点的能量,而维特比算法只选择上一时刻的状态节点中转移到当前节点中能量最大的节点;
如果想象隐马尔可夫模型中的状态节点为祖国的湖泊,而状态转移类比为祖国的河流,则状态节点概率表示该湖泊的蓄水量,转移概率则表示从其中一个湖泊流向另一个湖泊的水量百分比;前向算法中的局部变量是综合了上一时刻从各个湖泊流过来的水量,而维特比算法中的局部变量只计算上一时刻是从哪一个湖泊流过来的水量最多。 

可以对比神经网络中的前向传播与反向传播,加深理解…… 
 
三、最后是学习问题,即参数估计,采用前向后向算法,下回分解。
……  

-------------------------------------------------------------------------------

转载请注明出处 博客园 刺猬的温驯 

本文链接 http://www.cnblogs.com/chenying99/articles/5353521.html 

posted on 2016-04-05 00:30  刺猬的温驯  阅读(71)  评论(0)    收藏  举报