前言
本篇我们将介绍隐马尔可夫模型,隐马尔可夫模型 ( H i d d e n M a r k o v M o d e l , H M M ) (Hidden Markov Model,HMM) (HiddenMarkovModel,HMM)是关于时序的概率模型,描述一个由一个隐藏的马尔科夫链随机生成不可测的状态随机序列,再由各个状态生成一个观测而产生观测随机序列的过程。(其中的一些名词在后面会给出定义)
H M M HMM HMM属于生成模型,广泛应用于语音识别、自然语言处理、模式识别等领域。
本篇将从如下几个方面进行介绍:
- 1、生成模型与判别模型
- 2、马尔可夫链
- 3、隐马尔可夫模型
- 4、概率计算算法
- 5、学习算法
- 6、预测算法
一、生成模型与判别模型
在概率模型中,利用已知变量推测出未知变量分布的核心就是如何基于可观测变量推测出未知变量的条件分布
假定所关心的变量集合为 Y Y Y ,可观测变量集合为 O O O,其他变量集合为 R R R:
- 生成模型:考虑联合分布P(Y,R,O)P(Y,R,O)
- 判别模型:考虑条件分布P(Y,R|O)P(Y,R|O)
给定一组观测变量值,推断就要由 P ( Y , R , O ) P(Y,R,O) P(Y,R,O)或 P ( Y , R ∣ O ) P(Y,R|O) P(Y,R∣O)得到条件概率分布 P ( Y ∣ O ) P(Y|O) P(Y∣O)
二、马尔可夫链
我们先来看一个例子:
假设每天的天气有三种情况:晴天
、阴天
、多云
,根据我们的经验我们知道,今天是晴天,明天是晴天的概率比较大,是阴天或多云的概率较小,今天是阴天明天是阴天的概率较大,是多云的概率次之,是晴天的概率较小。
- 我们记:晴天(状态1)、阴天(状态2)、多云(状态3)
- 记: P ( 1 ∣ 2 ) P(1|2) P(1∣2) 为今天是阴天,明天是晴天的概率
P(1|1)=0.8 P(1|2)=0.1 P(1|3)=0.2
P(2|1)=0.1 P(2|2)=0.7 P(2|3)=0.3
P(3|1)=0.1 P(3|2)=0.2 P(3|3)=0.5
画出状态转换图如下:
- 上图中箭头表示从一个状态到另一个状态的概率,晴天后阴天的概率为0.1,其他依次类推。
- 从上图可以看出,一个状态的转移只依赖于之前的n个状态,当n取1时就是马尔可夫假设。
由此得出马尔可夫链的定义:
马尔可夫链是随机变量 S 1 , … , S t S_1,…,S_t S1,…,St 的一个数列(状态集),这些变量的范围,即他们所有可能取值的集合,被称为“状态空间”,而 S t S_t St 的值则是在时间 t t t 的状态。如果 S t + 1 S_{t+1} St+1 对于过去状态的条件概率分布仅是 S t S_t St 的一个函数,则:
P ( S t + 1 = x ∣ S 1 , . . . , S t ) = P ( S t + 1 = x ∣ S t ) P(S_{t+1}=x|S_1,...,S_t)=P(S_{t+1}=x|S_t) P(St+1=x∣S1,...,St)=P(St+1=x∣St)
其中 x x x 为过程中的某个状态
一个含有
N
N
N 个状态的马尔可夫链有
N
2
N^2
N2 个状态转移。每一个转移的概率叫做 状态转移概率
(state transition probability),就是从一个状态转移到另一个状态的概率。这所有的
N
2
N^2
N2 个概率可以用一个状态转移矩阵
来表示:
A = [ 0.8 0.1 0.1 0.1 0.7 0.2 0.2 0.3 0.5 ] A = \left[ \begin{array}{ccc} 0.8 & 0.1 & 0.1\\ 0.1 & 0.7 & 0.2\\ 0.2 & 0.3 & 0.5 \end{array} \right ] A=⎣⎡0.80.10.20.10.70.30.10.20.5⎦⎤
- 矩阵 A A A的行表示当前状态,列表示当前状态下转移到其他的状态的概率
- 例如第一行表示:当前状态为1(晴天)下,下一状态为1的概率为0.8,为2的概率为0.1,为3的概率为0.1
- 且每一行的和都为1
三、隐马尔可夫模型
在很多时候,马尔可夫过程不足以描述我们发现的问题,假设我们并不知道当前的天气情况,但是可以通过是否有风、热等进行推测,如果有风,可能是阴天;如果热,可能是晴天。由此我们将产生两个状态集,一个是可观测的状态集
O
O
O和一个隐藏状态集
S
S
S,我们的目的之一是借由可观测状态预测隐藏状态,这里为了简化描述,将多云这个状态去掉。重写画出下图:(例子主要是为了表达想法,所以不是那么确切)
由此得到 O = { o 1 , o 2 } , S = { s 1 , s 2 } O = \{o_1,o_2\},S = \{s_1,s_2\} O={o1,o2},S={s1,s2}, o 1 o_1 o1表示有风, o 2 o_2 o2表示热, s 1 s_1 s1表示晴天, s 2 s_2 s2表示阴天。
例如,在晴天的状态下表现出有风、热的概率分别为 ( 0.3 , 0.7 ) (0.3,0.7) (0.3,0.7)
上面的例子中,可以观察到的 状态序列和隐藏的状态序列是概率相关的
。于是我们可以将这种类型的过程建模为有一个隐藏的马尔科夫过程和一个与这个隐藏马尔科夫过程概率相关的并且可以观察到的状态集合。这就是隐马尔可夫模型。
隐马尔可夫模型
(Hidden Markov Model,HMM) 是一种统计模型,用来描述一个含有隐含未知参数的马尔可夫过程。
通过转移矩阵,由前面的式子: P ( S t + 1 = x ∣ S 1 , . . . , S t ) = P ( S t + 1 = x ∣ S t ) P(S_{t+1}=x|S_1,...,S_t)=P(S_{t+1}=x|S_t) P(St+1=x∣S1,...,St)=P(St+1=x∣St) 我们可以知道 P ( S t ∣ S t − 1 ) P(S_t|S_{t-1}) P(St∣St−1),那么怎么表示 P ( O t ∣ S t ) P(O_t|S_t) P(Ot∣St)(观测到的状态相当于对隐藏的真实状态的一种估计)?
在
H
M
M
HMM
HMM中使用另一个矩阵(观测概率矩阵
):
B = [ 0.3 0.7 0.9 0.1 ] B = \left[ \begin{array}{ccc} 0.3 & 0.7\\ 0.9 & 0.1 \end{array} \right ] B=[0.30.90.70.1]
- 矩阵行代表隐藏状态,列代表可观测的状态,矩阵每一行概率值的和为1。
- 其中第1行第1列, P ( 有 风 ∣ 1 ) = 0.3 P(有风|1)=0.3 P(有风∣1)=0.3 表示在晴天(1状态)下,有风的概率为0.3
观测概率矩阵
可视为马尔可夫模型的另一个假设,独立性假设:假设任意时刻的观测只依赖于该时刻的马尔可夫链的状态,与其它观测状态无关。
P ( o t ∣ s 1 , s 2 , . . . , s t , o 1 , o 2 , . . . , o t ) = P ( o t ∣ s t ) 式 ( 2 ) P(o_t | s_1,s_2,...,s_t,o_1,o_2,...,o_t) = P(o_t|s_t)\quad\quad式(2) P(ot∣s1,s2,...,st,o1,o2,...,ot)=P(ot∣st)式(2)
隐马尔可夫模型定义:
隐藏的马尔可夫链随机生成的状态的序列称为“状态序列
”;每个状态生成一个观测,而由此产生的观测的随机序列称为“观测序列
”。序列的每一个位置又可以看作是一个时刻。
隐马尔可夫模型由 初始概率分布、状态转移概率分布以及观测概率分布 确定。定义如下:
- 设 Q Q Q是所有可能的状态的集合, V V V是所有可能的观测的集合
Q = { q 1 , q 2 , . . . , q N } , V = { v 1 , v 2 , . . . , v M } Q = \{q_1,q_2,...,q_N\},V= \{v_1,v_2,...,v_M\} Q={q1,q2,...,qN},V={v1,v2,...,vM}- 其中, N N N是可能的状态数, M M M是可能的观测数
S S S是长度为 T T T的状态序列, O O O是对应的观测序列
S = ( s 1 , s 2 , . . . , s T ) , O = ( o 1 , o 2 , . . . , o T ) S = (s_1,s_2,...,s_T),O = (o_1,o_2,...,o_T) S=(s1,s2,...,sT),O=(o1,o2,...,oT)- A A A是状态转移概率矩阵:
A = [ a i j ] N × N A = [a_{ij}]_{N \times N} A=[aij]N×N
其中,
a i j = P ( s t + 1 = q j ∣ s t = q i ) , i = 1 , 2 , . . . , N ; j = 1 , 2 , . . . , N a_{ij} = P(s_{t+1}= q_j | s_t = q_i),i = 1,2,...,N;j = 1,2,...,N aij=P(st+1=qj∣st=qi),i=1,2,...,N;j=1,2,...,N
是在时刻 t t t处于 q i q_i qi的条件下在时刻 t + 1 t+1 t+1转移到状态 q j q_j qj的概率- B B B是观测概率矩阵:
B = [ b j ( k ) ] N × M B = [b_j(k)]_{N \times M} B=[bj(k)]N×M
其中,
b j ( k ) = P ( o t = v k ∣ s t = q j ) , k = 1 , 2 , . . . , M ; j = 1 , 2 , . . . , N b_j(k) = P(o_t=v_k|s_t=q_j),k = 1,2,...,M;j = 1,2,...,N bj(k)=P(ot=vk∣st=qj),k=1,2,...,M;j=1,2,...,N
是在时刻 t t t处于状态 q j q_j qj的条件下生成预测 v k v_k vk的概率- π \pi π是初始状态概率向量:
π = ( π i ) \pi = (\pi_i) π=(πi)
其中,
π i = P ( s 1 = q i ) , i = 1 , 2 , . . . , N \pi_i = P(s_1 = q_i), i = 1,2,...,N πi=P(s1=qi),i=1,2,...,N
是时刻 t = 1 t=1 t=1处于状态 q i q_i qi的概率。
隐马尔可夫模型由 初始概率向量
π
\pi
π 、状态转移概率矩阵
A
A
A 和 观测概率矩阵
B
B
B决定。
π
\pi
π和
A
A
A决定状态序列,
B
B
B决定观测序列。因此,隐马尔可夫模型
λ
\lambda
λ可以用三元符号表示,即:
λ
=
(
A
,
B
,
π
)
\lambda = (A,B,\pi)
λ=(A,B,π)
A , B , π A,B,\pi A,B,π称为隐马尔可夫模型的三要素。
另外,隐马尔可夫模型涉及三个基本问题:
(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)预测问题
- 也称解码问题,已知模型 λ = ( 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),求对给定观测序列条件概率 P ( S ∣ O ) P(S|O) P(S∣O)最大的状态序列 S = ( s 1 , s 2 , . . . , s T ) S = (s_1,s_2,...,s_T) S=(s1,s2,...,sT),即给定观测序列,求最有可能的对应的状态序列。
四、概率计算问题
根据前面的介绍,我们可以得到如下图模型:
状态转移概率:
p
(
q
t
∣
q
1
,
q
2
,
.
.
.
,
q
t
−
1
,
y
1
,
y
2
,
.
.
.
,
y
t
−
1
)
=
p
(
q
t
∣
q
t
−
1
)
p(q_t|q_1,q_2,...,q_{t-1},y_1,y_2,...,y_{t-1}) = p(q_t|q_{t-1})
p(qt∣q1,q2,...,qt−1,y1,y2,...,yt−1)=p(qt∣qt−1)
观测概率:
p
(
y
t
∣
q
1
,
q
2
,
.
.
.
,
q
t
,
y
1
,
y
2
,
.
.
.
,
y
t
−
1
)
=
p
(
y
t
∣
q
t
)
p(y_t|q_1,q_2,...,q_t,y_1,y_2,...,y_{t-1})=p(y_t|q_t)
p(yt∣q1,q2,...,qt,y1,y2,...,yt−1)=p(yt∣qt)
状态转移概率矩阵:
A
K
×
K
=
[
p
(
q
t
=
1
∣
q
t
−
1
=
1
)
.
.
.
.
.
.
.
.
.
p
(
q
t
=
k
∣
q
t
−
1
=
k
)
]
A_{K \times K } = \left[\begin{matrix} p(q_t=1|q_{t-1} = 1)& ... \\ ... \\ ... & p(q_t=k|q_{t-1} = k) \end{matrix}\right]
AK×K=⎣⎡p(qt=1∣qt−1=1).........p(qt=k∣qt−1=k)⎦⎤
观测概率矩阵:(离散状态下)
B
K
×
L
=
[
p
(
y
1
=
1
∣
q
t
=
1
)
.
.
.
p
(
y
1
=
l
∣
q
t
=
1
)
.
.
.
.
.
.
.
.
.
p
(
q
t
=
l
∣
q
t
−
1
=
k
)
]
B_{K \times L}=\left[\begin{matrix} p(y_1=1|q_t = 1)& ... &p(y_1=l|q_t = 1)\\ ... \\ ... & ...&p(q_t=l|q_{t-1} = k) \end{matrix}\right]
BK×L=⎣⎡p(y1=1∣qt=1)............p(y1=l∣qt=1)p(qt=l∣qt−1=k)⎦⎤
初始状态概率向量:
π = p ( q i ) \pi = p(q_i) π=p(qi)
马尔科夫模型
λ
\lambda
λ可表示为:
λ
=
(
A
,
B
,
π
)
\lambda = (A,B,\pi)
λ=(A,B,π)
上面例子要求的是:
p
(
Y
∣
λ
)
=
∑
q
1
=
1
K
∑
q
2
=
1
K
∑
q
3
=
1
K
p
(
y
1
,
y
2
,
y
3
,
q
1
,
q
2
,
q
3
)
=
∑
q
1
=
1
K
∑
q
2
=
1
K
∑
q
3
=
1
K
p
(
y
3
∣
y
1
,
y
2
,
q
1
,
q
2
,
q
3
)
p
(
y
1
,
y
2
,
q
1
,
q
2
,
q
3
)
贝
叶
斯
公
式
=
∑
q
1
=
1
K
∑
q
2
=
1
K
∑
q
3
=
1
K
p
(
y
3
∣
q
3
)
p
(
q
3
∣
y
1
,
y
2
,
q
1
,
q
2
)
p
(
y
1
,
y
2
,
q
1
,
q
2
)
马
尔
可
夫
过
程
=
∑
q
1
=
1
K
∑
q
2
=
1
K
∑
q
3
=
1
K
p
(
y
3
∣
q
3
)
p
(
q
3
∣
q
2
)
p
(
y
1
,
y
2
,
q
1
,
q
2
)
马
尔
可
夫
过
程
p(Y|\lambda) = \sum_{q_1 = 1}^K\sum_{q_2 = 1}^K\sum_{q_3 = 1}^Kp(y_1,y_2,y_3,q_1,q_2,q_3) \\ =\sum_{q_1 = 1}^K\sum_{q_2 = 1}^K\sum_{q_3 = 1}^Kp(y_3|y_1,y_2,q_1,q_2,q_3)p(y_1,y_2,q_1,q_2,q_3) \quad\quad 贝叶斯公式 \\ =\sum_{q_1 = 1}^K\sum_{q_2 = 1}^K\sum_{q_3 = 1}^K p(y_3|q_3)p(q_3|y_1,y_2,q_1,q_2)p(y_1,y_2,q_1,q_2)\quad\quad 马尔可夫过程 \\ = \sum_{q_1 = 1}^K\sum_{q_2 = 1}^K\sum_{q_3 = 1}^K p(y_3|q_3)p(q_3|q_2)p(y_1,y_2,q_1,q_2)\quad\quad 马尔可夫过程
p(Y∣λ)=q1=1∑Kq2=1∑Kq3=1∑Kp(y1,y2,y3,q1,q2,q3)=q1=1∑Kq2=1∑Kq3=1∑Kp(y3∣y1,y2,q1,q2,q3)p(y1,y2,q1,q2,q3)贝叶斯公式=q1=1∑Kq2=1∑Kq3=1∑Kp(y3∣q3)p(q3∣y1,y2,q1,q2)p(y1,y2,q1,q2)马尔可夫过程=q1=1∑Kq2=1∑Kq3=1∑Kp(y3∣q3)p(q3∣q2)p(y1,y2,q1,q2)马尔可夫过程
这时发现,最后一步
p
(
y
1
,
y
2
,
q
1
,
q
2
)
p(y_1,y_2,q_1,q_2)
p(y1,y2,q1,q2)出现了递归,因此上式:
=
∑
q
1
=
1
K
∑
q
2
=
1
K
∑
q
3
=
1
K
p
(
y
3
∣
q
3
)
p
(
q
3
∣
q
2
)
p
(
y
2
∣
q
2
)
p
(
q
2
∣
q
1
)
p
(
q
1
)
=\sum_{q_1 = 1}^K\sum_{q_2 = 1}^K\sum_{q_3 = 1}^K p(y_3|q_3)p(q_3|q_2)p(y_2|q_2)p(q_2|q_1)p(q_1)
=q1=1∑Kq2=1∑Kq3=1∑Kp(y3∣q3)p(q3∣q2)p(y2∣q2)p(q2∣q1)p(q1)
其中 p ( q 3 ∣ q 2 ) p(q_3|q_2) p(q3∣q2)可以用 A A A表示, p ( y 3 ∣ q 3 ) p(y_3|q_3) p(y3∣q3)可以用 B B B表示, p ( q 1 ) p(q_1) p(q1)可以用 π \pi π表示
通过上面的式子我们便可以解决三个状态的概率计算问题,如果是多个状态呢?
马尔科夫模型参数 λ = ( A , B , π ) \lambda = (A,B,\pi) λ=(A,B,π),求 p ( y 1 , y 2 , . . . , y T ∣ λ ) p(y_1,y_2,...,y_T|\lambda) p(y1,y2,...,yT∣λ):
p
(
y
1
,
y
2
,
.
.
.
,
y
T
∣
λ
)
=
∑
q
1
=
1
K
∑
q
2
=
1
K
.
.
.
∑
q
T
=
1
K
p
(
y
1
,
y
2
,
.
.
.
,
y
T
,
q
1
,
q
2
,
.
.
.
,
q
T
)
p(y_1,y_2,...,y_T|\lambda) = \sum_{q_1=1}^K\sum_{q_2=1}^K...\sum_{q_T=1}^K p(y_1,y_2,...,y_T,q_1,q_2,...,q_T)
p(y1,y2,...,yT∣λ)=q1=1∑Kq2=1∑K...qT=1∑Kp(y1,y2,...,yT,q1,q2,...,qT)
同样利用贝叶斯公式和马尔可夫过程得到:
p
(
Y
∣
λ
)
=
∑
q
1
=
1
K
∑
q
2
=
1
K
.
.
.
∑
q
T
=
1
K
π
(
q
1
)
∏
t
=
2
T
a
q
t
−
1
,
q
t
b
q
t
(
y
t
)
p(Y|\lambda) = \sum_{q_1=1}^K\sum_{q_2=1}^K...\sum_{q_T=1}^K\pi(q_1)\prod_{t=2}^Ta_{q_{t-1}\ ,q_t}b_{q_t}(y_t)
p(Y∣λ)=q1=1∑Kq2=1∑K...qT=1∑Kπ(q1)t=2∏Taqt−1 ,qtbqt(yt)
其中
a
q
t
−
1
,
q
t
,
b
q
t
(
y
t
)
a_{q_{t-1}\ ,q_t},b_{q_t}(y_t)
aqt−1 ,qt,bqt(yt)为
A
,
B
中
的
元
素
A,B中的元素
A,B中的元素,我们发现这个计算量特别大(
T
K
T
TK^T
TKT)无法像上面三个状态一样通过直接计算法计算出概率。
这时候我们就可以使用
前向-后向算法
来计算观测序列概率 P ( Y ∣ λ ) P(Y|\lambda) P(Y∣λ)
4.1 前向算法
如下图,观测序列为
y
1
,
y
2
,
.
.
.
,
y
t
−
1
,
y
t
,
y
t
+
1
,
.
.
.
,
y
T
y_1,y_2,...,y_{t-1},y_t,y_{t+1},...,y_T
y1,y2,...,yt−1,yt,yt+1,...,yT,状态序列为
q
1
,
q
2
,
.
.
.
,
q
i
,
q
i
+
1
,
.
.
.
,
q
T
q_1,q_2,...,q_i,q_{i+1},...,q_T
q1,q2,...,qi,qi+1,...,qT,其中每个状态
q
i
q_i
qi 表示在此时刻状态为
i
,
(
i
=
1
,
2
,
.
.
.
,
N
)
i,(i=1,2,...,N)
i,(i=1,2,...,N) ,有
N
N
N 个可选状态(比如前面我们所说的晴天、阴天、多云,也就是说每个状态序列都有三个可选的状态),每个观测值
y
t
y_t
yt 表示在时刻
t
t
t 的观测值,且都有
M
M
M 个观测值(比如前面所说的有风、热,也就是说每个观测到的值都有两种可能),图中,红色框起来的为前向算法,后向算法与之对应。
给定隐马尔可夫模型 λ \lambda λ ,定义到时刻 t t t 部分观测序列为 y 1 , y 2 , . . . , y t y_1,y_2,...,y_t y1,y2,...,yt,且状态为 q i q_i qi 的概率的前向概率记为:
α t ( i ) = p ( y 1 , y 2 , . . . , y t , q i = i ∣ λ ) \alpha_t(i) = p(y_1,y_2,...,y_t,q_i=i|\lambda) αt(i)=p(y1,y2,...,yt,qi=i∣λ)
可以递归地求得前向概率 α t ( i ) \alpha_t(i) αt(i) 和观测序列概率 P ( Y ∣ λ ) P(Y|\lambda) P(Y∣λ)
推导过程:
α 1 ( i ) = p ( y 1 , q 1 = i ) = p ( y 1 ∣ q 1 = i ) p ( q 1 ) = b i ( y 1 ) π ( q 1 ) \alpha_1(i) = p(y_1,q_1 = i)=p(y_1|q_1 = i)p(q_1) = b_i(y_1)\pi(q_1) α1(i)=p(y1,q1=i)=p(y1∣q1=i)p(q1)=bi(y1)π(q1)
上式表示:在开始时刻的状态为 i i i, 观测值为 y 1 y_1 y1的联合概率,也就等于在开始时刻的状态为 q 1 = i q_1 = i q1=i的条件下观测值为 y 1 y_1 y1的概率 b i ( y 1 ) b_i(y_1) bi(y1)(也就是前面我们提到的观测概率矩阵)乘以开始时刻每种状态的出现的概率 π ( q 1 ) \pi(q_1) π(q1)(也就是前面的初始状态概率)
α 2 ( j ) = p ( y 1 , y 2 , q 2 = i ) = ∑ i = 1 K p ( y 1 , y 2 , q 1 = i , q 2 = j ) \alpha_2(j) = p(y_1,y_2,q_2 = i)=\sum_{i=1}^Kp(y_1,y_2,q_1=i,q_2=j) α2(j)=p(y1,y2,q2=i)=i=1∑Kp(y1,y2,q1=i,q2=j)
这里加入了 q 1 q_1 q1 ,积分出去即可,离散的积分就是求和
=
∑
i
=
1
K
p
(
y
2
∣
q
2
=
j
)
p
(
q
2
=
j
∣
q
1
=
i
)
p
(
y
1
,
q
1
=
i
)
= \sum_{i=1}^K p(y_2|q_2=j)p(q_2=j|q_1=i)p(y_1,q_1=i)
=i=1∑Kp(y2∣q2=j)p(q2=j∣q1=i)p(y1,q1=i)
=
p
(
y
2
∣
q
2
=
j
)
∑
i
=
1
K
p
(
q
2
=
j
∣
q
1
=
i
)
α
1
(
i
)
= p(y_2|q_2=j) \sum_{i=1}^Kp(q_2=j|q_1=i)\ \alpha_1(i)
=p(y2∣q2=j)i=1∑Kp(q2=j∣q1=i) α1(i)
=
b
j
(
y
2
)
[
∑
i
=
1
K
a
i
,
j
α
1
(
i
)
]
= b_j(y_2)[\sum_{i=1}^Ka_{i,j}\ \alpha_1(i)]
=bj(y2)[i=1∑Kai,j α1(i)]
归纳得到:
α
T
(
j
)
=
b
j
(
y
T
)
[
∑
i
=
1
K
a
i
,
j
α
T
−
1
(
i
)
]
=
p
(
y
1
,
y
2
,
.
.
.
,
y
T
,
q
T
=
j
)
\alpha_T(j) = b_j(y_T)[\sum_{i=1}^Ka_{i,j}\ \alpha_{T-1}(i)] \\ = p(y_1,y_2,...,y_T,q_T=j)
αT(j)=bj(yT)[i=1∑Kai,j αT−1(i)]=p(y1,y2,...,yT,qT=j)
此时计算复杂度为 ( K 2 T ) (K^2T) (K2T)
P ( Y ∣ λ ) = p ( y 1 , y 2 , . . . , y T ) = ∑ j = 1 K α T ( j ) P(Y|\lambda) = p(y_1,y_2,...,y_T) = \sum_{j=1}^K \alpha_T(j) P(Y∣λ)=p(y1,y2,...,yT)=j=1∑KαT(j)
前向算法描述如下:
输入:隐马尔可夫模型 λ \lambda λ,观测序列 Y Y Y
输出:观测序列概率 P ( Y ∣ λ ) P(Y|\lambda) P(Y∣λ)
(1)初值
α
1
(
i
)
=
π
i
b
i
(
y
1
)
,
i
=
1
,
2
,
.
.
,
N
\alpha_1(i) = \pi_ib_i(y_1),i = 1,2,..,N
α1(i)=πibi(y1),i=1,2,..,N
(2)递推
\quad
对
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
(
y
t
+
1
)
,
i
=
1
,
2
,
.
.
.
,
N
\alpha_{t+1}(i) = \Big[\sum_{j=1}^N \alpha_t(j)a_{ij}\Big]b_i(y_{t+1}),i = 1,2,...,N
αt+1(i)=[j=1∑Nαt(j)aij]bi(yt+1),i=1,2,...,N
(3)终止
p
(
Y
∣
λ
)
=
∑
i
=
1
N
α
T
(
i
)
p(Y|\lambda) = \sum_{i=1}^N \alpha_T(i)
p(Y∣λ)=i=1∑NαT(i)
- 步骤(1):初始化前向概率,是初始时刻的状态 q 1 = i q_1=i q1=i 和观测 y 1 y_1 y1 的联合概率
- 步骤(2):前向概率的递推公式,计算到时刻 t + 1 t+1 t+1 部分观测序列为 y 1 , y 2 , . . . . , y t , y t + 1 y_1,y_2,....,y_t,y_{t+1} y1,y2,....,yt,yt+1且在时刻 t + 1 t+1 t+1 处于状态 q i q_i qi 的前向概率
其中:
- α t ( j ) \alpha_t(j) αt(j)是到时刻 t t t 观测到 y 1 , y 2 , . . . , y t y_1,y_2,...,y_t y1,y2,...,yt并且在时刻 t t t 处于状态 q j q_j qj 的前向概率,那么 α t ( j ) a i j \alpha_t(j)a_{ij} αt(j)aij就是到时刻 t t t 观测到 y 1 , y 2 , . . . , y t y_1,y_2,...,y_t y1,y2,...,yt并且在时刻 t t t 处于状态 q j q_j qj 而在时刻 t + 1 t+1 t+1 到达状态 q i q_i qi 的联合概率,对这个乘积在时刻 t t t 的所有可能的 N N N 个状态 q j q_j qj 求和,其结果就是到时刻 t t t 观测为 y 1 , y 2 , . . . , y t y_1,y_2,...,y_t y1,y2,...,yt并且在时刻 t + 1 t+1 t+1 处于状态 q i q_i qi 的联合概率;
- [ ∑ j = 1 N α t ( j ) a i j ] b i ( y t + 1 ) \Big[\sum_{j=1}^N \alpha_t(j)a_{ij}\Big]b_i(y_{t+1}) [∑j=1Nαt(j)aij]bi(yt+1)恰好是到时刻 t + 1 t+1 t+1 观测到 y 1 , y 2 , . . . , y t , y t + 1 y_1,y_2,...,y_t,y_{t+1} y1,y2,...,yt,yt+1并且在时刻 t + 1 t+1 t+1 处于状态 q i q_i qi 的前向概率 α t + 1 ( i ) \alpha_{t+1}(i) αt+1(i)
- 步骤(3):给出 P ( Y ∣ λ ) P(Y|\lambda) P(Y∣λ)的计算公式
实例计算:
考虑盒子和球模型 λ = ( A , B , π ) \lambda = (A,B,\pi) λ=(A,B,π),状态集合 Q = { 1 , 2 , 3 } Q=\{1,2,3\} Q={1,2,3},观测集合 V = { 红 , 白 } V= \{红,白\} V={红,白} ,
A = [ 0.5 0.2 0.3 0.3 0.5 0.2 0.2 0.3 0.5 ] A =\left[ \begin{matrix} 0.5 & 0.2&0.3\\ 0.3 & 0.5&0.2\\ 0.2 & 0.3&0.5 \end{matrix}\right] A=⎣⎡0.50.30.20.20.50.30.30.20.5⎦⎤
B = [ 0.5 0.5 0.4 0.6 0.7 0.3 ] B =\left[ \begin{matrix} 0.5 & 0.5\\ 0.4 & 0.6\\ 0.7 & 0.3 \end{matrix}\right] B=⎣⎡0.50.40.70.50.60.3⎦⎤
π = ( 0.2 , 0.4 , 0.4 ) T \pi = (0.2,0.4,0.4)^T π=(0.2,0.4,0.4)T
设 T = 3 , Y = ( 红 , 白 , 红 ) T=3,Y = (红,白,红) T=3,Y=(红,白,红),用前向算法计算 P ( Y ∣ λ ) P(Y|\lambda) P(Y∣λ)
解:
(1)计算初值
α
1
(
1
)
=
π
1
b
1
(
o
1
)
=
0.2
∗
0.5
=
0.1
α
1
(
2
)
=
π
2
b
2
(
o
1
)
=
0.4
∗
0.4
=
0.16
α
1
(
3
)
=
π
3
b
3
(
o
1
)
=
0.4
∗
0.7
=
0.28
\alpha_1(1) = \pi_1b_1(o_1) = 0.2*0.5 = 0.1\\ \alpha_1(2) = \pi_2b_2(o_1) =0.4*0.4=0.16\\ \alpha_1(3) = \pi_3b_3(o_1) = 0.4*0.7=0.28
α1(1)=π1b1(o1)=0.2∗0.5=0.1α1(2)=π2b2(o1)=0.4∗0.4=0.16α1(3)=π3b3(o1)=0.4∗0.7=0.28
(2)递推计算
α
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
)
=
[
∑
i
=
1
3
α
1
(
i
)
a
i
2
]
b
2
(
o
2
)
=
0.184
∗
0.6
=
0.1104
α
2
(
3
)
=
[
∑
i
=
1
3
α
1
(
i
)
a
i
3
]
b
3
(
o
2
)
=
0.202
∗
0.3
=
0.0606
α
3
(
1
)
=
[
∑
i
=
1
3
α
2
(
i
)
a
i
1
]
b
1
(
o
2
)
=
[
0.077
∗
0.5
+
0.1104
∗
0.3
+
0.0606
∗
0.2
]
∗
0.5
=
0.04187
α
3
(
2
)
=
[
∑
i
=
1
3
α
2
(
i
)
a
i
2
]
b
2
(
o
2
)
=
0.03551
α
3
(
3
)
=
[
∑
i
=
1
3
α
2
(
i
)
a
i
3
]
b
3
(
o
2
)
=
0.05284
\alpha_2(1) = \Big[\sum_{i=1}^3\alpha_1(i)a_{i1}\Big]b_1(o_2) = [0.1*0.5+0.16*0.3+0.28*0.2]*0.5=0.077\\ \alpha_2(2) = \Big[\sum_{i=1}^3\alpha_1(i)a_{i2}\Big]b_2(o_2) = 0.184*0.6=0.1104\\ \alpha_2(3) = \Big[\sum_{i=1}^3\alpha_1(i)a_{i3}\Big]b_3(o_2) = 0.202*0.3=0.0606\\ \alpha_3(1) = \Big[\sum_{i=1}^3\alpha_2(i)a_{i1}\Big]b_1(o_2) =[0.077*0.5+0.1104*0.3+0.0606*0.2]*0.5=0.04187\\ \alpha_3(2) = \Big[\sum_{i=1}^3\alpha_2(i)a_{i2}\Big]b_2(o_2) =0.03551\\ \alpha_3(3) = \Big[\sum_{i=1}^3\alpha_2(i)a_{i3}\Big]b_3(o_2) =0.05284
α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)=[i=1∑3α1(i)ai2]b2(o2)=0.184∗0.6=0.1104α2(3)=[i=1∑3α1(i)ai3]b3(o2)=0.202∗0.3=0.0606α3(1)=[i=1∑3α2(i)ai1]b1(o2)=[0.077∗0.5+0.1104∗0.3+0.0606∗0.2]∗0.5=0.04187α3(2)=[i=1∑3α2(i)ai2]b2(o2)=0.03551α3(3)=[i=1∑3α2(i)ai3]b3(o2)=0.05284
(3)终止
P
(
Y
∣
λ
)
=
∑
i
=
1
3
α
3
(
i
)
=
0.13022
P(Y|\lambda) = \sum_{i=1}^3 \alpha_3(i) = 0.13022
P(Y∣λ)=i=1∑3α3(i)=0.13022
前向算法优点:
- 前向算法高效的关键是其局部计算前向概率,然后利用路径结构将前向概率“递推”到全局,得到 P ( Y ∣ λ ) P(Y|\lambda) P(Y∣λ)
- 减少计算量的原因在于每一个计算直接引用前一个时刻的计算结果,避免重复计算
4.2 后向算法
后向算法与前向算法类似,只是一个计算前向概率一个计算后向概率。
给定隐马尔可夫模型 λ \lambda λ,定义在时刻 t t t 状态为 q t q_t qt 的条件下,从 t + 1 t+1 t+1 到 T T T 的
部分观测序列
为 y t + 1 , y t + 2 , . . . , y T y_{t+1},y_{t+2},...,y_T yt+1,yt+2,...,yT 的概率为后向概率,记为:
β t ( i ) = P ( y t + 1 , y t + 2 , . . . , y T ∣ q t = i , λ ) \beta_t(i)=P(y_{t+1},y_{t+2},...,y_T|q_t=i,\lambda) βt(i)=P(yt+1,yt+2,...,yT∣qt=i,λ)
同样可以用递归的方法求得后验概率 β t ( i ) \beta_t(i) βt(i) 和观测序列概率 P ( Y ∣ λ ) P(Y|\lambda) P(Y∣λ)
后向算法描述如下:
输入:隐马尔可夫模型 λ \lambda λ,观测序列 Y Y Y
输出:观测序列概率 P ( Y ∣ λ ) P(Y|\lambda) P(Y∣λ)
(1)初值
β
T
(
i
)
=
1
,
i
=
1
,
2
,
.
.
,
N
\beta_T(i) = 1,i = 1,2,..,N
βT(i)=1,i=1,2,..,N
(2)递推
\quad
对
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
(
y
t
+
1
)
β
t
+
1
(
j
)
,
i
=
1
,
2
,
.
.
.
,
N
\beta_t(i) = \sum_{j=1}^N a_{ij}b_j(y_{t+1})\beta_{t+1}(j),i = 1,2,...,N
βt(i)=j=1∑Naijbj(yt+1)βt+1(j),i=1,2,...,N
(3)终止
p
(
Y
∣
λ
)
=
∑
i
=
1
N
π
i
b
i
(
y
1
)
β
1
(
i
)
p(Y|\lambda) = \sum_{i=1}^N \pi_ib_i(y_1)\beta_1(i)
p(Y∣λ)=i=1∑Nπibi(y1)β1(i)
- 步骤(1):初始化后向概率,对最终时刻的所有状态 q i q_i qi 规定 β T ( i ) = 1 \beta_T(i) = 1 βT(i)=1;
- 步骤(2):后向概率的递推公式,计算在时刻 t t t 状态为 q i q_i qi 条件下时刻 t + 1 t+1 t+1 之后的部分观测序列为 y t + 1 , y t + 2 , . . . , y T y_{t+1},y_{t+2},...,y_{T} yt+1,yt+2,...,yT 的后向概率 β t ( i ) \beta_t(i) βt(i),只需要考虑在时刻 t + 1 t+1 t+1 所有可能的 N N N 个状态 q j q_j qj 的转移概率(即 a i j a_{ij} aij),以及在此状态下的观测 y t + 1 y_{t+1} yt+1 的观测概率(即 b j ( y t + 1 ) b_j(y_{t+1}) bj(yt+1)),然后考虑状态 q j q_j qj 之后的观测序列的后向概率(即 β t + 1 ( j ) \beta_{t+1}(j) βt+1(j))
- 步骤(3):给出 P ( Y ∣ λ ) P(Y|\lambda) P(Y∣λ)的计算公式
利用前向概率和后向概率的定义可以将观测序列概率 P ( Y ∣ λ ) P(Y|\lambda) P(Y∣λ) 统一写为:
P ( Y ∣ λ ) = ∑ i = 1 N ∑ j = 1 N α t ( i ) b j ( y t + 1 ) β t + 1 ( j ) , t = 1 , 2 , . . . , T − 1 P(Y|\lambda) = \sum_{i=1}^N\sum_{j=1}^N\alpha_t(i)b_j(y_{t+1})\beta_{t+1}(j), t = 1,2,...,T-1 P(Y∣λ)=i=1∑Nj=1∑Nαt(i)bj(yt+1)βt+1(j),t=1,2,...,T−1
五、学习问题
上一节我们解决了在已知隐马尔可夫模型 λ \lambda λ的条件下 P ( Y ∣ λ ) P(Y|\lambda) P(Y∣λ) 概率计算问题,那么学习问题就是根据观测序列来估计模型 λ \lambda λ 参数,使得在新的模型参数 λ \lambda λ 下观测序列概率 P ( Y ∣ λ ) P(Y|\lambda) P(Y∣λ) 最大,即用极大似然估计的方法进行参数估计。
隐马尔可夫模型定义: λ = ( A , B , π ) \lambda = (A,B,\pi) λ=(A,B,π)
其中:
A A A是状态转移概率矩阵:
A = [ a i j ] N ∗ N A = [a_{ij}]_{N*N} A=[aij]N∗N
B B B是观测概率矩阵
B = [ b j ( k ) ] N ∗ M B = [b_j(k)]_{N*M} B=[bj(k)]N∗M
π \pi π是初始状态概率向量:
π = ( π i ) \pi = (\pi_i) π=(πi)
5.1 监督学习方法
\quad\quad 假设已给定训练数据包含 S S S个长度相同的观测序列和对应的状态序列 { ( O 1 , I 1 ) , ( O 2 , I 2 ) , . . . , ( O S , I S ) } \{(O_1,I_1),(O_2,I_2),...,(O_S,I_S)\} {(O1,I1),(O2,I2),...,(OS,IS)},那么可以利用极大似然估计法来估计隐马尔可夫模型的参数:
(1)转移概率
a
i
j
a_{ij}
aij的估计:
a
i
j
^
=
A
i
j
∑
j
=
1
N
A
i
j
,
i
=
1
,
2
,
.
.
.
,
N
;
j
=
1
,
2
,
.
.
.
,
N
\hat{a_{ij}} = \frac{A_{ij}}{\sum_{j=1}^NA_{ij}},\quad\quad i = 1,2,...,N;j = 1,2,...,N
aij^=∑j=1NAijAij,i=1,2,...,N;j=1,2,...,N
其中
A
i
j
A_{ij}
Aij表示样本中时刻
t
t
t处于状态
i
i
i时刻
t
+
1
t+1
t+1转移到状态
j
j
j的频数;
(2)观测概率
b
j
(
k
)
b_j(k)
bj(k)的估计:
b
j
(
k
)
^
=
B
j
k
∑
k
=
1
M
B
j
k
,
j
=
1
,
2
,
.
.
.
,
N
;
k
=
1
,
2
,
.
.
.
,
M
\hat{b_j(k)} = \frac{B_{jk}}{\sum_{k=1}^M B_{jk}},j = 1, 2,...,N;k = 1,2,...,M
bj(k)^=∑k=1MBjkBjk,j=1,2,...,N;k=1,2,...,M
其中
B
j
k
B_{jk}
Bjk表示样本中状态为
j
j
j并且观测为
k
k
k的频数;
(3)初始状态概率
π
i
\pi_i
πi的估计:
π
i
^
为
S
个
样
本
中
初
始
状
态
为
q
i
的
频
数
\hat{\pi_i}为S个样本中初始状态为q_i的频数
πi^为S个样本中初始状态为qi的频数
然而,监督学习所需的训练数据集需要人工标注,导致代价很高,我们得到的大部分数据是只有观测序列的,我们就会利用非监督学习的方法
5.2 非监督学习方法-Baum-Welch算法(由EM算法实现)
\quad\quad 假定给定训练数据集只包含 S S S个长度为 T T T的观测序列 { O 1 , O 2 , . . . , O S } \{O_1,O_2,...,O_S\} {O1,O2,...,OS}而没用对应的状态序列,目标是学习隐马尔可夫模型 λ = ( A , B , π ) \lambda = (A,B,\pi) λ=(A,B,π)。
\quad\quad
我们将观测序列数据看着观测数据
O
O
O,状态序列数据看作不可观测的隐数据
I
I
I,那么隐马尔可夫模型事实上就是一个含有隐变量的概率模型:
P
(
O
∣
λ
)
=
∑
I
P
(
O
∣
I
,
λ
)
P
(
I
∣
λ
)
P(O|\lambda) = \sum_IP(O|I,\lambda)P(I|\lambda)
P(O∣λ)=I∑P(O∣I,λ)P(I∣λ)
EM算法一文中,我们提到
E
M
EM
EM算法一般用于含有隐变量的概率模型参数的极大似然估计,或极大后验概率估计。
E M EM EM算法的迭代公式:
λ ( i + 1 ) = a r g max λ Q ( λ , λ ( i ) ) \lambda^{(i+1)}=arg \max_\lambda Q(\lambda, \lambda^{(i)}) λ(i+1)=argλmaxQ(λ,λ(i))
其中: Q ( λ , λ ( i ) ) = ∑ I P ( O , I ∣ λ ) P ( I ∣ O , λ ( i ) ) Q(\lambda, \lambda^{(i)})=\sum_I P(O,I|\lambda)P(I|O,\lambda^{(i)}) Q(λ,λ(i))=I∑P(O,I∣λ)P(I∣O,λ(i))
又由贝叶斯公式: P ( O , I ∣ λ ( i ) ) = P ( I ∣ O , λ ( i ) ) ∗ P ( O ∣ λ ( i ) ) P(O,I|\lambda^{(i)}) = P(I|O,\lambda^{(i)})*P(O|\lambda^{(i)}) P(O,I∣λ(i))=P(I∣O,λ(i))∗P(O∣λ(i))
P ( I ∣ O , λ ( i ) ) = P ( O , I ∣ λ ( i ) ) P ( O ∣ λ ( i ) ) P(I|O,\lambda^{(i)})=\frac{P(O,I|\lambda^{(i)})}{P(O|\lambda^{(i)})} P(I∣O,λ(i))=P(O∣λ(i))P(O,I∣λ(i))
分母项为常数,求 Q Q Q 函数极大化可以不考虑,所以:
Q ( λ , λ ( i ) ) ∝ ∑ I P ( O , I ∣ λ ) P ( O , I ∣ λ ( i ) ) Q(\lambda, \lambda^{(i)})\propto\sum_IP(O,I|\lambda)P(O,I|\lambda^{(i)}) Q(λ,λ(i))∝I∑P(O,I∣λ)P(O,I∣λ(i))
O O O为观测变量数据, I I I为隐变量数据,联合分布 P ( O , I ∣ λ ) P(O,I|\lambda) P(O,I∣λ),条件分布 P ( I ∣ O , λ ) P(I|O,\lambda) P(I∣O,λ)
(1)确定完全数据的对数似然函数
观测数据 O = ( o 1 , o 2 , . . . , o T ) O = (o_1,o_2,...,o_T) O=(o1,o2,...,oT),隐数据 I = ( i 1 , i 2 , . . . , i T ) I =(i_1,i_2,...,i_T) I=(i1,i2,...,iT),
完全数据是
(
O
,
I
)
=
(
o
1
,
o
2
,
.
.
.
,
o
T
,
i
1
,
i
2
,
.
.
.
,
i
T
)
(O,I) =(o_1,o_2,...,o_T,i_1,i_2,...,i_T)
(O,I)=(o1,o2,...,oT,i1,i2,...,iT),完全数据的对数似然函数为:
l
o
g
P
(
O
,
I
∣
λ
)
logP(O,I|\lambda)
logP(O,I∣λ)
(2)EM算法的E步:求Q函数
Q
(
λ
,
λ
‾
)
Q (\lambda,\overline{\lambda})
Q(λ,λ)
Q
(
λ
,
λ
‾
)
∝
∑
I
l
o
g
(
P
(
O
,
I
∣
λ
)
)
P
(
O
,
I
∣
λ
‾
)
Q (\lambda,\overline{\lambda}) \propto \sum_Ilog\big(P(O,I|\lambda)\big)P(O,I|\overline{\lambda})
Q(λ,λ)∝I∑log(P(O,I∣λ))P(O,I∣λ)
其中,
λ
‾
\overline{\lambda}
λ是隐马尔可夫模型参数的当前估计值,
λ
\lambda
λ是使
Q
Q
Q函数极大化的模型参数。
且:
P
(
O
,
I
∣
λ
)
=
π
i
1
b
i
1
(
o
1
)
a
i
1
i
2
b
i
2
(
o
2
)
⋅
⋅
⋅
a
i
T
−
1
i
T
b
i
T
(
o
T
)
P(O,I|\lambda) = \pi_{i_1}b_{i_1}(o_1)a_{i_1i_2}b_{i_2}(o_2)\cdot \cdot \cdot a_{i_{T-1}i_T} b_{i_T}(o_T)
P(O,I∣λ)=πi1bi1(o1)ai1i2bi2(o2)⋅⋅⋅aiT−1iTbiT(oT)
于是函数
Q
(
λ
,
λ
‾
)
Q (\lambda,\overline{\lambda})
Q(λ,λ)可以写成:
Q
(
λ
,
λ
‾
)
=
∑
I
l
o
g
π
i
1
P
(
O
,
I
∣
λ
‾
)
+
∑
I
(
∑
t
=
1
T
−
1
l
o
g
a
i
t
i
t
+
1
)
P
(
O
,
I
∣
λ
‾
)
+
∑
I
(
∑
t
=
1
T
l
o
g
b
i
t
(
o
t
)
)
P
(
O
,
I
∣
λ
‾
)
Q (\lambda,\overline{\lambda}) = \sum_Ilog\pi_{i_1}P(O,I|\overline{\lambda}) + \sum_I\Big(\sum_{t=1}^{T-1}log \ a_{i_ti_{t+1}}\Big)P(O,I|\overline{\lambda})+\sum_I\Big( \sum_{t=1}^Tlog\ b_{i_t}(o_t)\Big)P(O,I|\overline{\lambda})
Q(λ,λ)=I∑logπi1P(O,I∣λ)+I∑(t=1∑T−1log aitit+1)P(O,I∣λ)+I∑(t=1∑Tlog bit(ot))P(O,I∣λ)
式中求和都是对所有训练数据的序列总长度
T
T
T进行的
(3)EM算法的M步:极大化Q函数求模型参数
由于Q函数中有3项相加,所以可以对每一项分别求极大化:
- 第一项:
∑ I l o g π i 1 P ( O , I ∣ λ ‾ ) = ∑ i = 1 N π i P ( O , i 1 = i ∣ λ ‾ ) \sum_Ilog\pi_{i_1}P(O,I|\overline{\lambda}) = \sum_{i=1}^N\pi_iP(O,i_1=i|\overline{\lambda}) I∑logπi1P(O,I∣λ)=i=1∑NπiP(O,i1=i∣λ)
其中, π i \pi_i πi满足约束条件 ∑ i = 1 N π i = 1 \sum_{i=1}^N \pi_i = 1 ∑i=1Nπi=1,可以用拉格朗日乘子法
写出拉格朗日函数:
L M 1 = ∑ i = 1 N π i P ( O , i 1 = i ∣ λ ‾ ) + γ ( ∑ i = 1 N π i − 1 ) LM_1 = \sum_{i=1}^N\pi_iP(O,i_1=i|\overline{\lambda}) + \gamma\Big(\sum_{i=1}^N \pi_i - 1\Big) LM1=i=1∑NπiP(O,i1=i∣λ)+γ(i=1∑Nπi−1)
N是可能的状态数
对其求偏导数,并且令为0
∂ L M 1 ∂ π i = P ( O , i 1 = i ∣ λ ‾ ) π i + γ = 0 \frac{\partial LM_1}{\partial \pi_i} = \frac{P(O,i_1 = i|\overline{\lambda})}{\pi_i} + \gamma = 0 ∂πi∂LM1=πiP(O,i1=i∣λ)+γ=0
∂ L M 1 ∂ γ = ∑ i = 1 N π i − 1 = 0 \frac{\partial LM_1}{\partial \gamma} = \sum_{i=1}^N \pi_i - 1=0 ∂γ∂LM1=i=1∑Nπi−1=0
所以:
P ( O , i 1 = i ∣ λ ‾ ) = − γ π i P(O,i_1 = i|\overline{\lambda}) = -\gamma \pi_i P(O,i1=i∣λ)=−γπi
∑ i = 1 N P ( O , i 1 = i ∣ λ ‾ ) = − γ ∑ i = 1 N π i = − γ \sum_{i=1}^N P(O,i_1 = i|\overline{\lambda}) = -\gamma\sum_{i=1}^N \pi_i = -\gamma i=1∑NP(O,i1=i∣λ)=−γi=1∑Nπi=−γ
π i = P ( O , i 1 = i ∣ λ ‾ ) − γ \pi_i = \frac{P(O,i_1 = i|\overline{\lambda})}{-\gamma} πi=−γP(O,i1=i∣λ)
π i = P ( O , i 1 = i ∣ λ ‾ ) ∑ i = 1 N P ( O , i 1 = i ∣ λ ‾ ) \pi_i = \frac{P(O,i_1 = i|\overline{\lambda})}{\sum_{i=1}^N P(O,i_1 = i|\overline{\lambda})} πi=∑i=1NP(O,i1=i∣λ)P(O,i1=i∣λ)
- 第二项:
∑ I ( ∑ t = 1 T − 1 l o g a i t i t + 1 ) P ( O , I ∣ λ ‾ ) = ∑ i = 1 N ∑ j = 1 N ∑ t = 1 T − 1 l o g a i j P ( O , i t = i , i t + 1 = j ∣ λ ‾ ) \sum_I\Big(\sum_{t=1}^{T-1}log \ a_{i_ti_{t+1}}\Big)P(O,I|\overline{\lambda}) = \sum_{i=1}^N\sum_{j=1}^N\sum_{t=1}^{T-1} log a_{ij} P(O,i_t=i,i_{t+1} = j|\overline{\lambda}) I∑(t=1∑T−1log aitit+1)P(O,I∣λ)=i=1∑Nj=1∑Nt=1∑T−1logaijP(O,it=i,it+1=j∣λ)
其中, ∑ j = 1 N a i j = 1 \sum_{j=1}^N a_{ij} = 1 ∑j=1Naij=1,同样利用拉格朗日乘子法
写出拉格朗日函数:
L M 2 = ∑ i = 1 N ∑ j = 1 N ∑ t = 1 T − 1 l o g a i j P ( O , i t = i , i t + 1 = j ∣ λ ‾ ) + ∑ i = 1 N γ i ( ∑ j = 1 N a i j − 1 ) LM_2 = \sum_{i=1}^N\sum_{j=1}^N\sum_{t=1}^{T-1}log a_{ij} P(O,i_t=i,i_{t+1} = j|\overline{\lambda}) + \sum_{i=1}^N\gamma_i(\sum_{j=1}^N a_{ij} - 1) LM2=i=1∑Nj=1∑Nt=1∑T−1logaijP(O,it=i,it+1=j∣λ)+i=1∑Nγi(j=1∑Naij−1)
N是可能的状态数
对其求偏导数,且令为0
∂ L M 2 ∂ a i j = ∑ t = 1 T − 1 P ( O , i t = i , i t + 1 = j ∣ λ ‾ ) a i j + ∑ i = 1 N γ i = 0 \frac{\partial LM_2}{\partial a_{ij}} = \frac{\sum_{t=1}^{T-1}P(O,i_t=i,i_{t+1} = j|\overline{\lambda})}{a_{ij}}+\sum_{i=1}^N\gamma_i = 0 ∂aij∂LM2=aij∑t=1T−1P(O,it=i,it+1=j∣λ)+i=1∑Nγi=0
∂ L M 2 ∂ γ i = ∑ j = 1 N a i j − 1 = 0 \frac{\partial LM_2}{\partial \gamma_i} =\sum_{j=1}^N a_{ij} - 1 = 0 ∂γi∂LM2=j=1∑Naij−1=0
∑ t = 1 T − 1 P ( O , i t = i , i t + 1 = j ∣ λ ‾ ) = − a i j ∑ i = 1 N γ i \sum_{t=1}^{T-1}P(O,i_t=i,i_{t+1} = j|\overline{\lambda}) = -a_{ij}\sum_{i=1}^N\gamma_i t=1∑T−1P(O,it=i,it+1=j∣λ)=−aiji=1∑Nγi
a i j = ∑ t = 1 T − 1 P ( O , i t = i , i t + 1 = j ∣ λ ‾ ) − ∑ i = 1 N γ i a_{ij} = \frac{\sum_{t=1}^{T-1}P(O,i_t=i,i_{t+1} = j|\overline{\lambda})}{-\sum_{i=1}^N\gamma_i} aij=−∑i=1Nγi∑t=1T−1P(O,it=i,it+1=j∣λ)
∑ j = 1 N ∑ t = 1 T − 1 P ( O , i t = i , i t + 1 = j ∣ λ ‾ ) = ∑ j = 1 N − a i j ∑ i = 1 N γ i = − ∑ i = 1 N γ i ∑ j = 1 N a i j = − ∑ i = 1 N γ i \sum_{j=1}^N \sum_{t=1}^{T-1} P(O,i_t=i,i_{t+1} = j|\overline{\lambda}) = \sum_{j=1}^N-a_{ij}\sum_{i=1}^N\gamma_i = -\sum_{i=1}^N\gamma_i\sum_{j=1}^Na_{ij} = -\sum_{i=1}^N\gamma_i j=1∑Nt=1∑T−1P(O,it=i,it+1=j∣λ)=j=1∑N−aiji=1∑Nγi=−i=1∑Nγij=1∑Naij=−i=1∑Nγi
a i j = ∑ t = 1 T − 1 P ( O , i t = i , i t + 1 = j ∣ λ ‾ ) ∑ j = 1 N ( ∑ t = 1 T − 1 P ( O , i t = i , i t + 1 = j ∣ λ ‾ ) ) a_{ij} = \frac{\sum_{t=1}^{T-1} P(O,i_t=i,i_{t+1} = j|\overline{\lambda})}{\sum_{j=1}^N (\sum_{t=1}^{T-1} P(O,i_t=i,i_{t+1} = j|\overline{\lambda}))} aij=∑j=1N(∑t=1T−1P(O,it=i,it+1=j∣λ))∑t=1T−1P(O,it=i,it+1=j∣λ)
= ∑ t = 1 T − 1 P ( O , i t = i , i t + 1 = j ∣ λ ‾ ) ∑ t = 1 T − 1 P ( O , i t = i , ∣ λ ‾ ) =\frac{\sum_{t=1}^{T-1} P(O,i_t=i,i_{t+1} = j|\overline{\lambda})}{\sum_{t=1}^{T-1}P(O,i_t=i,|\overline{\lambda})} =∑t=1T−1P(O,it=i,∣λ)∑t=1T−1P(O,it=i,it+1=j∣λ)
- 第三项:
∑ I ( ∑ t = 1 T l o g b i t ( o t ) ) P ( O , I ∣ λ ‾ ) = ∑ j = 1 N ∑ t = 1 T l o g b j ( o t ) P ( O , i t = j ∣ λ ‾ ) \sum_I\Big( \sum_{t=1}^Tlog\ b_{i_t}(o_t)\Big)P(O,I|\overline{\lambda}) = \sum_{j=1}^N \sum_{t=1}^Tlog\ b_j(o_t) P(O,i_t = j|\overline{\lambda}) I∑(t=1∑Tlog bit(ot))P(O,I∣λ)=j=1∑Nt=1∑Tlog bj(ot)P(O,it=j∣λ)
其中, ∑ k = 1 M b j ( k ) = 1 \sum_{k=1}^M b_j(k) = 1 ∑k=1Mbj(k)=1,同样使用拉格朗日乘子法
写出拉格朗日函数:
L M 3 = ∑ j = 1 N ∑ t = 1 T l o g b j ( o t ) P ( O , i t = j ∣ λ ‾ ) + γ ( ∑ k = 1 M b j ( k ) − 1 ) LM_3 = \sum_{j=1}^N \sum_{t=1}^Tlog\ b_j(o_t) P(O,i_t = j|\overline{\lambda}) + \gamma(\sum_{k=1}^M b_j(k) - 1) LM3=j=1∑Nt=1∑Tlog bj(ot)P(O,it=j∣λ)+γ(k=1∑Mbj(k)−1)
N是可能的状态数,M是可能的观测数
对其求偏导数,且令为0:
注意:只有在 o t = v k o_t = v_k ot=vk时 b j ( k ) b_j(k) bj(k)对 b j ( o t ) b_j(o_t) bj(ot)的偏导数才不为0,以 I ( o t = v k ) I(o_t=v_k) I(ot=vk)表示
∂ L M 3 ∂ b j ( o t ) = ∑ t = 1 T P ( O , i t = j ∣ λ ‾ ) b j ( o t ) + γ = 0 \frac{\partial LM_3}{\partial b_j(o_t)} = \frac{\sum_{t=1}^T P(O,i_t = j|\overline{\lambda})}{b_j(o_t)}+\gamma = 0 ∂bj(ot)∂LM3=bj(ot)∑t=1TP(O,it=j∣λ)+γ=0
∂ L M 3 ∂ γ = ∑ j = 1 M b j ( o t ) − 1 = 0 \frac{\partial LM_3}{\partial \gamma} = \sum_{j=1}^M b_j(o_t) - 1 = 0 ∂γ∂LM3=j=1∑Mbj(ot)−1=0
∑ t = 1 T P ( O , i t = j ∣ λ ‾ ) = − b j ( o t ) γ \sum_{t=1}^T P(O,i_t = j|\overline{\lambda}) = -b_j(o_t)\gamma t=1∑TP(O,it=j∣λ)=−bj(ot)γ
b j ( o t ) = ∑ t = 1 T P ( O , i t = j ∣ λ ‾ ) − γ b_j(o_t) = \frac{\sum_{t=1}^T P(O,i_t = j|\overline{\lambda})}{-\gamma} bj(ot)=−γ∑t=1TP(O,it=j∣λ)
∑ j = 1 N ∑ t = 1 T P ( O , i t = j ∣ λ ‾ ) = − γ ∑ j = 1 N b j ( k ) = − γ \sum_{j=1}^N\sum_{t=1}^T P(O,i_t = j|\overline{\lambda}) = -\gamma\sum_{j=1}^Nb_j(k) = -\gamma j=1∑Nt=1∑TP(O,it=j∣λ)=−γj=1∑Nbj(k)=−γ
b j ( k ) = ∑ t = 1 T P ( O , i t = j ∣ λ ‾ ) I ( o t = v k ) ∑ t = 1 T P ( O , i t = j ∣ λ ‾ ) b_j(k) = \frac{\sum_{t=1}^T P(O,i_t = j|\overline{\lambda})I(o_t=v_k)}{\sum_{t=1}^T P(O,i_t = j|\overline{\lambda})} bj(k)=∑t=1TP(O,it=j∣λ)∑t=1TP(O,it=j∣λ)I(ot=vk)
Baum-Welch算法描述如下:
输入:观测数据 O = ( o 1 , o 2 , . . . , o T ) O = (o_1,o_2,...,o_T) O=(o1,o2,...,oT)
输出:隐马尔可夫模型参数
(1)初始化
对 n = 0 n=0 n=0,选取 a i j ( 0 ) , b j ( k ) ( 0 ) , π i ( 0 ) a_{ij}^{(0)},b_j(k)^{(0)},\pi_i^{(0)} aij(0),bj(k)(0),πi(0),得到模型 λ ( 0 ) = ( A ( 0 ) , B ( 0 ) , π ( 0 ) ) \lambda^{(0)} = (A^{(0)},B^{(0)},\pi^{(0)}) λ(0)=(A(0),B(0),π(0))
(2)递推,对
n
=
1
,
2
,
.
.
.
,
n = 1,2,...,
n=1,2,...,
a
i
j
(
n
+
1
)
=
∑
t
=
1
T
−
1
P
(
O
,
i
t
=
i
,
i
t
+
1
=
j
∣
λ
‾
)
∑
t
=
1
T
−
1
P
(
O
,
i
t
=
i
,
∣
λ
‾
)
a_{ij}^{(n+1)} = \frac{\sum_{t=1}^{T-1} P(O,i_t=i,i_{t+1} = j|\overline{\lambda})}{\sum_{t=1}^{T-1}P(O,i_t=i,|\overline{\lambda})}
aij(n+1)=∑t=1T−1P(O,it=i,∣λ)∑t=1T−1P(O,it=i,it+1=j∣λ)
b j ( k ) ( n + 1 ) = ∑ t = 1 T P ( O , i t = j ∣ λ ‾ ) I ( o t = v k ) ∑ t = 1 T P ( O , i t = j ∣ λ ‾ ) b_j(k)^{(n+1)} = \frac{\sum_{t=1}^T P(O,i_t = j|\overline{\lambda})I(o_t=v_k)}{\sum_{t=1}^T P(O,i_t = j|\overline{\lambda})} bj(k)(n+1)=∑t=1TP(O,it=j∣λ)∑t=1TP(O,it=j∣λ)I(ot=vk)
π i ( n + 1 ) = P ( O , i 1 = i ∣ λ ‾ ) ∑ i = 1 N P ( O , i 1 = i ∣ λ ‾ ) \pi_i^{(n+1)}=\frac{P(O,i_1 = i|\overline{\lambda})}{\sum_{i=1}^N P(O,i_1 = i|\overline{\lambda})} πi(n+1)=∑i=1NP(O,i1=i∣λ)P(O,i1=i∣λ)
右端各值按模型 λ ( n ) = ( A ( n ) , B ( n ) , π ( n ) ) \lambda^{(n)} = (A^{(n)},B^{(n)},\pi^{(n)}) λ(n)=(A(n),B(n),π(n))计算
(3)终止。得到模型参数 λ ( n + 1 ) = ( A ( n + 1 ) , B ( n + 1 ) , π ( n + 1 ) ) \lambda^{(n+1)} = (A^{(n+1)},B^{(n+1)},\pi^{(n+1)}) λ(n+1)=(A(n+1),B(n+1),π(n+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),求对给定观测序列条件概率 P ( S ∣ O ) P(S|O) P(S∣O)最大的状态序列 S = ( s 1 , s 2 , . . . , s T ) S = (s_1,s_2,...,s_T) S=(s1,s2,...,sT),即给定观测序列,求最有可能的对应的状态序列。
6.1 近似算法
思想描述:
在每个时刻 t t t 选择在该时刻最有可能出现的状态 i t ∗ i_t^* it∗ ,从而得到一个状态序列 I ∗ = ( i 1 ∗ , i 2 ∗ , . . . , i T ∗ ) I^* =(i_1^*,i_2^*,...,i_T^*) I∗=(i1∗,i2∗,...,iT∗),这便是我们预测的结果。
- 在给定的隐马尔可夫模型 λ \lambda λ 和观测序列 O O O下,在时刻 t t t 处于状态 q i q_i qi 的概率 γ t ( i ) \gamma_t(i) γt(i) 可表示为:
γ t ( i ) = α t ( i ) β t ( i ) P ( O ∣ λ ) = α t ( i ) β t ( i ) ∑ j = 1 N α t ( j ) β t ( j ) \gamma_t(i) = \frac{\alpha_t(i)\beta_t(i)}{P(O|\lambda)} = \frac{\alpha_t(i)\beta_t(i)}{\sum_{j=1}^N\alpha_t(j)\beta_t(j)} γt(i)=P(O∣λ)αt(i)βt(i)=∑j=1Nαt(j)βt(j)αt(i)βt(i)
- 在每一时刻 t t t 最有可能的状态 i t ∗ i_t^* it∗,表示为:
i t ∗ = arg max 1 ≤ i ≤ N [ γ t ( i ) ] , t = 1 , 2 , . . . , T i_t^* = \arg \ \max_{1\leq i \leq N} [\gamma_t(i)],\ \ t = 1, 2,...,T it∗=arg 1≤i≤Nmax[γt(i)], t=1,2,...,T
从而得到状态序列 I ∗ = ( i 1 ∗ , i 2 ∗ , . . . , i T ∗ ) I^* =(i_1^*,i_2^*,...,i_T^*) I∗=(i1∗,i2∗,...,iT∗)。
近似算法计算简单,但是不能保证预测的状态序列整体上是最优的,因为预测的状态序列可能有实际不发生的部分。事实上,该方法得到的状态序列中有可能存在转移概率为0的相邻状态,即对某些 i , j , a i j = 0 i,j, a_{ij} = 0 i,j,aij=0。
6.2 维特比算法
维特比算法实际上是用 动态规划
解隐马尔可夫模型预测问题,即用 动态规划
求概率最大路径(这是最优路径),一条路径对应一个预测的状态序列。
动态规划思想描述如下:
如果最优路径在时刻 t t t 通过结点 i t ∗ i_t^* it∗,那么这一路径从结点 i t ∗ i_t^* it∗ 到终点 i T ∗ i_T^* iT∗的部分路径,对于从 i t ∗ i_t^* it∗ 到 i T ∗ i_T^* iT∗ 的所有可能的部分路径来说,也必须是最优的。因为如果不是最优,那么必定存在另一条比原来的路径更优的路径。
根据上面的思想,我们只需要从时刻 t = 1 t=1 t=1 开始,递归地计算在时刻 t t t 状态为 i i i 的各条部分路径的最大概率,直到时刻 t = T t=T t=T 状态为 i i i 的各条路径的最大概率。时刻 t = T t = T t=T 的最大概率即为最优路径的概率 P ∗ P^* P∗,最优路径的终结点 i T ∗ i_T^* iT∗ 也就得到了。之后,为了找出最优路径的各个节点,从终结点 i T ∗ i_T^* iT∗ 开始,由后向前逐步求得结点 i T − 1 ∗ , i T − 2 ∗ , . . . , i 1 ∗ i_{T-1}^*,i_{T-2}^*,...,i_{1}^* iT−1∗,iT−2∗,...,i1∗,最终得到最优路径 I ∗ = ( i 1 ∗ , i 2 ∗ , . . . , i T ∗ ) I^*=(i_1^*,i_2^*,...,i_T^*) I∗=(i1∗,i2∗,...,iT∗),这便是维特比算法。
定义变量 δ , ψ \delta,\psi δ,ψ
- δ t ( i ) \delta_t(i) δt(i):表示在时刻 t t t 状态为 i i i 的所有单个路径 ( i 1 , i 2 , . . . , i t ) (i_1,i_2,...,i_t) (i1,i2,...,it) 中的概率最大值
δ t ( i ) = max i 1 , i 2 , . . . , i t − 1 P ( i t = i , i t − 1 , . . . , t 1 , o t , . . . , o 1 ∣ λ ) , i = 1 , 2 , . . . , N \delta_t(i) = \max_{i_1,i_2,...,i_{t-1}} P(i_t=i,i_{t-1},...,t_1,o_t,...,o_1|\lambda), i=1,2,...,N δt(i)=i1,i2,...,it−1maxP(it=i,it−1,...,t1,ot,...,o1∣λ),i=1,2,...,N
δ
t
+
1
(
i
)
=
max
i
1
,
i
2
,
.
.
.
,
i
t
P
(
i
t
+
1
=
i
,
i
t
,
.
.
.
,
t
1
,
o
t
+
1
,
.
.
.
,
o
1
∣
λ
)
\delta_{t+1}(i)= \max_{i_1,i_2,...,i_t} P(i_{t+1}=i,i_t,...,t_1,o_{t+1},...,o_1|\lambda)
δt+1(i)=i1,i2,...,itmaxP(it+1=i,it,...,t1,ot+1,...,o1∣λ)
=
max
1
≤
j
≤
N
[
δ
t
(
j
)
a
j
i
]
b
t
(
o
t
+
1
)
,
i
=
1
,
2
,
.
.
.
,
N
;
t
=
1
,
2
,
.
.
,
T
−
1
=\max_{1\leq j \leq N}[\delta_t(j)a_{ji}]b_t(o_{t+1}), i=1,2,...,N;t=1,2,..,T-1
=1≤j≤Nmax[δt(j)aji]bt(ot+1),i=1,2,...,N;t=1,2,..,T−1
- ψ t ( i ) \psi_t(i) ψt(i):表示在时刻 t t t 状态为 i i i 的所有单个路径 ( i 1 , i 2 , . . . , i t − 1 , i ) (i_1,i_2,...,i_{t-1},i) (i1,i2,...,it−1,i) 中的概率最大的路径的第 t − 1 t-1 t−1 个结点为
ψ t ( i ) = a r g max 1 ≤ j ≤ N [ δ t − 1 ( j ) a j i ] , i = 1 , 2 , . . . , N \psi_t(i) = arg \max_{1 \leq j \leq N} [\delta_{t-1}(j)a_{ji}],i=1,2,...,N ψt(i)=arg1≤j≤Nmax[δt−1(j)aji],i=1,2,...,N
维特比算法描述如下:
输入:模型 λ = ( 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);
输出:最优路径 I ∗ = ( i 1 ∗ , i 2 ∗ , . . . , i T ∗ ) I^* = (i_1^*,i_2^*,...,i_T^*) I∗=(i1∗,i2∗,...,iT∗);
(1)初始化
δ
1
(
i
)
=
π
i
b
i
(
o
1
)
,
i
=
1
,
2
,
.
.
.
,
N
\delta_1(i)=\pi_ib_i(o_1),i=1,2,...,N
δ1(i)=πibi(o1),i=1,2,...,N
ψ
1
(
i
)
=
0
,
i
=
1
,
2
,
.
.
,
N
\psi_1(i) = 0, i=1,2,..,N
ψ1(i)=0,i=1,2,..,N
(2)递推,对 t = 2 , 3 , . . . , T t=2,3,...,T t=2,3,...,T
δ
t
(
i
)
=
max
1
≤
j
≤
N
[
δ
t
−
1
(
j
)
a
j
i
]
b
i
(
o
t
)
,
i
=
1
,
2
,
.
.
.
,
N
\delta_t(i)=\max_{1 \leq j \leq N}[\delta_{t-1}(j)a_{ji}]b_i(o_t), i=1,2,...,N
δt(i)=1≤j≤Nmax[δt−1(j)aji]bi(ot),i=1,2,...,N
ψ
t
(
i
)
=
a
r
g
max
1
≤
j
≤
N
[
δ
t
−
1
(
j
)
a
j
i
]
,
i
=
1
,
2
,
.
.
.
,
N
\psi_t(i) = arg \max_{1 \leq j \leq N}[\delta_{t-1}(j)a_{ji}], i=1,2,...,N
ψt(i)=arg1≤j≤Nmax[δt−1(j)aji],i=1,2,...,N
(3)终止
P
∗
=
max
1
≤
i
≤
N
δ
T
(
i
)
P^* = \max_{1\leq i \leq N}\delta_T(i)
P∗=1≤i≤NmaxδT(i)
i
T
∗
=
a
r
g
max
1
≤
i
≤
N
[
δ
T
(
i
)
]
i_T^* = arg \max_{1 \leq i \leq N}[\delta_T(i)]
iT∗=arg1≤i≤Nmax[δT(i)]
(4)最优路径回溯,对 t = T − 1 , T − 2 , . . . , 1 t=T-1,T-2,...,1 t=T−1,T−2,...,1
i t ∗ = ψ t + 1 ( i t + 1 ∗ ) i_t^*=\psi_{t+1}(i_{t+1}^*) it∗=ψt+1(it+1∗)
求得最优路径 I ∗ = ( i 1 ∗ , i 2 ∗ , . . . , i T ∗ ) I^*=(i_1^*,i_2^*,...,i_T^*) I∗=(i1∗,i2∗,...,iT∗)
实例计算:
定义隐马尔可夫模型 λ = ( A , B , π ) \lambda=(A,B,\pi) λ=(A,B,π)
A = [ 0.5 0.2 0.3 0.3 0.5 0.2 0.2 0.3 0.5 ] A =\left[ \begin{matrix} 0.5 & 0.2&0.3\\ 0.3 & 0.5&0.2\\ 0.2 & 0.3&0.5 \end{matrix}\right] A=⎣⎡0.50.30.20.20.50.30.30.20.5⎦⎤
B = [ 0.5 0.5 0.4 0.6 0.7 0.3 ] B =\left[ \begin{matrix} 0.5 & 0.5\\ 0.4 & 0.6\\ 0.7 & 0.3 \end{matrix}\right] B=⎣⎡0.50.40.70.50.60.3⎦⎤
π = ( 0.2 , 0.4 , 0.4 ) T \pi = (0.2,0.4,0.4)^T π=(0.2,0.4,0.4)T
已知观测序列 O = ( 红 , 白 , 红 ) O=(红,白,红) O=(红,白,红),试求最优状态序列,即最优路径 I ∗ = ( i 1 ∗ , i 2 ∗ , i 3 ∗ ) I^*=(i_1^*,i_2^*,i_3^*) I∗=(i1∗,i2∗,i3∗)
(1)初始化
在 t = 1 t=1 t=1 时,对每一个状态 i i i, i = 1 , 2 , 3 i=1,2,3 i=1,2,3,求状态为 i i i 观测 o 1 o_1 o1 为红的概率,记此概率为 δ 1 ( i ) \delta_1(i) δ1(i),则:
δ 1 ( i ) = π i b i ( o 1 ) = π i b i ( 红 ) , 1 = 1 , 2 , 3 \delta_1(i) = \pi_ib_i(o_1) = \pi_ib_i(红),1=1,2,3 δ1(i)=πibi(o1)=πibi(红),1=1,2,3
代入实际数据:
δ 1 ( 1 ) = 0.2 × 0.5 = 0.10 , δ 1 ( 2 ) = 0.4 × 0.4 = 0.16 , δ 1 ( 3 ) = 0.4 × 0.7 = 0.28 \delta_1(1) = 0.2 \times 0.5 = 0.10,\delta_1(2) = 0.4 \times 0.4 = 0.16,\delta_1(3) = 0.4 \times 0.7 = 0.28 δ1(1)=0.2×0.5=0.10,δ1(2)=0.4×0.4=0.16,δ1(3)=0.4×0.7=0.28
记 ψ 1 ( i ) = 0 , i = 1 , 2 , 3 \psi_1(i)=0,i=1,2,3 ψ1(i)=0,i=1,2,3
(2)递推,对 t = 2 , 3 , . . . , T t=2,3,...,T t=2,3,...,T
在 t = 2 t=2 t=2时,对每个状态 i i i, i = 1 , 2 , 3 i=1,2,3 i=1,2,3,求在 t = 1 t=1 t=1时状态为 j j j 观测为红并在 t = 2 t=2 t=2 时状态为 i i i 观测 o 2 o_2 o2 为白的路径的最大概率,记为 δ 2 ( i ) \delta_2(i) δ2(i),则:
δ 2 ( i ) = max 1 ≤ j ≤ 3 [ δ 1 ( j ) a j i ] b i ( o 2 ) \delta_2(i)=\max_{1\leq j \leq 3}[\delta_1(j)a_{ji}]b_i(o_2) δ2(i)=1≤j≤3max[δ1(j)aji]bi(o2)
同时,对每个状态 i i i, i = 1 , 2 , 3 i=1,2,3 i=1,2,3,记录概率最大路径的前一个状态 j j j:
ψ 2 ( i ) = a r g max 1 ≤ j ≤ 3 [ δ 1 ( j ) a j i ] , i = 1 , 2 , 3 \psi_2(i) = arg \max_{1\leq j \leq 3}[\delta_1(j)a_{ji}] ,i=1,2,3 ψ2(i)=arg1≤j≤3max[δ1(j)aji],i=1,2,3
计算:
δ
2
(
1
)
=
max
1
≤
j
≤
3
[
δ
1
(
j
)
a
j
1
]
b
1
(
o
2
)
\delta_2(1)=\max_{1\leq j \leq 3}[\delta_1(j)a_{j1}]b_1(o_2)
δ2(1)=1≤j≤3max[δ1(j)aj1]b1(o2)
=
max
j
{
0.10
×
0.5
,
0.16
×
0.3
,
0.28
×
0.2
}
×
0.5
=
0.028
=\max_{j}\{0.10 \times0.5,0.16\times0.3,0.28\times0.2\}\times 0.5=0.028
=jmax{0.10×0.5,0.16×0.3,0.28×0.2}×0.5=0.028
ψ
2
(
1
)
=
3
\psi_2(1)=3
ψ2(1)=3
δ
2
(
2
)
=
0.0504
,
ψ
2
(
2
)
=
3
\delta_2(2)=0.0504,\psi_2(2)=3
δ2(2)=0.0504,ψ2(2)=3
δ
2
(
2
)
=
0.042
,
ψ
2
(
2
)
=
3
\delta_2(2)=0.042,\psi_2(2)=3
δ2(2)=0.042,ψ2(2)=3
同样,在 t = 3 t=3 t=3 时,
δ
3
(
i
)
=
max
1
≤
j
≤
3
[
δ
2
(
j
)
a
j
i
]
b
i
(
o
3
)
\delta_3(i)=\max_{1\leq j \leq 3}[\delta_2(j)a_{ji}]b_i(o_3)
δ3(i)=1≤j≤3max[δ2(j)aji]bi(o3)
ψ
3
(
i
)
=
a
r
g
max
1
≤
j
≤
3
[
δ
2
(
j
)
a
j
i
]
\psi_3(i)=arg \max_{1\leq j \leq 3}[\delta_2(j)a_{ji}]
ψ3(i)=arg1≤j≤3max[δ2(j)aji]
δ
3
(
1
)
=
0.00756
,
ψ
3
(
1
)
=
3
\delta_3(1)=0.00756,\psi_3(1)=3
δ3(1)=0.00756,ψ3(1)=3
δ
3
(
2
)
=
0.01008
,
ψ
3
(
2
)
=
3
\delta_3(2)=0.01008,\psi_3(2)=3
δ3(2)=0.01008,ψ3(2)=3
δ
3
(
3
)
=
0.0147
,
ψ
3
(
3
)
=
3
\delta_3(3)=0.0147,\psi_3(3)=3
δ3(3)=0.0147,ψ3(3)=3
(3)终止
以 P ∗ P^* P∗表示最优路径的概率,则
P ∗ = max 1 ≤ i ≤ 3 δ 3 ( i ) = 0.0147 P^*=\max_{1\leq i \leq 3}\delta_3(i)=0.0147 P∗=1≤i≤3maxδ3(i)=0.0147
最优路径的终点是 i 3 ∗ i_3^* i3∗:
i 3 ∗ = a r g max i [ δ 3 ( i ) ] = 3 i_3^*=arg \max_{i}[\delta_3(i)] = 3 i3∗=argimax[δ3(i)]=3
(4)最优路径回溯,对 t = T − 1 , T − 2 , . . . , 1 t=T-1,T-2,...,1 t=T−1,T−2,...,1
由最优路径的终点 i 3 ∗ i_3^* i3∗,逆向找到 i 2 ∗ , i 1 ∗ i_2^*,i_1^* i2∗,i1∗:
- 在 t = 2 t=2 t=2 时, i 2 ∗ = ψ 3 ( i 3 ∗ ) = ψ 3 ( 3 ) = 3 i_2^*=\psi_3(i_3^*)=\psi_3(3)=3 i2∗=ψ3(i3∗)=ψ3(3)=3
- 在 t = 1 t=1 t=1 时, i 1 ∗ = ψ 2 ( i 2 ∗ ) = ψ 2 ( 3 ) = 3 i_1^*=\psi_2(i_2^*)=\psi_2(3)=3 i1∗=ψ2(i2∗)=ψ2(3)=3
于是求得最优路径,即最优状态序列 I ∗ = ( i 1 ∗ , i 2 ∗ , i 3 ∗ ) = ( 3 , 3 , 3 ) I^*=(i_1^*,i_2^*,i_3^*)=(3,3,3) I∗=(i1∗,i2∗,i3∗)=(3,3,3)
七、总结
至此,关于隐马尔可夫模型的理论就介绍完了,那么隐马尔可夫模型到底有什么应用呢?隐含马尔可夫模型最早成功的使用场景是语音识别,后来陆续成功的应用在机器翻译、词性标注、拼写错误、手写体识别、图像处理、基因序列分析等很多it领域,目前也被用于股票预测和投资。总而言之,隐马尔可夫模型可以解决那些根据已知一个数据序列求另一个数据序列的问题。
隐马尔可夫模型主要就是三个基本问题,而概率计算问题是为了学习过程中的概率计算并使其最大化,最终的目标便是根据学习问题得到最优模型去预测最优的状态序列。
前向-后向算法
用来解决概率计算问题Baum-Welch算法
用来解决学习问题维特比算法
用来解决预测问题
本篇主要内容参考《统计学习方法》
下篇博客我们将用python
来实现,三个基本问题的算法实现,链接