HMM是生成模型,根据HMM,可以计算 P ( O , I ) P(O,I) P(O,I)的联合概率,其中 O O O是观测序列, I I I是隐藏序列。HMM中三个典型问题:1.概率计算问题 2.模型参数估计问题 3.预测问题
首先,隐马尔科夫模型里有两条假设:
-
假设一:
隐藏的马尔科夫链在任意时刻 t t t的状态只依赖前一时刻的状态 -
假设二:
任意时刻的观测只依赖于该时刻的隐状态
由此,引出隐马尔科夫模型的三个重要参数: π , A , B \pi , A,B π,A,B
-
π \pi π是初始状态概率向量, π i = P ( i 1 = q i ) \pi_i = P(i_1 = q_i) πi=P(i1=qi)是t=1时刻,隐状态为 q i q_i qi的概率。
-
A A A是状态转移概率矩阵,假设状态数是 N N N,那么 A A A是 N × N N×N N×N的矩阵,其中 a i j = P ( i t = q j ∣ i t − 1 = q i ) a_{ij} = P(i_t = q_j | i_{t-1}=q_i) aij=P(it=qj∣it−1=qi)表示时刻t-1的状态为 q i q_i qi的条件下,时刻t的状态为 q j q_j qj的概率。
-
B B B是观测概率矩阵,假设观测数是 M M M,那么 B B B是 N × M N×M 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为状态 q j q_j qj的条件下,生成观测 v k v_k vk的概率。
隐马尔科夫模型由初始概率矩阵 π \pi π、状态转移概率矩阵 A A A和观测概率矩阵 B B B决定。 π \pi π和 A A A决定状态序列, B B B决定观测序列。 π , A , B \pi, A, B π,A,B称为隐马尔科夫模型的三要素。
隐马尔科夫模型的三个基本问题
-
概率计算问题。给定模型参数 λ = ( π , A , B ) \lambda=(\pi,A,B) λ=(π,A,B)和观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT),计算 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=(\pi,A,B) λ=(π,A,B)使得在该模型参数下, P ( O ∣ λ ) P(O| \lambda ) P(O∣λ)最大
-
预测问题。给定模型参数 λ = ( π , A , B ) \lambda=(\pi,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)
问题1:概率计算问题
用前向算法或者后向算法求解。
- 前向算法
定义前向概率, α 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) αti=P(o1,o2,...,ot,it=qi)。可以通过递推法求解观测序列概率 P ( O ∣ λ ) P(O| \lambda) P(O∣λ)。
观测序列概率计算的前向算法步骤如下:
输入:隐马尔科夫模型 λ \lambda λ,观测序列 O O O
输出:观测序列概率 P ( O ∣ λ ) P(O| \lambda) P(O∣λ)
step1: 初始化前向概率
α 1 i = π i b i ( o 1 ) \alpha_1^i = \pi_i b_i(o_1) α1i=πibi(o1), i=1,2,…,N
step2:递推求解各个时刻的 α t i \alpha_t^i αti
α t i = ∑ j = 1 j = N α t − 1 j a j i b i ( o t ) \alpha_t^i = \sum_{j=1}^{j=N}\alpha_{t-1}^j a_{ji}b_i(o_t) αti=∑j=1j=Nαt−1jajibi(ot), t = 2 , 3 , . . . , T i = 1 , 2 , . . . , N t = 2,3,...,T \qquad i=1,2,...,N t=2,3,...,Ti=1,2,...,N
step3:求得目标观测序列概率 P ( O ∣ λ ) P(O| \lambda) P(O∣λ)
P ( O ∣ λ ) = ∑ i α T i P(O| \lambda) = \sum _i \alpha_T^i P(O∣λ)=∑iαTi
在step2递推过程中,可以理解为, t t t时刻的状态 i i i可以由前面时刻任意状态转换而来。
- 后向算法
定义后向概率, β 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) βti=P(ot+1,ot+2,...,oT∣it=qi)。可以通过递推法求解观测序列概率 P ( O ∣ λ ) P(O| \lambda) P(O∣λ)。
观测序列概率计算的后向算法步骤如下:
输入:隐马尔科夫模型 λ \lambda λ,观测序列 O O O
输出:观测序列概率 P ( O ∣ λ ) P(O| \lambda) P(O∣λ)
step1:初始化后向概率
β T i = 1 , i = 1 , 2 , . . . , N \beta_T^i = 1, i=1,2,...,N βTi=1,i=1,2,...,N
step2:递推求解各个时刻的 β t i \beta_t^i βti
β t i = ∑ j β t + 1 j a i j b j ( o t + 1 ) \beta_t^i = \sum_j\beta_{t+1}^ja_{ij}b_j(o_{t+1}) βti=∑jβt+1jaijbj(ot+1), t = T − 1 , T − 2 , . . . , 1 i = 1 , 2 , . . . , N t = T-1,T-2,...,1 \qquad i=1,2,...,N t=T−1,T−2,...,1i=1,2,...,N
step3:求得目标观测序列概率 P ( O ∣ λ ) P(O| \lambda) P(O∣λ)
P ( O ∣ λ ) = ∑ j π j β 1 j b j ( o 1 ) P(O| \lambda) = \sum_j\pi_j\beta_1^jb_j(o_1) P(O∣λ)=∑jπjβ1jbj(o1)
条件概率意味着给定某某,求其他的概率。当反向递推时,只要意识到给定状态 i i i,可以由它转移到任意概率 j j j即可。
- 前向-后向结合
在前向算法中,前向概率 α 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) αti=P(o1,o2,...,ot,it=qi)
在后向算法中,后向概率 β 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) βti=P(ot+1,ot+2,...,oT∣it=qi)
P ( O ∣ λ ) = ∑ i = 1 N ∑ j = 1 N α t i a i j β t + 1 j b j ( o t + 1 ) P(O|\lambda) =\sum_{i=1}^N \sum_{j=1}^N \alpha_t^ia_{ij}\beta_{t+1}^jb_j(o_{t+1}) P(O∣λ)=∑i=1N∑j=1Nαtiaijβt+1jbj(ot+1)
我们先讲解问题三:预测问题
给定模型参数
λ
=
(
π
,
A
,
B
)
\lambda=(\pi,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)。
用维特比算法求解。
维特比算法是用动态规划思想来求解隐马尔科夫模型预测问题的。我们需要求解使得
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),那么从初始时刻到任意时刻,其对应的状态序列和观测序列的联合概率必须是最大的。
简单来说,我们想找到从A到B的最长路径,途径C。如果A到B的最长路径是
l
l
l,那么
l
A
C
l_{AC}
lAC一定是从A到C最长的路径,否则我们可以用更长的
l
A
C
l_{AC}
lAC来代替,那么此时和
l
l
l是最长路径矛盾了。因此我们知道对于部分路径,它必须是最长的。根据这一原理,我们可以递推地求解。
定义:
γ
t
i
=
max
P
(
i
1
,
i
2
,
.
.
.
,
i
t
=
q
i
,
o
1
,
o
2
,
.
.
.
,
o
t
)
\gamma_t^i = \max P(i_1,i_2,...,i_t=q_i,o_1,o_2,...,o_t)
γti=maxP(i1,i2,...,it=qi,o1,o2,...,ot)
可以递推
γ
t
+
1
i
=
max
1
≤
j
≤
N
γ
t
j
a
j
i
b
i
(
o
t
+
1
)
\gamma_{t+1}^i =\max \limits_{1 \leq j \leq N} \gamma_t^ja_{ji}b_i(o_{t+1})
γt+1i=1≤j≤Nmaxγtjajibi(ot+1)
定义
t
t
t时刻状态为
i
i
i单个路径概率最大的前一个节点是
p
a
t
h
t
i
=
arg
max
1
≤
j
≤
N
γ
t
−
1
j
a
j
i
path_t^i = \arg\max \limits_{1 \leq j \leq N} \gamma_{t-1}^ja_{ji}
pathti=arg1≤j≤Nmaxγt−1jaji
维特比算法具体步骤:
输入:隐马尔科夫模型
λ
\lambda
λ,观测序列
O
O
O
输出:最优路径
I
∗
I^*
I∗
step1:初始化
γ
1
i
=
π
i
b
i
(
o
1
)
\gamma_1^i = \pi_ib_i(o_1)
γ1i=πibi(o1),
i
=
1
,
2
,
.
.
.
,
N
i=1,2,...,N
i=1,2,...,N
p
a
t
h
1
i
=
0
path_1^i = 0
path1i=0,
i
=
1
,
2
,
.
.
.
,
N
i=1,2,...,N
i=1,2,...,N
step2:递推
γ
t
i
=
max
1
≤
j
≤
N
γ
t
−
1
j
a
j
i
b
i
(
o
t
)
\gamma_{t}^i = \max \limits_{1 \leq j \leq N} \gamma_{t-1}^ja_{ji}b_i(o_{t})
γti=1≤j≤Nmaxγt−1jajibi(ot),
i
=
1
,
2
,
.
.
.
,
N
i=1,2,...,N
i=1,2,...,N
p
a
t
h
t
i
=
arg
max
1
≤
j
≤
N
γ
t
−
1
j
a
j
i
path_t^i = \arg\max \limits_{1 \leq j \leq N} \gamma_{t-1}^ja_{ji}
pathti=arg1≤j≤Nmaxγt−1jaji
step3:
P
∗
=
max
i
γ
T
i
P* = \max \limits_{i} \gamma_T^i
P∗=imaxγTi
i
T
∗
=
arg
max
i
γ
T
i
i_T^* = \arg \max \limits_i \gamma_T^i
iT∗=argimaxγTi
step4:最优路径回溯:
t
=
T
−
1
,
T
−
2
,
.
.
.
,
1
t=T-1,T-2,...,1
t=T−1,T−2,...,1
i
t
∗
=
p
a
t
h
t
+
1
i
t
+
1
∗
i_t^* = path_{t+1}^{i_{t+1}^*}
it∗=patht+1it+1∗
问题2:学习算法
已知观测序列
O
=
(
o
1
,
o
2
,
.
.
.
,
o
T
)
O=(o_1,o_2,...,o_T)
O=(o1,o2,...,oT),求解模型参数
λ
=
(
π
,
A
,
B
)
\lambda=(\pi,A,B)
λ=(π,A,B)使得在该模型参数下,
P
(
O
∣
λ
)
P(O| \lambda )
P(O∣λ)最大
-
监督学习算法
-
非监督学习算法----Baum-Welch算法(EM算法)
第一步:确定完全数据的对数似然函数
第二步:E步,写出Q函数
我们写出Q函数之后后面就要对它进行极大化,也就是说EM算法的M步骤。既然是最大化,那么只要保证不影响最终的结果,对Q函数进行对于最大化来说没有影响的常数因子乘除是可以的。为什么要这么做呢?这是为了后面将概率计算问题中有意义的一些概率计算公式直接套进去。
step3:M步,极大化Q函数