前言
最近学习语音信号处理的课程,涉及到隐马尔可夫模型。之前学习过马尔可夫模型的知识,但是涉及的不多,理解也不深。这次趁着这次学习机会,整理了一下对马尔可夫模型的理解。本文主要侧重定性理解,轻公式推导。
一、马尔可夫链
马尔可夫链,因安德烈•马尔可夫(A.A.Markov)得名,是指具有马尔可夫性质的离散时间随机过程。马尔可夫性质是指,下一个状态只与当前状态有关,而与之前的状态无关。
下面举一个例子。
假设小明假期第二天晚饭吃什么只跟前一天晚饭吃什么有关,具体的有关关系如下:(其中首列表示前一天吃什么,首行表示第二天吃什么)
白菜(2) | 玉米(2) | 辣椒(2) | |
---|---|---|---|
白菜(1) | 0.2 | 0.4 | 0.4 |
玉米(1) | 0.3 | 0.2 | 0.5 |
辣椒 (1) | 0.5 | 0.35 | 0.15 |
比如,小明前一天吃了白菜,第二天相换换口味,再吃白菜的概率就比较小,只有0.2(1,1),想吃玉米和辣椒的概率分别为0.4(1,2),0.4(1,3);而若小明第一天吃的辣椒,可能太辣了,第二天再吃辣椒的概率会更小,只有0.15(3,3)。
对于小明每天吃的什么,我们就称之为状态。以上表格所列的小明每天吃的东西之间的关系,写成矩阵形式,就称为状态转移矩阵。
对于小明的假期第一天,假如他的喜好比较平均,他吃什么的概率都是差不多的,假设吃白菜玉米和辣椒的概率分别为:
0.33 | 0.33 | 0.34 |
---|
称该向量为初始概率分布。
则由初始概率分布和概率转移矩阵,就可以推断出整个假期小明每天吃什么的概率了。
以上的例子中,“小明每天吃什么”这个随机过程,就遵循马尔可夫模型。
二、隐马尔可夫模型
1. 参数说明
对于上面的例子,假如现在我们不知道小明每天吃的什么了,只知道小明每天吃的口味是甜的或者是辣的。但我们知道口味和吃什么东西之间的关系,这个关系如下:(首行表示当天吃的口味,首列表示当天吃的东西是什么)
甜的 | 辣的 | |
---|---|---|
白菜 | 1 | 0 |
玉米 | 1 | 0 |
辣椒 | 0.05 | 0.95 |
比如,如果小明当天吃了白菜,那么有1的概率他吃的口味是甜的;如果当天吃的是辣椒,那么有0.95的概率他吃的是辣的,一次类推……
以上我们观测到的口味和吃什么东西之间的关系,写成矩阵形式,就称为观测概率矩阵,也称为发射矩阵。
上述的例子中,“小明每天吃什么”遵循马尔可夫模型,但是“小明每天吃什么”这个状态对于我们来说是不可观测的,也就是我们不能直接知道。而我们可以知道的(可以观测的)是小明每天吃的口味是辣的还是甜的。而我们可以观测到的口味和实际状态之间存在对应关系(观测概率矩阵)。这就是隐马尔可夫模型(HMM)。
综上所述,隐马尔可夫模型有三个关键参数:状态转移矩阵A,观测概率矩阵B,初始概率分布
π
\pi
π。
可以表示为:
A
=
[
a
i
j
]
N
×
N
A = [a_{ij}]_{N \times N}
A=[aij]N×N
B
=
[
b
i
j
]
N
×
M
B = [b_{ij}]_{N \times M}
B=[bij]N×M
π
=
[
π
i
]
N
\pi =[\pi _i]_N
π=[πi]N
其中,N表示隐变量的状态数量,也就是隐藏的状态数量。M表示观测变量的取值数量。
设状态为Z,其取值为
k
i
k_i
ki;设观测变量为X,其取值为
u
i
u_i
ui,则:
a
i
j
=
P
(
z
t
+
1
=
k
j
∣
z
t
=
k
i
)
a_{ij}= P(z_{t+1}=k_j|z_t=k_i)
aij=P(zt+1=kj∣zt=ki)
b
i
j
=
P
(
x
t
=
u
j
∣
z
t
=
k
i
)
b_{ij}= P(x_{t}=u_j|z_t=k_i)
bij=P(xt=uj∣zt=ki)
π
i
=
P
(
z
1
=
k
i
)
\pi_i = P(z_1=k_i)
πi=P(z1=ki)
在我们上面的例子中,“隐藏的状态”指小明每天吃什么,这个状态有三个,所以N=3;观测变量为小明的口味,有两种,所以M=2;所以上面所述的例子中:
A
=
0.2
0.4
0.4
0.3
0.2
0.5
0.5
0.35
0.15
A = \begin{matrix} 0.2 &0.4 &0.4\\ 0.3&0.2&0.5\\ 0.5&0.35&0.15 \end{matrix}
A=0.20.30.50.40.20.350.40.50.15
B
=
1
0
1
0
0.05
0.95
B = \begin{matrix} 1 &0 \\ 1&0\\ 0.05&0.95 \end{matrix}
B=110.05000.95
π
=
0.33
0.33
0.34
\pi = \begin{matrix} 0.33 &0.33&0.34 \end{matrix}
π=0.330.330.34
2. 三个基本问题
用参数
λ
=
(
π
,
A
,
B
)
\lambda = (\pi , A, B)
λ=(π,A,B)来表示隐马尔可夫模型。
设状态序列为
Z
=
(
z
1
,
z
2
,
.
.
.
,
z
T
)
Z = (z_1,z_2,...,z_T)
Z=(z1,z2,...,zT)
设观测序列为
X
=
(
x
1
,
x
2
,
.
.
.
,
x
T
)
X = (x_1,x_2,...,x_T)
X=(x1,x2,...,xT)
HMM的基本问题可以分为三种:
1.评估问题(概率计算问题)
给定参数
λ
=
(
π
,
A
,
B
)
\lambda = (\pi , A, B)
λ=(π,A,B),观测序列
X
=
(
x
1
,
x
2
,
.
.
.
,
x
T
)
X = (x_1,x_2,...,x_T)
X=(x1,x2,...,xT),计算观测序列
X
X
X的条件概率
P
(
X
∣
λ
)
P(X|\lambda)
P(X∣λ)。可以将此问题视为给定模型与给定观测序列之间的匹配程度。
计算该概率可以通过前向——后向算法求解(Forward-Backward)。
2.解码问题
给定参数
λ
=
(
π
,
A
,
B
)
\lambda = (\pi , A, B)
λ=(π,A,B),观测序列
X
=
(
x
1
,
x
2
,
.
.
.
,
x
T
)
X = (x_1,x_2,...,x_T)
X=(x1,x2,...,xT),求可能性最大的状态序列
Z
=
(
z
1
,
z
2
,
.
.
.
,
z
T
)
Z = (z_1,z_2,...,z_T)
Z=(z1,z2,...,zT)。解码问题对应语音信号处理中的语音识别任务。
计算该序列可以用维特比算法求解。
3.学习问题(参数估计问题)
给定观测序列 X X X,反推参数 λ = ( π , A , B ) \lambda = (\pi , A, B) λ=(π,A,B),使得 P ( X ∣ λ ) P(X|\lambda) P(X∣λ)最大。
总结
过些天再补充记录一下。