#sdsc6007
English / 中文
Tutorial 1
问题设定
动态系统 : x k + 1 = x k + u k + w k x_{k+1} = x_k + u_k + w_k x k + 1 = x k + u k + w k , k = 0 , 1 , 2 , 3 k = 0,1,2,3 k = 0 , 1 , 2 , 3
初始状态 : x 0 = 5 x_0 = 5 x 0 = 5
成本函数 : ∑ k = 0 3 ( x k 2 + u k 2 ) \sum_{k=0}^{3}(x_k^2 + u_k^2) ∑ k = 0 3 ( x k 2 + u k 2 )
状态空间 : S k = { 0 , 1 , 2 , 3 , 4 , 5 } S_k = \{0,1,2,3,4,5\} S k = { 0 , 1 , 2 , 3 , 4 , 5 }
控制约束 : U k ( x k ) = { u ∣ 0 ≤ x k + u ≤ 5 , u ∈ Z } U_k(x_k) = \{u | 0 \leq x_k + u \leq 5, u \in \mathbb{Z}\} U k ( x k ) = { u ∣0 ≤ x k + u ≤ 5 , u ∈ Z }
随机干扰 :
如果 0 < x k + u k < 5 0 < x_k + u_k < 5 0 < x k + u k < 5 : w k = { − 1 概率 1 2 1 概率 1 2 w_k = \begin{cases} -1 & \text{概率} \frac{1}{2} \\ 1 & \text{概率} \frac{1}{2} \end{cases} w k = { − 1 1 概率 2 1 概率 2 1
如果 x k + u k = 0 x_k + u_k = 0 x k + u k = 0 或 x k + u k = 5 x_k + u_k = 5 x k + u k = 5 : w k = 0 w_k = 0 w k = 0 (概率1)
动态规划递推公式
定义价值函数 V k ( x k ) V_k(x_k) V k ( x k ) 为从状态 x k x_k x k 在时刻 k k k 开始的最小期望成本。
Bellman方程 :
V k ( x k ) = min u k ∈ U k ( x k ) { x k 2 + u k 2 + E [ V k + 1 ( x k + u k + w k ) ] } V_k(x_k) = \min_{u_k \in U_k(x_k)} \left\{ x_k^2 + u_k^2 + E[V_{k+1}(x_k + u_k + w_k)] \right\}
V k ( x k ) = u k ∈ U k ( x k ) min { x k 2 + u k 2 + E [ V k + 1 ( x k + u k + w k )] }
边界条件 : V 4 ( x 4 ) = 0 V_4(x_4) = 0 V 4 ( x 4 ) = 0 (问题结束)
步骤1: 时刻 k=3 (最后一步)
V 3 ( x 3 ) = x 3 2 + min u 3 ∈ U 3 ( x 3 ) u 3 2 V_3(x_3) = x_3^2 + \min_{u_3 \in U_3(x_3)} u_3^2
V 3 ( x 3 ) = x 3 2 + u 3 ∈ U 3 ( x 3 ) min u 3 2
对每个状态计算:
x 3 x_3 x 3
U 3 ( x 3 ) U_3(x_3) U 3 ( x 3 )
最优 u 3 ∗ u_3^* u 3 ∗
V 3 ( x 3 ) V_3(x_3) V 3 ( x 3 )
0
{0,1,2,3,4,5}
0
0 2 + 0 2 = 0 0^2 + 0^2 = 0 0 2 + 0 2 = 0
1
{-1,0,1,2,3,4}
0
1 2 + 0 2 = 1 1^2 + 0^2 = 1 1 2 + 0 2 = 1
2
{-2,-1,0,1,2,3}
0
2 2 + 0 2 = 4 2^2 + 0^2 = 4 2 2 + 0 2 = 4
3
{-3,-2,-1,0,1,2}
0
3 2 + 0 2 = 9 3^2 + 0^2 = 9 3 2 + 0 2 = 9
4
{-4,-3,-2,-1,0,1}
0
4 2 + 0 2 = 16 4^2 + 0^2 = 16 4 2 + 0 2 = 16
5
{-5,-4,-3,-2,-1,0}
0
5 2 + 0 2 = 25 5^2 + 0^2 = 25 5 2 + 0 2 = 25
结果 : u 3 ∗ ( x 3 ) = 0 u_3^*(x_3) = 0 u 3 ∗ ( x 3 ) = 0 对所有 x 3 x_3 x 3
步骤2: 时刻 k=2
V 2 ( x 2 ) = min u 2 ∈ U 2 ( x 2 ) { x 2 2 + u 2 2 + E [ V 3 ( x 2 + u 2 + w 2 ) ] } V_2(x_2) = \min_{u_2 \in U_2(x_2)} \left\{ x_2^2 + u_2^2 + E[V_3(x_2 + u_2 + w_2)] \right\} V 2 ( x 2 ) = min u 2 ∈ U 2 ( x 2 ) { x 2 2 + u 2 2 + E [ V 3 ( x 2 + u 2 + w 2 )] }
期望值计算:
如果 0 < x 2 + u 2 < 5 0 < x_2 + u_2 < 5 0 < x 2 + u 2 < 5 : E [ V 3 ] = 1 2 V 3 ( x 2 + u 2 − 1 ) + 1 2 V 3 ( x 2 + u 2 + 1 ) E[V_3] = \frac{1}{2}V_3(x_2 + u_2 - 1) + \frac{1}{2}V_3(x_2 + u_2 + 1) E [ V 3 ] = 2 1 V 3 ( x 2 + u 2 − 1 ) + 2 1 V 3 ( x 2 + u 2 + 1 )
如果 x 2 + u 2 = 0 x_2 + u_2 = 0 x 2 + u 2 = 0 或 x 2 + u 2 = 5 x_2 + u_2 = 5 x 2 + u 2 = 5 : E [ V 3 ] = V 3 ( x 2 + u 2 ) E[V_3] = V_3(x_2 + u_2) E [ V 3 ] = V 3 ( x 2 + u 2 )
x 2 = 0 x_2 = 0 x 2 = 0 :
u 2 u_2 u 2
x 2 + u 2 x_2+u_2 x 2 + u 2
E [ V 3 ] E[V_3] E [ V 3 ]
总成本 0 2 + u 2 2 + E [ V 3 ] 0^2 + u_2^2 + E[V_3] 0 2 + u 2 2 + E [ V 3 ]
0
0
V 3 ( 0 ) = 0 V_3(0) = 0 V 3 ( 0 ) = 0
0 + 0 + 0 = 0 0 + 0 + 0 = 0 0 + 0 + 0 = 0
1
1
1 2 ( 0 ) + 1 2 ( 4 ) = 2 \frac{1}{2}(0) + \frac{1}{2}(4) = 2 2 1 ( 0 ) + 2 1 ( 4 ) = 2
0 + 1 + 2 = 3 0 + 1 + 2 = 3 0 + 1 + 2 = 3
2
2
1 2 ( 1 ) + 1 2 ( 9 ) = 5 \frac{1}{2}(1) + \frac{1}{2}(9) = 5 2 1 ( 1 ) + 2 1 ( 9 ) = 5
0 + 4 + 5 = 9 0 + 4 + 5 = 9 0 + 4 + 5 = 9
3
3
1 2 ( 4 ) + 1 2 ( 16 ) = 10 \frac{1}{2}(4) + \frac{1}{2}(16) = 10 2 1 ( 4 ) + 2 1 ( 16 ) = 10
0 + 9 + 10 = 19 0 + 9 + 10 = 19 0 + 9 + 10 = 19
4
4
1 2 ( 9 ) + 1 2 ( 25 ) = 17 \frac{1}{2}(9) + \frac{1}{2}(25) = 17 2 1 ( 9 ) + 2 1 ( 25 ) = 17
0 + 16 + 17 = 33 0 + 16 + 17 = 33 0 + 16 + 17 = 33
5
5
V 3 ( 5 ) = 25 V_3(5) = 25 V 3 ( 5 ) = 25
0 + 25 + 25 = 50 0 + 25 + 25 = 50 0 + 25 + 25 = 50
V 2 ( 0 ) = 0 V_2(0) = 0 V 2 ( 0 ) = 0 , u 2 ∗ ( 0 ) = 0 u_2^*(0) = 0 u 2 ∗ ( 0 ) = 0
x 2 = 1 x_2 = 1 x 2 = 1 :
u 2 u_2 u 2
x 2 + u 2 x_2+u_2 x 2 + u 2
E [ V 3 ] E[V_3] E [ V 3 ]
总成本 1 2 + u 2 2 + E [ V 3 ] 1^2 + u_2^2 + E[V_3] 1 2 + u 2 2 + E [ V 3 ]
-1
0
V 3 ( 0 ) = 0 V_3(0) = 0 V 3 ( 0 ) = 0
1 + 1 + 0 = 2 1 + 1 + 0 = 2 1 + 1 + 0 = 2
0
1
1 2 ( 0 ) + 1 2 ( 4 ) = 2 \frac{1}{2}(0) + \frac{1}{2}(4) = 2 2 1 ( 0 ) + 2 1 ( 4 ) = 2
1 + 0 + 2 = 3 1 + 0 + 2 = 3 1 + 0 + 2 = 3
1
2
1 2 ( 1 ) + 1 2 ( 9 ) = 5 \frac{1}{2}(1) + \frac{1}{2}(9) = 5 2 1 ( 1 ) + 2 1 ( 9 ) = 5
1 + 1 + 5 = 7 1 + 1 + 5 = 7 1 + 1 + 5 = 7
2
3
1 2 ( 4 ) + 1 2 ( 16 ) = 10 \frac{1}{2}(4) + \frac{1}{2}(16) = 10 2 1 ( 4 ) + 2 1 ( 16 ) = 10
1 + 4 + 10 = 15 1 + 4 + 10 = 15 1 + 4 + 10 = 15
3
4
1 2 ( 9 ) + 1 2 ( 25 ) = 17 \frac{1}{2}(9) + \frac{1}{2}(25) = 17 2 1 ( 9 ) + 2 1 ( 25 ) = 17
1 + 9 + 17 = 27 1 + 9 + 17 = 27 1 + 9 + 17 = 27
4
5
V 3 ( 5 ) = 25 V_3(5) = 25 V 3 ( 5 ) = 25
1 + 16 + 25 = 42 1 + 16 + 25 = 42 1 + 16 + 25 = 42
V 2 ( 1 ) = 2 V_2(1) = 2 V 2 ( 1 ) = 2 , u 2 ∗ ( 1 ) = − 1 u_2^*(1) = -1 u 2 ∗ ( 1 ) = − 1
继续计算其他状态:
x 2 = 2 x_2 = 2 x 2 = 2 : V 2 ( 2 ) = 7 V_2(2) = 7 V 2 ( 2 ) = 7 , u 2 ∗ ( 2 ) = − 1 u_2^*(2) = -1 u 2 ∗ ( 2 ) = − 1
x 2 = 3 x_2 = 3 x 2 = 3 : V 2 ( 3 ) = 15 V_2(3) = 15 V 2 ( 3 ) = 15 , u 2 ∗ ( 3 ) = − 2 u_2^*(3) = -2 u 2 ∗ ( 3 ) = − 2 (或 − 1 -1 − 1 )
x 2 = 4 x_2 = 4 x 2 = 4 : V 2 ( 4 ) = 25 V_2(4) = 25 V 2 ( 4 ) = 25 , u 2 ∗ ( 4 ) = − 2 u_2^*(4) = -2 u 2 ∗ ( 4 ) = − 2
x 2 = 5 x_2 = 5 x 2 = 5 : V 2 ( 5 ) = 39 V_2(5) = 39 V 2 ( 5 ) = 39 , u 2 ∗ ( 5 ) = − 3 u_2^*(5) = -3 u 2 ∗ ( 5 ) = − 3 (或 − 2 -2 − 2 ,都得到相同成本)
步骤3: 时刻 k=1
使用已计算的 V 2 V_2 V 2 来计算 V 1 ( x 1 ) V_1(x_1) V 1 ( x 1 ) 。
x 1 = 0 x_1 = 0 x 1 = 0 :
u 1 u_1 u 1
x 1 + u 1 x_1+u_1 x 1 + u 1
E [ V 2 ] E[V_2] E [ V 2 ]
总成本 0 2 + u 1 2 + E [ V 2 ] 0^2 + u_1^2 + E[V_2] 0 2 + u 1 2 + E [ V 2 ]
0
0
V 2 ( 0 ) = 0 V_2(0) = 0 V 2 ( 0 ) = 0
0 + 0 + 0 = 0 0 + 0 + 0 = 0 0 + 0 + 0 = 0
1
1
1 2 V 2 ( 0 ) + 1 2 V 2 ( 2 ) = 1 2 ( 0 ) + 1 2 ( 7 ) = 3.5 \frac{1}{2}V_2(0) + \frac{1}{2}V_2(2) = \frac{1}{2}(0) + \frac{1}{2}(7) = 3.5 2 1 V 2 ( 0 ) + 2 1 V 2 ( 2 ) = 2 1 ( 0 ) + 2 1 ( 7 ) = 3.5
0 + 1 + 3.5 = 4.5 0 + 1 + 3.5 = 4.5 0 + 1 + 3.5 = 4.5
V 1 ( 0 ) = 0 V_1(0) = 0 V 1 ( 0 ) = 0 , u 1 ∗ ( 0 ) = 0 u_1^*(0) = 0 u 1 ∗ ( 0 ) = 0
x 1 = 1 x_1 = 1 x 1 = 1 :
u 1 u_1 u 1
x 1 + u 1 x_1+u_1 x 1 + u 1
E [ V 2 ] E[V_2] E [ V 2 ]
总成本
-1
0
V 2 ( 0 ) = 0 V_2(0) = 0 V 2 ( 0 ) = 0
1 + 1 + 0 = 2 1 + 1 + 0 = 2 1 + 1 + 0 = 2
0
1
1 2 ( 0 ) + 1 2 ( 7 ) = 3.5 \frac{1}{2}(0) + \frac{1}{2}(7) = 3.5 2 1 ( 0 ) + 2 1 ( 7 ) = 3.5
1 + 0 + 3.5 = 4.5 1 + 0 + 3.5 = 4.5 1 + 0 + 3.5 = 4.5
V 1 ( 1 ) = 2 V_1(1) = 2 V 1 ( 1 ) = 2 , u 1 ∗ ( 1 ) = − 1 u_1^*(1) = -1 u 1 ∗ ( 1 ) = − 1
x 1 = 2 x_1 = 2 x 1 = 2 :
u 1 u_1 u 1
x 1 + u 1 x_1+u_1 x 1 + u 1
E [ V 2 ] E[V_2] E [ V 2 ]
总成本
-2
0
V 2 ( 0 ) = 0 V_2(0) = 0 V 2 ( 0 ) = 0
4 + 4 + 0 = 8 4 + 4 + 0 = 8 4 + 4 + 0 = 8
-1
1
1 2 ( 0 ) + 1 2 ( 7 ) = 3.5 \frac{1}{2}(0) + \frac{1}{2}(7) = 3.5 2 1 ( 0 ) + 2 1 ( 7 ) = 3.5
4 + 1 + 3.5 = 8.5 4 + 1 + 3.5 = 8.5 4 + 1 + 3.5 = 8.5
V 1 ( 2 ) = 8 V_1(2) = 8 V 1 ( 2 ) = 8 , u 1 ∗ ( 2 ) = − 2 u_1^*(2) = -2 u 1 ∗ ( 2 ) = − 2
x 1 = 3 x_1 = 3 x 1 = 3 :
u 1 u_1 u 1
x 1 + u 1 x_1+u_1 x 1 + u 1
E [ V 2 ] E[V_2] E [ V 2 ]
总成本
-3
0
V 2 ( 0 ) = 0 V_2(0) = 0 V 2 ( 0 ) = 0
9 + 9 + 0 = 18 9 + 9 + 0 = 18 9 + 9 + 0 = 18
-2
1
1 2 ( 0 ) + 1 2 ( 7 ) = 3.5 \frac{1}{2}(0) + \frac{1}{2}(7) = 3.5 2 1 ( 0 ) + 2 1 ( 7 ) = 3.5
9 + 4 + 3.5 = 16.5 9 + 4 + 3.5 = 16.5 9 + 4 + 3.5 = 16.5
-1
2
1 2 ( 2 ) + 1 2 ( 15 ) = 8.5 \frac{1}{2}(2) + \frac{1}{2}(15) = 8.5 2 1 ( 2 ) + 2 1 ( 15 ) = 8.5
9 + 1 + 8.5 = 18.5 9 + 1 + 8.5 = 18.5 9 + 1 + 8.5 = 18.5
V 1 ( 3 ) = 16.5 V_1(3) = 16.5 V 1 ( 3 ) = 16.5 , u 1 ∗ ( 3 ) = − 2 u_1^*(3) = -2 u 1 ∗ ( 3 ) = − 2
x 1 = 4 x_1 = 4 x 1 = 4 :
计算后得到 V 1 ( 4 ) = 28.5 V_1(4) = 28.5 V 1 ( 4 ) = 28.5 , u 1 ∗ ( 4 ) = − 3 u_1^*(4) = -3 u 1 ∗ ( 4 ) = − 3
x 1 = 5 x_1 = 5 x 1 = 5 :
计算后得到 V 1 ( 5 ) = 42.5 V_1(5) = 42.5 V 1 ( 5 ) = 42.5 , u 1 ∗ ( 5 ) = − 3 u_1^*(5) = -3 u 1 ∗ ( 5 ) = − 3
时刻1的完整价值函数 :
x 1 x_1 x 1
V 1 ( x 1 ) V_1(x_1) V 1 ( x 1 )
u 1 ∗ ( x 1 ) u_1^*(x_1) u 1 ∗ ( x 1 )
0
0
0
1
2
-1
2
8
-2
3
16.5
-2
4
28.5
-3
5
42.5
-3
步骤4: 时刻 k=0
对于初始状态 x 0 = 5 x_0 = 5 x 0 = 5 ,计算 V 0 ( 5 ) V_0(5) V 0 ( 5 ) :
V 0 ( 5 ) = min u 0 ∈ U 0 ( 5 ) { 25 + u 0 2 + E [ V 1 ( 5 + u 0 + w 0 ) ] } V_0(5) = \min_{u_0 \in U_0(5)} \left\{ 25 + u_0^2 + E[V_1(5 + u_0 + w_0)] \right\} V 0 ( 5 ) = min u 0 ∈ U 0 ( 5 ) { 25 + u 0 2 + E [ V 1 ( 5 + u 0 + w 0 )] }
U 0 ( 5 ) = { − 5 , − 4 , − 3 , − 2 , − 1 , 0 } U_0(5) = \{-5,-4,-3,-2,-1,0\} U 0 ( 5 ) = { − 5 , − 4 , − 3 , − 2 , − 1 , 0 }
u 0 u_0 u 0
x 0 + u 0 x_0+u_0 x 0 + u 0
E [ V 1 ] E[V_1] E [ V 1 ]
总成本
-5
0
V 1 ( 0 ) = 0 V_1(0) = 0 V 1 ( 0 ) = 0
25 + 25 + 0 = 50 25 + 25 + 0 = 50 25 + 25 + 0 = 50
-4
1
1 2 V 1 ( 0 ) + 1 2 V 1 ( 2 ) = 1 2 ( 0 ) + 1 2 ( 8 ) = 4 \frac{1}{2}V_1(0) + \frac{1}{2}V_1(2) = \frac{1}{2}(0) + \frac{1}{2}(8) = 4 2 1 V 1 ( 0 ) + 2 1 V 1 ( 2 ) = 2 1 ( 0 ) + 2 1 ( 8 ) = 4
25 + 16 + 4 = 45 25 + 16 + 4 = 45 25 + 16 + 4 = 45
-3
2
1 2 V 1 ( 1 ) + 1 2 V 1 ( 3 ) = 1 2 ( 2 ) + 1 2 ( 16.5 ) = 9.25 \frac{1}{2}V_1(1) + \frac{1}{2}V_1(3) = \frac{1}{2}(2) + \frac{1}{2}(16.5) = 9.25 2 1 V 1 ( 1 ) + 2 1 V 1 ( 3 ) = 2 1 ( 2 ) + 2 1 ( 16.5 ) = 9.25
25 + 9 + 9.25 = 43.25 25 + 9 + 9.25 = 43.25 25 + 9 + 9.25 = 43.25
-2
3
1 2 V 1 ( 2 ) + 1 2 V 1 ( 4 ) = 1 2 ( 8 ) + 1 2 ( 28.5 ) = 18.25 \frac{1}{2}V_1(2) + \frac{1}{2}V_1(4) = \frac{1}{2}(8) + \frac{1}{2}(28.5) = 18.25 2 1 V 1 ( 2 ) + 2 1 V 1 ( 4 ) = 2 1 ( 8 ) + 2 1 ( 28.5 ) = 18.25
25 + 4 + 18.25 = 47.25 25 + 4 + 18.25 = 47.25 25 + 4 + 18.25 = 47.25
-1
4
1 2 V 1 ( 3 ) + 1 2 V 1 ( 5 ) = 1 2 ( 16.5 ) + 1 2 ( 42.5 ) = 29.5 \frac{1}{2}V_1(3) + \frac{1}{2}V_1(5) = \frac{1}{2}(16.5) + \frac{1}{2}(42.5) = 29.5 2 1 V 1 ( 3 ) + 2 1 V 1 ( 5 ) = 2 1 ( 16.5 ) + 2 1 ( 42.5 ) = 29.5
25 + 1 + 29.5 = 55.5 25 + 1 + 29.5 = 55.5 25 + 1 + 29.5 = 55.5
0
5
V 1 ( 5 ) = 42.5 V_1(5) = 42.5 V 1 ( 5 ) = 42.5
25 + 0 + 42.5 = 67.5 25 + 0 + 42.5 = 67.5 25 + 0 + 42.5 = 67.5
结果 : V 0 ( 5 ) = 43.25 V_0(5) = 43.25 V 0 ( 5 ) = 43.25 , u 0 ∗ ( 5 ) = − 3 u_0^*(5) = -3 u 0 ∗ ( 5 ) = − 3
最优策略总结
从初始状态 x 0 = 5 x_0 = 5 x 0 = 5 开始的最优策略:
时刻
状态
最优控制
说明
k = 0 k=0 k = 0
x 0 = 5 x_0 = 5 x 0 = 5
u 0 ∗ = − 3 u_0^* = -3 u 0 ∗ = − 3
将状态向2方向引导
k = 1 k=1 k = 1
依赖于 w 0 w_0 w 0
查表u 1 ∗ u_1^* u 1 ∗
从价值函数表查找
k = 2 k=2 k = 2
依赖于 w 0 , w 1 w_0,w_1 w 0 , w 1
查表u 2 ∗ u_2^* u 2 ∗
从价值函数表查找
k = 3 k=3 k = 3
依赖于路径
u 3 ∗ = 0 u_3^* = 0 u 3 ∗ = 0
无论什么状态都选0
最小期望总成本 : 43.25 43.25 43.25
策略特点 :
隐马尔可夫模型 (HMM)
模型描述
一个平稳的有限状态马尔可夫链,状态间转移概率为 p i j p_{ij} p ij 。
状态是隐藏的(无法直接观测)。初始状态 x 0 x_0 x 0 为 i i i 的概率是 π i \pi_i π i 。
每次状态转移后,观测到一个值 z z z 。给定从状态 i i i 转移到状态 j j j ,观测到 z z z 的概率为 r ( z ; i , j ) r(z; i, j) r ( z ; i , j ) 。
观测值相互独立。
转移概率 p i j p_{ij} p ij 和观测概率 r ( z ; i , j ) r(z; i, j) r ( z ; i , j ) 被假设为相互独立。
符号解释与模型理解
p i j p_{ij} p ij : 从状态 i i i 转移到状态 j j j 的概率(如天气从"晴"转"雨"的概率)
π i \pi_i π i : 系统初始状态为 i i i 的概率(如第一天是"晴"的概率)
r ( z ; i , j ) r(z; i, j) r ( z ; i , j ) : 在 i → j i→j i → j 转移时观测到 z z z 的概率(如"晴转雨"时观测到"湿度高"的概率)
独立性假设 : 观测值 z k z_k z k 仅取决于当前状态转移 ( x k − 1 , x k ) (x_{k-1},x_k) ( x k − 1 , x k ) ,与历史状态和观测无关
目标
给定观测序列 Z N = { z 1 , … , z N } Z_N = \{z_1, \dots, z_N\} Z N = { z 1 , … , z N } ,估计最可能的状态序列 X ^ N = { x ^ 0 , … , x ^ N } \hat{X}_N = \{\hat{x}_0, \dots, \hat{x}_N\} X ^ N = { x ^ 0 , … , x ^ N } 。
方法
为估计 X ^ N \hat{X}_N X ^ N ,最大化条件概率 P ( X N ∣ Z N ) P(X_N \mid Z_N) P ( X N ∣ Z N ) 。由于:
P ( X N ∣ Z N ) = P ( X N , Z N ) P ( Z N ) P(X_N \mid Z_N) = \frac{P(X_N, Z_N)}{P(Z_N)}
P ( X N ∣ Z N ) = P ( Z N ) P ( X N , Z N )
最大化 P ( X N ∣ Z N ) P(X_N \mid Z_N) P ( X N ∣ Z N ) 等价于最大化联合概率 P ( X N , Z N ) P(X_N, Z_N) P ( X N , Z N ) ,因为 P ( Z N ) P(Z_N) P ( Z N ) 对于给定观测序列是常数。
联合概率推导
状态序列 X N = { x 0 , x 1 , … , x N } X_N = \{x_0, x_1, \dots, x_N\} X N = { x 0 , x 1 , … , x N } 和观测序列 Z N = { z 1 , … , z N } Z_N = \{z_1, \dots, z_N\} Z N = { z 1 , … , z N } 的联合概率 P ( X N , Z N ) P(X_N, Z_N) P ( X N , Z N ) 推导如下:
P ( X N , Z N ) = P ( x 0 , x 1 , … , x N , z 1 , … , z N ) P(X_N, Z_N) = P(x_0, x_1, \dots, x_N, z_1, \dots, z_N)
P ( X N , Z N ) = P ( x 0 , x 1 , … , x N , z 1 , … , z N )
利用链式法则和独立性假设:
= π x 0 P ( x 1 , … , x N , z 1 , … , z N ∣ x 0 ) = π x 0 p x 0 x 1 r ( z 1 ; x 0 , x 1 ) P ( x 2 , … , x N , z 2 , … , z N ∣ x 0 , x 1 , z 1 ) \begin{align*}
= & \pi_{x_0} P(x_1, \dots, x_N, z_1, \dots, z_N \mid x_0) \\
= & \pi_{x_0} p_{x_0 x_1} r(z_1; x_0, x_1) P(x_2, \dots, x_N, z_2, \dots, z_N \mid x_0, x_1, z_1)
\end{align*}
= = π x 0 P ( x 1 , … , x N , z 1 , … , z N ∣ x 0 ) π x 0 p x 0 x 1 r ( z 1 ; x 0 , x 1 ) P ( x 2 , … , x N , z 2 , … , z N ∣ x 0 , x 1 , z 1 )
基于马尔可夫性质和观测独立性,递归简化得:
P ( X N , Z N ) = π x 0 ∏ k = 1 N p x k − 1 x k r ( z k ; x k − 1 , x k ) P(X_N, Z_N) = \pi_{x_0} \prod_{k=1}^N p_{x_{k-1} x_k} r(z_k; x_{k-1}, x_k)
P ( X N , Z N ) = π x 0 k = 1 ∏ N p x k − 1 x k r ( z k ; x k − 1 , x k )
推导过程详解
链式分解 :
P ( X N , Z N ) = P ( x 0 ) ∏ k = 1 N P ( x k , z k ∣ x 0 : k − 1 , z 1 : k − 1 ) P(X_N, Z_N) = P(x_0) \prod_{k=1}^N P(x_k, z_k | x_{0:k-1}, z_{1:k-1})
P ( X N , Z N ) = P ( x 0 ) k = 1 ∏ N P ( x k , z k ∣ x 0 : k − 1 , z 1 : k − 1 )
马尔可夫性应用 :
未来状态仅依赖当前状态:
P ( x k ∣ x 0 : k − 1 ) = P ( x k ∣ x k − 1 ) P(x_k | x_{0:k-1}) = P(x_k | x_{k-1})
P ( x k ∣ x 0 : k − 1 ) = P ( x k ∣ x k − 1 )
观测独立性 :
观测 z k z_k z k 仅由当前转移决定:
P ( z k ∣ x 0 : k , z 1 : k − 1 ) = r ( z k ; x k − 1 , x k ) P(z_k | x_{0:k}, z_{1:k-1}) = r(z_k; x_{k-1}, x_k)
P ( z k ∣ x 0 : k , z 1 : k − 1 ) = r ( z k ; x k − 1 , x k )
联合概率 :
P ( x k , z k ∣ x 0 : k − 1 , z 1 : k − 1 ) = p x k − 1 x k ⋅ r ( z k ; x k − 1 , x k ) P(x_k, z_k | x_{0:k-1}, z_{1:k-1}) = p_{x_{k-1}x_k} \cdot r(z_k; x_{k-1}, x_k)
P ( x k , z k ∣ x 0 : k − 1 , z 1 : k − 1 ) = p x k − 1 x k ⋅ r ( z k ; x k − 1 , x k )
最终形式 :
递归代入得 π x 0 ∏ k = 1 N p x k − 1 x k r ( z k ; x k − 1 , x k ) \pi_{x_0} \prod_{k=1}^N p_{x_{k-1}x_k} r(z_k; x_{k-1}, x_k) π x 0 ∏ k = 1 N p x k − 1 x k r ( z k ; x k − 1 , x k )
解释 :
π x 0 \pi_{x_0} π x 0 : 起始状态 x 0 x_0 x 0 的概率。
p x k − 1 x k p_{x_{k-1} x_k} p x k − 1 x k : 在步骤 k k k 时,从状态 x k − 1 x_{k-1} x k − 1 转移到 x k x_k x k 的概率。
r ( z k ; x k − 1 , x k ) r(z_k; x_{k-1}, x_k) r ( z k ; x k − 1 , x k ) : 给定从 x k − 1 x_{k-1} x k − 1 到 x k x_k x k 的转移,观测到 z k z_k z k 的概率。
乘积 ∏ k = 1 N \prod_{k=1}^N ∏ k = 1 N 捕捉了状态转移和观测的序列,利用独立性将联合概率分解为乘积形式。
等价优化问题
最大化 P ( X N , Z N ) P(X_N, Z_N) P ( X N , Z N ) 等价于最小化负对数似然:
min ( − log ( π x 0 ) − ∑ k = 1 N log ( p x k − 1 x k r ( z k ; x k − 1 , x k ) ) ) \min\left( -\log(\pi_{x_0}) - \sum_{k=1}^N \log\left( p_{x_{k-1} x_k} r(z_k; x_{k-1}, x_k) \right) \right)
min ( − log ( π x 0 ) − k = 1 ∑ N log ( p x k − 1 x k r ( z k ; x k − 1 , x k ) ) )
负对数转换原理
单调性原理 :
log \log log 函数单调递增,最大化 f ( x ) f(x) f ( x ) 等价于最大化 log f ( x ) \log f(x) log f ( x )
最小化 − log f ( x ) -\log f(x) − log f ( x ) 等价于最大化 f ( x ) f(x) f ( x )
乘积转求和 :
arg max ∏ p i = arg min ( − ∑ log p i ) \arg\max \prod p_i = \arg\min \left( -\sum \log p_i \right)
arg max ∏ p i = arg min ( − ∑ log p i )
数值稳定性 :
优化优势 :
注意 : 此转换将概率乘积转化为对数项的和,便于优化(例如,使用动态规划算法如维特比算法)。最小化该和可找到最能解释观测的状态序列。
将寻找最可能状态序列(例如在隐马尔可夫模型中)的问题转化为带正权值的最短路径问题 ,可通过以下图结构实现:
添加虚拟节点:
初始状态弧:
创建从 s s s 到初始状态 x 0 x_0 x 0 的弧。
赋予其长度:
ℓ ( s , x 0 ) = − log ( π x 0 ) \ell(s, x_0) = -\log(\pi_{x_0})
ℓ ( s , x 0 ) = − log ( π x 0 )
其中 π x 0 \pi_{x_0} π x 0 是状态 x 0 x_0 x 0 的初始概率。负对数将最大化初始概率转化为最小化正成本。
状态转移弧:
对每个时间步 k k k ( k = 1 , . . . , N ) (k = 1, ..., N) ( k = 1 , ... , N ) 上可能的有效状态转移 ( x k − 1 , x k ) (x_{k - 1}, x_k) ( x k − 1 , x k ) :
创建从状态 x k − 1 x_{k - 1} x k − 1 到状态 x k x_k x k 的弧。
赋予其长度:ℓ ( x k − 1 , x k ) = − log ( p x k − 1 x k ⋅ r ( z k ; x k − 1 , x k ) ) \ell(x_{k-1}, x_k) = -\log \left( p_{x_{k-1} x_k} \cdot r(z_k; x_{k-1}, x_k) \right)
ℓ ( x k − 1 , x k ) = − log ( p x k − 1 x k ⋅ r ( z k ; x k − 1 , x k ) )
其中 p x k − 1 x k p_{x_{k-1} x_k} p x k − 1 x k 是从状态 x k − 1 x_{k - 1} x k − 1 转移到 x k xₖ x k 的概率,r ( z k ; x k − 1 , x k ) r(z_k; x_{k - 1}, x_k) r ( z k ; x k − 1 , x k ) 是在给定 x k − 1 x_{k - 1} x k − 1 到 x k x_k x k 转移下观测到 z k z_k z k 的概率(似然)。负对数将最大化转移概率与发射概率的乘积转化为最小化正成本。
注意: 若转移概率 p x k − 1 x k = 0 p_{x_{k - 1} x_k} = 0 p x k − 1 x k = 0 ,则不创建 对应弧。
终止状态弧:
求解: 在此构造的图中,从源节点 s 到汇节点 t 的最短路径 即对应最可能的状态序列。图中所有弧长均为非负(除终止弧为零外,其余为正)。
图结构等价性证明
路径成本计算 :
路径总成本 = ℓ ( s , x 0 ) + ∑ k = 1 N ℓ ( x k − 1 , x k ) + ℓ ( x N , t ) \ell(s,x_0) + \sum_{k=1}^N \ell(x_{k-1},x_k) + \ell(x_N,t) ℓ ( s , x 0 ) + ∑ k = 1 N ℓ ( x k − 1 , x k ) + ℓ ( x N , t )
= − log π x 0 − ∑ k = 1 N log ( p x k − 1 x k r k ) + 0 = -\log\pi_{x_0} - \sum_{k=1}^N \log(p_{x_{k-1}x_k}r_k) + 0
= − log π x 0 − k = 1 ∑ N log ( p x k − 1 x k r k ) + 0
= − log ( π x 0 ∏ k = 1 N p x k − 1 x k r k ) = -\log\left( \pi_{x_0} \prod_{k=1}^N p_{x_{k-1}x_k}r_k \right)
= − log ( π x 0 k = 1 ∏ N p x k − 1 x k r k )
等价关系 :
min ( 路径成本 ) ⟺ min ( − log P ( X N , Z N ) ) ⟺ max ( P ( X N , Z N ) ) \min\left(\text{路径成本}\right) \iff \min\left(-\log P(X_N,Z_N)\right) \iff \max\left(P(X_N,Z_N)\right)
min ( 路径成本 ) ⟺ min ( − log P ( X N , Z N ) ) ⟺ max ( P ( X N , Z N ) )
非负权重保证 :
因 0 < p i j , r ≤ 1 0 < p_{ij}, r \leq 1 0 < p ij , r ≤ 1 ,故 − log ( ⋅ ) ≥ 0 -\log(\cdot) \geq 0 − log ( ⋅ ) ≥ 0
满足Dijkstra等最短路径算法要求
动态规划优势 :
维特比算法复杂度 O ( N ∣ S ∣ 2 ) O(N|S|^2) O ( N ∣ S ∣ 2 )
避免穷举 ∣ S ∣ N |S|^N ∣ S ∣ N 种可能路径
前向DP算法(维特比算法)
核心公式
1. 初始状态概率
D 0 ( x 0 ) = − log ( π x 0 ) D_0(x_0) = -\log(\pi_{x_0})
D 0 ( x 0 ) = − log ( π x 0 )
意义 :在时间步 t = 0 t=0 t = 0 时,状态 x 0 x_0 x 0 的负对数初始概率。
π x 0 \pi_{x_0} π x 0 :初始状态 x 0 x_0 x 0 的概率。
负对数转换 :将概率最大化问题转化为最小化代价问题。
2. 递推关系
D k + 1 ( x k + 1 ) = min x k [ D k ( x k ) − log P ( x k + 1 ∣ x k ) − log P ( z k ∣ x k ) ] D_{k+1}(x_{k+1}) = \min_{x_k} \left[ D_k(x_k) - \log P(x_{k+1} \mid x_k) - \log P(z_k \mid x_k) \right]
D k + 1 ( x k + 1 ) = x k min [ D k ( x k ) − log P ( x k + 1 ∣ x k ) − log P ( z k ∣ x k ) ]
意义 :计算在时间步 t = k + 1 t=k+1 t = k + 1 到达状态 x k + 1 x_{k+1} x k + 1 的最小累积代价。
D k ( x k ) D_k(x_k) D k ( x k ) :前一状态 x k x_k x k 的最小累积代价。
P ( x k + 1 ∣ x k ) P(x_{k+1} \mid x_k) P ( x k + 1 ∣ x k ) :状态转移概率(从 x k x_k x k 到 x k + 1 x_{k+1} x k + 1 )。
P ( z k ∣ x k ) P(z_k \mid x_k) P ( z k ∣ x k ) :观测概率(在状态 x k x_k x k 下观测到 z k z_k z k )。
最小化操作 :遍历所有可能的前一状态 x k x_k x k ,选择最优路径。
3. 回溯最优路径
x k ∗ = arg min x k [ D k ( x k ) − log P ( x k + 1 ∗ ∣ x k ) − log P ( z k ∣ x k ) ] x_k^* = \argmin_{x_k} \left[ D_k(x_k) - \log P(x_{k+1}^* \mid x_k) - \log P(z_k \mid x_k) \right]
x k ∗ = x k arg min [ D k ( x k ) − log P ( x k + 1 ∗ ∣ x k ) − log P ( z k ∣ x k ) ]
意义 :从最终状态反向回溯,确定全局最优状态序列 { x 0 ∗ , x 1 ∗ , … , x T ∗ } \{x_0^*, x_1^*, \dots, x_T^*\} { x 0 ∗ , x 1 ∗ , … , x T ∗ } 。
x k + 1 ∗ x_{k+1}^* x k + 1 ∗ :已确定的后一最优状态。
补充说明
维特比算法本质 :动态规划求解隐马尔可夫模型(HMM)的最可能状态序列(即最大后验概率路径)。
负对数转换目的 :将概率乘积的极大化问题转化为对数和的极小化问题,避免浮点数下溢。
复杂度 :O ( T ⋅ N 2 ) O(T \cdot N^2) O ( T ⋅ N 2 ) (T T T 为时间步数,N N N 为状态数)。
隐马尔可夫模型示例:卷积编码与解码
背景故事
杨博士将祖母的食谱存储为二进制序列(如 { 0 , 1 , 0 , 0 , 1 , … } \{0, 1, 0, 0, 1, \ldots\} { 0 , 1 , 0 , 0 , 1 , … } ),并使用卷积编码保护数据,防止他人(如 6007🧑🏫)窃取。数据通过噪声信道传输给 曾博士,接收序列 { z k } \{z_k\} { z k } 与发送序列 { y k } \{y_k\} { y k } 不同。目标是从 { z k } \{z_k\} { z k } 解码恢复原始序列 { w k } \{w_k\} { w k } 。
卷积编码过程
输入 :源二进制序列 { w 1 , w 2 , … } \{w_1, w_2, \ldots\} { w 1 , w 2 , … } ,其中 w k ∈ { 0 , 1 } w_k \in \{0, 1\} w k ∈ { 0 , 1 } 。
输出 :编码序列 { y 1 , y 2 , … } \{y_1, y_2, \ldots\} { y 1 , y 2 , … } ,每个 y k y_k y k 是 n n n 维二进制向量(码字)。
状态方程 (使用模 2 运算):
y k = C x k − 1 + d w k , k = 1 , 2 , … y_k = C x_{k-1} + d w_k, \quad k = 1, 2, \ldots
y k = C x k − 1 + d w k , k = 1 , 2 , …
x k = A x k − 1 + b w k , k = 1 , 2 , … x_k = A x_{k-1} + b w_k, \quad k = 1, 2, \ldots
x k = A x k − 1 + b w k , k = 1 , 2 , …
其中:
x k x_k x k 是隐藏状态向量(维度 m × 1 m \times 1 m × 1 ),初始状态 x 0 x_0 x 0 给定(如 x 0 = [ 0 0 ] x_0 = \begin{bmatrix} 0 \\ 0 \end{bmatrix} x 0 = [ 0 0 ] )。
A A A 是状态转移矩阵(m × m m \times m m × m ),C C C 是输出矩阵(n × m n \times m n × m ),b b b 和 d d d 是权重向量(维度分别为 m × 1 m \times 1 m × 1 和 n × 1 n \times 1 n × 1 )。
参数设置 :C = [ 1 0 0 1 0 1 ] , A = [ 0 1 1 1 ] , d = [ 1 1 1 ] , b = [ 0 1 ] , x 0 = [ 0 0 ] C = \begin{bmatrix} 1 & 0 \\ 0 & 1 \\ 0 & 1 \end{bmatrix}, \quad A = \begin{bmatrix} 0 & 1 \\ 1 & 1 \end{bmatrix}, \quad d = \begin{bmatrix} 1 \\ 1 \\ 1 \end{bmatrix}, \quad b = \begin{bmatrix} 0 \\ 1 \end{bmatrix}, \quad x_0 = \begin{bmatrix} 0 \\ 0 \end{bmatrix}
C = 1 0 0 0 1 1 , A = [ 0 1 1 1 ] , d = 1 1 1 , b = [ 0 1 ] , x 0 = [ 0 0 ]
说明 :y k y_k y k 是 3 维向量(n = 3 n=3 n = 3 ),x k x_k x k 是 2 维向量(m = 2 m=2 m = 2 )。模 2 运算确保所有值为二进制(0 或 1)。d d d 和 b b b 的维度需匹配输出和状态维度,此处 d d d 为 3x1,b b b 为 2x1。
示例计算
输入序列 :{ w 1 , w 2 , w 3 , w 4 } = { 1 , 0 , 0 , 1 } \{w_1, w_2, w_3, w_4\} = \{1, 0, 0, 1\} { w 1 , w 2 , w 3 , w 4 } = { 1 , 0 , 0 , 1 } 。
状态和输出序列计算 :
k = 1 k=1 k = 1 :x 1 = A x 0 + b w 1 = [ 0 1 1 1 ] [ 0 0 ] + [ 0 1 ] ⋅ 1 = [ 0 1 ] x_1 = A x_0 + b w_1 = \begin{bmatrix} 0 & 1 \\ 1 & 1 \end{bmatrix} \begin{bmatrix} 0 \\ 0 \end{bmatrix} + \begin{bmatrix} 0 \\ 1 \end{bmatrix} \cdot 1 = \begin{bmatrix} 0 \\ 1 \end{bmatrix} x 1 = A x 0 + b w 1 = [ 0 1 1 1 ] [ 0 0 ] + [ 0 1 ] ⋅ 1 = [ 0 1 ] ,y 1 = C x 0 + d w 1 = [ 1 0 0 1 0 1 ] [ 0 0 ] + [ 1 1 1 ] ⋅ 1 = [ 1 1 1 ] y_1 = C x_0 + d w_1 = \begin{bmatrix} 1 & 0 \\ 0 & 1 \\ 0 & 1 \end{bmatrix} \begin{bmatrix} 0 \\ 0 \end{bmatrix} + \begin{bmatrix} 1 \\ 1 \\ 1 \end{bmatrix} \cdot 1 = \begin{bmatrix} 1 \\ 1 \\ 1 \end{bmatrix} y 1 = C x 0 + d w 1 = 1 0 0 0 1 1 [ 0 0 ] + 1 1 1 ⋅ 1 = 1 1 1 。
k = 2 k=2 k = 2 :x 2 = A x 1 + b w 2 = [ 0 1 1 1 ] [ 0 1 ] + [ 0 1 ] ⋅ 0 = [ 1 1 ] x_2 = A x_1 + b w_2 = \begin{bmatrix} 0 & 1 \\ 1 & 1 \end{bmatrix} \begin{bmatrix} 0 \\ 1 \end{bmatrix} + \begin{bmatrix} 0 \\ 1 \end{bmatrix} \cdot 0 = \begin{bmatrix} 1 \\ 1 \end{bmatrix} x 2 = A x 1 + b w 2 = [ 0 1 1 1 ] [ 0 1 ] + [ 0 1 ] ⋅ 0 = [ 1 1 ] ,y 2 = C x 1 + d w 2 = [ 1 0 0 1 0 1 ] [ 0 1 ] + [ 1 1 1 ] ⋅ 0 = [ 0 1 1 ] y_2 = C x_1 + d w_2 = \begin{bmatrix} 1 & 0 \\ 0 & 1 \\ 0 & 1 \end{bmatrix} \begin{bmatrix} 0 \\ 1 \end{bmatrix} + \begin{bmatrix} 1 \\ 1 \\ 1 \end{bmatrix} \cdot 0 = \begin{bmatrix} 0 \\ 1 \\ 1 \end{bmatrix} y 2 = C x 1 + d w 2 = 1 0 0 0 1 1 [ 0 1 ] + 1 1 1 ⋅ 0 = 0 1 1 。
k = 3 k=3 k = 3 :x 3 = A x 2 + b w 3 = [ 0 1 1 1 ] [ 1 1 ] + [ 0 1 ] ⋅ 0 = [ 1 0 ] x_3 = A x_2 + b w_3 = \begin{bmatrix} 0 & 1 \\ 1 & 1 \end{bmatrix} \begin{bmatrix} 1 \\ 1 \end{bmatrix} + \begin{bmatrix} 0 \\ 1 \end{bmatrix} \cdot 0 = \begin{bmatrix} 1 \\ 0 \end{bmatrix} x 3 = A x 2 + b w 3 = [ 0 1 1 1 ] [ 1 1 ] + [ 0 1 ] ⋅ 0 = [ 1 0 ] ,y 3 = C x 2 + d w 3 = [ 1 0 0 1 0 1 ] [ 1 1 ] + [ 1 1 1 ] ⋅ 0 = [ 1 1 1 ] y_3 = C x_2 + d w_3 = \begin{bmatrix} 1 & 0 \\ 0 & 1 \\ 0 & 1 \end{bmatrix} \begin{bmatrix} 1 \\ 1 \end{bmatrix} + \begin{bmatrix} 1 \\ 1 \\ 1 \end{bmatrix} \cdot 0 = \begin{bmatrix} 1 \\ 1 \\ 1 \end{bmatrix} y 3 = C x 2 + d w 3 = 1 0 0 0 1 1 [ 1 1 ] + 1 1 1 ⋅ 0 = 1 1 1 。
k = 4 k=4 k = 4 :x 4 = A x 3 + b w 4 = [ 0 1 1 1 ] [ 1 0 ] + [ 0 1 ] ⋅ 1 = [ 0 1 ] + [ 0 1 ] = [ 0 0 ] x_4 = A x_3 + b w_4 = \begin{bmatrix} 0 & 1 \\ 1 & 1 \end{bmatrix} \begin{bmatrix} 1 \\ 0 \end{bmatrix} + \begin{bmatrix} 0 \\ 1 \end{bmatrix} \cdot 1 = \begin{bmatrix} 0 \\ 1 \end{bmatrix} + \begin{bmatrix} 0 \\ 1 \end{bmatrix} = \begin{bmatrix} 0 \\ 0 \end{bmatrix} x 4 = A x 3 + b w 4 = [ 0 1 1 1 ] [ 1 0 ] + [ 0 1 ] ⋅ 1 = [ 0 1 ] + [ 0 1 ] = [ 0 0 ] (模 2),y 4 = C x 3 + d w 4 = [ 1 0 0 1 0 1 ] [ 1 0 ] + [ 1 1 1 ] ⋅ 1 = [ 1 0 0 ] + [ 1 1 1 ] = [ 0 1 1 ] y_4 = C x_3 + d w_4 = \begin{bmatrix} 1 & 0 \\ 0 & 1 \\ 0 & 1 \end{bmatrix} \begin{bmatrix} 1 \\ 0 \end{bmatrix} + \begin{bmatrix} 1 \\ 1 \\ 1 \end{bmatrix} \cdot 1 = \begin{bmatrix} 1 \\ 0 \\ 0 \end{bmatrix} + \begin{bmatrix} 1 \\ 1 \\ 1 \end{bmatrix} = \begin{bmatrix} 0 \\ 1 \\ 1 \end{bmatrix} y 4 = C x 3 + d w 4 = 1 0 0 0 1 1 [ 1 0 ] + 1 1 1 ⋅ 1 = 1 0 0 + 1 1 1 = 0 1 1 (模 2)。
结果 :
状态序列:{ x 0 , x 1 , x 2 , x 3 , x 4 } = { [ 0 0 ] , [ 0 1 ] , [ 1 1 ] , [ 1 0 ] , [ 0 0 ] } \{x_0, x_1, x_2, x_3, x_4\} = \left\{ \begin{bmatrix} 0 \\ 0 \end{bmatrix}, \begin{bmatrix} 0 \\ 1 \end{bmatrix}, \begin{bmatrix} 1 \\ 1 \end{bmatrix}, \begin{bmatrix} 1 \\ 0 \end{bmatrix}, \begin{bmatrix} 0 \\ 0 \end{bmatrix} \right\} { x 0 , x 1 , x 2 , x 3 , x 4 } = { [ 0 0 ] , [ 0 1 ] , [ 1 1 ] , [ 1 0 ] , [ 0 0 ] } (或 { 00 , 01 , 11 , 10 , 00 } \{00, 01, 11, 10, 00\} { 00 , 01 , 11 , 10 , 00 } )。
输出序列:{ y 1 , y 2 , y 3 , y 4 } = { [ 1 1 1 ] , [ 0 1 1 ] , [ 1 1 1 ] , [ 0 1 1 ] } \{y_1, y_2, y_3, y_4\} = \left\{ \begin{bmatrix} 1 \\ 1 \\ 1 \end{bmatrix}, \begin{bmatrix} 0 \\ 1 \\ 1 \end{bmatrix}, \begin{bmatrix} 1 \\ 1 \\ 1 \end{bmatrix}, \begin{bmatrix} 0 \\ 1 \\ 1 \end{bmatrix} \right\} { y 1 , y 2 , y 3 , y 4 } = ⎩ ⎨ ⎧ 1 1 1 , 0 1 1 , 1 1 1 , 0 1 1 ⎭ ⎬ ⎫ (或 { 111 , 011 , 111 , 011 } \{111, 011, 111, 011\} { 111 , 011 , 111 , 011 } )。
噪声信道与概率模型
传输过程 :编码序列 { y k } \{y_k\} { y k } 通过噪声信道,接收序列为 { z k } \{z_k\} { z k } (z k z_k z k 也是二进制向量)。
错误模型 :给定条件概率 p ( z k ∣ y k ) p(z_k | y_k) p ( z k ∣ y k ) ,表示接收 z k z_k z k 给定发送 y k y_k y k 的概率。
独立性假设 :错误独立,联合概率为:
P ( Z N ∣ Y N ) = ∏ k = 1 N p ( z k ∣ y k ) P(Z_N | Y_N) = \prod_{k=1}^N p(z_k | y_k)
P ( Z N ∣ Y N ) = k = 1 ∏ N p ( z k ∣ y k )
说明 :Z N = { z 1 , … , z N } Z_N = \{z_1, \ldots, z_N\} Z N = { z 1 , … , z N } ,Y N = { y 1 , … , y N } Y_N = \{y_1, \ldots, y_N\} Y N = { y 1 , … , y N } 。该模型假设每个码字的错误发生独立。
错误模型的符号解释、原理推导和实际意义
符号解释 :
z k z_k z k :接收到的码字(维度与 y k y_k y k 相同),可能因噪声而错误(如 y k = 111 y_k = 111 y k = 111 但 z k = 101 z_k = 101 z k = 101 )。
p ( z k ∣ y k ) p(z_k | y_k) p ( z k ∣ y k ) :条件概率密度函数,表示给定发送 y k y_k y k 时接收到 z k z_k z k 的概率(例如,如果信道有错误率 ϵ \epsilon ϵ ,则 p ( z k ∣ y k ) p(z_k | y_k) p ( z k ∣ y k ) 可能定义为 ϵ \epsilon ϵ 当 z k ≠ y k z_k \neq y_k z k = y k ,1 − ϵ 1-\epsilon 1 − ϵ 当 z k = y k z_k = y_k z k = y k )。实际意义:量化传输错误的可能性(如比特翻转概率)。
联合概率的独立性原理推导 :
推导:假设信道错误在每个时间步 k k k 独立发生(即噪声不影响相邻传输)。因此,联合概率 P ( Z N ∣ Y N ) P(Z_N | Y_N) P ( Z N ∣ Y N ) 是边缘概率的乘积:P ( Z N ∣ Y N ) = P ( z 1 ∣ y 1 ) P ( z 2 ∣ y 2 ) ⋯ P ( z N ∣ y N ) = ∏ k = 1 N p ( z k ∣ y k ) P(Z_N | Y_N) = P(z_1 | y_1) P(z_2 | y_2) \cdots P(z_N | y_N) = \prod_{k=1}^N p(z_k | y_k) P ( Z N ∣ Y N ) = P ( z 1 ∣ y 1 ) P ( z 2 ∣ y 2 ) ⋯ P ( z N ∣ y N ) = ∏ k = 1 N p ( z k ∣ y k ) 。这源于概率论中的独立性定义(如果事件独立,联合概率为乘积)。
实际意义:简化模型计算(如解码时只需处理单个码字的错误),适用于许多实际信道(如 AWGN 信道在低相关噪声下)。
举例 :如果 N = 2 N=2 N = 2 ,p ( z 1 ∣ y 1 ) = 0.9 p(z_1 | y_1) = 0.9 p ( z 1 ∣ y 1 ) = 0.9 (正确接收),p ( z 2 ∣ y 2 ) = 0.1 p(z_2 | y_2) = 0.1 p ( z 2 ∣ y 2 ) = 0.1 (错误),则 P ( Z 2 ∣ Y 2 ) = 0.9 × 0.1 = 0.09 P(Z_2 | Y_2) = 0.9 \times 0.1 = 0.09 P ( Z 2 ∣ Y 2 ) = 0.9 × 0.1 = 0.09 。比喻:就像多个独立抛硬币,每个结果不影响其他。
解码问题公式化
目标 :最小化负对数似然,以恢复最可能的序列 { y k } \{y_k\} { y k } :
min ∑ k = 1 N − log p ( z k ∣ y k ) \min \sum_{k=1}^N -\log p(z_k | y_k)
min k = 1 ∑ N − log p ( z k ∣ y k )
其中优化变量是所有可能的 { y 1 , … , y N } \{y_1, \ldots, y_N\} { y 1 , … , y N } 。
依赖隐藏状态 :由于 y k = C x k − 1 + d w k y_k = C x_{k-1} + d w_k y k = C x k − 1 + d w k ,解码需同时找到状态序列 { x 0 , … , x N } \{x_0, \ldots, x_N\} { x 0 , … , x N } 。
说明 :这等价于隐马尔可夫模型(HMM)的解码问题,状态为 x k x_k x k ,观测为 z k z_k z k 。动态规划方法(如 Viterbi 算法)可用于高效求解,通过状态转移优化序列。
解码目标的原理推导、符号解释和等价于 HMM 的推导
最小化负对数似然的原理推导 :
等价于隐马尔可夫模型(HMM)的推导 :
推导:在 HMM 中,解码问题涉及找到最可能的状态序列给定观测序列。这里:
隐藏状态:x k x_k x k (定义状态转移 x k = A x k − 1 + b w k x_k = A x_{k-1} + b w_k x k = A x k − 1 + b w k )。
观测:z k z_k z k (给定状态或输出,但 y k y_k y k 依赖于 x k − 1 x_{k-1} x k − 1 和 w k w_k w k )。
由于 y k y_k y k 是 x k − 1 x_{k-1} x k − 1 和 w k w_k w k 的函数,且 w k w_k w k 隐含在状态转移中,观测概率 p ( z k ∣ y k ) p(z_k | y_k) p ( z k ∣ y k ) 可映射到 HMM 的发射概率 p ( z k ∣ x k ) p(z_k | x_k) p ( z k ∣ x k ) (通过 y k y_k y k 链接)。优化目标 min ∑ − log p ( z k ∣ y k ) \min \sum -\log p(z_k | y_k) min ∑ − log p ( z k ∣ y k ) 对应 HMM 的 Viterbi 算法路径代价。实际意义:允许使用高效算法(如 Viterbi)处理长序列。
比喻 :就像在迷宫中找最短路径(状态序列),每个步骤的"代价"由观测匹配度决定。
卷积编码状态转移图(Mermaid)
stateDiagram-v2
direction LR
[*] --> 00
00 --> 01 : w=1/y=111
00 --> 00 : w=0/y=000
01 --> 11 : w=0/y=011
01 --> 10 : w=1/y=100
11 --> 01 : w=0/y=111
11 --> 00 : w=1/y=100
10 --> 10 : w=0/y=011
10 --> 11 : w=1/y=111
图注 :
Viterbi算法解码过程(Mermaid)
stateDiagram-v2
direction TB
state "k=0\n状态:00\n代价:0" as s00
state "k=1\n状态:00\n代价:δ(z₁,000)" as s00_1
state "k=1\n状态:01\n代价:δ(z₁,111)" as s01_1
state "k=2\n状态:00\n代价:δ(z₁,000)+δ(z₂,000)" as s00_2
state "k=2\n状态:01\n代价:δ(z₁,000)+δ(z₂,111)" as s01_2
state "k=2\n状态:11\n代价:δ(z₁,111)+δ(z₂,011)" as s11_2
state "k=2\n状态:10\n代价:δ(z₁,111)+δ(z₂,100)" as s10_2
state "k=3\n状态:00\n代价:..." as s00_3
state "k=3\n状态:01\n代价:..." as s01_3
state "k=3\n状态:11\n代价:..." as s11_3
state "k=3\n状态:10\n代价:..." as s10_3
[*] --> s00
s00 --> s00_1 : w=0/y=000
s00 --> s01_1 : w=1/y=111
s00_1 --> s00_2 : w=0/y=000
s00_1 --> s01_2 : w=1/y=111
s01_1 --> s11_2 : w=0/y=011
s01_1 --> s10_2 : w=1/y=100
s00_2 --> s00_3 : w=0/y=000
s00_2 --> s01_3 : w=1/y=111
s01_2 --> s11_3 : w=0/y=011
s01_2 --> s10_3 : w=1/y=100
s11_2 --> s01_3 : w=0/y=111
s11_2 --> s00_3 : w=1/y=100
s10_2 --> s10_3 : w=0/y=011
s10_2 --> s11_3 : w=1/y=111
note right of s00_1
代价计算:
δ(z_k,y_k) = -log p(z_k|y_k)
表示接收z_k时发送y_k的匹配度
end note
note left of s11_2
最优路径选择:
保留到每个状态的最小代价路径
剪枝高代价分支
end note
图注 :
最短路算法
标签校正法 (Label Correcting Methods)
动机
关键点 :当状态空间庞大时,DP 计算量过大,需更高效的路径搜索方法。
设置
起点 (Origin) :节点 s s s
终点 (Destination) :节点 t t t
子节点 (Child) :若存在弧 ( i , j ) (i,j) ( i , j ) ,则节点 j j j 是节点 i i i 的子节点
假设 :所有弧长 a i j ≥ 0 a_{ij} \geq 0 a ij ≥ 0 (非负权重)
核心思路
为每个节点 i i i 维护标签 d i d_i d i ,记录从起点 s s s 到 i i i 的当前最短路径长度。
算法执行中 d i d_i d i 动态递减 。
当 d i d_i d i 更新时,检查其子节点 j j j 是否需要修正。
当终点标签 d t d_t d t (记为 UPPER )等于真实最短路径长度时,问题得解。
直观理解 :UPPER 是当前找到的 s s s 到 t t t 的最短路径上界,算法通过不断修正标签降低此上界。
算法步骤
初始化 :
d s ← 0 d_s \leftarrow 0 d s ← 0
d i ← ∞ , ∀ i ≠ s d_i \leftarrow \infty, \forall i \neq s d i ← ∞ , ∀ i = s
OPEN 集合初始仅含 s s s
UPPER ← ∞ \leftarrow \infty ← ∞
迭代更新 :
从 OPEN 中移除一个节点 i i i
对 i i i 的每个子节点 j j j :
若 d i + a i j < min { d j , UPPER } d_i + a_{ij} < \min\{d_j, \text{UPPER}\} d i + a ij < min { d j , UPPER } :
d j ← d i + a i j d_j \leftarrow d_i + a_{ij} d j ← d i + a ij
设置 i i i 为 j j j 的父节点
若 j ≠ t j \neq t j = t 且 j ∉ OPEN j \notin \text{OPEN} j ∈ / OPEN ,将 j j j 加入 OPEN
若 j = t j = t j = t ,更新 UPPER ← d t \text{UPPER} \leftarrow d_t UPPER ← d t
终止条件 :OPEN 为空时停止;否则重复步骤 2。
注意事项 :
标签校正法:正确性证明
命题
若存在从起点 s s s 到终点 t t t 的路径,算法终止时 UPPER 等于最短路径长度;否则终止时 UPPER = ∞ 。
证明
1. 算法必然终止
核心 :非负弧长确保路径长度有下界,标签值 d j d_j d j 不会无限下降。
2. 无路径情况:UPPER = ∞
反证法 :
假设存在弧 ( i , t ) (i,t) ( i , t ) (即 t t t 有前驱节点 i i i )。
若 i i i 曾进入 OPEN → 存在 s → i s→i s → i 路径 → 存在 s → t s→t s → t 路径(矛盾)。
推论 :
i i i 无法进入 OPEN → d t d_t d t 不会被更新
由初始化 d t = ∞ d_t = \infty d t = ∞ 得 UPPER = ∞ \text{UPPER} = \infty UPPER = ∞
3. 有路径情况:UPPER 等于最短路径长度
设最短路径 P ∗ = ( s , j 1 , . . . , j k , t ) P^* = (s, j_1, ..., j_k, t) P ∗ = ( s , j 1 , ... , j k , t ) ,长度为 d ∗ d^* d ∗ 。
子路径最优性 :
P ∗ 的任意子路径 ( s , j 1 , . . . , j m ) 也是 s → j m 的最短路径 P^* \text{ 的任意子路径 } (s, j_1, ..., j_m) \text{ 也是 } s→j_m \text{ 的最短路径}
P ∗ 的任意子路径 ( s , j 1 , ... , j m ) 也是 s → j m 的最短路径
反证假设 :若算法终止时 UPPER > d ∗ \text{UPPER} > d^* UPPER > d ∗ ,则全程有:
UPPER > 子路径 ( s , j 1 , . . . , j m ) 的长度 , ∀ m = 1 , . . . , k \text{UPPER} > \text{子路径 } (s, j_1, ..., j_m) \text{ 的长度}, \quad \forall m=1,...,k
UPPER > 子路径 ( s , j 1 , ... , j m ) 的长度 , ∀ m = 1 , ... , k
递推矛盾 :
节点 j k j_k j k 无法以最优 d j k d_{j_k} d j k 进入 OPEN(否则 d j k + a j k t < UPPER d_{j_k} + a_{j_kt} < \text{UPPER} d j k + a j k t < UPPER 会更新 UPPER = d ∗ \text{UPPER} = d^* UPPER = d ∗ )
同理,j k − 1 j_{k-1} j k − 1 无法以最优 d j k − 1 d_{j_{k-1}} d j k − 1 进入 OPEN
递推至 j 1 j_1 j 1 :
但初始化时 j 1 j_1 j 1 会以 d j 1 = a s j 1 d_{j_1} = a_{s j_1} d j 1 = a s j 1 (即 s → j 1 s→j_1 s → j 1 最优值)加入 OPEN
矛盾!
结论 :UPPER \text{UPPER} UPPER 必收敛至 d ∗ d^* d ∗ 。
标签校正法的具体实现策略
常用策略对比
1. 广度优先搜索 (BFS) / Bellman-Ford 方法
队列策略 :先进先出 (FIFO)
操作规则 :
从 OPEN 顶部 移除节点
新节点加入 OPEN 底部
特点 :
适用于含负权边的图(但当前场景要求非负权重)
时间复杂度:O ( ∣ V ∣ ⋅ ∣ E ∣ ) O(|V| \cdot |E|) O ( ∣ V ∣ ⋅ ∣ E ∣ )
2. 深度优先搜索 (DFS)
队列策略 :后进先出 (LIFO)
操作规则 :
从 OPEN 顶部 移除节点
新节点加入 OPEN 顶部
特点 :
内存占用较低(不存储所有层级节点)
可能优先探索长路径,效率不稳定
3. 最佳优先搜索 (Dijkstra 算法)
优势 :非负权重图中效率最高
4. 混合优化策略
(1) 小标签优先 (SLF)
(2) 大标签后移 (LLL)
增强策略 (常与 SLF 联用):
计算 OPEN 中标签平均值 d ˉ = 1 ∣ OPEN ∣ ∑ j d j \bar{d} = \frac{1}{|\text{OPEN}|} \sum_{j} d_j d ˉ = ∣ OPEN ∣ 1 ∑ j d j
若顶部节点标签 d top > d ˉ d_{\text{top}} > \bar{d} d top > d ˉ ,则将其移至底部
重复直至顶部节点标签 ≤ d ˉ \leq \bar{d} ≤ d ˉ
目标 :延迟处理大标签节点,提升收敛速度
策略选择总结
策略
时间复杂度
优势
适用场景
BFS (Bellman-Ford)
O ( ∣ V ∣ ⋅ ∣ E ∣ ) O(|V|{\cdot}|E|) O ( ∣ V ∣ ⋅ ∣ E ∣ )
处理负权边
稀疏图或含负权图
DFS
不稳定
低内存消耗
深度路径优先的探索
Dijkstra
O ( ∣ E ∣ + ∣ V ∣ log ∣ V ∣ ) O(|E|{+}|V|\log|V|) O ( ∣ E ∣ + ∣ V ∣ log ∣ V ∣ )
非负权重最优解
非负权重图的标准选择
SLF+LLL
接近 Dijkstra
低开销近似最优解
大规模图的高效启发式方案