Viterbi Algorithm

本来想明天再把后面的部分写好,可是睡觉今天是节日呢?一时情不自禁就有打开电脑..........

找到可能性最大的隐含状态序列

崔晓源 翻译

多数情况下,我们都希望能够根据一个给定的HMM模型,根据观察状态序列找到产生这一序列的潜在的隐含状态序列。

1、穷举搜索方法

我们可以通过穷举的方式列出所有可能隐含状态序列,并算出每一种隐状态序列组合对应的观察状态序列的概率。概率最大的那个组合对应的就是最可能的隐状态序列组合。

Pr(observed sequence | hidden state combination).

比如说上图中的trellis中,最有可能的隐状态序列是使得概率:

Pr(dry,damp,soggy | sunny,sunny,sunny), Pr(dry,damp,soggy | sunny,sunny,cloudy), Pr(dry,damp,soggy | sunny,sunny,rainy), . . . . Pr(dry,damp,soggy | rainy,rainy,rainy)

得到最大值的序列。

同样这种穷举法的计算量太大了。为了解决这个问题,我们可以利用和Forward algorithm一样的原理--概率的时间不变性来减少计算量。

2.用递归方式减少复杂度

在给定的观察序列和HMM模型下,我们用一种递归的方式找到最有可能的隐状态序列。同样我们滴定部分概率,即在trellis中到达某一中间状态的概率。然后介绍如何在初始时刻t=1和t>1的时刻分别求解这个部分概率。但要注意,这里的部分概率是到达某一中间状态的概率最大的路径而不是所有概率之和。

2.1部分概率和部分最优路径

看如下trellis

对于trellis中的每个中间状态和结束状态,都存在一条到达它的最优路径。他可能是下图这样:

我们这些路径为部分最优路径,每一条 部分最优路径都对应一个关联概率--部分概率。与Forward algorithm不同是最有可能到达该状态的一条路径的概率。

 (i,t)是所有序列中在t时刻以状态i终止的最大概率。当然它所对应那条路径就是部分最优路径。   (i,t)对于每个i,t都是存在的。这样我们就可以在时间T(序列的最后一个状态)找到整个序列的最优路径。

2b. 计算  ‘s 在t = 1的初始值

由于在t=1不存在任何部分最优路径,因此可以用初始状态 向量协助计算。

这一点与Forward Algorithm相同

2c. 计算  ‘s 在t > 1 的部分概率

同样我们只用t-1时刻的信息来得到t时刻的部分概率。

由此图可以看出到达X的最优路径是下面中的一条:

(sequence of states), . . ., A, X                                (sequence of states), . . ., B, X or (sequence of states), . . ., C, X

我们希望找到一条概率最大的。回想马尔科夫一阶模型的假设,一个状态之和它前一时刻的状态有关。

Pr (most probable path to A) . Pr (X | A) . Pr (observation | X)

因此到达X的最大概率就是:

其中第一部分由t-1时刻的部分概率得到,第二部分是状态转移概率,第三部分是混淆矩阵中对应的概率。

(Viterbi Algorithm 待续)

书接前文,viterbi算法已经基本成形......

崔晓源 翻译

一般化上一篇最后得到的公式我们可以把概率的求解写成:

2d. 反向指针, ‘s

考虑下面trellis

现在我们可以得到到达每一个中间或者终点状态的概率最大的路径。但是我们需要采取一些方法来记录这条路径。这就需要在每个状态记录得到该状态最优路径的前一状态。记为:

这样argmax操作符就会选择使得括号中式子最大的索引j。

如果有人问,为什么没有乘以混淆矩阵中的观察概率因子。这是因为我们关心的是在到达当前状态的最优路径中,前一状态的信息,而与他对应的观察状态无关。

2e. viterbi算法的两个优点

1)与Forward算法一样,它极大的降低了计算复杂度

2)viterbi会根据输入的观察序列,“自左向右”的根据上下文给出最优的理解。由于viterbi会在给出最终选择前考虑所有的观察序列因素,这样就避免了由于突然的噪声使得决策原理正确答案。这种情况在真实的数据中经常出现。

