HMM 隐马尔可夫模型
总结(来源-李航-统计学习方法和学校课件)
HMM是Markov Chain模型
HMM是结构最简单的动态贝叶斯网(dynamic Bayesian network),这是著名的有向图模型,可用于标注问题的统计学习模型
定义
HMM 是关于时序的概率模型,描述有一个隐藏的马尔科夫链生成不可观测的状态随机序列,再由各个状态生成一个观测而产生观测随机序列的过程。
HMM随机生成的状态序列 state sequence
每个状态生成一个观测,所有观测组成——观测序列 oberservation sequence。
λ=(A,B,π)分别为概率转移矩阵,观测概率矩阵和初始状态概率矩阵
π Anfangszustandwahrscheinlichkeiten
A Übergangswahrscheinlichkeiten
例子
给了状态转移矩阵,那么未来七天是。。。的概率是多少?
今天已经是sonnig
P(O|Modell)=P(S3)P(S3|S3)P(S3|S3)P(S1|S3)P(S1|S1)P(S3|S1)P(S2|S3)P(S3|S2)=10.80.80.10.40.30.10.2
(行是当前状态,列对应下一状态)
两个基本假设
- Beschränkter Horizont (观测独立性假设)
当前时刻的概率依赖于过去的时刻 - zeitinvarianz(时不变)
转移概率矩阵与当前时刻无关
例题
观测O={红,红,白,白,红}
状态Q={盒子1,盒子2,盒子3,盒子4}
状态转移概率A=[ 0 1 0 0; 0.4 0 0.6 0; 0 0.4 0 0.6; 0 0 0.5 0.5]
观测概率B=[0.5 0.5; 0.3 0.7; 0.6 0.4; 0.8 0.2]
初始概率分布π=[0.25 0.25 0.25 0.25]
观测序列生成算法
已知:λ=(A,B,π),观测长度T
求观测O
1. 根据π求出状态1-i1
2. t=1
3. 根据it和B求Ot
4. 根据Ot求it+1
5. t=t+1, t<T?goto 3 : end
3个基本问题
- 概率计算问题(Evaluationsproblem)
给定模型λ和观测O,计算P(O|λ) - 预测问题(Dekodierungsproblem)
已知模型λ和观测O,求出最可能的序列Q - 学习问题(Lern- und Optimierungsproblem)
已知观测O,求出模型λ
理解例子:单词识别
Problem 3:为了识别每一个单词训练最优HMM模型
Problem 2:理解构建的模型,为了更有意义的改进(也可以用于识别单词)
Problem 1:通过最好的模型识别未知的单词
Problem 1
- 直接计算法(Naiver Ansatz)
其中,
和
先求固定序列Q,再求观测序列O
算法耗时O(2T*N^T) - 改进算法
向前算法和向后算法(vorwärts-Algorithm)
例子
算法vorwärts-Algorithm
一. Initialisierung
a 1 ( i ) = π S i b S i ( o 1 ) , ∀ i ∈ 1 , . . . N a_{1}(i)=\pi_{Si}b_{Si}(o1), \forall i \in\ 1,...N a1(i)=πSibSi(o1),∀i∈ 1,...N
二. Induktion(递推)
a t + 1 ( j ) = [ ∑ i = 1 n a t ( i ) a i j ] b j ( o t + 1 ) , 1 ≤ t ≤ T − 1 a_{t+1}(j)=[\sum_{i=1}^n a_{t}(i)a_{ij}]b_{j}(o_{t+1}), 1\le t\le T-1 at+1(j)=[i=1∑nat(i)aij]bj(ot+1),1≤t≤T−1
三. Terminierung
P ( O ∣ λ ) = ∑ i = 1 n a T ( i ) P(O|\lambda)=\sum_{i=1}^n a_{T}(i) P(O∣λ)=i=1∑naT(i)
Aufwand: O ( N 2 T ) O(N^{2}T) O(N2T)
算法(rückwärts-Algorithm)
一. Initialisierung
β t ( i ) = 1 , \beta_{t}(i)=1, βt(i)=1,
二. Induktion
对于t=T-1,t=T-2,…,1
β t ( i ) = ∑ j = 1 n a i j b j ( o t + 1 ) β t + 1 ( j ) , 1 ≤ t ≤ T − 1 , ∀ i ∈ { 1 , . . . , N } \beta_{t}(i)=\sum_{j=1}^n a_{ij}b_{j}(o_{t+1})\beta_{t+1}(j), 1\le t\le T-1, \forall i \in \{1,...,N\} βt(i)=j=1∑naijbj(ot+1)βt+1(j),1≤t≤T−1,∀i∈{1,...,N}
三. Terminierung
P ( O ∣ λ ) = ∑ j = 1 N π j b j ( o 1 ) β 1 ( j ) P(O|\lambda)=\sum_{j=1}^N \pi_{j} b_{j}(o1)\beta_{1}(j) P(O∣λ)=∑j=1Nπjbj(o1)β1(j)
Problem 2 Decodisierungsproblem
- 近似算法(Optimalitätskriterium)
P ( O ∣ λ ) = ∑ j = 1 N a t ( j ) β t ( j ) P(O|\lambda)=\sum_{j=1}^N a_{t}(j) \beta_{t}(j) P(O∣λ)=j=1∑Nat(j)βt(j)
Wahrscheinlichkeit γ t ( i ) = P ( q t = S i ∣ O , λ ) = P ( q t = S i , O ∣ λ P ( O ∣ λ ) = a t ( i ) β t ( i ) ∑ j = 1 N a t ( j ) b t ( j ) \gamma_{t}(i)=P(q_{t}=S_{i}|O,\lambda)=\frac{P(q_{t}=S_{i},O|\lambda}{P(O|\lambda)}= \frac{a_t(i) \beta_t(i)}{\sum_{j=1}^N a_t(j)b_t(j)} γt(i)=P(qt=Si∣O,λ)=P(O∣λ)P(qt=Si,O∣λ=∑j=1Nat(j)bt(j)at(i)βt(i)
最有可能的解
q t = a r g max 1 ≤ i ≤ N γ t ( i ) , 1 ≤ t ≤ T − 1 q_t=arg\max_{1\le i\le N}\gamma_t(i), 1\le t\le T-1 qt=arg1≤i≤Nmaxγt(i),1≤t≤T−1
Problem:
Bei nicht vollständig vernetztem HMM ergibt dies unter Umständen keinen gültigen Pfad
z.B. wenn bestes q t = S i u n d q t + 1 = S j a b e r a i j = 0 q_t=S_i \space und \space q_{t+1}=S_j \space aber \space a_{ij}=0 qt=Si und qt+1=Sj aber aij=0
优点是计算简单,缺点就是上述的问题,有可能求出的最优序列不存在 - Viterbi-Algorithm(维特比算法)
Viterbi-Algorithm实际上使用dynamic programming求概率最大路径(最优路径)。这时路径上对应一个状态序列。局部最优组成整体最优
算法
一. Initialisierung
v 1 ( i ) = π S i b S i ( O 1 ) , ∀ i ∈ { 1 , . . . , N } v_1(i)=\pi_{S_i}b_{S_i}(O_1),\forall i \in \{1,...,N\} v1(i)=πSibSi(O1),∀i∈{1,...,N}
二. Berechnung für alle S j ∈ S , ∀ j ∈ { 1 , . . . N } u n d 2 ≤ t ≤ T − 1 , S_j\in S,\forall j \in \{1,...N\} \space und \space 2\le t\le T-1, Sj∈S,∀j∈{1,...N} und 2≤t≤T−1,
v t ( S j ) = b j ( o t ) max 1 ≤ i ≤ N [ v t − 1 ( S i ) a i j , ψ t ( j ) = a r g max 1 ≤ j ≤ N [ v t ( S j ) a i j v_t(S_j)=b_j(o_t)\max_{1\le i\le N}[v_{t-1}(S_i)a_{ij},\psi_t(j)=arg\max_{1\le j\le N}[v_t(S_j)a_{ij} vt(Sj)=bj(ot)1≤i≤Nmax[vt−1(Si)aij,ψt(j)=arg1≤j≤Nmax[vt(Sj)aij
三. Bestimmung des Maximums der Gütewerte
v ∗ = max 1 ≤ j ≤ N [ v t ( S j ) ] v^*=\max_{1\le j\le N}[v_t(S_j)] v∗=1≤j≤Nmax[vt(Sj)]
四. Endnotes der besten Pfaden
q t ∗ = a r g max 1 ≤ j ≤ N [ v t ( S j ) ] q_t^*=arg\max_{1\le j\le N}[v_t(S_j)] qt∗=arg1≤j≤Nmax[vt(Sj)]
五. Bestimmung der Vitebi-Pfads rückwarts
q t ∗ = ψ t + 1 ( q t + 1 ∗ ) q_t^*=\psi_{t+1}(q_{t+1}^*) qt∗=ψt+1(qt+1∗)
他与vorwärts-Algorithm的区别就是用Maximierung代替Summierung,这里也正好回答了最后一个习题问题
(试用viterbi algorithm求一下最佳路径)
Problem 3 Lern- und Optimisierungsproblem
三个问题中最不好解决的,用Baum-Welch-Algorithm只能得到lokale Maximierung
Baum-Welch-Algorithm 也是EM(Expectation-Maximum-Algorithm)
算法
一. Beginne, mit zufälligem Modell λ, berechne
P
(
O
t
r
a
i
n
i
n
g
∣
λ
)
P(O_{training}|\lambda)
P(Otraining∣λ)
二. Schleife: (进入EM算法吧)
三. E_Schritt: Bestimme die erwartete Anzahl von Zustandsübergängen (aus und zwischen Zuständen) und Symbolausgaben (求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_I log \pi_{i_1}P(O,I|\bar{\lambda})+\sum_I (\sum_{t=1}^{T-1}log a_{i_t i_{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∣λˉ)
四. M_Schritt: Neuschätzung der Übergangs- und Emissionswahrscheinlichkeiten-> Berechnung einer neue Modells
五. Wenn (lokales) Maximum erreicht ist
六. Break
定义一个Zustandsübergangs von Si zum Sj
ξ
(
i
,
j
)
=
P
(
q
t
=
S
i
,
q
t
+
1
=
S
j
∣
O
,
λ
)
=
a
t
(
i
)
a
i
j
b
j
(
o
t
+
1
)
β
t
+
1
(
j
)
P
(
O
∣
λ
)
=
a
t
(
i
)
a
i
j
b
j
(
o
t
+
1
)
β
t
+
1
(
j
)
∑
i
=
1
N
∑
j
=
1
N
a
t
(
j
)
a
i
j
b
j
(
o
t
+
1
β
t
+
1
(
j
)
\xi(i,j)=P(q_t=S_i,q_{t+1}=S_j|O,\lambda)=\frac{a_t(i)a_{ij}b_j(o_{t+1})\beta_{t+1}(j)}{P(O|\lambda)}=\frac{a_t(i)a_{ij}b_j(o_{t+1})\beta_{t+1}(j)}{\sum_{i=1}^N\sum_{j=1}^Na_t(j)a_{ij}b_j(o_{t+1}\beta_{t+1}(j)}
ξ(i,j)=P(qt=Si,qt+1=Sj∣O,λ)=P(O∣λ)at(i)aijbj(ot+1)βt+1(j)=∑i=1N∑j=1Nat(j)aijbj(ot+1βt+1(j)at(i)aijbj(ot+1)βt+1(j)
Wahscheinlichkeit
γ
t
(
i
)
=
∑
j
=
1
N
ξ
t
(
i
,
j
)
\gamma_t(i)=\sum_{j=1}^N\xi_t(i,j)
γt(i)=j=1∑Nξt(i,j)
公式就可以简化成
a
i
j
=
∑
t
=
1
T
−
1
ξ
t
(
i
,
j
)
∑
t
=
1
T
−
1
γ
t
(
i
)
a_{ij}=\frac{\sum_{t=1}^{T-1}\xi_t(i,j)}{\sum_{t=1}^{T-1}\gamma_t(i)}
aij=∑t=1T−1γt(i)∑t=1T−1ξt(i,j)
b
j
(
k
)
=
∑
t
=
1
,
o
t
=
v
k
T
γ
t
(
i
)
∑
t
=
1
T
γ
t
(
i
)
b_{j}(k)=\frac{\sum_{t=1,o_t=v_k}^{T}\gamma_t(i)}{\sum_{t=1}^{T}\gamma_t(i)}
bj(k)=∑t=1Tγt(i)∑t=1,ot=vkTγt(i)
π
=
γ
1
(
i
)
\pi=\gamma_1(i)
π=γ1(i)
所以Baum-Welch算法
一. 初始化 n=0,选取a0,b0,pai0
二. 递推. 对n=1,2
算出n+1的各个式子,按照n时的模型计算
三. 终止,所以这个是次数终止