为了系统性的介绍隐马尔科夫模型,这里翻译一篇国外的论文《A Revealing Introduction to Hidden Markov Models》。
本文作者:Mark Stamp,圣荷西州立大学计算机学院副教授。
1.一个简单的例子
假设我们想要决定一个特定地点在几年间的年平均温度。为了使问题更有趣,我们姑且认为我们想要考虑的你年代极为久远,以至于温度计都还没有发明出来。因为我们不能够回到过去,所以我们就试图寻找一些温度的间接证据来推导。
为了简化问题,我们只考虑两种年温度,“热”和“冷”。假设现在的证据表明,一个热的年份紧跟在另一个热的年份之后的概率未0.7,同时冷的年份紧跟在另一个冷的年份之后的概率未0.6,我们就假设这样的规律在很久之前也成立,那么目前的信息我们可以归纳如下:
(1)
H | C | |
H | 0.7 | 0.3 |
C | 0.4 | 0.6 |
同时,我们假设目前的研究表明温度和一个树的年轮大小之前存在某种关联。简单起见,我们只考虑三种不同的年轮大小,小,中和大,依次表示为S,M,L。最后,假设可行的证据,年均温度与年轮的概率关系如下:
(2)
S | M | L | |
H | 0.1 | 0.4 | 0.5 |
C | 0.7 | 0.2 | 0.1 |
对于目前这套系统,状态就是年均温H或者C。从一个状态转换到另一个状态是一个马尔科夫过程(一阶),因为下一个状态仅仅依赖于目前状态,其固定概率在(1)中表示。但是实际状态是隐含的,因为我们无法直接观察到从前的温度。
尽管我们不能观察到过去的状态,但是我们可以观察到年轮的大小。从(2)中可以看到,三个年轮提供了它们与温度的概率信息。因为状态是隐含的,所以这种系统我们称之为“隐马尔科夫模型(HMM)”。我们的目标就是快速有效地使用可观察到的信息来获取马尔科夫过程中各种不同的信息。
状态转移矩阵表示如下:
(3)
A =
0.7 | 0.3 |
0.4 | 0.6 |
观察矩阵:
(4)
B =
0.1 | 0.4 | 0.5 |
0.7 | 0.2 | 0.1 |
在这个例子中,假设原始状态的分布表示为
(5)
π =
0.6 | 0.4 |
这个矩阵π,A和B是行随机矩阵,嗲表每一个元素是一个概率,并且每一行的元素相加和为1,也就是说每一行都是一个概率分布。
现在考虑一个久远的四年周期,我们观察到了一个年轮序列S,M,S,L,用0表示S,1表示M,2表示L,这个观察序列就为:
(6)
O =(0,1,0,2)
我们希望通过(6)式的观察序列来得到最可能的HMM状态序列。也就是说,我们希望得到这四年间最可能的年均温。这并没有像它看上去的那么简单明了,因为这里对“最有可能的”有不同的可行解释。一方面,我们可以合理地定义“最有可能的”为四年间所有可能状态的最大概率的序列。动态规划可以用来高效地寻找特定的解。另一方面,我们可以合理地定义“最有可能的”为最大化预期正确状态数的序列。HMMs可以用来寻找这个序列。
动态规划和HMM方法并非一定相同。举个例子,动态规划需要有一个合法的状态转移,但是这并不是HMMs一定考虑的。哪怕所有状态转移都是合法的,HMM方法任然可以区别于动态规划,如下示例做出详细阐述。
接下来,我们表示一个HMMs中最具挑战的方面——符号表示。然后我们会讨论三种HMMs的基本的问题,并给出它们的有效算法。我们还会阐述一些在编写HMM计算机程序时需要考虑的关键问题。我们通过大量例子来总结全文,这些示例还不许要任何特别的知识,但是能够很好的阐述HMM方法的优势。
2.符号表示
设:
T = 观察序列长度
N = 模型中状态数
M = 观察符号数
Q = 不同状态的马尔科夫过程。
V = 可能的观察集
A = 状态转移概率
B = 观察概率矩阵
π = 原始状态分布
O = 观察序列
观察序列总是表示为{0,1,..., M - 1},因为这样既简化了表示又不损失一般性。Oi∈V,其中i = 0, 1, ... , T - 1。
下图展示了一个通用隐马尔科夫模型,其中Xi表示隐含状态序列,其他所有符号都已在上边解释过。
隐含在序言之后的马尔科夫过程是由当前状态和A矩阵决定的。我们只能够观察到Oi,它通过B矩阵与隐含状态相关联。
对于之前温度的例子,我们有T = 4, N = 2, M = 3, Q = {H, C}, V = {0,1,2},本例中,矩阵A,B和π都依次在(3),(4)和(5)中给出。
矩阵A = {aij}是N*N维,满足如下表述:
并且A是行随机的。注意,aij依赖于t。
矩阵B = {bj(k)}是N*M维,满足如下表述:
和A矩阵一样,B也是行随机,同时bj(k)的概率是依赖于t 的。
一个隐马尔科夫模型由A,B和π定义,表示为λ = (A,B,π)。假设考虑一个一般的长度为四的状态序列
X = (x0, x1, x2, x3)
对应一个观察序列
O = (O0, O1, O2, O3)
然后πx0是x0的开始状态概率。同时,bx0(O0)是一个原始观察概率O0,axo, x1是状态x0到状态x1的转移概率。然后我们可以的到状态序列X的概率为:
(7)
如果继续考虑在第一部分的温度问题,其中观察序列O = (0,1,0,2),使用(7)的方式可以计算得到
类似的,我们可以直接计算每种长度为四的可能状态序列的概率,假设依旧使用(6)中所提供的观察序列。我们可以罗列这列概率结果在表1中,表中最后一列为归一化概率。
表1
为了使用动态规划寻找最优解,我们简单地选择最高概率的序列,即CCCH。为了找到最优的马尔科夫模型序列,我们选择在每个位置对应的最可能的符号。在每次选择之后,我们计算了所有概率的总和,我们得到一个H在第一个位置。在此之后,我们发现第一个位置为H的归一化概率为0.18817,因此C在第一个位置的概率为0.8113。因此马尔科夫模型选择第一个最优元素为C。我们对序列中每个元素重复这样的步骤,获得了表2的概率数据。
表2
从表2中我们找到了马尔科夫模型最优序列为CHCH。注意,这一个例子中,动态规划序列与马尔科夫序列的最优结果不同,但是所有的状态转移都是合法的。
未完待续