==================================================

下面给出viterbi算法完整的定义1. Formal definition of algorithm

The algorithm may be summarised formally as:

For each i,, i = 1, ... , n, let :

- this intialises the probability calculations by taking the product of the intitial hidden state probabilities with the associated observation probabilities.

For t = 2, ..., T, and i = 1, ... , n let :

- thus determining the most probable route to the next state, and remembering how to get there. This is done by considering all products of transition probabilities with the maximal probabilities already derived for the preceding step. The largest such is remembered, together with what provoked it.

Let :

- thus determining which state at system completion (t=T) is the most probable.

For t = T - 1, ..., 1

Let :

- thus backtracking through the trellis, following the most probable route. On completion, the sequence i1 ... iT will hold the most probable sequence of hidden states for the observation sequence in hand.

================================================== 

 
我们还用天气的例子来说明如何计算状态CLOUDY的部分概率,注意它与Forward算法的区别
还是那句话:

怎么样?看到这里豁然开朗了吧。要是还不明白,我就.....................还有办法,看个动画效果:
http://www.comp.leeds.ac.uk/roger/HiddenMarkovModels/html_dev/viterbi_algorithm/s3_pg3.html
参数定义:
http://www.comp.leeds.ac.uk/roger/HiddenMarkovModels/html_dev/viterbi_algorithm/s3_pg4.html
http://www.comp.leeds.ac.uk/roger/HiddenMarkovModels/html_dev/viterbi_algorithm/s3_pg5.html

隐马尔科夫模型HMM自学 (6)尾声

崔晓源 翻译

HMM 的第三个应用就是learning,这个算法就不再这里详述了,并不是因为他难于理解,而是它比前两个算法要复杂很多。这个方向在语音处理数据库上有重要的地位。因为它可以帮助我们在状态空间很大,观察序列很长的环境下找到合适HMM模型参数:初始状态、转移概率、混淆矩阵等。

好了,我们终于可以对HMM做一个阶段性的总结了。通过这个系列的自学过程,我相信各位已经和我一样对HMM的概念和应用有了一个初步的了解。这里我们考虑的都是一阶马尔科夫过程。HMM在语音识别和NLP方面都有很深入的应用。

简单说说我学习HMM的初衷,在科研过程中遇到了reranking的问题,候选一直都是别人为我生成的,处于好奇,终于决定自己也研究一下,大家都知道, reranking是需要产生N-best的候选,既然是N-best,那么viterbi算法就只能生成一条最好的路径,其他的该怎么办呢?原来在实际应用过程中,通常是把viterbi decoding与另一种称为stack decoding的算法联合使用(当然A*算法也可以)产生多个候选。前面我们已经对A*算法作了介绍,在今后的日子里,如果我有时间也会把stack decoding向大家介绍。(希望不要等太长时间)

别忘了,viterbi算法的目的是根据给定的观察状态序列找出最有可能的隐含状态序列,别忘了viterbi算法不会被中间的噪音所干扰。

隐马尔科夫模型HMM自学 (3)相关推荐

  1. 隐马尔科夫模型HMM自学 (2)

    HMM 定义 崔晓源 翻译 HMM是一个三元组 (,A,B).  the vector of the initial state probabilities;  the state transitio ...

  2. 隐马尔科夫模型HMM自学(1)

    介绍 崔晓源 翻译 我们通常都习惯寻找一个事物在一段时间里的变化规律.在很多领域我们都希望找到这个规律,比如计算机中的指令顺序,句子中的词顺序和语音中的词顺序等等.一个最适用的例子就是天气的预测. 首 ...

  3. 【NLP】用于语音识别、分词的隐马尔科夫模型HMM

    大家好,今天介绍自然语言处理中经典的隐马尔科夫模型(HMM).HMM早期在语音识别.分词等序列标注问题中有着广泛的应用. 了解HMM的基础原理以及应用,对于了解NLP处理问题的基本思想和技术发展脉络有 ...

  4. python地图匹配_基于隐马尔科夫模型(HMM)的地图匹配(Map-Matching)算法

    1. 摘要 本篇博客简单介绍下用隐马尔科夫模型(Hidden Markov Model, HMM)来解决地图匹配(Map-Matching)问题.转载请注明网址. 2. Map-Matching(MM ...

  5. 隐马尔科夫模型 HMM 与 语音识别 speech recognition (1):名词解释

    0.引言 想在 CSDN 上看一下隐马尔科夫模型,简称HMM(Hidden Markov Model)的例子,找了几篇博文,却发现大部分都是转载的,转载的还没有出处,文中的表述与逻辑也看的人晕头转向, ...

  6. 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数

    在本篇我们会讨论HMM模型参数求解的问题,这个问题在HMM三个问题里算是最复杂的.在研究这个问题之前,建议先阅读这个系列的前两篇以熟悉HMM模型和HMM的前向后向算法,以及EM算法原理总结,这些在本篇 ...

  7. 一、隐马尔科夫模型HMM

    隐马尔科夫模型HMM(一)HMM模型基础 隐马尔科夫模型(Hidden Markov Model,以下简称HMM)是比较经典的机器学习模型了,它在语言识别,自然语言处理,模式识别等领域得到广泛的应用. ...

  8. 隐马尔科夫模型 (HMM) 算法介绍及代码实现

    Table of Contents Hidden Markov Model (隐马尔科夫模型) 定义 基本问题 前向算法 算法流程 实现代码 后向算法 算法流程 实现代码 Viterbi算法 算法流程 ...

  9. 隐马尔科夫模型(HMM)择时应用的量化策略

    HMM模型 隐马尔科夫模型(HMM)择时应用的量化策略. 仅为研究学习使用, 不作为任何投资策略建议. 文章内容从各处整理汇总而成, 感谢各位大神分享.  具体策略代码均调试通过. 一.从大奖章讲起 ...

最新文章

  1. Apache ZooKeeper - Leader Election使用场景
  2. office软件的发展前景_2018年办公软件产业发展趋势
  3. 网站权限问题要重视-维护服务器后的看法
  4. mysql备机写binlp_MySQL主从搭建,实现读写分离(基于docker)
  5. mysql索引失效_MySQL索引失效的底层原理详解,终于有人讲清楚了
  6. Spring Boot 针对 Java 开发人员的安装指南
  7. 地址栏引用PHP中变量,PHP 读取地址栏 参数
  8. Kali Linux渗透基础知识整理(四):维持访问
  9. apache的日志切割
  10. 工作3年,还不懂单点登录系统?看看这8幅漫画~
  11. SharedCache-共享缓存概况和初步运用实例(1)
  12. tp5 MySQL发红包功能_ThinkPHP5微信现金红包的开发
  13. FL Studio20.9自带中文入门版本
  14. MBR、主分区、扩展分区、逻辑分区、活动分区、系统分区、启动分区讲解
  15. Rockchip RK3588 kernel dts解析之系统休眠配置rockchip_suspend
  16. .NET MongoDB Driver GridFS 2.2原理及使用示例
  17. sudo,,sudo-i ,,su的区别
  18. Python异常和异常处理
  19. 李宏毅2022机器学习HW5解析
  20. 2023年节假日数据放假补班数据json

热门文章

  1. Linux I2C子系统分析-I2C设备驱动
  2. python逐行读取json_如何用python读取json文件里指定的数据
  3. Salesforce Service Cloud 十大功能亮点
  4. 单例模式存在的问题——破坏单例模式,序列化和反射
  5. 接口的作用(java)
  6. MySql8.0.19最新版本创建用户分配权限演示,You have an error in your SQL syntax权限分配问题解决方法
  7. ubuntu16.04分区
  8. STM32休眠后不能烧录程序
  9. CTFshow 命令执行 web74
  10. 第4周实践项目1 建立单链表(非多组织结构)