我们将树的年轮简单分为小(small),中(middle),大(large)三种,或者分别写成S,M,L。根据现代的气象知识可以知道,热的一年树木年轮为“小”,“中”,“大”的概率分别为0.1,0.4,0.5;冷的一年树木年轮为“小”,“中”,“大”的概率分别为0.7,0.2,0.1。因此,冷(C),热(H)对年轮的影响可以简单归纳为下面规律:
在这个系统中,状态序列是每年的温度--H 或者 C。因为下一年的温度只与上一年有关,所以从一个状态(温度)转移到下一个状态(温度)可以看成是一个一阶Markov process。因为无法观测过去的温度,状态序列也被称为隐藏状态。尽管我们不能观测过去的状态(温度)序列,但是可以通过树的年轮给我们提供的信息预测温度。我们的目标就是充分利用可观测的年轮序列,来预测那些年的温度序列情况(Markov 过程)。从上面规律可以得到,
状态转移矩阵A:
观测矩阵B:
假设初始状态矩阵PI , (如本例中是初始状态矩阵是最开始产生Hot,和Cold天气的概率)
这样可以得到天气与树年轮的概率图模型
图中最开始产生Hot天气的概率为0.6(由初始状态矩阵PI决定),Hot天气产生树年轮Small的概率为0.1,Hot产生状态产生Hot状态的概率为0.7,接着Hot产生Middle的概率为0.4........。
因此可以得到隐藏天气序列HHCC产生树木年轮序列为SMSL的概率
使用这种办法我们就可以计算产生SMSL序列存在的所有天气序列的概率
比较可得P(CCCH)的概率为0.002822,是最大的。
结论:
- 若树木年轮序列为SMSL,则最可能状态序列(Markov process)是CCCH .
- 产生树木年轮序列为SMSL的概率为0.009629 (所有可能相加)
2. HMM模型
2.1 HMM基本公式
HMM由两个随机过程组成,一个是状态转移序列,它对应着一个单纯的马尔可夫过程,另一个是每一次转移时输出的符号组成的符号序列。这两个随机过程,其中一个是不可观测的,只能通过另一个随机过程的输出观察序列观测得到。不同于Naive Bayes Model,只需要预测一个输出变量y,HMM需要预测一个输出序列
设可观测序列是:
我们的目标是推测出最有可能的输出(状态)序列:
现在我们简单的回顾一下Naive Bayes Model ,它的目标是在已知输入向量x的情况下,求条件概率p(y|x)
因为HMM需要预测的是一个输出序列,模仿Naive Bayes Model可以写成
考虑到yi还受前一时刻的影响,可以从概率图模型看出每一个状态yi-1跳到下一个状态yi都有一个状态转移概率。
其中一个状态序列的概率,如1中的(HHCC)序列的概率可以写成
这将得到有名的HMM模型,如1中求树木年轮序列 为 SMSL的概率 P(SMSL)
2.2 HMM的基本元素
有了前面对HMM模型的讨论,以及树木年轮的例子,就可以给出HMM的定义,或者说HMM可以由哪些元素描述。
LET:
下图描述的是一个 Hidden Markov Model 。其中 Xi 表示隐藏序列,其余的都如上面所定义。其中序列X是未知的,我们要通过可观测序列O,状态转移矩阵A,观测概率矩阵B推测。
Hidden Markov Model
其中:
若带人具体数值可得:
3. HMM的三个基本问题
想要有效的使用HMMs解决实际问题,有三个基本问题必须加以解决。
3.1 问题 1---识别问题
3.2 问题 2---解码问题
3.3 问题 3---模型训练问题
4 HMM的基本算法
下面结合讨论3中提到的三个问题的解法,介绍HMM的基本算法。
4.1 问题1的解决方案
问题1的可以归纳为:
4.1.1蛮力算法
若用图表示可以得到如下:
其中:
当然也可以从Naive Bayes Model的角度理解(但本质上没有区别):
然而,这种直接的计算的方法(蛮力算法)一般是不可行的,实际情况中,我们不可能知道每一种可能的路径,而且这种计算的计算量也是十分惊人的,达到大约数量级。如,当HMM的状态数为5,观测序列长度为100时,计算量达到,是完全无法接受的。因此需要更有效的算法,这就是Baum 等人提出的前向-后向算法。
4.1.2 前向算法(a-pass )
前向算法即按输出观察值序列的时间,从前向后递推计算输出概率。
首先说明下列符号的定义:
由上面的符号的定义,则可由下面递推公式计算得到:
解释:
使用这种前向递推计算算法的计算量大为减少,变为复杂度变为。同样的1中例子,N=5,T=100时,只需要大约2500次乘法。
4.1.3 后向算法()
与前向算法类似,向后算法即使按输出观察序列的时间,从后面向前递推计算输出概率的方法。首先说明下列符号的定义:
有递推公式可得:
解释:
4.2 问题2解决方案
问题2可以归纳为:
4.2.1蛮力算法
如4.1.1中计算每一条可能状态序列的概率,然后比较找出其中概率最大的一条就为我们需要的状态序列X。如开始的例1中就是采用这种算法。这种算法虽然易理解,但是计算开销太大,一般不可取。
4.2.2前向后向算法
在4.1中我们详细的讨论了前向算法以及后向算法,而前向后向算法就是综合这两种算法。可以用来解决寻找最可能隐藏状态序列X的问题。首先我们说明下列符号的定义:
4.2.3 维特比(Viterbi)算法
4.3 问题3解决方案
问题3解决的主要是HMM的训练,即HMM的参数估计问题。可以归纳为:
4.3.1 Baum-Welch算法
首先我们说明下列符号的定义:
根据前向-后向算法,可以得到:
由此可以推出重估公式: