Viterbi算法的学习

Viterbi算法  

所谓的马尔科夫过程,就是该过程的当前状态仅由前一时刻的状态确定。用概率表达即为:

隐马尔可夫模型(Hidden Markov Model,HMM)是统计模型,它用来描述一个含有隐含未知参数的马尔可夫过程。其难点是从可观察的参数中确定该过程的隐含参数。然后利用这些参数来作进一步的分析,例如模式识别。

在正常的马尔可夫模型中,状态对于观察者来说是直接可见的。这样状态的转换概率便是全部的参数。而在隐马尔可夫模型中,状态并不是直接可见的,但受状态影响的某些变量则是可见的。每一个状态在可能输出的符号上都有一概率分布。因此输出符号的序列能够透露出状态序列的一些信息。

例如下面的例子:

图中是状态转移概率;

每个状态下都以一定概率产生一些输出(R、B、Y),如:

在每个状态下,都产生一个输出,比如:

其中只有输出序列(R、B、Y)是可以观察到的,而且它们与状态序列没有明显的对应关系。

Viterbi算法可以通过观察到的输出序列,对状态序列做出最佳估计。

 

定义HMM模型为

矩阵 ,其中N是状态数,M是观察值的数量。则是状态转移概率;是状态j下产生输出k的概率;是初始状态i的概率。

接下来就存在几个问题:

  1. 在给定观察序列和模型的情况下,计算观察序列的概率?应用的场合包括:比如已知一观察序列和两个模型,确定该观察是由哪一个模型产生。
  2. 在给定观察序列和模型的情况下,如何估计产生次观察序列的状态序列?应用场合包括信道译码等等。
  3. 如何调整模型参数,以最大化

由于马尔科夫过程当前时刻的状态仅由前一时刻的状态确定,(其中I和Q表示状态,下面的O表示输出、观察)因此有:

因此某一状态序列的产生概率为:

以格形图表示:

如果并不知道状态,而只知道观察值:

由于有:

其中

。即在此状态序列下,同时也获得该观察序列的概率。

状态与输出的概率关系如下,与前面是一样的:

显然,同样的观察值可能对应着许多状态序列。理论上,最多会有NT个序列。当然在上面的例子中,由于有一些状态序列发生的概率为0.对于上面的例子,实际可能的序列数为30.可用下图表示:

这时,我们可以求出能够产生该输出的序列的,则可以选择概率最大的那个作为状态序列的估计。

 

  1. 对前述3个问题中问题1(在某特定的确定模型下求产生此观察序列的概率)的求解:

(前后向算法(Forward-Backward Algorithm),寻求

定义前向变量。这是我们观察到在t时刻到达状态 时的部分观察序列的概率。该前向变量可以通过迭代计算得到:

  1. 初始态。即各初始状态i下产生输出的概率;
  2. 随后的各时刻t,有 ,即在t+1时刻到达状态j时的前向变量,是t时刻各状态对应的前向变量乘以各状态i到j状态的转移概率,然后累加求和,再乘以状态到对应输出的条件概率。以图示表示:

由此迭代直至T时刻。

该迭代计算过程也可以通过的矩阵运算得到。

 

  1. 对前述3个问题中问题2(已知观察序列,求状态序列)的求解:

(Viterbi算法,寻找最大化的状态序列,这也等效于最大化)。这用格形图(trellis)最好说明。在格形图的每一个时间步(列),Viterbi算法只保留N歌可能的状态序列,这N个序列结束在N个状态。如果不止一个序列结束在同样的状态,有着最大概率的序列就产生了。

Viterbi算法的步骤为:

  1. 初始(t=0)

,对应各状态产生输出的概率;

  1. 接下来的各时间步上,

是在t时刻到达状态j时产生对应输出序列的概率,也是前面的前向变量;

  1. 结束:

状态序列回溯:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值