1. 定义
1.1 基本定义
马尔可夫性质(Markov Property):
是概率论中的一个概念,因为俄国数学家安德雷·马尔可夫得名。当一个随机过程在给定现在状态及所有过去状态情况下,其未来状态的条件概率分布仅依赖于当前状态;换句话说,在给定现在状态时,它与过去状态(即该过程的历史路径)是条件独立的,那么此随机过程即具有马尔可夫性质。具有马尔可夫性质的过程通常称之为马尔可夫过程。
隐马尔可夫模型(Hidden Markov Model,HMM):
是统计模型,它用来描述一个含有隐含未知参数的马尔可夫过程。是马尔可夫链的一种,它的状态不能直接观察到,但能通过观测向量序列观察到,每个观测向量都是通过某些概率密度分布表现为各种状态,每一个观测向量都是由一个具有相应概率密度分布的状态序列产生。所以,隐马尔可夫模型是一个双重随机过程 - 具有一定状态数的隐马尔可夫链和显示随机函数集。
隐藏的马尔可夫链随机生成的状态的序列,称为状态序列(state sequence);每个状态生成一个观测,而由此产生的观测的随机序列,称为观测序列(observation sequence)。序列的每一个位置又可以看作是一个时刻。
1.2 三要素
隐马尔可夫模型由初始状态概率向量 π \pi π、状态转移概率矩阵 A A A和观测概率矩阵 B B B确定(称为隐马尔可夫模型的三要素)。 π \pi π和 A A A决定状态序列, B B B决定观测序列。隐马尔可夫模型 λ \lambda λ可用三元符号表示为:
λ = ( A , B , π ) (1) \lambda = (A,B,\pi) \tag{1} λ=(A,B,π)(1)
1.3 两个基本假设
本质上就是对马尔可夫性质的总结:
(1)齐次马尔可夫性假设,即假设隐藏的马尔可夫链在任意时刻
t
t
t的状态只依赖于前一时刻的状态,与其他时刻的状态无关,也与时刻
t
t
t无关;
(2)观测独立性假设,即假设任意时刻的观测只依赖于该时刻的马尔可夫链的状态,与其他观测及状态无关。
1.4 三个基本问题
隐马尔可夫模型有3个基本问题:
(1)概率计算问题:给定模型
λ
=
(
A
,
B
,
π
)
\lambda=(A,B,\pi)
λ=(A,B,π)和观测序列
O
=
(
o
1
,
o
2
,
.
.
.
,
o
T
)
O=(o_1,o_2,...,o_T)
O=(o1,o2,...,oT),计算在模型
λ
\lambda
λ下观测序列
O
O
O出现的概率
P
(
O
∣
λ
)
P(O|\lambda)
P(O∣λ);
(2)学习问题:已知观测序列
O
=
(
o
1
,
o
2
,
.
.
.
,
o
T
)
O=(o_1,o_2,...,o_T)
O=(o1,o2,...,oT),估计模型
λ
=
(
A
,
B
,
π
)
\lambda=(A,B,\pi)
λ=(A,B,π)的参数,使得在该模型下观测学习序列概率
P
(
O
∣
λ
)
P(O|\lambda)
P(O∣λ)最大。即用极大似然估计的方法估计参数;
(3)预测问题:也称为解码(decoding)问题。给定观测序列,求最有可能的对应的状态序列。
1.5 示例
该例贯穿余下全文。
(书中例10.1)(盒子和球模型)假设有4个盒子,每个盒子里都装有红白两种颜色的球,盒子里的红白球数由下标给出:
盒子 | 1 | 2 | 3 | 4 |
---|---|---|---|---|
红球数 | 5 | 3 | 6 | 8 |
白球数 | 5 | 7 | 4 | 2 |
按照下面的方法抽球,产生一个球的颜色的观测序列:
- 开始,从4个盒子里以等概率随机选取1个盒子,从这个盒子里随机抽出1个球,记录其颜色后,放回;
- 然后,从当前盒子随机转移到下一个盒子,规则是:如果当前盒子是盒子1,那么下一盒子一定是盒子2,如果当前是盒子2或3,那么分别以概率0.4和0.6转移到左边或右边的盒子,如果当前是盒子4,那么各以0.5的概率停留在盒子4或转移到盒子3;
- 确定转移的盒子后,再从这个盒子里随机抽出1个球,记录其颜色,放回;
- 如此下去,重复进行5次,得到一个球的颜色的观测序列:
O = { 红 , 红 , 白 , 白 , 红 } O=\{红,红,白,白,红\} O={红,红,白,白,红}
这个例子中有两个随机序列:盒子的序列(状态序列,隐藏)和球的颜色的序列(观测序列,可观测)。由此可以明确HMM的状态集合、观测集合、序列长度以及模型的三要素:
(1)状态集合:
Q = 盒 子 1 , 盒 子 2 , 盒 子 3 , 盒 子 4 Q={盒子1, 盒子2, 盒子3, 盒子4} Q=盒子1,盒子2,盒子3,盒子4
(2)观测集合:
V = { 红 , 白 } , M = 2 V=\{红, 白\},M=2 V={红,白},M=2
(3)状态序列和观测序列的长度均为:
T = 5 T=5 T=5
(4)初始概率分布:
π = ( 0.25 , 0.25 , 0.25 , 0.25 ) T \pi=(0.25, 0.25, 0.25, 0.25)^T π=(0.25,0.25,0.25,0.25)T
(5)状态转移概率分布(行表示当前盒子,列表示下一时刻的盒子):
[ 0 1 0 0 0.4 0 0.6 0 0 0.4 0 0.6 0 0 0.5 0.5 ] \begin{bmatrix} 0 & 1 & 0 & 0 \\ 0.4 & 0 & 0.6 & 0 \\ 0 & 0.4 & 0 & 0.6 \\ 0 & 0 & 0.5 & 0.5 \end{bmatrix} ⎣⎢⎢⎡00.400100.4000.600.5000.60.5⎦⎥⎥⎤
(6)观测概率分布(每行表示在对应盒子中取出红白球的概率):
B = [ 0.5 0.5 0.3 0.7 0.6 0.4 0.8 0.2 ] B= \begin{bmatrix} 0.5 & 0.5 \\ 0.3 & 0.7 \\ 0.6 & 0.4 \\ 0.8 & 0.2 \end{bmatrix} B=⎣⎢⎢⎡0.50.30.60.80.50.70.40.2⎦⎥⎥⎤
2. 概率计算算法
概率计算问题:给定模型 λ = ( A , B , π ) \lambda=(A,B,\pi) λ=(A,B,π)和观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT),计算在模型 λ \lambda λ下观测序列 O O O出现的概率 P ( O ∣ λ ) P(O|\lambda) P(O∣λ)。
本节介绍1.4中提到的HMM基本问题的第一个 - 概率计算问题。即给定模型 λ = ( A , B , π ) \lambda=(A,B,\pi) λ=(A,B,π)和观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT),计算在模型 λ \lambda λ下观测序列 O O O出现的概率 P ( O ∣ λ ) P(O|\lambda) P(O∣λ)。介绍3种方法:
- 直接计算法(不可行)
- 前向(forward)算法
- 后向(backward)算法
对应于示例1.5中的问题就是:在给定示例中的条件下,求所有出现观测序列 O = { 红 , 红 , 白 , 白 , 红 } O=\{红,红,白,白,红\} O={红,红,白,白,红}的概率。
2.1 直接计算法(概念上可行但计算上不可行)
给定模型 λ \lambda λ和观测序列 O O O,计算观测序列 O O O出现的概率。直接计算法就是通过公式列举所有可能的长度为 T T T的状态序列,求各个状态序列 I I I与观测序列 O O O的联合概率 P ( O , I ∣ λ ) P(O,I|\lambda) P(O,I∣λ),然后对所有可能的状态序列求和,得到 P ( O , λ ) P(O,\lambda) P(O,λ)。
直接计算法的计算量很大,是 O ( T N T ) O(TN^T) O(TNT)阶的,这种算法在概念上可行,但计算上消耗过大。
2.2 前向(forward)算法
2.2.1 算法描述
前向概率:给定隐马尔可夫模型 λ \lambda λ,定义到时刻 t t t部分观测序列为 o 1 , o 2 , . . . , o t o_1,o_2,...,o_t o1,o2,...,ot(小写 t t t表示在整个观测序列长度 T T T中间的一个节点),且状态为 q i q_i qi的概率为前向概率(小写 q i q_i qi表示在状态集合 Q Q Q中的一个元素),记作:
α t ( i ) = P ( o 1 , o 2 , . . . , o t , i t = q i ∣ λ ) \alpha_t(i)=P(o_1,o_2,...,o_t,i_t=q_i|\lambda) αt(i)=P(o1,o2,...,ot,it=qi∣λ)
其中, i i i代表状态序列 Q Q Q中的状态序号(时刻), t t t代表观测序列 O O O中的观测序号(时刻)。
可以递推的求得前向概率 α t ( i ) \alpha_t(i) αt(i)及观测序列概率 P ( O ∣ λ ) P(O|\lambda) P(O∣λ)。算法步骤如下:
(1)计算初值:
α 1 ( i ) = π i b i ( o 1 ) , i = 1 , 2 , . . . , N \alpha_1(i)=\pi_ib_i(o_1), \text{ } i=1,2,...,N α1(i)=πibi(o1), i=1,2,...,N
这一步求得初始值的数量与状态序列 Q Q Q的元素个数一致,可以理解为:分别在取 1 1 1~ i i i种状态条件 q i q_i qi下得到观测值 o 1 o_1 o1的概率,这可通过上一节的直接计算法来计算。
(2)递推计算: 对于 t = 1 , 2 , . . . , T − 1 t=1,2,...,T-1 t=1,2,...,T−1,有:
α t + 1 ( i ) = [ ∑ j = 1 N α t ( j ) a i j ] b i ( o t + 1 ) , i = 1 , 2 , . . . , N \alpha_{t+1}(i)= \begin{bmatrix} \sum_{j=1}^{N}\alpha_t(j)a_{ij} \end{bmatrix} b_i(o_{t+1}), \text{ } i=1,2,...,N αt+1(i)=[∑j=1Nαt(j)aij]bi(ot+1), i=1,2,...,N
这一步需要用到状态转移概率矩阵中的元素 a i j a_{ij} aij,上面的公式可以理解为:在确定前面所有状态观测值(在不同状态序列得到的概率)的前提下,计算当前状态下得到观测值的概率。
(3)终止:
P ( O ∣ λ ) = ∑ i = 1 N α r ( i ) P(O|\lambda)=\sum_{i=1}^{N}\alpha_r(i) P(O∣λ)=i=1∑Nαr(i)
2.2.2 示例
依然使用1.5的示例描述,但将其中的参量改为以下:
A = [ 0.5 0.2 0.3 0.3 0.5 0.2 0.2 0.3 0.5 ] , B = [ 0.5 0.5 0.4 0.6 0.7 0.3 ] , π = ( 0.2 , 0.4 , 0.4 ) T A= \begin{bmatrix} 0.5 & 0.2 & 0.3 \\ 0.3 & 0.5 & 0.2 \\ 0.2 & 0.3 & 0.5 \end{bmatrix} , \text{ } B= \begin{bmatrix} 0.5 & 0.5 \\ 0.4 & 0.6 \\ 0.7 & 0.3 \end{bmatrix} , \text{ } \pi=(0.2,0.4,0.4)^T A=⎣⎡0.50.30.20.20.50.30.30.20.5⎦⎤, B=⎣⎡0.50.40.70.50.60.3⎦⎤, π=(0.2,0.4,0.4)T
设 T = 3 T=3 T=3, O = ( 红 , 白 , 红 ) O=(红, 白, 红) O=(红,白,红),试用前向算法计算 P ( O ∣ λ ) P(O|\lambda) P(O∣λ)。
(1)计算初值:
在已知第一个观测值 o 1 o_1 o1为红球的条件下,这个球是在1~3号盒子中取出的概率。
第 一 个 红 球 是 在 盒 子 1 中 取 出 的 概 率 : α 1 ( 1 ) = π 1 b 1 ( o 1 ) = 0.2 × 0.5 = 0.1 第 一 个 红 球 是 在 盒 子 2 中 取 出 的 概 率 : α 1 ( 2 ) = π 2 b 2 ( o 1 ) = 0.4 × 0.4 = 0.16 第 一 个 红 球 是 在 盒 子 3 中 取 出 的 概 率 : α 1 ( 3 ) = π 3 b 3 ( o 1 ) = 0.4 × 0.7 = 0.28 \begin{array}{l} 第一个红球是在盒子1中取出的概率:\alpha_1(1)=\pi_1b_1(o_1)=0.2\times0.5=0.1 \\ 第一个红球是在盒子2中取出的概率:\alpha_1(2)=\pi_2b_2(o_1)=0.4\times0.4=0.16 \\ 第一个红球是在盒子3中取出的概率:\alpha_1(3)=\pi_3b_3(o_1)=0.4\times0.7=0.28 \end{array} 第一个红球是在盒子1中取出的概率:α1(1)=π1b1(o1)=0.2×0.5=0.1第一个红球是在盒子2中取出的概率:α1(2)=π2b2(o1)=0.4×0.4=0.16第一个红球是在盒子3中取出的概率:α1(3)=π3b3(o1)=0.4×0.7=0.28
(2)递推计算:
以下面的第一个公式来举例,在前面的观测值都确定的情况下(第一个取出为红球),第二个白球是在盒子1中取出的情况都分为3种:
- 第一个红球在盒子1中取出,第二个白球在盒子1中取出(状态1转到状态1);
- 第一个红球在盒子2中取出,第二个白球在盒子1中取出(状态2转到状态1);
- 第一个红球在盒子3中取出,第二个白球在盒子1中取出(状态3转到状态1)。
类推,得到:
第 二 个 白 球 在 盒 子 1 中 取 出 的 概 率 : α 2 ( 1 ) = [ ∑ i = 1 3 α 1 ( i ) a i 1 ] b 1 ( o 2 ) = ( 0.1 × 0.5 + 0.16 × 0.3 + 0.28 × 0.2 ) × 0.5 = 0.077 第 二 个 白 球 在 盒 子 2 中 取 出 的 概 率 : α 2 ( 2 ) = [ ∑ i = 1 3 α 1 ( i ) a i 2 ] b 2 ( o 2 ) = ( 0.1 × 0.2 + 0.16 × 0.5 + 0.28 × 0.3 ) × 0.6 = 0.1104 第 二 个 白 球 在 盒 子 3 中 取 出 的 概 率 : α 2 ( 3 ) = [ ∑ i = 1 3 α 1 ( i ) a i 3 ] b 3 ( o 2 ) = ( 0.1 × 0.3 + 0.16 × 0.2 + 0.28 × 0.5 ) × 0.3 = 0.0606 第二个白球在盒子1中取出的概率:\alpha_2(1)=[\sum_{i=1}^3 \alpha_1(i)a_{i1}]b_1(o_2)=(0.1\times0.5+0.16\times0.3+0.28\times0.2)\times0.5=0.077 \\ 第二个白球在盒子2中取出的概率:\alpha_2(2)=[\sum_{i=1}^3 \alpha_1(i)a_{i2}]b_2(o_2)=(0.1\times0.2+0.16\times0.5+0.28\times0.3)\times0.6=0.1104 \\ 第二个白球在盒子3中取出的概率:\alpha_2(3)=[\sum_{i=1}^3 \alpha_1(i)a_{i3}]b_3(o_2)=(0.1\times0.3+0.16\times0.2+0.28\times0.5)\times0.3=0.0606 第二个白球在盒子1中取出的概率:α2(1)=[i=1∑3α1(i)ai1]b1(o2)=(0.1×0.5+0.16×0.3+0.28×0.2)×0.5=0.077第二个白球在盒子2中取出的概率:α2(2)=[i=1∑3α1(i)ai2]b2(o2)=(0.1×0.2+0.16×0.5+0.28×0.3)×0.6=0.1104第二个白球在盒子3中取出的概率:α2(3)=[i=1∑3α1(i)ai3]b3(o2)=(0.1×0.3+0.16×0.2+0.28×0.5)×0.3=0.0606
依然以下面第一个公式来说明,在前面的观测值都确定的情况下(第一个取出为红球,第二个取出为白球),第三个红球是在盒子1中取出的情况分为3种:
- 第二个白球在盒子1中取出,第三个红球在盒子1中取出(状态1转到状态1);
- 第二个白球在盒子2中取出,第三个红球在盒子1中取出(状态2转到状态1);
- 第二个白球在盒子3中取出,第三个红球在盒子1中取出(状态3转到状态1)。
接下来计算第三个取出的为红球的概率:
第 三 个 红 球 在 盒 子 1 中 取 出 的 概 率 : α 3 ( 1 ) = [ ∑ i = 1 3 α 2 ( i ) a i 1 ] b 1 ( o 3 ) = ( 0.077 × 0.5 + 0.1104 × 0.3 + 0.0606 × 0.2 ) × 0.5 = 0.04187 第 三 个 红 球 在 盒 子 2 中 取 出 的 概 率 : α 3 ( 2 ) = [ ∑ i = 1 3 α 2 ( i ) a i 2 ] b 2 ( o 3 ) = ( 0.077 × 0.2 + 0.1104 × 0.5 + 0.0606 × 0.3 ) × 0.4 = 0.03551 第 三 个 红 球 在 盒 子 3 中 取 出 的 概 率 : α 3 ( 3 ) = [ ∑ i = 1 3 α 2 ( i ) a i 3 ] b 3 ( o 3 ) = ( 0.077 × 0.3 + 0.1104 × 0.2 + 0.0606 × 0.5 ) × 0.7 = 0.05284 第三个红球在盒子1中取出的概率:\alpha_3(1)=[\sum_{i=1}^3 \alpha_2(i)a_{i1}]b_1(o_3)=(0.077\times0.5+0.1104\times0.3+0.0606\times0.2)\times0.5=0.04187 \\ 第三个红球在盒子2中取出的概率:\alpha_3(2)=[\sum_{i=1}^3 \alpha_2(i)a_{i2}]b_2(o_3)=(0.077\times0.2+0.1104\times0.5+0.0606\times0.3)\times0.4=0.03551 \\ 第三个红球在盒子3中取出的概率:\alpha_3(3)=[\sum_{i=1}^3 \alpha_2(i)a_{i3}]b_3(o_3)=(0.077\times0.3+0.1104\times0.2+0.0606\times0.5)\times0.7=0.05284 \\ 第三个红球在盒子1中取出的概率:α3(1)=[i=1∑3α2(i)ai1]b1(o3)=(0.077×0.5+0.1104×0.3+0.0606×0.2)×0.5=0.04187第三个红球在盒子2中取出的概率:α3(2)=[i=1∑3α2(i)ai2]b2(o3)=(0.077×0.2+0.1104×0.5+0.0606×0.3)×0.4=0.03551第三个红球在盒子3中取出的概率:α3(3)=[i=1∑3α2(i)ai3]b3(o3)=(0.077×0.3+0.1104×0.2+0.0606×0.5)×0.7=0.05284
(3)终止
将上述最后状态的所有值相加即可得到最终结果:
P ( O ∣ λ ) = ∑ i = 1 3 α 3 ( i ) = 0.04187 + 0.03551 + 0.05284 = 0.13022 P(O|\lambda)=\sum_{i=1}^{3}\alpha_3(i)=0.04187+0.03551+0.05284=0.13022 P(O∣λ)=i=1∑3α3(i)=0.04187+0.03551+0.05284=0.13022
2.3 后向(backward)算法
2.3.1 算法描述
后向概率:给定隐马尔科夫模型 λ \lambda λ,定义在时刻t状态为 q i q_i qi的条件下,从 t + 1 t+1 t+1到 T T T的部分观测序列为 o t + 1 , o t + 2 , . . . , o T o_{t+1},o_{t+2},...,o_T ot+1,ot+2,...,oT的概率为后向概率,记作:
β t ( i ) = P ( o t + 1 , o t + 2 , . . . , o T ∣ i t = q i , λ ) \beta_t(i)=P(o_{t+1},o_{t+2},...,o_T|i_t=q_i,\lambda) βt(i)=P(ot+1,ot+2,...,oT∣it=qi,λ)
依然可以用递推的方法求得后向概率 β t ( i ) \beta_t(i) βt(i)及观测序列概率 P ( O ∣ λ ) P(O|\lambda) P(O∣λ)。
(1)计算初值:
β T ( i ) = 1 , i = 1 , 2 , . . . , N \beta_T(i)=1, \text{ } i=1,2,...,N βT(i)=1, i=1,2,...,N
这里由于 T T T为最后一个时刻,因此定义这个时刻的观测值为1。
(2)递推计算: 对于 t = T − 1 , T − 2 , . . . , 1 t=T-1,T-2,...,1 t=T−1,T−2,...,1
β t ( i ) = ∑ j = 1 N a i j b j ( o t + 1 ) β t + 1 ( j ) , i = 1 , 2 , . . . , N \beta_t(i)=\sum_{j=1}^N a_{ij}b_j(o_{t+1})\beta_{t+1}(j),\text{ } i=1,2,...,N βt(i)=j=1∑Naijbj(ot+1)βt+1(j), i=1,2,...,N
a i j a_{ij} aij为状态转移概率矩阵中的元素,表示状态 i i i转移到状态 j j j的概率。 β t + 1 ( j ) \beta_{t+1}(j) βt+1(j)表示时刻 j j j后面的序列对应的后向概率。
(3)终止:
P ( O ∣ λ ) = ∑ i = 1 N π i b i ( o i ) β 1 ( i ) P(O|\lambda)=\sum_{i=1}^N \pi_{i}b_i(o_i)\beta_1(i) P(O∣λ)=i=1∑Nπibi(oi)β1(i)
2.4 前、后向概率的关系
给定一组观测序列,在t时刻有第i状态的概率=t时刻的前向概率*t时刻的后向概率
,用公式表示为:
P ( i t = q i , O ∣ λ ) = α t ( i ) β t ( i ) P(i_t=q_i,O|\lambda)=\alpha_t(i)\beta_t(i) P(it=qi,O∣λ)=αt(i)βt(i)
3. 学习算法
学习问题:已知观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT),估计模型 λ = ( A , B , π ) \lambda=(A,B,\pi) λ=(A,B,π)的参数,使得在该模型下观测学习序列概率 P ( O ∣ λ ) P(O|\lambda) P(O∣λ)最大。
在这里首先区分监督学习与非监督学习的区别:
- 监督学习: 训练数据包含了观测序列和对应的状态序列;
- 非监督学习: 训练数据只有观测序列。
3.1 监督学习方法
可以利用极大似然估计法(参考)来估计隐马尔可夫模型的参数:状态转移概率(矩阵)、观测概率(矩阵)和初始状态概率。
这种估计方法比较简单,可以直接通过计算训练数据中对应数据出现的频率即可。但前提是数据有人工标注,标注的代价很高,因此常用非监督学习的方法。
3.2 Baum-Welch算法
(待续…)