1. 前向概率和后向概率的定义
-
前向概率 α t ( i ) \alpha_t(i) αt(i):
表示从初始状态 q 0 q_0 q0 出发,经过 t t t 步达到状态 q i q_i qi,并且生成观测序列 O 1 , O 2 , … , O t O_1, O_2, \dots, O_t O1,O2,…,Ot 的概率。
α t ( i ) = P ( O 1 , O 2 , … , O t , q t = i ∣ λ ) \alpha_t(i) = P(O_1, O_2, \dots, O_t, q_t = i | \lambda) αt(i)=P(O1,O2,…,Ot,qt=i∣λ) -
后向概率 β t ( i ) \beta_t(i) βt(i):
表示从状态 q i q_i qi 出发,经过 t + 1 t+1 t+1 到最终状态 q F q_F qF,生成剩余观测序列 O t + 1 , O t + 2 , … , O T O_{t+1}, O_{t+2}, \dots, O_T Ot+1,Ot+2,…,OT 的概率。
β t ( i ) = P ( O t + 1 , O t + 2 , … , O T ∣ q t = i , λ ) \beta_t(i) = P(O_{t+1}, O_{t+2}, \dots, O_T | q_t = i, \lambda) βt(i)=P(Ot+1,Ot+2,…,OT∣qt=i,λ)
核心区别:
- 前向概率关注从初始到当前时刻的路径。
- 后向概率关注从当前时刻到序列末尾的路径。
2. 为什么 α T ( q F ) \alpha_T(q_F) αT(qF) 和 β 1 ( 0 ) \beta_1(0) β1(0) 都可以计算 P ( O ∣ λ ) P(O|\lambda) P(O∣λ)?
- P ( O ∣ λ ) P(O|\lambda) P(O∣λ) 是观察序列 O O O 在给定模型 λ \lambda λ 下生成的总概率。
- 两种计算方式:
- 利用 前向概率:
从初始状态 q 0 q_0 q0 出发,生成完整序列 O 1 , O 2 , … , O T O_1, O_2, \dots, O_T O1,O2,…,OT,并达到某个终点 q F q_F qF。
P ( O ∣ λ ) = ∑ i = 1 N α T ( i ) P(O|\lambda) = \sum_{i=1}^N \alpha_T(i) P(O∣λ)=i=1∑NαT(i)
α t ( j ) = ∑ i = 1 N α t − 1 ( i ) a i j b j ( O t ) \alpha_t(j) = \sum_{i=1}^N \alpha_{t-1}(i) a_{ij} b_j(O_t) αt(j)=i=1∑Nαt−1(i)aijbj(Ot) - 利用 后向概率:
假设初始状态是 q 0 q_0 q0,生成完整序列 O 1 , O 2 , … , O T O_1, O_2, \dots, O_T O1,O2,…,OT。
P ( O ∣ λ ) = ∑ i = 1 N π i b i ( O 1 ) β 1 ( i ) P(O|\lambda) = \sum_{i=1}^N \pi_i b_i(O_1) \beta_1(i) P(O∣λ)=i=1∑Nπibi(O1)β1(i)
- 利用 前向概率:
两者的本质是相同的,只是前向概率计算是“累积到终点”,而后向概率是“从终点倒推”。
3. 前向概率和后向概率为何不同?
-
开始和结束的时间点不同:
- 前向概率从时间 t = 1 t=1 t=1 开始计算。
- 后向概率从时间 t = T t=T t=T 开始倒推。
-
计算方向不同:
- 前向概率是从初始状态开始,依次考虑每一步路径。
- 后向概率是从终点开始,倒推每一步的贡献。
-
公式差异:
- 前向概率的递归公式:
α t + 1 ( j ) = ∑ i = 1 N α t ( i ) a i j b j ( O t + 1 ) \alpha_{t+1}(j) = \sum_{i=1}^N \alpha_t(i) a_{ij} b_j(O_{t+1}) αt+1(j)=i=1∑Nαt(i)aijbj(Ot+1) - 后向概率的递归公式:
β t ( i ) = ∑ j = 1 N a i j b j ( O t + 1 ) β t + 1 ( j ) \beta_t(i) = \sum_{j=1}^N a_{ij} b_j(O_{t+1}) \beta_{t+1}(j) βt(i)=j=1∑Naijbj(Ot+1)βt+1(j)
区别:前向概率在计算时依赖上一时刻的状态概率 α t ( i ) \alpha_t(i) αt(i),后向概率则依赖下一时刻的状态概率 β t + 1 ( j ) \beta_{t+1}(j) βt+1(j)。
- 前向概率的递归公式:
解释公式中的 α T ( q F ) \alpha_T(q_F) αT(qF) 和 β 1 ( 0 ) \beta_1(0) β1(0)
-
前向概率 α T ( q F ) \alpha_T(q_F) αT(qF):
表示从初始状态 q 0 q_0 q0 出发,生成完整序列 O 1 , O 2 , … , O T O_1, O_2, \dots, O_T O1,O2,…,OT 并达到终点状态 q F q_F qF 的概率。 -
后向概率 β 1 ( 0 ) \beta_1(0) β1(0):
表示从初始状态 q 0 q_0 q0 出发,生成完整序列 O 1 , O 2 , … , O T O_1, O_2, \dots, O_T O1,O2,…,OT 的概率。
总结:两者的意义是相同的,都是计算 P ( O ∣ λ ) P(O|\lambda) P(O∣λ),但在实际操作中,通常会结合前向概率和后向概率的递归公式,避免单纯使用一种算法计算整个序列的概率。
问题背景
我们有一个简单的隐马尔可夫模型(HMM):
- 隐藏状态: q 1 , q 2 q_1, q_2 q1,q2(2 个状态)。
- 观测序列: O = { o 1 , o 2 , o 3 } O = \{o_1, o_2, o_3\} O={o1,o2,o3},长度为 3。
- 模型参数:
- 初始概率: π = [ π 1 = 0.6 , π 2 = 0.4 ] \pi = [\pi_1=0.6, \pi_2=0.4] π=[π1=0.6,π2=0.4]。
- 转移矩阵:
A = [ a 11 = 0.7 a 12 = 0.3 a 21 = 0.4 a 22 = 0.6 ] A = \begin{bmatrix} a_{11}=0.7 & a_{12}=0.3 \\ a_{21}=0.4 & a_{22}=0.6 \end{bmatrix} A=[a11=0.7a21=0.4a12=0.3a22=0.6] - 发射概率矩阵:
B = [ b 1 ( o 1 ) = 0.5 b 1 ( o 2 ) = 0.4 b 1 ( o 3 ) = 0.1 b 2 ( o 1 ) = 0.1 b 2 ( o 2 ) = 0.3 b 2 ( o 3 ) = 0.6 ] B = \begin{bmatrix} b_1(o_1)=0.5 & b_1(o_2)=0.4 & b_1(o_3)=0.1 \\ b_2(o_1)=0.1 & b_2(o_2)=0.3 & b_2(o_3)=0.6 \end{bmatrix} B=[b1(o1)=0.5b2(o1)=0.1b1(o2)=0.4b2(o2)=0.3b1(o3)=0.1b2(o3)=0.6]
现在,我们通过后向算法计算 β t ( i ) \beta_t(i) βt(i)。
第一步:后向算法的公式
后向概率递推公式:
β
t
(
i
)
=
∑
j
=
1
N
a
i
j
b
j
(
O
t
+
1
)
β
t
+
1
(
j
)
\beta_t(i) = \sum_{j=1}^N a_{ij} b_j(O_{t+1}) \beta_{t+1}(j)
βt(i)=j=1∑Naijbj(Ot+1)βt+1(j)
- β t ( i ) \beta_t(i) βt(i):时刻 t t t 状态为 q i q_i qi 时,从 t + 1 t+1 t+1 到 T T T 生成剩余观测序列的概率。
- a i j a_{ij} aij:从状态 q i q_i qi 转移到 q j q_j qj 的概率。
- b j ( O t + 1 ) b_j(O_{t+1}) bj(Ot+1):状态 q j q_j qj 生成 t + 1 t+1 t+1 时刻观测值的概率。
- β t + 1 ( j ) \beta_{t+1}(j) βt+1(j):时刻 t + 1 t+1 t+1 的后向概率。
第二步:初始化(最后时刻 T = 3 T=3 T=3)
根据后向算法的初始条件:
β
3
(
i
)
=
1
∀
i
\beta_3(i) = 1 \quad \forall i
β3(i)=1∀i
即在最后一个时刻,每个状态的后向概率都是 1(因为没有剩余观测值)。
因此:
β
3
(
q
1
)
=
1
,
β
3
(
q
2
)
=
1
\beta_3(q_1) = 1, \quad \beta_3(q_2) = 1
β3(q1)=1,β3(q2)=1
第三步:递推(时刻 t = 2 t=2 t=2)
根据公式:
β
2
(
i
)
=
∑
j
=
1
2
a
i
j
b
j
(
O
3
)
β
3
(
j
)
\beta_2(i) = \sum_{j=1}^2 a_{ij} b_j(O_3) \beta_3(j)
β2(i)=j=1∑2aijbj(O3)β3(j)
- O 3 = o 3 O_3 = o_3 O3=o3 是观测序列的最后一个值。
- 发射概率: b 1 ( o 3 ) = 0.1 , b 2 ( o 3 ) = 0.6 b_1(o_3) = 0.1, \, b_2(o_3) = 0.6 b1(o3)=0.1,b2(o3)=0.6。
- β 3 ( j ) = 1 \beta_3(j) = 1 β3(j)=1(前一步初始化的结果)。
对于
q
1
q_1
q1:
β
2
(
q
1
)
=
a
11
⋅
b
1
(
o
3
)
⋅
β
3
(
q
1
)
+
a
12
⋅
b
2
(
o
3
)
⋅
β
3
(
q
2
)
\beta_2(q_1) = a_{11} \cdot b_1(o_3) \cdot \beta_3(q_1) + a_{12} \cdot b_2(o_3) \cdot \beta_3(q_2)
β2(q1)=a11⋅b1(o3)⋅β3(q1)+a12⋅b2(o3)⋅β3(q2)
β
2
(
q
1
)
=
0.7
⋅
0.1
⋅
1
+
0.3
⋅
0.6
⋅
1
=
0.07
+
0.18
=
0.25
\beta_2(q_1) = 0.7 \cdot 0.1 \cdot 1 + 0.3 \cdot 0.6 \cdot 1 = 0.07 + 0.18 = 0.25
β2(q1)=0.7⋅0.1⋅1+0.3⋅0.6⋅1=0.07+0.18=0.25
对于
q
2
q_2
q2:
β
2
(
q
2
)
=
a
21
⋅
b
1
(
o
3
)
⋅
β
3
(
q
1
)
+
a
22
⋅
b
2
(
o
3
)
⋅
β
3
(
q
2
)
\beta_2(q_2) = a_{21} \cdot b_1(o_3) \cdot \beta_3(q_1) + a_{22} \cdot b_2(o_3) \cdot \beta_3(q_2)
β2(q2)=a21⋅b1(o3)⋅β3(q1)+a22⋅b2(o3)⋅β3(q2)
β
2
(
q
2
)
=
0.4
⋅
0.1
⋅
1
+
0.6
⋅
0.6
⋅
1
=
0.04
+
0.36
=
0.40
\beta_2(q_2) = 0.4 \cdot 0.1 \cdot 1 + 0.6 \cdot 0.6 \cdot 1 = 0.04 + 0.36 = 0.40
β2(q2)=0.4⋅0.1⋅1+0.6⋅0.6⋅1=0.04+0.36=0.40
结果:
β
2
(
q
1
)
=
0.25
,
β
2
(
q
2
)
=
0.40
\beta_2(q_1) = 0.25, \quad \beta_2(q_2) = 0.40
β2(q1)=0.25,β2(q2)=0.40
第四步:递推(时刻 t = 1 t=1 t=1)
根据公式:
β
1
(
i
)
=
∑
j
=
1
2
a
i
j
b
j
(
O
2
)
β
2
(
j
)
\beta_1(i) = \sum_{j=1}^2 a_{ij} b_j(O_2) \beta_2(j)
β1(i)=j=1∑2aijbj(O2)β2(j)
- O 2 = o 2 O_2 = o_2 O2=o2 是第二个观测值。
- 发射概率: b 1 ( o 2 ) = 0.4 , b 2 ( o 2 ) = 0.3 b_1(o_2) = 0.4, \, b_2(o_2) = 0.3 b1(o2)=0.4,b2(o2)=0.3。
- β 2 ( q 1 ) = 0.25 , β 2 ( q 2 ) = 0.40 \beta_2(q_1) = 0.25, \, \beta_2(q_2) = 0.40 β2(q1)=0.25,β2(q2)=0.40(前一步计算结果)。
对于
q
1
q_1
q1:
β
1
(
q
1
)
=
a
11
⋅
b
1
(
o
2
)
⋅
β
2
(
q
1
)
+
a
12
⋅
b
2
(
o
2
)
⋅
β
2
(
q
2
)
\beta_1(q_1) = a_{11} \cdot b_1(o_2) \cdot \beta_2(q_1) + a_{12} \cdot b_2(o_2) \cdot \beta_2(q_2)
β1(q1)=a11⋅b1(o2)⋅β2(q1)+a12⋅b2(o2)⋅β2(q2)
β
1
(
q
1
)
=
0.7
⋅
0.4
⋅
0.25
+
0.3
⋅
0.3
⋅
0.40
\beta_1(q_1) = 0.7 \cdot 0.4 \cdot 0.25 + 0.3 \cdot 0.3 \cdot 0.40
β1(q1)=0.7⋅0.4⋅0.25+0.3⋅0.3⋅0.40
β
1
(
q
1
)
=
0.07
+
0.036
=
0.106
\beta_1(q_1) = 0.07 + 0.036 = 0.106
β1(q1)=0.07+0.036=0.106
对于
q
2
q_2
q2:
β
1
(
q
2
)
=
a
21
⋅
b
1
(
o
2
)
⋅
β
2
(
q
1
)
+
a
22
⋅
b
2
(
o
2
)
⋅
β
2
(
q
2
)
\beta_1(q_2) = a_{21} \cdot b_1(o_2) \cdot \beta_2(q_1) + a_{22} \cdot b_2(o_2) \cdot \beta_2(q_2)
β1(q2)=a21⋅b1(o2)⋅β2(q1)+a22⋅b2(o2)⋅β2(q2)
β
1
(
q
2
)
=
0.4
⋅
0.4
⋅
0.25
+
0.6
⋅
0.3
⋅
0.40
\beta_1(q_2) = 0.4 \cdot 0.4 \cdot 0.25 + 0.6 \cdot 0.3 \cdot 0.40
β1(q2)=0.4⋅0.4⋅0.25+0.6⋅0.3⋅0.40
β
1
(
q
2
)
=
0.04
+
0.072
=
0.112
\beta_1(q_2) = 0.04 + 0.072 = 0.112
β1(q2)=0.04+0.072=0.112
结果:
β
1
(
q
1
)
=
0.106
,
β
1
(
q
2
)
=
0.112
\beta_1(q_1) = 0.106, \quad \beta_1(q_2) = 0.112
β1(q1)=0.106,β1(q2)=0.112
第五步:验证 P ( O ∣ λ ) P(O|\lambda) P(O∣λ)
使用后向概率公式计算:
P
(
O
∣
λ
)
=
∑
i
=
1
2
π
i
b
i
(
O
1
)
β
1
(
i
)
P(O|\lambda) = \sum_{i=1}^2 \pi_i b_i(O_1) \beta_1(i)
P(O∣λ)=i=1∑2πibi(O1)β1(i)
- 初始概率: π 1 = 0.6 , π 2 = 0.4 \pi_1 = 0.6, \pi_2 = 0.4 π1=0.6,π2=0.4。
- 发射概率: b 1 ( o 1 ) = 0.5 , b 2 ( o 1 ) = 0.1 b_1(o_1) = 0.5, \, b_2(o_1) = 0.1 b1(o1)=0.5,b2(o1)=0.1。
- 后向概率: β 1 ( q 1 ) = 0.106 , β 1 ( q 2 ) = 0.112 \beta_1(q_1) = 0.106, \beta_1(q_2) = 0.112 β1(q1)=0.106,β1(q2)=0.112。
代入计算:
P
(
O
∣
λ
)
=
0.6
⋅
0.5
⋅
0.106
+
0.4
⋅
0.1
⋅
0.112
P(O|\lambda) = 0.6 \cdot 0.5 \cdot 0.106 + 0.4 \cdot 0.1 \cdot 0.112
P(O∣λ)=0.6⋅0.5⋅0.106+0.4⋅0.1⋅0.112
P
(
O
∣
λ
)
=
0.0318
+
0.00448
=
0.03628
P(O|\lambda) = 0.0318 + 0.00448 = 0.03628
P(O∣λ)=0.0318+0.00448=0.03628
1. 两种不同的后向算法初始化条件
(1) 常见的后向算法初始化条件
在通常的后向算法中,我们的初始化条件是:
β
T
(
i
)
=
1
∀
i
\beta_T(i) = 1 \quad \forall i
βT(i)=1∀i
这是因为在最后一个时刻
T
T
T,没有更多的观测值需要生成,后向概率设为 1 表示“从这里到序列结束”的概率为 1。
(2) 其他公式的初始化条件
公式:
β
T
(
i
)
=
a
i
,
F
,
1
≤
i
≤
N
\beta_T(i) = a_{i,F}, \quad 1 \leq i \leq N
βT(i)=ai,F,1≤i≤N
这表示,在最后时刻
T
T
T,每个状态的后向概率不仅仅是 1,而是还要考虑从当前状态
q
i
q_i
qi 到某个“终止状态”
q
F
q_F
qF 的转移概率
a
i
,
F
a_{i,F}
ai,F。这种设置适用于显式定义了“终止状态”的情况。
2. 为什么两种初始化条件会不同?
两种初始化条件的区别在于,是否需要显式考虑一个“终止状态” q F q_F qF:
-
常见初始化(设为 1):
不需要终止状态,即模型默认序列的末尾就是自然的结束点。这种情况下,最后一个时刻的后向概率 β T ( i ) \beta_T(i) βT(i) 直接初始化为 1,表示没有剩余的观测值。 -
带终止状态的初始化:
明确设置了一个“终止状态” q F q_F qF,并且最后时刻 T T T 的后向概率还需要包括从当前状态 q i q_i qi 到终止状态 q F q_F qF 的转移概率 a i , F a_{i,F} ai,F。
如果使用常见的后向算法初始化条件 β T ( i ) = 1 \beta_T(i) = 1 βT(i)=1 并且有两个状态 q 1 q_1 q1 和 q 2 q_2 q2,后向概率是否应该是 1 / 2 1/2 1/2 的问题可以通过以下详细分析来解答。
1. 初始化条件 β T ( i ) = 1 \beta_T(i) = 1 βT(i)=1 的含义
- β T ( i ) = 1 \beta_T(i) = 1 βT(i)=1 的含义是:在序列的最后一个时刻 T T T,无论当前状态是什么,生成剩余观测序列的概率都设为 1。
- 这种初始化方法的目的是简化后向算法的计算,因为最后一个时刻没有后续观测值需要生成。
注意:
在这种初始化条件下,后向概率没有直接考虑隐藏状态的分布是否需要归一化,因为后向算法本身会在整个递归过程中对所有状态的概率进行加权和归一化。因此,在最后时刻,直接设置 β T ( i ) = 1 \beta_T(i) = 1 βT(i)=1 是完全合理的,不需要进行额外的处理。
2. 为什么不是 1 / 2 1/2 1/2?
- 如果简单地将两个状态的后向概率设置为 β T ( q 1 ) = 1 / 2 \beta_T(q_1) = 1/2 βT(q1)=1/2 和 β T ( q 2 ) = 1 / 2 \beta_T(q_2) = 1/2 βT(q2)=1/2,会引入不必要的归一化操作。后向算法的本质是通过递归累加路径概率,而不是直接计算每个状态的均匀分布。
- 在后向算法中, β T ( i ) \beta_T(i) βT(i) 的初始值并不是一个概率分布,而是一个中间量,用于递归计算每个时刻的后向概率。
3. 后向概率是否需要归一化?
后向概率 β t ( i ) \beta_t(i) βt(i) 本身并不要求是归一化的概率分布。相反:
- 在使用 β t ( i ) \beta_t(i) βt(i) 时,它通常与其他中间变量(例如前向概率 α t ( i ) \alpha_t(i) αt(i))结合使用,从而计算整个观测序列的概率 P ( O ∣ λ ) P(O|\lambda) P(O∣λ) 或其他相关量。
- 因此,在后向算法的初始化过程中,不需要进行额外的归一化操作。
4. 总结
- 初始化条件 β T ( i ) = 1 \beta_T(i) = 1 βT(i)=1 的含义是“最后一个时刻没有剩余观测值需要生成,后向概率直接设置为 1”。
- 后向算法的初始化与状态数量无关,因此不需要将后向概率设置为 1 / 2 1/2 1/2 或其他均匀分布。
- 后向算法本质上是通过递归计算路径概率,而不是在最后一步进行归一化。