隐马尔可夫模型(Hidden Markov Model,HMM)是统计模型,它用来描述一个含有隐含未知参数的马尔可夫过程。其难点是从可观察的参数中确定该过程的隐含参数。然后利用这些参数来作进一步的分析,例如模式识别。
隐马尔可夫模型的结构
HMM 模型是一种生成式模型。
HMM 模型中有 2 个相关序列,分别是状态序列和观测序列,HMM 模型具有以下规则:
- 观测序列是可以直接观测的,状态序列是不可观测的
- 状态序列在 t 时刻的值只与 t-1 时刻的值有关
- 观测序列在 t 时刻的值只与 t 时刻状态序列的值有关
设状态序列
X
=
{
X
1
,
X
2
,
…
,
X
n
}
X = \{X_1,X_2,\dots,X_n\}
X={X1,X2,…,Xn}
观测序列
O
=
{
O
1
,
O
2
,
…
,
O
n
}
O=\{O_1,O_2,\dots,O_n\}
O={O1,O2,…,On}
则 HMM 模型的结构如下图所示:
隐马尔科夫模型的假设
根据上述结构和规则,我们可以得出如下假设:
-
马尔可夫性假设:t 时刻的状态出现的概率只与 t-1 时刻的状态有关
P { X t ∣ X 1 , X 2 , … , X t − 1 } = P { X t ∣ X t − 1 } P\{X_t|X_1,X_2,\dots,X_{t-1}\}=P\{X_t|X_{t-1}\} P{Xt∣X1,X2,…,Xt−1}=P{Xt∣Xt−1} -
齐次性假设:时间平移不变性
P { X t ∣ X t − 1 } = P { X s ∣ X s − 1 } , i f X t = X s a n d X t − 1 = X s − 1 P\{X_t|X_{t-1}\}=P\{X_s|X_{s-1}\},if\quad X_t=X_s\quad and\quad X_{t-1}=X_{s-1} P{Xt∣Xt−1}=P{Xs∣Xs−1},ifXt=XsandXt−1=Xs−1 -
观测独立性假设:某个时刻 t 的观测值只依赖于该时刻的状态值
P { O t ∣ X 1 , X 2 , … , X t − 1 , O 1 , O 2 , … , O t − 1 } = P { O t ∣ X t } P\{O_t|X_1,X_2,\dots,X_{t-1},O_1,O_2,\dots,O_{t-1}\}=P\{O_t|X_t\} P{Ot∣X1,X2,…,Xt−1,O1,O2,…,Ot−1}=P{Ot∣Xt}
根据上述假设,得 HMM 的联合概率密度:
P
{
O
1
,
O
2
,
…
,
O
T
,
X
1
,
X
2
,
…
,
X
T
}
P\{O_1,O_2,\dots,O_T,X_1,X_2,\dots,X_T\}
P{O1,O2,…,OT,X1,X2,…,XT}
= P { X 1 } P { O 1 ∣ X 1 } ∏ t = 2 T P { X t ∣ X t − 1 } P { O t ∣ X t } =P\{X_1\}P\{O_1|X_1\}\prod_{t=2}^{T}P\{X_t|X_{t-1}\}P\{O_t|X_t\} =P{X1}P{O1∣X1}t=2∏TP{Xt∣Xt−1}P{Ot∣Xt}
隐马尔科夫模型的组成
观察 HMM 的联合概率密度,发现其分为三部分:
-
初始状态概率
P { X 1 } P\{X_1\} P{X1} -
状态转移概率
P { X t ∣ X t − 1 } P\{X_t|X_{t-1}\} P{Xt∣Xt−1} -
观测输出概率 (发射概率)
P { O t ∣ X t } P\{O_t|X_t\} P{Ot∣Xt}
在状态值和观测值取值为离散值的情况下,这三种概率可以表示为矩阵。
假定状态值可能的取值为
x
1
,
x
2
,
…
,
x
M
x_1,x_2,\dots,x_M
x1,x2,…,xM
观测值可能的取值为
o
1
,
o
2
,
…
,
o
N
o_1,o_2,\dots,o_N
o1,o2,…,oN
则可得:
-
初始概率矩阵 π \pi π
π i = P { x i } , i = 1 , 2 , … , M \pi_i=P\{x_i\},i=1,2,\dots,M πi=P{xi},i=1,2,…,M -
转移概率矩阵 A
A i j = P { x j ∣ x i } , i , j = 1 , 2 , … , M A_{ij}=P\{x_j|x_i\},i,j=1,2,\dots,M Aij=P{xj∣xi},i,j=1,2,…,M -
发射概率矩阵 B
B i j = P { o j ∣ x i } , i = 1 , 2 , … , M , j = 1 , 2 , … , N B_{ij}=P\{o_j|x_i\},i=1,2,\dots,M,j=1,2,\dots,N Bij=P{oj∣xi},i=1,2,…,M,j=1,2,…,N
最终 HMM 可表示为
λ
=
(
π
,
A
,
B
)
\lambda=(\pi,A,B)
λ=(π,A,B)
维特比算法
问题
对于
λ
=
(
π
,
A
,
B
)
\lambda=(\pi,A,B)
λ=(π,A,B)
隐状态集合
Q
=
{
q
1
,
q
2
,
…
,
q
N
}
Q=\{q_1,q_2,\dots,q_N\}
Q={q1,q2,…,qN}
观测值集合
V
=
{
v
1
,
v
2
,
…
,
v
M
}
V=\{v_1,v_2,\dots,v_M\}
V={v1,v2,…,vM}
观测结果序列
O
=
(
o
0
,
o
1
,
…
,
o
T
)
O=(o_0,o_1,\dots,o_T)
O=(o0,o1,…,oT)
假设
π
=
[
π
i
]
\pi=\begin{bmatrix} \pi_i \end{bmatrix}
π=[πi]
其中
π
i
\pi_i
πi 表示
q
i
q_i
qi 的初始概率。
A
=
[
a
i
j
]
A=\begin{bmatrix} a_{ij} \end{bmatrix}
A=[aij]
其中
a
i
j
a_{ij}
aij 表示
q
i
q_i
qi 向
q
j
q_j
qj 的转移概率。
B
=
[
b
i
j
]
B=\begin{bmatrix} b_{ij} \end{bmatrix}
B=[bij]
其中
b
i
j
b_{ij}
bij 表示
q
i
q_i
qi 向
v
j
v_j
vj 的发射概率。
求出当前观测结果 O 最有可能的隐状态序列
I
=
(
i
0
,
i
1
,
…
,
i
t
)
I=(i_0,i_1,\dots,i_t)
I=(i0,i1,…,it)
解法
定义
设
δ
t
(
i
)
=
max
i
1
,
i
2
,
…
,
i
t
−
1
P
{
i
t
=
i
,
i
t
−
1
,
…
,
i
1
,
o
t
,
…
,
o
1
∣
λ
}
\delta_t(i)=\max_{i_1,i_2,\dots,i_{t-1}}P\{i_t=i,i_{t-1},\dots,i_1,o_t,\dots,o_1|\lambda\}
δt(i)=i1,i2,…,it−1maxP{it=i,it−1,…,i1,ot,…,o1∣λ}
表示时刻 t 状态为 i 的所有单个路径中概率最大值,则可得
δ
t
+
1
(
i
)
=
max
i
1
,
i
2
,
i
t
−
1
P
{
i
t
+
1
=
i
,
i
t
,
…
,
i
1
,
o
t
+
1
,
…
,
o
1
∣
λ
}
\delta_{t+1}(i)=\max_{i_1,i_2,i_{t-1}}P\{i_{t+1}=i,i_t,\dots,i_1,o_{t+1},\dots,o_1|\lambda\}
δt+1(i)=i1,i2,it−1maxP{it+1=i,it,…,i1,ot+1,…,o1∣λ}
= max 1 ≤ j ≤ N [ δ t ( j ) a j i ] b i ( o t + 1 ) =\max_{1\le j\le N}[\delta_t(j)a_{ji}]b_i(o_{t+1}) =1≤j≤Nmax[δt(j)aji]bi(ot+1)
设
Ψ
t
(
i
)
=
a
r
g
max
i
≤
j
≤
N
[
δ
t
−
1
(
j
)
a
j
i
]
\Psi_t(i)=arg\max_{i\le j\le N}[\delta_{t-1}(j)a_{ji}]
Ψt(i)=argi≤j≤Nmax[δt−1(j)aji]
表示时刻 t 状态为 i 的所有单个路径中概率最大的路径的第 t-1 个结点。
例子
医生通过观察病人的状态判断病人是否生病。
设病人有状态有 {生病,健康},医生观测结果有 {头晕,不头晕}。
假设病人第一天生病,健康的概率各为 0.5;
若前一天生病,则第二天生病的概率为 0.6,健康的概率为 0.4;
若前一天健康,则第二天健康的概率为 0.8,生病的概率为 0.2;
若生病,则观测到头晕的概率为 0.7,不头晕的概率为 0.3;
若健康,则观测到头晕的概率为 0.1,不头晕的概率为 0.9;
医生观测三天,病人的观测值序列为 {不头晕,头晕,不头晕};
推测病人这三天是否生病。
构造出初始矩阵,转移概率矩阵,发射概率矩阵如下:
π
=
(
0.5
0.5
)
\pi=\begin{pmatrix} 0.5\\ 0.5 \end{pmatrix}
π=(0.50.5)
A = ( 0.6 0.4 0.2 0.8 ) A=\begin{pmatrix} 0.6&0.4\\ 0.2&0.8\\ \end{pmatrix} A=(0.60.20.40.8)
B = ( 0.7 0.3 0.1 0.9 ) B=\begin{pmatrix} 0.7&0.3\\ 0.1&0.9\\ \end{pmatrix} B=(0.70.10.30.9)
初始化
δ 1 ( i ) = π i b i ( o 1 ) \delta_1(i)=\pi_ib_i(o_1) δ1(i)=πibi(o1)
即
δ
1
(
1
)
=
π
1
b
1
(
o
1
=
不
头
晕
)
=
π
1
b
12
=
0.15
\delta_1(1)=\pi_1b_1(o_1=不头晕)=\pi_1b_{12}=0.15
δ1(1)=π1b1(o1=不头晕)=π1b12=0.15
δ 1 ( 2 ) = π 2 b 2 ( o 1 = 不 头 晕 ) = π 2 b 22 = 0.45 \delta_1(2)=\pi_2b_2(o_1=不头晕)=\pi_2b_{22}=0.45 δ1(2)=π2b2(o1=不头晕)=π2b22=0.45
上述两个值分别为第一天生病且观测到不头晕,与第一天不生病且观测到不头晕的概率。
Ψ
1
(
1
)
=
Ψ
1
(
2
)
=
0
\Psi_1(1)=\Psi_1(2)=0
Ψ1(1)=Ψ1(2)=0
迭代
第一次迭代,求第二时刻
δ 2 ( j ) = max 1 ≤ i ≤ 2 [ δ 1 ( i ) a i j ] b j ( o 2 ) \delta_2(j)=\max_{1\le i\le2}[\delta_1(i)a_{ij}]b_j(o_2) δ2(j)=1≤i≤2max[δ1(i)aij]bj(o2)
即
δ
1
(
1
)
a
11
=
0.15
⋅
0.6
=
0.09
\delta_1(1)a_{11}=0.15\cdot0.6=0.09
δ1(1)a11=0.15⋅0.6=0.09
δ 1 ( 2 ) a 21 = 0.45 ⋅ 0.2 = 0.09 \delta_1(2)a_{21}=0.45\cdot0.2=0.09 δ1(2)a21=0.45⋅0.2=0.09
δ 2 ( 1 ) = max 1 ≤ i ≤ 2 [ δ 1 ( i ) a i 1 ] b 1 ( o 2 = 头 晕 ) \delta_2(1)=\max_{1\le i\le2}[\delta_1(i)a_{i1}]b_1(o_2=头晕) δ2(1)=1≤i≤2max[δ1(i)ai1]b1(o2=头晕)
= 0.09 ⋅ 0.7 = 0.063 =0.09\cdot0.7=0.063 =0.09⋅0.7=0.063
Ψ 2 ( 1 ) = a r g max 1 ≤ i ≤ 2 [ δ 1 ( i ) a i 2 ] = 1 \Psi_2(1)=arg\max_{1\le i\le2}[\delta_1(i)a_{i2}]=1 Ψ2(1)=arg1≤i≤2max[δ1(i)ai2]=1
δ 1 ( 1 ) a 12 = 0.15 ⋅ 0.4 = 0.06 \delta_1(1)a_{12}=0.15\cdot0.4=0.06 δ1(1)a12=0.15⋅0.4=0.06
δ 1 ( 2 ) a 22 = 0.45 ⋅ 0.8 = 0.36 \delta_1(2)a_{22}=0.45\cdot0.8=0.36 δ1(2)a22=0.45⋅0.8=0.36
δ 2 ( 2 ) = max 1 ≤ i ≤ 2 [ δ 1 ( i ) a i 2 ] b 2 ( o 2 = 头 晕 ) \delta_2(2)=\max_{1\le i\le2}[\delta_1(i)a_{i2}]b_2(o2=头晕) δ2(2)=1≤i≤2max[δ1(i)ai2]b2(o2=头晕)
= 0.36 ⋅ 0.1 = 0.036 =0.36\cdot0.1=0.036 =0.36⋅0.1=0.036
Ψ 2 ( 2 ) = a r g max 1 ≤ i ≤ 2 [ δ 1 ( i ) a i 2 ] = 2 \Psi_2(2)=arg\max_{1\le i\le2}[\delta_1(i)a_{i2}]=2 Ψ2(2)=arg1≤i≤2max[δ1(i)ai2]=2
第二次迭代,求第三时刻
δ 2 ( 1 ) a 11 = 0.063 ⋅ 0.6 = 0.0378 \delta_2(1)a_{11}=0.063\cdot0.6=0.0378 δ2(1)a11=0.063⋅0.6=0.0378
δ 2 ( 2 ) a 21 = 0.036 ⋅ 0.2 = 0.0072 \delta_2(2)a_{21}=0.036\cdot0.2=0.0072 δ2(2)a21=0.036⋅0.2=0.0072
δ 3 ( 1 ) = max 1 ≤ i ≤ 2 [ δ 2 ( i ) a i 1 ] b 1 ( o 3 = 不 头 晕 ) \delta_3(1)=\max_{1\le i\le2}[\delta_2(i)a_{i1}]b_1(o_3=不头晕) δ3(1)=1≤i≤2max[δ2(i)ai1]b1(o3=不头晕)
= 0.0378 ⋅ 0.3 = 0.01134 =0.0378\cdot0.3=0.01134 =0.0378⋅0.3=0.01134
Ψ 3 ( 1 ) = 1 \Psi_3(1)=1 Ψ3(1)=1
δ 2 ( 1 ) a 12 = 0.063 ⋅ 0.4 = 0.0252 \delta_2(1)a_{12}=0.063\cdot0.4=0.0252 δ2(1)a12=0.063⋅0.4=0.0252
δ 2 ( 2 ) a 22 = 0.036 ⋅ 0.8 = 0.0288 \delta_2(2)a_{22}=0.036\cdot0.8=0.0288 δ2(2)a22=0.036⋅0.8=0.0288
δ 3 ( 2 ) = max 1 ≤ i ≤ 2 [ δ 2 ( i ) a i 2 ] b 2 ( o 3 = 不 头 晕 ) \delta_3(2)=\max_{1\le i\le2}[\delta_2(i)a_{i2}]b_2(o_3=不头晕) δ3(2)=1≤i≤2max[δ2(i)ai2]b2(o3=不头晕)
= 0.0288 ⋅ 0.9 = 0.02592 =0.0288\cdot0.9=0.02592 =0.0288⋅0.9=0.02592
Ψ 3 ( 2 ) = 2 \Psi_3(2)=2 Ψ3(2)=2
回溯
q 3 ^ = a r g max 0 ≤ i ≤ 2 [ δ 3 ( i ) ] = 2 \hat{q_3}=arg\max_{0\le i\le2}[\delta_3(i)]=2 q3^=arg0≤i≤2max[δ3(i)]=2
q t ^ = Ψ t + 1 ( q t + 1 ^ ) \hat{q_t}=\Psi_{t+1}(\hat{q_{t+1}}) qt^=Ψt+1(qt+1^)
即
q
2
^
=
Ψ
3
(
q
3
^
)
=
Ψ
3
(
2
)
=
2
\hat{q_2}=\Psi_3(\hat{q_3})=\Psi_3(2)=2
q2^=Ψ3(q3^)=Ψ3(2)=2
q 1 ^ = Ψ 2 ( q 2 ^ ) = Ψ 2 ( 2 ) = 2 \hat{q_1}=\Psi_2(\hat{q_2})=\Psi_2(2)=2 q1^=Ψ2(q2^)=Ψ2(2)=2
解得隐状态序列为
Q
^
=
(
2
,
2
,
2
)
\hat{Q}=(2,2,2)
Q^=(2,2,2)
即 (健康,健康,健康)
lta_2(i)a_{i2}]b_2(o_3=不头晕)
$$
= 0.0288 ⋅ 0.9 = 0.02592 =0.0288\cdot0.9=0.02592 =0.0288⋅0.9=0.02592
Ψ 3 ( 2 ) = 2 \Psi_3(2)=2 Ψ3(2)=2
回溯
q 3 ^ = a r g max 0 ≤ i ≤ 2 [ δ 3 ( i ) ] = 2 \hat{q_3}=arg\max_{0\le i\le2}[\delta_3(i)]=2 q3^=arg0≤i≤2max[δ3(i)]=2
q t ^ = Ψ t + 1 ( q t + 1 ^ ) \hat{q_t}=\Psi_{t+1}(\hat{q_{t+1}}) qt^=Ψt+1(qt+1^)
即
q
2
^
=
Ψ
3
(
q
3
^
)
=
Ψ
3
(
2
)
=
2
\hat{q_2}=\Psi_3(\hat{q_3})=\Psi_3(2)=2
q2^=Ψ3(q3^)=Ψ3(2)=2
q 1 ^ = Ψ 2 ( q 2 ^ ) = Ψ 2 ( 2 ) = 2 \hat{q_1}=\Psi_2(\hat{q_2})=\Psi_2(2)=2 q1^=Ψ2(q2^)=Ψ2(2)=2
解得隐状态序列为
Q
^
=
(
2
,
2
,
2
)
\hat{Q}=(2,2,2)
Q^=(2,2,2)
即 (健康,健康,健康)