隐马尔可夫模型
一、马尔可夫链(Markov Chain)
马尔可夫链,又称离散时间马尔可夫链(对于连续时间马尔可夫链称之为马尔可夫过程)。是一个随机过程(研究不确定性下的运动的方法),例如著名的布朗运动的研究方法就是一个随机过程方法。
它具有马尔可夫性质:下一步状态之和当前状态有关,与当前状态之前所有的状态无关
即: P [ S t + 1 ∣ S t ] = P [ S t + 1 ∣ S t , S t − 1 , . . . , S 1 ] P[S_{t+1}|S_t] = P[S_{t+1}|S_t,S_{t-1},...,S_1] P[St+1∣St]=P[St+1∣St,St−1,...,S1]
我们村智商为0的王二狗,人傻不拉几的,见人就傻笑,每天中午12点的标配,仨状态:吃,玩,睡。这就是传说中的状态分布。
你想知道他n天后中午12点的状态么?是在吃,还是在玩,还是在睡?这些状态发生的概率分别都是多少?
假设1:王二狗每个状态的转移都是有概率的,则概率转移矩阵
A
A
A如下:
假设2:王二狗初始状态概率分布
π
π
π
总结:马尔可夫链就是一个随机过程,它将来的分布只取决于现在,跟过去无关
二、隐马尔可夫模型
《统计学习方法》一书中如此定义:
隐马尔可夫模型是关于时序的概率模型,描述由一个隐藏的马尔可夫链随机生成不可观测的状态随机序列,再由各个状态生成一个观测从而产生观测随机序列的过程。隐藏的马尔可夫链随机生成的状态的序列,称为状态序列;每个状态生成一个观测,而由此产生的观测的随机序列,称为观测序列。序列的每一个位置又可以看作是一个时刻。
关键词:时序、隐藏的马尔可夫链、状态随机序列、观测随机序列
引用《统计学习方法》P195页中例子进行解释
(盒子和球模型)假设有4个盒子,每个盒子里都装有红、白两种颜色的球,盒子里的红、白球数由表10.1列出。
盒子 | ||||
---|---|---|---|---|
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=(红,红,白,白,红)
显然,这个过程是有着时间顺序的。其次,在最后的球的颜色观测序列中,不包含马尔可夫链的参数,所以是马尔可夫链是隐含的。最后,这个例子中有两个随机序列:
- 盒子的序列(状态序列)
- 球的颜色的观测序列(观测序列)
盒子序列属于隐含的马尔可夫链,所以是隐藏的,只有后者是可观测的。
隐马尔可夫模型形式定义如下:
- Q Q Q:所有可能的状态的集合 Q = { 盒 子 1 , 盒 子 2 , 盒 子 3 , 盒 子 4 } , N = 4 Q=\{盒子1,盒子2,盒子3,盒子4\},N=4 Q={盒子1,盒子2,盒子3,盒子4},N=4
- V V V:所有可能的观测的集合 V = { 红 , 白 } , M = 2 V=\{红,白\},M=2 V={红,白},M=2
- I I I:长度为 T T T的状态序列 I = ( i 1 , i 2 , . . . , i T ) , T = 5 , i T ∈ Q I=(i_1,i_2,...,i_T), T=5,i_T∈Q I=(i1,i2,...,iT),T=5,iT∈Q
- O O O:状态对应的观测序列 O = ( o 1 , o 2 , . . . , o T ) , T = 5 , o T ∈ V O=(o_1,o_2,...,o_T),T=5,o_T∈V O=(o1,o2,...,oT),T=5,oT∈V
- π π π: 初始概率分布 π = ( 0.25 , 0.25 , 0.25 , 0.25 ) T π=(0.25,0.25,0.25,0.25)^T π=(0.25,0.25,0.25,0.25)T
-
A
A
A:状态转移矩阵(规则)
[ 0 1 0 0 0.4 0 0.6 0 0 0.4 0 0.6 0 0 0.5 0.5 ] \left[ \begin{matrix} 0 & 1 & 0 & 0 \\ 0.4 & 0 & 0.6 &0\\ 0 & 0.4 & 0 &0.6\\ 0 & 0 & 0.5 &0.5 \end{matrix} \right] ⎣⎢⎢⎡00.400100.4000.600.5000.60.5⎦⎥⎥⎤ -
B
B
B:观测概率矩阵(每一个盒子里面观测到红球或白球的概率分布)
[ 0.5 0.5 0.3 0.7 0.6 0.4 0.8 0.2 ] \left[ \begin{matrix} 0.5 & 0.5 \\ 0.3 & 0.7\\ 0.6 & 0.4 \\ 0.8 & 0.2 \end{matrix} \right] ⎣⎢⎢⎡0.50.30.60.80.50.70.40.2⎦⎥⎥⎤
隐马尔可夫模型由初始概率分布
π
π
π、状态转移概率分布
A
A
A以及观测概率分布
B
B
B确定,即:
λ
=
(
A
,
B
,
π
)
λ=(A,B,π)
λ=(A,B,π)
从定义可知,隐马尔可夫模型作了两个基本假设:
- 齐次马尔可夫性假设,即假设隐藏的马尔可夫链在任意时刻t的转台只依赖与前一时刻的状态,与其前一时刻的状态,与其他时刻的状态及观测无关,也与时刻t无关:
P ( i t ∣ i t − 1 , o t − 1 , . . . , i 1 , o 1 ) = P ( i t ∣ i t − 1 ) P(i_t|i_{t-1},o_{t-1},...,i_1,o_1) = P(i_t|i_{t-1}) P(it∣it−1,ot−1,...,i1,o1)=P(it∣it−1) - 观测独立性假设,即假设任意时刻的观测只依赖于该时刻的马尔可夫链的状态,与其他观测及状态无关:
P ( o t ∣ i T , o T , i T − 1 , o T − 1 , . . . , i t + 1 , o t + 1 , i t , i t − 1 , o t − 1 , . . . , i 1 , o 1 ) = P ( o t ∣ i t ) P(o_t|i_T,o_T,i_{T-1},o_{T-1},...,i_{t+1},o_{t+1},i_t,i_{t-1},o_{t-1},...,i_1,o_1) = P(o_t|i_t) P(ot∣iT,oT,iT−1,oT−1,...,it+1,ot+1,it,it−1,ot−1,...,i1,o1)=P(ot∣it)
三、具体实例
假设我有一个伦敦的朋友,她每天跟我打电话告诉我她当天做了什么。她说她只对三种活动感兴趣:公园散步,购物以及打扫房间。
下雨了她很少散步,大多是去购物或者打扫房间。
如果是晴天,她大多是进行户外活动,例如散步购物,比较少待在家里打扫。
则对应的观测概率矩阵
B
B
B为:
B | 散步 | 购物 | 打扫 |
---|---|---|---|
下雨 | 0.1 | 0.4 | 0.5 |
晴天 | 0.6 | 0.3 | 0.1 |
我不会去了解伦敦的天气情况,但是我大概知道伦敦天气的总体趋势π(夏天晴天比较多,冬天雨天比较多):
π | 下雨 | 晴天 |
---|---|---|
初始 | 0.6 | 0.4 |
并且我知道天气的状态转移概率 A A A:
A | 下雨 | 晴天 |
---|---|---|
下雨 | 0.7 | 0.3 |
晴天 | 0.6 | 0.4 |
于是我可以根据对她行为的观测,建立隐马尔可夫模型 λ = ( A , B , π ) λ=(A,B,π) λ=(A,B,π)来对伦敦的天气进行猜测。
四、隐马尔可夫模型的3个基本问题
- 概率计算问题。给定:模型: λ = ( A , B , π ) λ = (A,B,π) λ=(A,B,π)和观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT),计算在模型 λ λ λ下观测序列 O O O出现的概率 P ( O ∣ λ ) P(O|λ) P(O∣λ)。
- 学习问题。已知观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT),估计模型 λ = ( A , B , π ) λ = (A,B,π) λ=(A,B,π)参数,使得在该模型下观测序列概率 P ( O ∣ λ ) P(O|λ) P(O∣λ)最大。即用极大似然估计的方法估计参数。
- 预测问题,也称为解码(decoding) 问题。已知模型 λ = ( A , B , π ) λ = (A,B,π) λ=(A,B,π)和观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT),求对给定观测序列条件概率 P ( I ∣ O ) P(I|O) P(I∣O)最大的状态序列 I = ( i 1 , i 2 , . . . , i T ) I=(i_1,i_2,...,i_T) I=(i1,i2,...,iT)。即给定观测序列,求最有可能的对应的状态序列。
继续举例子:(T=3)
- 已知整个模型,我朋友告诉我,连续三天,她下班后做的事情分别是:散步,购物,打扫。那么,根据模型,计算产生这些行为的概率是多少。
- 最复杂的,我朋友只告诉我这三天她分别做了这三件事,而其他什么信息我都没有。她要我建立一个模型,晴雨转换概率,第一天天气情况的概率分布,根据天气情况她选择做某事的概率分布。
- 同样知晓这个模型,同样是这三件事,我朋友要我猜,这三天她下班后北京的天气是怎么样的。这三天怎么样的天气才最有可能让她做这样的事情。
对于以上的问题,“巨人们”已经给我们找出了解决的办法:
- 第一个问题(概率计算问题):直接计算法(穷举),前向算法,后向算法
- 第二个问题(学习问题):
- 第三个问题(预测问题):
4.1、直接计算法
- 已知模型 λ = ( A , B , π ) λ = (A,B,π) λ=(A,B,π)和观测序列 O = ( 购 物 , 散 步 , 打 扫 ) O=(购物,散步,打扫) O=(购物,散步,打扫),求该观测序列出现的概率 ( T = 3 ) (T=3) (T=3)
- 用 π π π和 A A A求所有的长度为 ( T = 3 ) (T=3) (T=3)的状态序列 I 状 态 序 列 I_{状态序列} I状态序列,例:
状态序列 | 概率P(I|λ) | |
---|---|---|
1 | [雨,雨,晴] | 0.6×0.7×0.3=0.126 |
2 | [雨,雨,雨] | 0.6×0.7×0.7=0.294 |
3 | [雨,晴,晴] | 0.6×0.3×0.4=0.072 |
4 | [雨,晴,雨] | 0.6×0.3×0.6=0.108 |
5 | [晴,雨,雨] | 0.4×0.6×0.7=0.168 |
6 | [晴,雨,晴] | 0.4×0.6×0.3=0.072 |
7 | [晴,晴,雨] | 0.4×0.4×0.6=0.096 |
8 | [晴,晴,晴] | 0.4×0.4×0.4=0.064 |
检验 | 将各个概率相加 | 1 |
- 由于观测序列已知,结合观测矩阵 B B B求各个状态下该观测序列的概率,例:
状态序列 | 观测序列O=(购物,散步,打扫)的对应概率 | |
---|---|---|
1 | [雨,雨,晴] | 0.4×0.1×0.1=0.004 |
2 | [雨,雨,雨] | 0.4×0.1×0.5=0.02 |
3 | [雨,晴,晴] | 0.4×0.6×0.1=0.024 |
4 | [雨,晴,雨] | 0.4×0.6×0.5=0.12 |
5 | [晴,雨,雨] | 0.3×0.1×0.5=0.015 |
6 | [晴,雨,晴] | 0.3×0.1×0.1=0.003 |
7 | [晴,晴,雨] | 0.3×0.6×0.5=0.09 |
8 | [晴,晴,晴] | 0.3×0.6×0.1=0.018 |
检验 | 将各个概率相加 | 0.294 |
- 将观测序列 O O O与对应的状态序列 I I I出现的概率相乘,可以得出 O 和 I O和I O和I的联合分布,即: P ( O , I ∣ λ ) = P ( O ∣ I , λ ) P ( I ∣ λ ) P(O,I|λ)=P(O|I,λ)P(I|λ) P(O,I∣λ)=P(O∣I,λ)P(I∣λ)
- 最后,对所有的 P ( O , I ∣ λ ) P(O,I|λ) P(O,I∣λ)求和,即可以得到观测序列 O O O的概率 P ( O ∣ λ ) P(O|λ) P(O∣λ)
但是,这种方法的计算时间复杂度为 O ( T N T ) O(TN^T) O(TNT)级别,所以实际不可行。
4.2、前向算法
已知模型 λ = ( A , B , π ) λ=(A,B,π) λ=(A,B,π)和观测序列 O = ( 购 物 , 散 步 , 打 扫 ) O=(购物,散步,打扫) O=(购物,散步,打扫),求该观测序列出现的概率 ( T = 3 ) (T=3) (T=3)。前向算法把问题拆开为T个步骤,一步一步算出每一个观测所对应的概率。用上面的例子来进行说明:
按照观测序列,第一天我观测到了我朋友进行的是购物活动,那么我基于
π
π
π和
B
B
B可以得到
a
1
(
i
=
雨
)
=
P
(
o
1
=
购
物
,
i
1
=
雨
∣
λ
)
=
0.6
×
0.4
=
0.24
a
1
(
i
=
晴
)
=
P
(
o
1
=
购
物
,
i
1
=
晴
∣
λ
)
=
0.4
×
0.3
=
0.12
a_1(i=雨)=P(o_1=购物,i_1=雨|λ)=0.6×0.4=0.24\\ a_1(i=晴)=P(o_1=购物,i_1=晴|λ)=0.4×0.3=0.12
a1(i=雨)=P(o1=购物,i1=雨∣λ)=0.6×0.4=0.24a1(i=晴)=P(o1=购物,i1=晴∣λ)=0.4×0.3=0.12
这个概率称为:在模型
λ
λ
λ,且状态
i
1
i_1
i1的条件下,观测到
o
1
o_1
o1的概率,也叫做前向概率:
a
1
(
i
)
a_1(i)
a1(i)。
更一般的,对于T次观测,前向概率的定义为:
前
向
概
率
:
a
t
(
i
)
=
P
(
o
1
,
o
2
,
.
.
.
,
o
t
,
i
t
=
q
i
∣
λ
)
(
i
:
第
i
个
状
态
)
前向概率:a_t(i)=P(o_1,o_2,...,o_t,i_t=q_i|λ) (i:第i个状态)
前向概率:at(i)=P(o1,o2,...,ot,it=qi∣λ)(i:第i个状态)
第二天,我观测到了我朋友进行的是散步,那么我基于第一天的观测和
B
B
B可以得到
a
2
(
i
=
雨
)
=
[
∑
i
=
1
2
a
1
(
i
)
a
i
1
]
b
1
(
o
2
=
散
步
)
a
2
(
i
=
晴
)
=
[
∑
i
=
1
2
a
1
(
i
)
a
i
2
]
b
2
(
o
2
=
散
步
)
a_2(i=雨)=[\sum_{i=1}^2a_1(i)a_{i1}]b_1(o_2=散步)\\ a_2(i=晴)=[\sum_{i=1}^2a_1(i)a_{i2}]b_2(o_2=散步)
a2(i=雨)=[i=1∑2a1(i)ai1]b1(o2=散步)a2(i=晴)=[i=1∑2a1(i)ai2]b2(o2=散步)
以此类推,
第三天我观测到打扫可以得到
a
3
(
i
=
雨
)
=
[
∑
i
=
1
2
a
2
(
i
)
a
i
1
]
b
1
(
o
3
=
打
扫
)
a
3
(
i
=
晴
)
=
[
∑
i
=
1
2
a
2
(
i
)
a
i
2
]
b
2
(
o
3
=
打
扫
)
a_3(i=雨)=[\sum_{i=1}^2a_2(i)a_{i1}]b_1(o_3=打扫)\\ a_3(i=晴)=[\sum_{i=1}^2a_2(i)a_{i2}]b_2(o_3=打扫)
a3(i=雨)=[i=1∑2a2(i)ai1]b1(o3=打扫)a3(i=晴)=[i=1∑2a2(i)ai2]b2(o3=打扫)
最后,该观测序列
O
=
(
购
物
,
散
步
,
打
扫
)
O=(购物,散步,打扫)
O=(购物,散步,打扫)发生的概率为:
P
(
O
∣
λ
)
=
∑
i
=
1
2
a
3
(
i
)
P(O|λ)= \sum_{i=1}^2a_3(i)
P(O∣λ)=i=1∑2a3(i)
4.3、后向算法
顾名思义,向前算法是在时间 t=1的时候,一步一步往前计算。而相反的,向后算法则是倒退着,从最后一个状态开始,慢慢往后推。