隐马尔可夫模型
1. 基本概念
1.1 定义
隐马尔可夫模型是关于时序的概率模型,描述由一个隐藏的马尔科夫链随机生成不可观测的状态随机序列,再由各个状态生成一个观测从而产生观测随机序列的过程。隐马尔科夫链生成的状态序列,称为状态序列;每个状态生成一个观测,而由此产生的观测的随机序列,称为观测序列。序列的每一个位置又可看作为一个时刻。
隐马尔可夫模型的形式定义如下:
设
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\}, \quad V=\{v_1,v_2,...,v_M\}
Q={q1,q2,...,qN},V={v1,v2,...,vM}
其中,
N
N
N是可能的状态数,
M
M
M是可能的观测数。
I
I
I是长度为
T
T
T的状态序列,
O
O
O是对应的观测序列
I
=
{
i
1
,
i
2
,
.
.
.
,
i
T
}
,
O
=
{
o
1
,
o
2
,
.
.
,
o
T
}
I=\{i_1,i_2,...,i_T\}, \quad O=\{o_1,o_2,..,o_T\}
I={i1,i2,...,iT},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
(
i
t
+
1
=
q
j
∣
i
t
=
q
i
)
a_{ij}=P(i_{t+1}=q_j|i_t=q_i)
aij=P(it+1=qj∣it=qi)
是在时刻
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
∣
i
t
=
q
j
)
b_j(k)=P(o_t=v_k|i_t=q_j)
bj(k)=P(ot=vk∣it=qj)
是在时刻
t
t
t处于状态
q
j
q_j
qj的条件下生成观测
v
k
v_k
vk的概率
π
\pi
π是初始状态概率向量
π
=
(
π
i
)
\pi=(\pi_i)
π=(πi)
其中,
π
i
=
P
(
i
1
=
q
i
)
\pi_i=P(i_1=q_i)
πi=P(i1=qi)
是时刻
t
=
1
t=1
t=1处于状态
q
i
q_i
qi的概率
隐马尔可夫模型由初始状态概率向量
π
\pi
π、状态转移概率矩阵
A
A
A和概念概率矩阵
B
B
B决定。因此,隐马尔可夫模型
λ
\lambda
λ可以用三元符合表示:
λ
=
(
A
,
B
,
π
)
\lambda=(A,B,\pi)
λ=(A,B,π)
注意:隐马尔可夫模型作了两个基本假设:
- 齐次马尔可夫性假设: 隐马尔科夫链在任意时刻
t
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 , 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,i_{t-1},o_{t-1},...,i_1,o_1)=P(o_t|i_t) P(ot∣iT,oT,...,it+1,ot+1,it,it−1,ot−1,...,i1,o1)=P(ot∣it)
1.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∣λ)
- 学习问题: 已知观测序列 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∣λ)最大。即用EM算法估计参数
- 预测问题: 已知模型 λ = ( 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 ( 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)。即给定观测序列,求最有可能的状态序列
2. 概率计算算法
2.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),计算观测序列 O O O出现的概率 P ( O ∣ λ ) P(O|\lambda) P(O∣λ)。
最直接的方法:通过列举所有可能长度为 T T T的状态序列 I = ( i 1 , i 2 , . . . , i T ) I=(i_1,i_2,...,i_T) I=(i1,i2,...,iT),求各个状态序列 I I I与观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT)的联合概率 P ( O , I ∣ λ ) P(O,I|\lambda) P(O,I∣λ),然后对所有可能的状态序列求和,得到 P ( O ∣ λ ) P(O|\lambda) P(O∣λ)
- 状态概率
I
=
(
i
1
,
i
2
,
.
.
.
,
i
T
)
I=(i_1,i_2,...,i_T)
I=(i1,i2,...,iT)的概率是:
P ( I ∣ λ ) = π i 1 a i 1 i 2 a i 2 i 3 . . . a i T − 1 i T P(I|\lambda)=\pi_{i_1}a_{i_1i_2}a_{i_2i_3}...a_{i_{T-1}i_T} P(I∣λ)=πi1ai1i2ai2i3...aiT−1iT - 对固定的状态序列
I
=
(
i
1
,
i
2
,
.
.
.
,
i
T
)
I=(i_1,i_2,...,i_T)
I=(i1,i2,...,iT),观测序列
O
=
(
o
1
,
o
2
,
.
.
.
,
o
T
)
O=(o_1,o_2,...,o_T)
O=(o1,o2,...,oT)的概率为:
P ( O ∣ I , λ ) = b i 1 ( o 1 ) b i 2 ( o 2 ) . . . b i T ( o T ) P(O|I,\lambda)=b_{i_1}(o_1)b_{i_2}(o_2)...b_{i_T}(o_T) P(O∣I,λ)=bi1(o1)bi2(o2)...biT(oT) -
O
和
I
O和I
O和I同时出现的联合概率为:
P ( O , I ∣ λ ) = P ( O ∣ I , λ ) P ( 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)=P(O|I,\lambda)P(I|\lambda)=\pi_{i_1}b_{i_1}(o_1)a_{i_1i_2}b_{i_2}(o_2)...a_{i_{T-1}i_T}b_{i_T}(o_T) P(O,I∣λ)=P(O∣I,λ)P(I∣λ)=πi1bi1(o1)ai1i2bi2(o2)...aiT−1iTbiT(oT) - 对所有可能的状态
I
I
I求和,得到观测序列
O
O
O的概率
P
(
O
∣
λ
)
P(O|\lambda)
P(O∣λ):
P ( O ∣ λ ) = ∑ I P ( O ∣ I , λ ) P ( I ∣ λ ) = ∑ i 1 , i 2 , . . . , i T π 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|\lambda)=\sum_{I}P(O|I,\lambda)P(I|\lambda)=\sum_{i_1,i_2,...,i_T}\pi_{i_1}b_{i_1}(o_1)a_{i_1i_2}b_{i_2}(o_2)...a_{i_{T-1}i_T}b_{i_T}(o_T) P(O∣λ)=I∑P(O∣I,λ)P(I∣λ)=i1,i2,...,iT∑πi1bi1(o1)ai1i2bi2(o2)...aiT−1iTbiT(oT)
由于计算量很大,是 O ( T N T ) O(TN^T) O(TNT)阶,故不可行
2.2 前向算法
前向概率: 给定隐马尔可夫模型
λ
\lambda
λ,定义导时刻
t
t
t部分观测序列为
o
1
,
o
2
,
.
.
.
,
o
t
o_1,o_2,...,o_t
o1,o2,...,ot且状态为
q
i
q_i
qi的概率为前向概率,记作
α
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∣λ)
可以递推求得前向概率 α t ( i ) \alpha_t(i) αt(i)及观测序列概率 P ( O ∣ λ ) P(O|\lambda) P(O∣λ)
前向算法:
输 入 : 隐 马 尔 可 夫 模 型 λ , 观 测 序 列 O 输入:隐马尔可夫模型\lambda,观测序列O 输入:隐马尔可夫模型λ,观测序列O
输 出 : 观 测 序 列 概 率 P ( O ∣ λ ) 输出:观测序列概率P(O|\lambda) 输出:观测序列概率P(O∣λ)
- 初值:
α 1 ( i ) = P ( o 1 , i 1 = q i ∣ λ ) = P ( o 1 ∣ i 1 = q i , λ ) P ( i 1 = q i ∣ λ ) = π i b i ( o 1 ) \alpha_1(i)=P(o_1,i_1=q_i|\lambda)=P(o_1|i_1=q_i,\lambda)P(i_1=q_i|\lambda)=\pi_ib_i(o_1) α1(i)=P(o1,i1=qi∣λ)=P(o1∣i1=qi,λ)P(i1=qi∣λ)=πibi(o1) - 递推,对
t
=
1
,
2
,
.
.
.
,
T
−
1
t=1,2,...,T-1
t=1,2,...,T−1
α t + 1 ( i ) = P ( o 1 , o 2 , . . . , o t , o t + 1 , i t + 1 = q i ∣ λ ) = ∑ j = 1 N P ( o 1 , o 2 , . . . , o t , o t + 1 , i t = q j , i t + 1 = q i ∣ λ ) = ∑ j = 1 N P ( o 1 , o 2 , . . . , o t , i t = q j ∣ λ ) P ( o t + 1 , i t + 1 = q i ∣ λ , o 1 , o 2 , . . . , o t , i t = q j ) = ∑ j = 1 N P ( o 1 , o 2 , . . . , o t , i t = q j ∣ λ ) P ( o t + 1 ∣ i t + 1 = q i , λ ) P ( i t + 1 = q i ∣ λ , i t = q j ) = ∑ j = 1 N α t ( j ) a j i b i ( o t + 1 ) \alpha_{t+1}(i)=P(o_1,o_2,...,o_t,o_{t+1},i_{t+1}=q_i|\lambda)=\sum_{j=1}^NP(o_1,o_2,...,o_t,o_{t+1},i_t=q_j,i_{t+1}=q_i|\lambda)\\ =\sum_{j=1}^NP(o_1,o_2,...,o_t,i_t=q_j|\lambda)P(o_{t+1},i_{t+1}=q_i|\lambda,o_1,o_2,...,o_t,i_t=q_j)\\ =\sum_{j=1}^NP(o_1,o_2,...,o_t,i_t=q_j|\lambda)P(o_{t+1}|i_{t+1}=q_i, \lambda)P(i_{t+1}=q_i|\lambda,i_t=q_j) \\ = \sum_{j=1}^N\alpha_t(j)a_{ji}b_i(o_{t+1}) αt+1(i)=P(o1,o2,...,ot,ot+1,it+1=qi∣λ)=j=1∑NP(o1,o2,...,ot,ot+1,it=qj,it+1=qi∣λ)=j=1∑NP(o1,o2,...,ot,it=qj∣λ)P(ot+1,it+1=qi∣λ,o1,o2,...,ot,it=qj)=j=1∑NP(o1,o2,...,ot,it=qj∣λ)P(ot+1∣it+1=qi,λ)P(it+1=qi∣λ,it=qj)=j=1∑Nαt(j)ajibi(ot+1) - 终止
P ( O ∣ λ ) = P ( o 1 , o 2 , . . . , o T ∣ λ ) = ∑ i = 1 N P ( o 1 , o 2 , . . . , o T , i t = q i ∣ λ ) = ∑ i = 1 N α T ( i ) P(O|\lambda)=P(o_1,o_2,...,o_T|\lambda)=\sum_{i=1}^NP(o_1,o_2,...,o_T,i_t=q_i|\lambda)=\sum_{i=1}^N\alpha_T(i) P(O∣λ)=P(o1,o2,...,oT∣λ)=i=1∑NP(o1,o2,...,oT,it=qi∣λ)=i=1∑NαT(i)
2.3 后向算法
后向概率: 给定隐马尔可夫模型
λ
\lambda
λ,定义在时刻
t
t
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∣λ)
后向算法:
输 入 : 隐 马 尔 可 夫 模 型 λ , 观 测 序 列 O 输入:隐马尔可夫模型\lambda,观测序列O 输入:隐马尔可夫模型λ,观测序列O
输 出 : 观 测 序 列 概 率 P ( O ∣ λ ) 输出:观测序列概率P(O|\lambda) 输出:观测序列概率P(O∣λ)
- 初值
β T ( i ) = 1 \beta_T(i)=1 βT(i)=1 - 递推,对
t
=
T
−
1
,
T
−
2
,
.
.
.
,
1
t=T-1,T-2,...,1
t=T−1,T−2,...,1
β = ∑ j = 1 N a i j b j ( o t + 1 ) β t + 1 ( j ) \beta=\sum_{j=1}^Na_{ij}b_j(o_{t+1})\beta_{t+1}(j) β=j=1∑Naijbj(ot+1)βt+1(j) - 终止
P ( O ∣ λ ) = ∑ i = 1 N π i b i ( o 1 ) β 1 ( i ) P(O|\lambda)=\sum_{i=1}^N\pi_ib_i(o_1)\beta_1(i) P(O∣λ)=i=1∑Nπibi(o1)β1(i)
3. 学习算法
3.1 监督学习方法
假设已给训练数据包含 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)},那么可以利用极大似然估计法来估计隐马尔可夫模型的参数。
-
转移概率 a i j a_{ij} aij的估计
设样本中时刻 t t t处于状态 i i i时刻 t + 1 t+1 t+1转移到状态 j j j的频数为 A i j A_{ij} Aij,那么状态转移概率 a i j a_{ij} aij的估计是
a ^ i j = A i j ∑ j = 1 N A i j \hat a_{ij}=\frac {A_{ij}} {\sum_{j=1}^NA_{ij}} a^ij=∑j=1NAijAij -
观测概率 b j ( k ) b_j(k) bj(k)的估计
设样本中状态为 j j j并观测为 k k k的频数为 B j k B_{jk} Bjk,那么状态为 j j j观测为 k k k的概率 b j ( k ) b_j(k) bj(k)的估计是:
b ^ j ( k ) = B j k ∑ k = 1 M B j k \hat b_j(k)=\frac {B_{jk}}{\sum_{k=1}^MB_{jk}} b^j(k)=∑k=1MBjkBjk -
初始状态概率 π i \pi_i πi的估计 π ^ i \hat \pi_i π^i为 S S S个样本中初始状态为 q i q_i qi的频率
3.2 Baum-Welch算法
假设给定训练数据只包含 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,π)的参数。
这事实上是一个含有隐变量的概率模型
P
(
O
∣
λ
)
=
∑
I
P
(
O
∣
I
,
λ
)
P
(
I
∣
λ
)
P(O|\lambda)=\sum_{I}P(O|I,\lambda)P(I|\lambda)
P(O∣λ)=I∑P(O∣I,λ)P(I∣λ)
它的参数学习可以由
E
M
EM
EM算法实现
-
确定完全数据的对数似然函数
所有观测数据写成 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∣λ)
-
E M EM EM算法的 E E E步:求 Q Q Q函数 Q ( λ , λ ˉ ) Q(\lambda, \bar \lambda) Q(λ,λˉ)
Q ( λ , λ ˉ ) = ∑ I l o g P ( O , I ∣ λ ) P ( I ∣ O , λ ˉ ) = ∑ I l o g P ( O , I ∣ λ ) P ( O , I ∣ λ ˉ ) P ( O ∣ λ ˉ ) = ∑ I l o g P ( O , I ∣ λ ) P ( O , I ∣ λ ˉ ) Q(\lambda, \bar \lambda)=\sum_{I}logP(O,I|\lambda)P(I|O,\bar \lambda)\\=\sum_IlogP(O,I|\lambda)\frac {P(O,I|\bar \lambda)}{P(O|\bar \lambda)} \\ =\sum_IlogP(O,I|\lambda)P(O,I|\bar \lambda) Q(λ,λˉ)=I∑logP(O,I∣λ)P(I∣O,λˉ)=I∑logP(O,I∣λ)P(O∣λˉ)P(O,I∣λˉ)=I∑logP(O,I∣λ)P(O,I∣λˉ)
其中, λ ˉ \bar \lambda λˉ是隐马尔可夫模型参数的当前估计值, λ \lambda λ是要极大化的隐马尔可夫模型参数。
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)...a_{i_{T-1}i_T}b_{i_T}(o_T) P(O,I∣λ)=πi1bi1(o1)ai1i2bi2(o2)...aiT−1iTbiT(oT)
于是 Q Q 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, \bar \lambda)=\sum_Ilog\pi_{i_1}P(O,I|\bar \lambda)+\sum_I(\sum_{t=1}^{T-1}loga_{i_ti_{t+1}})P(O,I|\bar \lambda)+\sum_I(\sum_{t=1}^Tlogb_{i_t}(o_t))P(O,I|\bar \lambda) Q(λ,λˉ)=I∑logπi1P(O,I∣λˉ)+I∑(t=1∑T−1logaitit+1)P(O,I∣λˉ)+I∑(t=1∑Tlogbit(ot))P(O,I∣λˉ) -
E M EM EM算法的 M M M步:极大化 Q Q Q函数,求模型参数 A , B , π A,B,\pi A,B,π
由于要极大化的参数在 Q Q Q函数中单独地出现在3个项中,所以只需对各项分别极大化。-
Q
Q
Q函数第1项可写成:
∑ I l o g π i 1 P ( O , I ∣ λ ˉ ) = ∑ i = 1 N l o g π i P ( O , i 1 = i ∣ λ ˉ ) \sum_Ilog\pi_{i_1}P(O,I|\bar \lambda)=\sum_{i=1}^Nlog\pi_iP(O,i_1=i|\bar \lambda) I∑logπi1P(O,I∣λˉ)=i=1∑NlogπiP(O,i1=i∣λˉ)
注意到 π i \pi_i πi满足约束条件 ∑ i = 1 N π i = 1 \sum_{i=1}^N\pi_i=1 ∑i=1Nπi=1,利用拉格朗日乘子法,写出拉格朗日函数:
∑ i = 1 N l o g π i P ( O , i 1 = i ∣ λ ˉ ) + γ ( ∑ i + 1 N π i − 1 ) \sum_{i=1}^Nlog\pi_iP(O,i_1=i|\bar \lambda)+\gamma(\sum_{i+1}^N\pi_i-1) i=1∑NlogπiP(O,i1=i∣λˉ)+γ(i+1∑Nπi−1)
对其求偏导并令结果为0
∂ ∂ π i [ ∑ i = 1 N l o g π i P ( O , i 1 = i ∣ λ ˉ ) + γ ( ∑ i + 1 N π i − 1 ) ] = 0 \frac {\partial} {\partial \pi_i}[\sum_{i=1}^Nlog\pi_iP(O,i_1=i|\bar \lambda)+\gamma(\sum_{i+1}^N\pi_i-1)]=0 ∂πi∂[i=1∑NlogπiP(O,i1=i∣λˉ)+γ(i+1∑Nπi−1)]=0
得:
P ( O , i 1 = i ∣ λ ˉ ) + γ π i = 0 P(O,i_1=i|\bar \lambda)+\gamma\pi_i=0 P(O,i1=i∣λˉ)+γπi=0
对 i i i求和得到 γ \gamma γ
γ = − P ( O ∣ λ ˉ ) \gamma=-P(O|\bar \lambda) γ=−P(O∣λˉ)
所以:
π i = P ( O , i 1 = i ∣ λ ˉ ) P ( O ∣ λ ˉ ) \pi_i=\frac {P(O,i_1=i|\bar \lambda)} {P(O|\bar \lambda)} πi=P(O∣λˉ)P(O,i1=i∣λˉ) -
Q
Q
Q函数第2项可写成:
∑ 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(\sum_{t=1}^{T-1}loga_{i_ti_{t+1}})P(O,I|\bar \lambda)=\sum_{i=1}^N\sum_{j=1}^N\sum_{t=1}^{T-1}loga_{ij}P(O,i_t=i,i_{t+1}=j|\bar \lambda) I∑(t=1∑T−1logaitit+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}^Na_{ij}=1 ∑j=1Naij=1,利用拉格朗日乘子法,写出拉格朗日函数:
∑ 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 ∣ λ ˉ ) + γ ( ∑ j = 1 N a i j − 1 ) \sum_{i=1}^N\sum_{j=1}^N\sum_{t=1}^{T-1}loga_{ij}P(O,i_t=i,i_{t+1}=j|\bar \lambda)+\gamma(\sum_{j=1}^Na_{ij}-1) i=1∑Nj=1∑Nt=1∑T−1logaijP(O,it=i,it+1=j∣λˉ)+γ(j=1∑Naij−1)
对其求偏导并令结果为0
∂ ∂ a i j [ ∑ 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 ∣ λ ˉ ) + γ ( ∑ j = 1 N a i j − 1 ) ] = 0 \frac {\partial} {\partial a_{ij}}[\sum_{i=1}^N\sum_{j=1}^N\sum_{t=1}^{T-1}loga_{ij}P(O,i_t=i,i_{t+1}=j|\bar \lambda)+\gamma(\sum_{j=1}^Na_{ij}-1)]=0 ∂aij∂[i=1∑Nj=1∑Nt=1∑T−1logaijP(O,it=i,it+1=j∣λˉ)+γ(j=1∑Naij−1)]=0
得:
∑ t = 1 T − 1 P ( O , i t = i , i t + 1 = j ∣ λ ˉ ) + γ a i j = 0 \sum_{t=1}^{T-1}P(O,i_t=i,i_{t+1}=j|\bar \lambda)+\gamma a_{ij}=0 t=1∑T−1P(O,it=i,it+1=j∣λˉ)+γaij=0
对 j j j求和得到 γ \gamma γ
γ = − ∑ t = 1 T − 1 P ( O , i t = i ∣ λ ˉ ) \gamma=-\sum_{t=1}^{T-1}P(O,i_t=i|\bar \lambda) γ=−t=1∑T−1P(O,it=i∣λˉ)
所以:
a i j = ∑ t = 1 T − 1 P ( O , i t = i , i t + 1 = j ∣ λ ˉ ) ∑ t = 1 T − 1 P ( O , i t = i ∣ λ ˉ ) a_{ij}=\frac {\sum_{t=1}^{T-1}P(O,i_t=i,i_{t+1}=j|\bar \lambda)} {\sum_{t=1}^{T-1}P(O,i_t=i|\bar \lambda)} aij=∑t=1T−1P(O,it=i∣λˉ)∑t=1T−1P(O,it=i,it+1=j∣λˉ) -
Q
Q
Q函数第3项可写成:
∑ 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(\sum_{t=1}^Tlogb_{i_t}(o_t))P(O,I|\bar \lambda)=\sum_{j=1}^N\sum_{t=1}^Tlogb_j(o_t)P(O,i_t=j|\bar \lambda) I∑(t=1∑Tlogbit(ot))P(O,I∣λˉ)=j=1∑Nt=1∑Tlogbj(ot)P(O,it=j∣λˉ)
同样使用拉格朗日乘子法,约束条件为 ∑ k = 1 M b j ( k ) = 1 \sum_{k=1}^Mb_j(k)=1 ∑k=1Mbj(k)=1,拉格朗日函数如下:(注意,只有在 o t = v k o_t=v_k ot=vk时, b j ( o t ) b_j(o_t) bj(ot)对 b j ( k ) b_j(k) bj(k)得偏导才不为0)
∑ 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 ) \sum_{j=1}^N\sum_{t=1}^Tlogb_j(o_t)P(O,i_t=j|\bar \lambda)+\gamma (\sum_{k=1}^Mb_j(k)-1) j=1∑Nt=1∑Tlogbj(ot)P(O,it=j∣λˉ)+γ(k=1∑Mbj(k)−1)
对其求偏导并令结果为0
∂ ∂ b j ( k ) [ ∑ 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 ) ] = 0 \frac {\partial} {\partial b_j(k)}[\sum_{j=1}^N\sum_{t=1}^Tlogb_j(o_t)P(O,i_t=j|\bar \lambda)+\gamma (\sum_{k=1}^Mb_j(k)-1)]=0 ∂bj(k)∂[j=1∑Nt=1∑Tlogbj(ot)P(O,it=j∣λˉ)+γ(k=1∑Mbj(k)−1)]=0
得:
∑ t = 1 T P ( O , i t = j ∣ λ ˉ ) I ( o t = v k ) + γ b j ( k ) = 0 \sum_{t=1}^TP(O,i_t=j|\bar \lambda)I(o_t=v_k)+\gamma b_j(k)=0 t=1∑TP(O,it=j∣λˉ)I(ot=vk)+γbj(k)=0
对 k k k求和得到 γ \gamma γ
γ = − ∑ t = 1 T P ( O , i t = j ∣ λ ˉ ) \gamma = -\sum_{t=1}^TP(O,i_t=j|\bar \lambda) γ=−t=1∑TP(O,it=j∣λˉ)
所以:
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}^TP(O,i_t=j|\bar \lambda)I(o_t=v_k)} {\sum_{t=1}^TP(O,i_t=j|\bar \lambda)} bj(k)=∑t=1TP(O,it=j∣λˉ)∑t=1TP(O,it=j∣λˉ)I(ot=vk)
-
Q
Q
Q函数第1项可写成:
4. 预测算法
4.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
)
=
P
(
i
t
=
q
i
∣
λ
,
O
)
=
P
(
i
t
=
q
i
,
O
∣
λ
)
P
(
O
∣
λ
)
=
P
(
o
1
,
o
2
,
.
.
.
,
o
t
,
i
t
=
q
i
,
o
t
+
1
,
.
.
.
,
o
T
∣
λ
)
P
(
O
∣
λ
)
=
P
(
o
1
,
o
2
,
.
.
.
,
o
t
,
i
t
=
q
i
∣
λ
)
P
(
o
t
+
1
,
.
.
.
,
o
T
∣
λ
,
o
1
,
o
2
,
.
.
.
,
o
t
,
i
t
=
q
i
)
P
(
O
∣
λ
)
=
P
(
o
1
,
o
2
,
.
.
.
,
o
t
,
i
t
=
q
i
∣
λ
)
P
(
o
t
+
1
,
.
.
.
,
o
T
∣
λ
,
i
t
=
q
i
)
P
(
O
∣
λ
)
\gamma_t(i)=P(i_t=q_i|\lambda,O)=\frac {P(i_t=q_i,O|\lambda)} {P(O|\lambda)} = \frac {P(o_1,o_2,...,o_t,i_t=q_i,o_{t+1},...,o_T|\lambda)} {P(O|\lambda)} \\ = \frac {P(o_1,o_2,...,o_t,i_t=q_i|\lambda)P(o_{t+1},...,o_T|\lambda,o_1,o_2,...,o_t,i_t=q_i)}{P(O|\lambda)} \\ = \frac {P(o_1,o_2,...,o_t,i_t=q_i|\lambda)P(o_{t+1},...,o_T|\lambda,i_t=q_i)} {P(O|\lambda)}
γt(i)=P(it=qi∣λ,O)=P(O∣λ)P(it=qi,O∣λ)=P(O∣λ)P(o1,o2,...,ot,it=qi,ot+1,...,oT∣λ)=P(O∣λ)P(o1,o2,...,ot,it=qi∣λ)P(ot+1,...,oT∣λ,o1,o2,...,ot,it=qi)=P(O∣λ)P(o1,o2,...,ot,it=qi∣λ)P(ot+1,...,oT∣λ,it=qi)
由前向概率和后向概率得定义可知
γ
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
∗
=
a
r
g
max
1
≤
i
≤
N
[
γ
t
(
i
)
]
i_t^*=arg\max_{1 \leq i \leq N}[\gamma_t(i)]
it∗=arg1≤i≤Nmax[γt(i)]
从而得到状态序列
I
∗
=
(
i
1
∗
,
i
2
∗
,
.
.
.
,
i
T
∗
)
I^*=(i_1^*,i_2^*,...,i_T^*)
I∗=(i1∗,i2∗,...,iT∗)
近似算法有点是计算简单,其缺点是不能保证预测的状态序列整体是最有可能的状态序列,因为预测的状态序列可能由实际不发生的部分,即上述方法得到的状态序列中可能存在转移概率为0的相邻状态
4.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∗的所有可能的部分路径来说,必须是最优的。因为假如不是这样,那么从 i t ∗ i_t^* it∗到 i T ∗ i_T^* iT∗就有另一条更好的部分路径存在,如果把它和从 i 1 ∗ i_1^* i1∗到 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 1 ∗ i_{T-1}^*,...,i_1^* iT−1∗,...,i1∗,得到最优路径 I ∗ = ( i 1 ∗ , i 2 ∗ , . . . , i T ∗ ) I^*=(i_1^*,i_2^*,...,i_T^*) I∗=(i1∗,i2∗,...,iT∗)。
首先导入两个变量
δ
和
ψ
\delta 和 \psi
δ和ψ。
定义在时刻
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
,
.
.
.
,
i
1
,
o
t
,
.
.
.
,
o
1
∣
λ
)
\delta_t(i)=\max_{i_1,i_2,...,i_{t-1}}P(i_t=i,i_{t-1},...,i_1,o_t,...,o_1|\lambda)
δt(i)=i1,i2,...,it−1maxP(it=i,it−1,...,i1,ot,...,o1∣λ)
由定义可得到变量
δ
\delta
δ的递推公式
δ
t
+
1
(
i
)
=
max
i
1
,
i
2
,
.
.
.
,
i
t
P
(
i
t
+
1
=
i
,
i
t
,
.
.
.
,
i
1
,
o
t
+
1
,
.
.
.
,
o
1
∣
λ
)
=
max
1
≤
j
≤
N
[
δ
t
(
j
)
a
j
i
]
b
i
(
o
t
+
1
)
\delta_{t+1}(i)=\max_{i_1,i_2,...,i_t}P(i_{t+1}=i,i_t,...,i_1,o_{t+1},...,o_1|\lambda)=\max_{1 \leq j \leq N}[\delta_t(j)a_{ji}]b_i(o_{t+1})
δt+1(i)=i1,i2,...,itmaxP(it+1=i,it,...,i1,ot+1,...,o1∣λ)=1≤j≤Nmax[δt(j)aji]bi(ot+1)
定义在时刻
t
t
t状态为
i
i
i的所有单个路径
(
i
1
,
i
2
,
.
.
,
i
t
−
1
,
i
t
)
(i_1,i_2,..,i_{t-1},i_t)
(i1,i2,..,it−1,it)中概率最大的路径的第
t
−
1
t-1
t−1个节点为
ψ
t
(
i
)
=
a
r
g
max
1
≤
j
≤
N
[
δ
t
−
1
(
j
)
a
j
i
]
\psi_t(i)=arg\max_{1 \leq j \leq N}[\delta_{t-1}(j)a_{ji}]
ψt(i)=arg1≤j≤Nmax[δt−1(j)aji]
维特比算法:
输 入 : 模 型 λ = ( A , B , π ) 和 观 测 O = ( o 1 , o 2 , . . . , o T ) 输入:模型 \lambda=(A,B,\pi) 和观测O=(o_1,o_2,...,o_T) 输入:模型λ=(A,B,π)和观测O=(o1,o2,...,oT)
输 出 : 最 优 路 径 I ∗ = ( i 1 ∗ , i 2 ∗ , . . . , i T ∗ ) 输出:最优路径I^*=(i_1^*,i_2^*,...,i_T^*) 输出:最优路径I∗=(i1∗,i2∗,...,iT∗)
-
初始化
δ 1 ( i ) = π i b i ( o 1 ) , i = 1 , 2 , . . . N ψ 1 ( i ) = 0 , i = 1 , 2 , . . . , N \delta_1(i)=\pi_ib_i(o_1), \quad i=1,2,...N \\ \psi_1(i)=0, \quad i=1,2,...,N δ1(i)=πibi(o1),i=1,2,...Nψ1(i)=0,i=1,2,...,N -
递推。对 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 ψ t ( i ) = a r g max 1 ≤ j ≤ N [ δ t − 1 a j i ] , i = 1 , 2 , . . . , N \delta_t(i)=\max_{1 \leq j \leq N}[\delta_{t-1}(j)a_{ji}]b_i(o_t), \quad i=1,2,...,N \\ \psi_t(i)=arg\max_{1 \leq j \leq N}[\delta_{t-1}a_{ji}], \quad i=1,2,...,N δt(i)=1≤j≤Nmax[δt−1(j)aji]bi(ot),i=1,2,...,Nψt(i)=arg1≤j≤Nmax[δt−1aji],i=1,2,...,N -
终止
P ∗ = max 1 ≤ i ≤ N δ T ( i ) i T ∗ = a r g max 1 ≤ i ≤ N [ δ T ( i ) ] P^*=\max_{1 \leq i \leq N}\delta_T(i) \\ i_T^*=arg\max_{1 \leq i \leq N}[\delta_T(i)] P∗=1≤i≤NmaxδT(i)iT∗=arg1≤i≤Nmax[δT(i)] -
最优路径回溯。对 t = T − 1 , . . . , 1 t=T-1,...,1 t=T−1,...,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∗)