HWW算法
1. 马尔科夫模型
一个马尔科夫过程是状态间的转移仅依赖于前
N
\mathcal{N}
N个状态的过程。这个过程被称之为
N
\mathcal{N}
N阶马尔科夫模型,其中
N
\mathcal{N}
N是影响下一个状态选择的状态数量。最简单的马尔科夫过程是一阶模型,它的状态选择仅与前一个状态有关。这里要注意它与确定性系统并不相同,因为下一个状态的选择由相应的概率决定,并不是确定性的。
定义一个一阶马尔科夫过程如下:
- 状态:三个状态——晴天,多云,雨天。
- Π \varPi Π 向量:定义系统初始化时每一个状态的概率。
- 状态转移矩阵:给定前一天天气情况下的当前天气概率。
2. 隐马尔科夫模型
包含了一个底层隐藏的随时间改变的马尔科夫过程,以及一个与隐藏状态某种程度相关的可观察到的状态集合。
我们使用一个隐马尔科夫模型(HMM)对这些例子建模。这个模型包含两组状态集合和三组概率集合:
- 隐藏状态:一个系统的(真实)状态,可以由一个马尔科夫过程进行描述(例如,天气)
- Π \varPi Π 向量:包含了(隐)模型在时间t=1时一个特殊的隐藏状态的概率(初始概率)
- 状态转移矩阵:包含了一个隐藏状态到另一个隐藏状态的概率
- 观察状态:在这个过程中‘可视’的状态(例如,海藻的湿度)
- 混淆矩阵:包含了给定隐马尔科夫模型的某一个特殊的隐藏状态,观察到的某个观察状态的概率
公式化:
一个隐马尔科夫模型是一个三元组(pi, A, B):
- Π = ( π i ) \varPi = ( \pi_i ) Π=(πi) :初始化概率向量
- A = ( a i j ) A = ( a_{ij} ) A=(aij) : 状态转移矩阵 P r ( x i t ∣ x j t − 1 ) Pr\ (x_{i_t} | x_{j_{t-1}}) Pr (xit∣xjt−1)
- B = ( b i j ) B = ( b_{ij} ) B=(bij) : 混淆矩阵 P r ( y i ∣ x j ) Pr\ (y_i | x_j) Pr (yi∣xj)
2.1. 需要解决的问题:
- (评估): 给定HMM,求一个观察序列的概率。—— 前向算法
- (解码): 给定HMM,搜索最有可能生成一个观察序列的隐藏状态序列。—— Viterbi 算法
- (学习): 给定观察序列,生成一个HMM。—— Baum-Welch算法
2.2. 前向算法:
已知HMM的参数和观察到的状态序列为
O
O
O ,求产生该状态序列的概率:设
α
t
(
j
)
\alpha_t(j)
αt(j) 表示
t
t
t 时刻隐藏状态为
j
j
j 的概率,
β
t
(
k
)
\beta_t(k)
βt(k) 表示
t
t
t 时刻观察状态为
j
j
j 的概率。
α
t
(
j
)
=
P
(
o
1
,
.
.
.
,
o
t
,
S
t
=
j
∣
λ
)
\alpha_{t}(j) = P(o_1,...,o_t, S_t=j | \lambda )
αt(j)=P(o1,...,ot,St=j∣λ)
α t ( j ) = { ∑ i = 1 n α t − 1 ( i ) a j i , t > 1 π j , t = 1 \alpha_{t}(j) = \begin{cases} \sum_{i=1}^n \alpha_{t-1}(i)a_{ji}, t > 1 \\ \pi_j, t = 1\\ \end{cases} αt(j)={∑i=1nαt−1(i)aji,t>1πj,t=1
β t ( k ) = ∑ i = 1 n α t ( i ) b k i \beta_{t}(k) = \sum_{i=1}^n \alpha_{t}(i)b_{ki} βt(k)=i=1∑nαt(i)bki
2.3. Viterbi 算法:
已知HMM的参数和观察到的状态序列为
O
O
O,求最可能产生该状态序列的隐藏序列
S
S
S,即要找到这样的隐藏序列,使得下面的后验概率最大:
P
(
S
∣
O
)
=
P
(
S
)
P
(
O
∣
S
)
P
(
O
)
=
π
s
1
b
o
1
s
1
∏
t
=
2
T
a
s
t
s
t
−
1
b
o
t
s
t
\begin{aligned} P(S|O) &= \frac{P(S)P(O|S)}{P(O)}\\ &=\pi_{s_1}b_{o_1s_1}\prod_{t=2}^Ta_{s_ts_{t-1}}b_{o_ts_t} \end{aligned}
P(S∣O)=P(O)P(S)P(O∣S)=πs1bo1s1t=2∏Tastst−1botst
设
α
t
(
j
)
\alpha_t(j)
αt(j) 表示
t
t
t 时刻隐藏状态为
j
j
j 时,从某个隐藏状态序列产生观察序列
O
O
O 的最大概率:
α
t
(
j
)
=
{
m
a
x
i
(
α
t
−
1
(
i
)
a
j
i
b
o
t
j
)
,
t
>
1
π
j
b
o
t
j
,
t
=
1
\alpha_{t}(j) = \begin{cases} \underset{i}{max}(\ \alpha_{t-1}(i)a_{ji}b_{o_tj}\ ), t > 1 \\ \pi_jb_{o_tj}, t = 1\\ \end{cases}
αt(j)={imax( αt−1(i)ajibotj ),t>1πjbotj,t=1
不断迭代,算出所有的
α
t
(
j
)
\alpha_t(j)
αt(j) ,同时记录每个
α
t
(
j
)
\alpha_t(j)
αt(j) 对应的上一个时刻的隐藏状态。算到最后一个时刻时,取最大的
α
T
(
j
)
\alpha_T(j)
αT(j) 并回溯得到隐藏序列。
2.4. Baum-Welch算法:
对于给定的观测序列
O
O
O ,如何估计模型参数使得
P
(
O
∣
λ
)
P(O|\lambda)
P(O∣λ) 最大。对于该问题,目前还没有能找到全局最优解的方法,但是Baum-Welch算法能找到局部最优。
前向概率:
α
t
(
j
)
=
P
(
o
1
,
.
.
.
,
o
t
,
s
t
=
j
∣
λ
)
\alpha_{t}(j) = P(o_1,...,o_t, s_t=j | \lambda )
αt(j)=P(o1,...,ot,st=j∣λ)
后向概率:
β
t
(
j
)
=
P
(
o
t
+
1
,
.
.
.
,
o
T
∣
s
t
=
j
,
λ
)
\beta_{t}(j) = P(o_{t+1},...,o_T | s_t=j, \lambda )
βt(j)=P(ot+1,...,oT∣st=j,λ)
则:
P
(
O
,
s
t
=
j
∣
λ
)
=
P
(
o
1
,
.
.
.
,
o
t
,
o
t
+
1
,
.
.
.
,
o
T
,
s
t
=
j
∣
λ
)
=
P
(
o
1
,
.
.
.
,
o
t
,
s
t
=
j
∣
λ
)
P
(
o
t
+
1
,
.
.
.
,
o
T
∣
o
1
,
.
.
.
,
o
t
,
s
t
=
j
,
λ
)
=
P
(
o
1
,
.
.
.
,
o
t
,
s
t
=
j
∣
λ
)
P
(
o
t
+
1
,
.
.
.
,
o
T
∣
s
t
=
j
,
λ
)
=
α
t
(
j
)
β
t
(
j
)
\begin{aligned} P(O,s_t=j|\lambda) &= P(o_1,...,o_t,o_{t+1},...,o_T, s_t=j | \lambda) \\ &= P(o_1,...,o_t,s_t=j|\lambda)P(o_{t+1},...,o_T|o_1,...,o_t,s_t=j,\lambda) \\ &= P(o_1,...,o_t,s_t=j|\lambda)P(o_{t+1},...,o_T|s_t=j,\lambda) \\ &=\alpha_{t}(j)\beta_{t}(j) \end{aligned}
P(O,st=j∣λ)=P(o1,...,ot,ot+1,...,oT,st=j∣λ)=P(o1,...,ot,st=j∣λ)P(ot+1,...,oT∣o1,...,ot,st=j,λ)=P(o1,...,ot,st=j∣λ)P(ot+1,...,oT∣st=j,λ)=αt(j)βt(j)
要使如下概率最大
P
(
O
∣
λ
)
=
∑
S
P
(
O
,
S
∣
λ
)
P
(
S
∣
λ
)
P(O|\lambda) = \sum_{S}P(O, S|\lambda)P(S|\lambda)
P(O∣λ)=S∑P(O,S∣λ)P(S∣λ)
-
EM算法E步:
Q ( λ , λ ^ ) = ∑ S l o g P ( O , S ∣ λ ) P ( O , S ∣ λ ^ ) Q(\lambda, \hat{\lambda}) = \sum_{S}logP(O, S|\lambda)P(O, S|\hat{\lambda}) Q(λ,λ^)=S∑logP(O,S∣λ)P(O,S∣λ^)
其中, λ ^ \hat{\lambda} λ^ 是隐马尔可夫模型参数的当前估计值, λ \lambda λ 是要极大化的隐马尔可夫模型参数。
由于 P ( O , S ∣ λ ) = π s 1 b o 1 s 1 ∏ t = 2 T a s t s t − 1 b o t s t P(O, S|\lambda) = \pi_{s_1}b_{o_1s_1}\prod_{t=2}^Ta_{s_ts_{t-1}}b_{o_ts_t} P(O,S∣λ)=πs1bo1s1∏t=2Tastst−1botst,则 Q ( λ ∣ λ ^ ) Q(\lambda|\hat{\lambda}) Q(λ∣λ^) 可展开为:
Q ( λ , λ ^ ) = ∑ S l o g π s 1 P ( O , S ∣ λ ^ ) + ∑ S ( ∑ t = 2 T l o g a s t s t − 1 ) P ( O , S ∣ λ ^ ) + ∑ S ( ∑ t = 1 T l o g b o t s t ) P ( O , S ∣ λ ^ ) \begin{aligned} Q(\lambda, \hat{\lambda}) &= \sum_{S}log\pi_{s_1}P(O, S|\hat{\lambda}) \\ &\quad + \sum_{S}(\sum_{t=2}^Tlog a_{s_ts_{t-1}} )P(O, S|\hat{\lambda}) \\ &\quad + \sum_{S}(\sum_{t=1}^Tlog b_{o_ts_t} )P(O, S|\hat{\lambda}) \end{aligned} Q(λ,λ^)=S∑logπs1P(O,S∣λ^)+S∑(t=2∑Tlogastst−1)P(O,S∣λ^)+S∑(t=1∑Tlogbotst)P(O,S∣λ^) -
EM算法M步:
利用拉格朗日和偏导可得:
π j = P ( O , s 1 = j ∣ λ ^ ) P ( O ∣ λ ^ ) \pi_j = \frac{P(O,s_1=j|\hat{\lambda})}{P(O|\hat{\lambda})} πj=P(O∣λ^)P(O,s1=j∣λ^)
a i j = ∑ t = 2 T P ( O , s t = i , s t − 1 = j ∣ λ ^ ) ∑ t = 2 T P ( O , s t − 1 = j ∣ λ ^ ) a_{ij} = \frac{\sum_{t=2}^TP(O, s_t=i, s_{t-1}=j|\hat{\lambda})}{\sum_{t=2}^T P(O, s_{t-1}=j |\hat{\lambda})} aij=∑t=2TP(O,st−1=j∣λ^)∑t=2TP(O,st=i,st−1=j∣λ^)
b k j = ∑ t = 1 T P ( O , s t = j ∣ λ ^ ) I ( o t = k ) ∑ t = 1 T P ( O , s t = j ∣ λ ^ ) b_{kj} = \frac{\sum_{t=1}^TP(O, s_t=j|\hat{\lambda}) I(o_t=k)}{\sum_{t=1}^T P(O, s_t=j |\hat{\lambda})} bkj=∑t=1TP(O,st=j∣λ^)∑t=1TP(O,st=j∣λ^)I(ot=k)