问答总结
-
直接计算法是如何通过公式导出的?
-
直接计算法复杂度为多少,为什么会有如此高的复杂度?
-
前向后向算法优化复杂度的本质是什么?
动态规划,防止多次计算重复子问题
-
前向算法状态定义是什么?目标态是什么? 状态转移图和方程是什么?初态是什么?
-
后向算法状态定义是什么? 目标态是什么? 状态转移图和方程是什么?初态是什么?
-
前向后向概率的管辖范围直观图是怎样的?
-
由管辖范围直观图直接得出重要的概率与期望值计算方式。
一、目标
前文说过:概率计算任务的目标是:
给定 λ = ( 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∣λ)
二、直接计算法
1、方法
直接对概率公式进行以下变形:
P
(
O
∣
λ
)
=
∑
I
P
(
O
,
I
∣
λ
)
=
∑
I
P
(
O
∣
I
,
λ
)
P
(
I
∣
λ
)
\begin{aligned} P(O | \lambda) &= \sum_{I}P(O,I|\lambda) \\ &= \sum_{I}P(O|I, \lambda)P(I|\lambda) \end{aligned}
P(O∣λ)=I∑P(O,I∣λ)=I∑P(O∣I,λ)P(I∣λ)
该公式含义是指:枚举每一种可能的不可观测序列
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)出现的概率,最后求和得到最终答案。
结合图,根据观测序列生成过程,我们很容易对公式进行展开。
∑
I
P
(
O
∣
I
,
λ
)
P
(
I
∣
λ
)
=
∑
i
1
,
i
2
,
.
.
,
i
T
π
i
1
b
i
1
(
o
1
)
a
i
1
i
2
.
.
.
a
T
−
1
T
b
i
T
(
o
T
)
\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}...a_{T-1T}b_{i_T}(o_T)
I∑P(O∣I,λ)P(I∣λ)=i1,i2,..,iT∑πi1bi1(o1)ai1i2...aT−1TbiT(oT)
2、复杂度
很明显,共有 N T N^T NT种情况,每种情况复杂度 O ( T ) O(T) O(T),因此该方法复杂度为 O ( T N T ) O(TN^T) O(TNT). 该方法复杂度太高。
二、前向算法
1、方法
仔细观察上方的式子,会发现,我们计算了大量抗余,比如,现在我们有两种可能的不可知状态序列: I 1 = ( 晴 天 , 雨 天 , 晴 天 , 雨天 ) , I 2 = ( 晴 天 , 雨 天 , 晴 天 , 晴天 ) I_1=(晴天,雨天,晴天,\textbf{雨天}), I_2=(晴天,雨天,晴天,\textbf{晴天}) I1=(晴天,雨天,晴天,雨天),I2=(晴天,雨天,晴天,晴天)
在这两种情况下,前三天的概率计算过程是完全一样的,但是根据直接计算方法,我们得完完整整计算两遍。
既然发现抗余,我们如何解决呢?动态规划!!!
对,本质来说,该问题具有大量重复子问题的特性,因此借鉴动态规划的思想,我们能否通过定义合适的状态来防止多次计算重复子问题? 这就是前向算法的思想本质。
来到求解动态规划问题的步骤:
-
(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|\lambda) αt(i)=P(o1,o2,...,ot,it=qi∣λ):为(1)给定马尔科夫模型 λ \lambda λ。(2)到时刻 t t t部分观测序列为 ( o 1 , o 2 , . . . , o t ) (o_1, o_2, ..., o_t) (o1,o2,...,ot)。(3)时刻 t t t的可观测状态为 q i q_i qi。的概率。(这其实就是动态规划中的dp数组)
-
(2) 目标状态: ∑ i = 1 N α T ( i ) \sum_{i=1}^N\alpha_T(i) ∑i=1NαT(i)
-
(3) 状态转移:
- 很明显,状态转移图可表示为:
- 因此状态转移方程为: α t + 1 ( i ) = [ ∑ i = 1 N α t ( j ) a j i ] b i ( o t + 1 ) \alpha_{t+1}(i)=[\sum_{i=1}^N\alpha_t(j)a_{ji}]b_{i}(o_{t+1}) αt+1(i)=[i=1∑Nαt(j)aji]bi(ot+1)
- 很明显,状态转移图可表示为:
-
(4) 初态: α 1 ( i ) = π i b i ( o 1 ) \alpha_1(i) = \pi_ib_i(o_1) α1(i)=πibi(o1)
2、复杂度
很明显,在每一个时间 t t t,我们需要花费 O ( N 2 ) O(N^2) O(N2)的时间求解新状态。故总的复杂度为 O ( T N 2 ) O(TN^2) O(TN2)
三、后向算法
1、方法
既然从前向后防止重复子问题计算可以优化复杂度,那么从后往前是否可以呢?
来看两种可能的不可知状态序列:
I
1
=
(
雨天
,
晴
天
,
雨
天
,
晴
天
)
,
I
2
=
(
晴天
,
晴
天
,
雨
天
,
晴
天
)
I_1=(\textbf{雨天},晴天,雨天,晴天), I_2=(\textbf{晴天},晴天,雨天,晴天)
I1=(雨天,晴天,雨天,晴天),I2=(晴天,晴天,雨天,晴天)
在两种情况下,后三天的计算过程是一样的。因此我们可以通过定义状态保存后三天的计算结果以简化计算。
来到动态规划方法的求解步骤:
- (1) 定义状态(也称后向概率): β 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,λ)为(1)给定马尔科夫模型 λ \lambda λ。(2)定义在时刻t状态为 q i q_i qi的条件下。(3)从 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)。的概率。
个人疑惑:
(1) 为什么后向概率将
q
i
q_i
qi定义在前提上?(毕竟前向概率是定义在结果上的)。
(2) 为什么
β
t
(
i
)
\beta_t(i)
βt(i)的观测序列是从
o
t
+
1
o_{t+1}
ot+1开始的?
个人思考:
这是为了与前向概率配合,其实如果不考虑和前向概率配合,直接将
i
t
+
1
=
q
i
i_{t+1}=q_{i}
it+1=qi定义在前提上也是可以的。(如何配合在后方会讲到)
-
(2) 目标状态: ∑ i = 1 N π i b i ( o 1 ) β 1 ( i ) \sum_{i=1}^N\pi_ib_i(o_1)\beta_1(i) ∑i=1Nπibi(o1)β1(i)
-
(3) 状态转移:
- 状态转移图:
- 状态转移方程:
β t ( i ) = ∑ j = 1 N a i j b j ( o t + 1 ) β t + 1 ( j ) = ∑ j = 1 N p ( i t + 1 = q j ∣ i t = q i ) p ( o t + 1 ∣ i t + 1 = q j , λ ) p ( o t + 2 , . . . , o T ∣ i t + 1 = q j , λ ) = ∑ j = 1 N p ( i t + 1 = q j ∣ i t = q i ) p ( o t + 1 , o t + 2 , . . . , o T ∣ i t + 1 = q j , λ ) 独 立 性 = p ( o t + 1 , o t + 2 , . . . , o T ∣ i t = q i , λ ) 全 概 率 公 式 = β t ( i ) \begin{aligned} \beta_t(i) &= \sum_{j=1}^Na_{ij}b_j(o_{t+1)}\beta_{t+1}(j) \\ &=\sum_{j=1}^Np(i_{t+1}=q_j|i_{t}=q_i)p(o_{t+1}|i_{t+1}=q_j,\lambda)p(o_{t+2}, ..., o_T|i_{t+1}=q_j, \lambda) \\ &= \sum_{j=1}^Np(i_{t+1}=q_j|i_{t}=q_i)p(o_{t+1},o_{t+2}, ..., o_T|i_{t+1}=q_j, \lambda) 独立性 \\ &= p(o_{t+1},o_{t+2}, ..., o_T|i_{t}=q_i, \lambda) 全概率公式 \\ &= \beta_t(i) \end{aligned} βt(i)=j=1∑Naijbj(ot+1)βt+1(j)=j=1∑Np(it+1=qj∣it=qi)p(ot+1∣it+1=qj,λ)p(ot+2,...,oT∣it+1=qj,λ)=j=1∑Np(it+1=qj∣it=qi)p(ot+1,ot+2,...,oT∣it+1=qj,λ)独立性=p(ot+1,ot+2,...,oT∣it=qi,λ)全概率公式=βt(i)
- 状态转移图:
-
(4) 初态: β T ( i ) = 1 \beta_T(i)=1 βT(i)=1.(当 t = T t=T t=T,只有条件,没有结论,意义为"在此条件下发生什么都行"的概率)。
2、复杂度
很明显,复杂度和前向算法一样,都为 O ( T N 2 ) O(TN^2) O(TN2)
四、概率与期望值的计算
1、管辖范围
首先使用图示明确前向概率和后向概率的管辖范围:前向概率
α
t
(
i
)
\alpha_t(i)
αt(i)(红色), 后向概率:
β
t
(
i
)
\beta_t(i)
βt(i)(绿色), 绿色箭头表示以
i
t
=
q
i
i_t=q_i
it=qi为前提:
2、计算
(1)、定义:给定模型
λ
\lambda
λ和观测
O
O
O, 在时刻
t
t
t处于状态
q
i
q_i
qi的概率。记:
γ
t
(
i
)
=
P
(
i
t
=
q
i
∣
O
,
λ
)
\gamma_t(i)=P(i_t=q_i|O, \lambda)
γt(i)=P(it=qi∣O,λ)
- γ t ( i ) = P ( i t = q i , O ∣ λ ) P ( O ∣ λ ) \gamma_t(i) = \frac{P(i_t=q_i, O|\lambda)}{P(O|\lambda)} γt(i)=P(O∣λ)P(it=qi,O∣λ)
- P ( i t = q i , O ∣ λ ) = α t ( i ) β t ( i ) P(i_t=q_i, O|\lambda) = \alpha_t(i)\beta_t(i) P(it=qi,O∣λ)=αt(i)βt(i)(根据上方图示很容易直观想象出)
- γ t ( i ) = α t ( i ) β t ( i ) ∑ j = 1 N α t ( j ) β t ( j ) \gamma_t(i) = \frac{\alpha_t(i)\beta_t(i)}{\sum_{j=1}^N\alpha_t(j)\beta_t(j)} γt(i)=∑j=1Nαt(j)βt(j)αt(i)βt(i)
(2)、定义: 给定模型
λ
\lambda
λ和观测
O
O
O, 在时刻
t
t
t处于状态
q
i
q_i
qi,在时刻
t
+
1
t+1
t+1处于状态
q
j
q_j
qj的概率。记:
ξ
t
(
i
,
j
)
=
P
(
i
t
=
q
i
,
i
t
+
1
=
q
j
∣
O
,
λ
)
\xi _t(i,j)=P(i_t=q_i,i_{t+1}=q_j|O, \lambda)
ξt(i,j)=P(it=qi,it+1=qj∣O,λ)
- ξ t ( i , j ) = P ( i t = q i , i t + 1 = q j , O ∣ λ ) P ( O ∣ λ ) \xi_t(i,j) = \frac{P(i_t=q_i,i_{t+1}=q_j,O|\lambda)}{P(O|\lambda)} ξt(i,j)=P(O∣λ)P(it=qi,it+1=qj,O∣λ)
- P ( i t = q i , i t + 1 = q j , O ∣ λ ) = α t ( i ) β t + 1 ( j ) b j ( o t + 1 ) a i j P(i_t=q_i, i_{t+1}=q_j,O|\lambda) = \alpha_t(i)\beta_{t+1}(j)b_j(o_{t+1})a_{ij} P(it=qi,it+1=qj,O∣λ)=αt(i)βt+1(j)bj(ot+1)aij(根据上方图示很容易直观想象出)
- ξ t ( i , j ) = α t ( i ) β t + 1 ( j ) b j ( o t + 1 ) a i j ∑ i = 1 N ∑ j = 1 N α t ( i ) β t + 1 ( j ) b j ( o t + 1 ) a i j \xi_t(i,j) = \frac{\alpha_t(i)\beta_{t+1}(j)b_j(o_{t+1})a_{ij}} {\sum_{i=1}^N\sum_{j=1}^N\alpha_t(i)\beta_{t+1}(j)b_j(o_{t+1})a_{ij}} ξt(i,j)=∑i=1N∑j=1Nαt(i)βt+1(j)bj(ot+1)aijαt(i)βt+1(j)bj(ot+1)aij
(3)、一些有用的期望值
- 在观测 O O O下状态 i i i出现的期望: ∑ t = 1 T γ t ( i ) \sum_{t=1}^T\gamma_t(i) t=1∑Tγt(i)
- 在观测 O O O下由状态 i i i转移的期望: ∑ t = 1 T − 1 γ t ( i ) \sum_{t=1}^{T-1}\gamma_t(i) t=1∑T−1γt(i)
- 在观测 O O O下由状态 i i i转移到状态 j j j的期望值: ∑ t = 1 T − 1 ξ t ( i , j ) \sum_{t=1}^{T-1}\xi_t(i,j) t=1∑T−1ξt(i,j)