Viterbi算法
所谓的马尔科夫过程,就是该过程的当前状态仅由前一时刻的状态确定。用概率表达即为:。
隐马尔可夫模型(Hidden Markov Model,HMM)是统计模型,它用来描述一个含有隐含未知参数的马尔可夫过程。其难点是从可观察的参数中确定该过程的隐含参数。然后利用这些参数来作进一步的分析,例如模式识别。
在正常的马尔可夫模型中,状态对于观察者来说是直接可见的。这样状态的转换概率便是全部的参数。而在隐马尔可夫模型中,状态并不是直接可见的,但受状态影响的某些变量则是可见的。每一个状态在可能输出的符号上都有一概率分布。因此输出符号的序列能够透露出状态序列的一些信息。
例如下面的例子:
图中是状态转移概率;
每个状态下都以一定概率产生一些输出(R、B、Y),如:
在每个状态下,都产生一个输出,比如:
其中只有输出序列(R、B、Y)是可以观察到的,而且它们与状态序列没有明显的对应关系。
Viterbi算法可以通过观察到的输出序列,对状态序列做出最佳估计。
定义HMM模型为:
矩阵 ,其中N是状态数,M是观察值的数量。则
是状态转移概率;
是状态j下产生输出k的概率;
是初始状态i的概率。
接下来就存在几个问题:
- 在给定观察序列
和模型
的情况下,计算观察序列的概率
?应用的场合包括:比如已知一观察序列和两个模型,确定该观察是由哪一个模型产生。
- 在给定观察序列
和模型
的情况下,如何估计产生次观察序列的状态序列?应用场合包括信道译码等等。
- 如何调整模型参数,以最大化
?
由于马尔科夫过程当前时刻的状态仅由前一时刻的状态确定,(其中I和Q表示状态,下面的O表示输出、观察)因此有:
因此某一状态序列的产生概率为:
以格形图表示:
如果并不知道状态,而只知道观察值:
由于有:,
其中
。即在此状态序列下,同时也获得该观察序列的概率。
状态与输出的概率关系如下,与前面是一样的:
显然,同样的观察值可能对应着许多状态序列。理论上,最多会有NT个序列。当然在上面的例子中,由于有一些状态序列发生的概率为0.对于上面的例子,实际可能的序列数为30.可用下图表示:
这时,我们可以求出能够产生该输出的序列的,则可以选择概率最大的那个作为状态序列的估计。
- 对前述3个问题中问题1(在某特定的确定模型下求产生此观察序列的概率)的求解:
(前后向算法(Forward-Backward Algorithm),寻求)
定义前向变量。这是我们观察到在t时刻到达状态
时的部分观察序列
的概率。该前向变量可以通过迭代计算得到:
- 初始态
。即各初始状态i下产生输出
的概率;
- 随后的各时刻t,有
,即在t+1时刻到达状态j时的前向变量,是t时刻各状态对应的前向变量
乘以各状态i到j状态的转移概率,然后累加求和,再乘以状态到对应输出的条件概率
。以图示表示:
由此迭代直至T时刻。
该迭代计算过程也可以通过的矩阵运算得到。
- 对前述3个问题中问题2(已知观察序列,求状态序列)的求解:
(Viterbi算法,寻找最大化的状态序列,这也等效于最大化
)。这用格形图(trellis)最好说明。在格形图的每一个时间步(列),Viterbi算法只保留N歌可能的状态序列,这N个序列结束在N个状态。如果不止一个序列结束在同样的状态,有着最大概率的序列就产生了。
Viterbi算法的步骤为:
- 初始(t=0)
,对应各状态产生输出
的概率;
- 接下来的各时间步上,
是在t时刻到达状态j时产生对应输出序列
的概率,也是前面的前向变量;
- 结束:
状态序列回溯: