Viterbi算法概述

Vaguelan_Works原创,请勿商业性质转载,转载请注明来源(http://blog.csdn.net/u010681888

决定开始记录自己的一些工作中和学习中一些知识,确实出乎意料的麻烦,最明显的表现就是时间不够用。。。 Anyway,会继续下去,因为这也是一个不断积累的过程,文章都是自己慢慢理解慢慢写出来的,也希望大家一起讨论。今天先对Viterbi算法进行概要的描述,后续会写一篇关于此算法的时间复杂度和空间复杂度的分析方面的东西。 拍砖撒花都可以,不断的进步是王道。 开始我们今天的内容。

Viterbi算法是一种动态规划算法,用来寻找由观测序列产生的最可能隐状态序列(Viterbi路径),这种方法通常用在隐马尔可夫模型中。

此算法需要做一下三个假设,

-  观测序列和隐事件必须处于序列中,如时间序列;

-  观测序列与隐状态序列需一一对应,并且对应关系可量化;

-  计算在当前时间T的最可能隐序列只依赖于T时刻的观测事件和t-1处的最可能序列;

如图1所示:

Viterbi算法概述_第1张图片

图1 Viterbi Algorithm

Viterbi路径和Viterbi算法都遵循寻找单一最可能观测解释的相关动态规划算法。例如,在搜索引擎中的动态规划算法能应用于寻找一个字符串的单个最相似上下文无关推导,即“Viterbi推导”。

 

Viterbi算法是由Andrew Viterbi在1967年提出的,是一种用于有噪声的数据链路卷积码解码的解码算法,并被广泛的应用于CDMA/GSM数字蜂窝,拨号调制解调器,卫星通信,深空通信和802.11无线局域网等。现在也应用在语言识别与理解,关键词匹配,计算机语言学和生物信息学等。例如,在语音识别中,听觉信号被认为是观测事件的序列,文字串被认为是“潜在的原因”。Viterbi算法能够找到对应听觉信号的最可能文字序列。

概述

Viterbi算法是在一个状态机上进行的操作。也就是说,对于任何时间系统都可以被抽象为有限状态集合。每个状态被表示为一个节点。对于第一个假设,多个状态的序列往往都能产生同一个给定的状态,但其中只有一条是最可能产生这个状态的路径,被称作“生存路径”。这是一个最基本的假设,因为这个算法会检测所有的可能路径并只保留一个可能性最大的一个路径。第二个假设,是前一个状态到一个新状态的转移可以被量化的描述,这种转移度量是从实践中计算而来的。第三个假设,是事件在一个路径上是累加的。

 

当下一个事件发生,算法根据上一个可能状态与转换产生的增量度量,并从中选择一个有可能的新状态。增量度量由旧状态与新状态间的转换决定。这种基础算法有一个改进,允许向前搜索和向后搜索。

 

路径必须被储存,在一些实例中,搜索历史是完整的,因为状态机是从一个已知的状态开始的,而且有充足的空间来维持这些路径。但在另一些例子中,需要一个在资源有限条件下的解决方案。例如卷积编码,解码器必须在性能能允许的前提下尽量缩短对路径的记录。尽管Viterbi算法是非常高效的,而且有很多降低时间复杂度的改进,但它对空间的要求仍然趋向常量。

 

实现

参考下述伪代码

INPUT:

-  The observation space ,

-  The state space ,

-  A sequence of observations , such that if theobservation at time is

-  Transition matrix of size such that stores thetransition probability of transiting from state to state ,

-  Emission matrix of size such that stores the probability of observingfrom state ,

-  An array of initial probabilities of size such that stores the probability that,

OUTPUT:

-  The most likely hidden state sequence ,

 

Function

  Foreach state do

     //each state generation probability × state to observation state probability

     //the second dimension is the time axis

    

    

  Endfor

 

  For do

     Foreach state do

       //each k stands for the source state, and j next state

       //matrix A means the probability from k to j

       //matrix B means the probability from the next state j to the observation o

      

      

    Endfor

   Endfor

 

   //at the end of the recursion, find the max value of the probability

  

  

 

   For do

    

    

   Endfor

 

   Return

End function



你可能感兴趣的:(LTE,Algorithm)