10.1
題目:
給定盒子和球組成的隱馬爾可夫模型λ = ( A , B , π ) \lambda = (A,B,\pi) λ = ( A , B , π ) ,其中,A = [ 0.5 0.2 0.3 0.3 0.5 0.2 0.2 0.3 0.5 ] , B = [ 0.5 0.5 0.4 0.6 0.7 0.3 ] , π = ( 0.2 , 0.4 , 0.4 ) T A =\begin{bmatrix}
0.5 & 0.2 & 0.3\\
0.3 & 0.5 & 0.2\\
0.2 & 0.3 & 0.5
\end{bmatrix}, B=\begin{bmatrix}
0.5 & 0.5\\
0.4 & 0.6\\
0.7 & 0.3
\end{bmatrix}, \pi=(0.2, 0.4, 0.4)^T A = ⎣ ⎡ 0 . 5 0 . 3 0 . 2 0 . 2 0 . 5 0 . 3 0 . 3 0 . 2 0 . 5 ⎦ ⎤ , B = ⎣ ⎡ 0 . 5 0 . 4 0 . 7 0 . 5 0 . 6 0 . 3 ⎦ ⎤ , π = ( 0 . 2 , 0 . 4 , 0 . 4 ) T
設T = 4 , O = ( 紅 , 白 , 紅 , 白 ) T = 4, O = (紅,白, 紅, 白) T = 4 , O = ( 紅 , 白 , 紅 , 白 ) ,試用後向算法計算P ( O ∣ λ ) P(O|\lambda) P ( O ∣ λ )
解答
按照算法10.3
(1)計算初值
β 4 ( i ) = 1 i = 1 , 2 , 3 \beta_4(i) = 1 \quad i=1,2,3 β 4 ( i ) = 1 i = 1 , 2 , 3
(2)遞推計算
β 3 ( 1 ) = ∑ j = 1 3 a 1 j b j ( O 4 ) β 4 ( j ) = 0.25 + 0.12 + 0.09 = 0.46 \beta_3(1)=\sum^3_{j=1}a_{1j}b_j(O_4)\beta_4(j)=0.25+0.12+0.09=0.46 β 3 ( 1 ) = ∑ j = 1 3 a 1 j b j ( O 4 ) β 4 ( j ) = 0 . 2 5 + 0 . 1 2 + 0 . 0 9 = 0 . 4 6
β 3 ( 2 ) = ∑ j = 1 3 a 2 j b j ( O 4 ) β 4 ( j ) = 0.15 + 0.3 + 0.06 = 0.51 \beta_3(2)=\sum^3_{j=1}a_{2j}b_j(O_4)\beta_4(j)=0.15+0.3+0.06=0.51 β 3 ( 2 ) = ∑ j = 1 3 a 2 j b j ( O 4 ) β 4 ( j ) = 0 . 1 5 + 0 . 3 + 0 . 0 6 = 0 . 5 1
β 3 ( 3 ) = ∑ j = 1 3 a 3 j b j ( O 4 ) β 4 ( j ) = 0.1 + 0.18 + 0.15 = 0.43 \beta_3(3)=\sum^3_{j=1}a_{3j}b_j(O_4)\beta_4(j)=0.1+0.18+0.15=0.43 β 3 ( 3 ) = ∑ j = 1 3 a 3 j b j ( O 4 ) β 4 ( j ) = 0 . 1 + 0 . 1 8 + 0 . 1 5 = 0 . 4 3
β 2 ( 1 ) = ∑ j = 1 3 a 1 j b j ( O 3 ) β 3 ( j ) = 0.25 ∗ 0.46 + 0.08 ∗ 0.51 + 0.21 ∗ 0.43 = 0.2461 \beta_2(1)=\sum^3_{j=1}a_{1j}b_j(O_3)\beta_3(j)=0.25*0.46+0.08*0.51+0.21*0.43=0.2461 β 2 ( 1 ) = ∑ j = 1 3 a 1 j b j ( O 3 ) β 3 ( j ) = 0 . 2 5 ∗ 0 . 4 6 + 0 . 0 8 ∗ 0 . 5 1 + 0 . 2 1 ∗ 0 . 4 3 = 0 . 2 4 6 1
β 2 ( 2 ) = ∑ j = 1 3 a 2 j b j ( O 3 ) β 3 ( j ) = 0.15 ∗ 0.46 + 0.2 ∗ 0.51 + 0.14 ∗ 0.43 = 0.2312 \beta_2(2)=\sum^3_{j=1}a_{2j}b_j(O_3)\beta_3(j)=0.15*0.46+0.2*0.51+0.14*0.43=0.2312 β 2 ( 2 ) = ∑ j = 1 3 a 2 j b j ( O 3 ) β 3 ( j ) = 0 . 1 5 ∗ 0 . 4 6 + 0 . 2 ∗ 0 . 5 1 + 0 . 1 4 ∗ 0 . 4 3 = 0 . 2 3 1 2
β 2 ( 3 ) = ∑ j = 1 3 a 3 j b j ( O 3 ) β 3 ( j ) = 0.1 ∗ 0.46 + 0.12 ∗ 0.51 + 0.35 ∗ 0.43 = 0.2577 \beta_2(3)=\sum^3_{j=1}a_{3j}b_j(O_3)\beta_3(j)=0.1*0.46+0.12*0.51+0.35*0.43=0.2577 β 2 ( 3 ) = ∑ j = 1 3 a 3 j b j ( O 3 ) β 3 ( j ) = 0 . 1 ∗ 0 . 4 6 + 0 . 1 2 ∗ 0 . 5 1 + 0 . 3 5 ∗ 0 . 4 3 = 0 . 2 5 7 7
β 1 ( 1 ) = ∑ j = 1 3 a 1 j b j ( O 2 ) β 2 ( j ) = 0.25 ∗ 0.2461 + 0.12 ∗ 0.2312 + 0.09 ∗ 0.2577 = 0.112462 \beta_1(1)=\sum^3_{j=1}a_{1j}b_j(O_2)\beta_2(j)=0.25*0.2461+0.12*0.2312+0.09*0.2577 = 0.112462 β 1 ( 1 ) = ∑ j = 1 3 a 1 j b j ( O 2 ) β 2 ( j ) = 0 . 2 5 ∗ 0 . 2 4 6 1 + 0 . 1 2 ∗ 0 . 2 3 1 2 + 0 . 0 9 ∗ 0 . 2 5 7 7 = 0 . 1 1 2 4 6 2
β 1 ( 2 ) = ∑ j = 1 3 a 2 j b j ( O 2 ) β 2 ( j ) = 0.15 ∗ 0.2461 + 0.3 ∗ 0.2312 + 0.06 ∗ 0.2577 = 0.121737 \beta_1(2)=\sum^3_{j=1}a_{2j}b_j(O_2)\beta_2(j)=0.15*0.2461+0.3*0.2312+0.06*0.2577 = 0.121737 β 1 ( 2 ) = ∑ j = 1 3 a 2 j b j ( O 2 ) β 2 ( j ) = 0 . 1 5 ∗ 0 . 2 4 6 1 + 0 . 3 ∗ 0 . 2 3 1 2 + 0 . 0 6 ∗ 0 . 2 5 7 7 = 0 . 1 2 1 7 3 7
β 1 ( 3 ) = ∑ j = 1 3 a 3 j b j ( O 2 ) β 2 ( j ) = 0.1 ∗ 0.2461 + 0.18 ∗ 0.2312 + 0.15 ∗ 0.2577 = 0.104881 \beta_1(3)=\sum^3_{j=1}a_{3j}b_j(O_2)\beta_2(j)=0.1*0.2461+0.18*0.2312+0.15*0.2577 = 0.104881 β 1 ( 3 ) = ∑ j = 1 3 a 3 j b j ( O 2 ) β 2 ( j ) = 0 . 1 ∗ 0 . 2 4 6 1 + 0 . 1 8 ∗ 0 . 2 3 1 2 + 0 . 1 5 ∗ 0 . 2 5 7 7 = 0 . 1 0 4 8 8 1
(3)終止
P ( O ∣ λ ) = ∑ i = 1 3 π i b i ( O 1 ) β 1 ( i ) = 0.2 ∗ 0.5 ∗ 0.112462 + 0.4 ∗ 0.4 ∗ 0.121737 + 0.4 ∗ 0.7 ∗ 0.104881 = 0.0600908 P(O|\lambda) = \sum^3_{i=1}\pi_{i}b_i(O_1)\beta_1(i) = 0.2*0.5*0.112462+0.4*0.4*0.121737+0.4*0.7*0.104881=0.0600908 P ( O ∣ λ ) = ∑ i = 1 3 π i b i ( O 1 ) β 1 ( i ) = 0 . 2 ∗ 0 . 5 ∗ 0 . 1 1 2 4 6 2 + 0 . 4 ∗ 0 . 4 ∗ 0 . 1 2 1 7 3 7 + 0 . 4 ∗ 0 . 7 ∗ 0 . 1 0 4 8 8 1 = 0 . 0 6 0 0 9 0 8
10.2
題目
考慮盒子和球組成的隱馬爾可夫模型λ = ( A , B , π ) \lambda = (A,B,\pi) λ = ( A , B , π ) ,其中,A = [ 0.5 0.1 0.4 0.3 0.5 0.2 0.2 0.2 0.6 ] , B = [ 0.5 0.5 0.4 0.6 0.7 0.3 ] , π = ( 0.2 , 0.3 , 0.5 ) T A =\begin{bmatrix}
0.5 & 0.1 & 0.4\\
0.3 & 0.5 & 0.2\\
0.2 & 0.2 & 0.6
\end{bmatrix}, B=\begin{bmatrix}
0.5 & 0.5\\
0.4 & 0.6\\
0.7 & 0.3
\end{bmatrix}, \pi=(0.2, 0.3, 0.5)^T A = ⎣ ⎡ 0 . 5 0 . 3 0 . 2 0 . 1 0 . 5 0 . 2 0 . 4 0 . 2 0 . 6 ⎦ ⎤ , B = ⎣ ⎡ 0 . 5 0 . 4 0 . 7 0 . 5 0 . 6 0 . 3 ⎦ ⎤ , π = ( 0 . 2 , 0 . 3 , 0 . 5 ) T
設T = 8 , O = ( 紅 , 白 , 紅 , 紅 , 白 , 紅 , 白 , 白 ) T = 8, O = (紅,白,紅,紅,白,紅,白,白) T = 8 , O = ( 紅 , 白 , 紅 , 紅 , 白 , 紅 , 白 , 白 ) ,試用前向後向算法計算P ( i 4 = q 3 ∣ O , λ ) P(i_4=q_3|O,\lambda) P ( i 4 = q 3 ∣ O , λ )
解答
這題就偷個小懶,讓python幫忙解決叭(╹▽╹ )
代碼:
import numpy as np
def fore_algorithm ( A, B, p_i, o, T, N) :
alpha = np. zeros( ( T, N) )
for i in range ( N) :
h = o[ 0 ]
alpha[ 0 ] [ i] = p_i[ i] * B[ i] [ h]
for t in range ( T- 1 ) :
h = o[ t+ 1 ]
for i in range ( N) :
a = 0
for j in range ( N) :
a += ( alpha[ t] [ j] * A[ j] [ i] )
alpha[ t+ 1 ] [ i] = a * B[ i] [ h]
P = 0
for i in range ( N) :
P += alpha[ T- 1 ] [ i]
return P, alpha
def back_algorithm ( A, B, p_i, o, T, N) :
beta = np. ones( ( T, N) )
for t in range ( T- 1 ) :
t = T - t - 2
h = o[ t + 1 ]
h = int ( h)
for i in range ( N) :
beta[ t] [ i] = 0
for j in range ( N) :
beta[ t] [ i] += A[ i] [ j] * B[ j] [ h] * beta[ t+ 1 ] [ j]
P = 0
for i in range ( N) :
h = o[ 0 ]
h = int ( h)
P += p_i[ i] * B[ i] [ h] * beta[ 0 ] [ i]
return P, beta
if __name__ == "__main__" :
T = 8
N = 3
A = [ [ 0.5 , 0.1 , 0.4 ] , [ 0.3 , 0.5 , 0.2 ] , [ 0.2 , 0.2 , 0.6 ] ]
B = [ [ 0.5 , 0.5 ] , [ 0.4 , 0.6 ] , [ 0.7 , 0.3 ] ]
pi = [ 0.2 , 0.3 , 0.5 ]
O = [ '紅' , '白' , '紅' , '紅' , '白' , '紅' , '白' , '白' ]
o = np. zeros( T, np. int )
for i in range ( T) :
if O[ i] == '白' :
o[ i] = 1
else :
o[ i] = 0
PF, alpha = fore_algorithm( A, B, pi, o, T, N)
PB, beta = back_algorithm( A, B, pi, o, T, N)
print ( "PF:" , PF, "PB:" , PB)
P = alpha[ 4 - 1 ] [ 3 - 1 ] * beta[ 4 - 1 ] [ 3 - 1 ]
print ( "前向後向概率計算可得 P(i4=q3|O,lambda)=" , P / PF)
運行結果:
PF爲前向算法得到的P ( O ∣ λ ) P(O|\lambda) P ( O ∣ λ )
PB爲後向算法得到的P ( O ∣ λ ) P(O|\lambda) P ( O ∣ λ )
(改一下main函數中的輸出值,可以驗算一下第一題的結果)
10.3
題目
在習題10.1中,試用維特比算法求最優路徑
解答
(1)初始化
δ 1 ( 1 ) = π 1 ∗ b 1 ( o 1 ) = 0.2 ∗ 0.5 = 0.1 \delta_1(1) = \pi_1*b_1(o_1)=0.2*0.5=0.1 δ 1 ( 1 ) = π 1 ∗ b 1 ( o 1 ) = 0 . 2 ∗ 0 . 5 = 0 . 1
δ 1 ( 2 ) = π 2 ∗ b 2 ( o 1 ) = 0.4 ∗ 0.4 = 0.16 \delta_1(2) = \pi_2*b_2(o_1)=0.4*0.4=0.16 δ 1 ( 2 ) = π 2 ∗ b 2 ( o 1 ) = 0 . 4 ∗ 0 . 4 = 0 . 1 6
δ 1 ( 3 ) = π 3 ∗ b 3 ( o 1 ) = 0.4 ∗ 0.7 = 0.28 \delta_1(3) = \pi_3*b_3(o_1)=0.4*0.7=0.28 δ 1 ( 3 ) = π 3 ∗ b 3 ( o 1 ) = 0 . 4 ∗ 0 . 7 = 0 . 2 8
(2)遞推
δ t ( i ) = m a x 1 ≤ j ≤ N [ δ t − 1 ( j ) a j i ] b i ( o t ) \delta_t(i) = max_{1\leq j\leq N}[\delta_{t-1}(j)a_{ji}]b_i(o_t) δ t ( i ) = m a x 1 ≤ j ≤ N [ δ t − 1 ( j ) a j i ] b i ( o t )
t = 2
δ 2 ( 1 ) = m a x { 0.1 ∗ 0.5 , 0.16 ∗ 0.3 , 0.28 ∗ 0.2 } ∗ 0.5 = 0.028 ; ψ 2 ( 1 ) = 3 \delta_2(1) = max\{0.1*0.5, 0.16*0.3, 0.28*0.2\}*0.5 = 0.028; \quad\psi_2(1) = 3 δ 2 ( 1 ) = m a x { 0 . 1 ∗ 0 . 5 , 0 . 1 6 ∗ 0 . 3 , 0 . 2 8 ∗ 0 . 2 } ∗ 0 . 5 = 0 . 0 2 8 ; ψ 2 ( 1 ) = 3
δ 2 ( 2 ) = m a x { 0.1 ∗ 0.2 , 0.16 ∗ 0.5 , 0.28 ∗ 0.3 } ∗ 0.6 = 0.0504 ; ψ 2 ( 2 ) = 3 \delta_2(2) = max\{0.1*0.2, 0.16*0.5, 0.28*0.3\}*0.6 = 0.0504;\quad\psi_2(2) = 3 δ 2 ( 2 ) = m a x { 0 . 1 ∗ 0 . 2 , 0 . 1 6 ∗ 0 . 5 , 0 . 2 8 ∗ 0 . 3 } ∗ 0 . 6 = 0 . 0 5 0 4 ; ψ 2 ( 2 ) = 3
δ 2 ( 3 ) = m a x { 0.1 ∗ 0.3 , 0.16 ∗ 0.2 , 0.28 ∗ 0.5 } ∗ 0.3 = 0.042 ; ψ 2 ( 3 ) = 3 \delta_2(3) = max\{0.1*0.3, 0.16*0.2, 0.28*0.5\}*0.3 = 0.042;\quad\psi_2(3) = 3 δ 2 ( 3 ) = m a x { 0 . 1 ∗ 0 . 3 , 0 . 1 6 ∗ 0 . 2 , 0 . 2 8 ∗ 0 . 5 } ∗ 0 . 3 = 0 . 0 4 2 ; ψ 2 ( 3 ) = 3
t=3
δ 3 ( 1 ) = m a x { 0.028 ∗ 0.5 , 0.0504 ∗ 0.3 , 0.042 ∗ 0.2 } ∗ 0.5 = 0.00756 ; ψ 3 ( 1 ) = 2 \delta_3(1) = max\{0.028*0.5, 0.0504*0.3, 0.042*0.2\}*0.5 = 0.00756; \quad\psi_3(1) = 2 δ 3 ( 1 ) = m a x { 0 . 0 2 8 ∗ 0 . 5 , 0 . 0 5 0 4 ∗ 0 . 3 , 0 . 0 4 2 ∗ 0 . 2 } ∗ 0 . 5 = 0 . 0 0 7 5 6 ; ψ 3 ( 1 ) = 2
δ 3 ( 2 ) = m a x { 0.028 ∗ 0.2 , 0.0504 ∗ 0.5 , 0.042 ∗ 0.3 } ∗ 0.4 = 0.01008 ; ψ 3 ( 2 ) = 2 \delta_3(2) = max\{0.028*0.2, 0.0504*0.5, 0.042*0.3\}*0.4 = 0.01008; \quad\psi_3(2) = 2 δ 3 ( 2 ) = m a x { 0 . 0 2 8 ∗ 0 . 2 , 0 . 0 5 0 4 ∗ 0 . 5 , 0 . 0 4 2 ∗ 0 . 3 } ∗ 0 . 4 = 0 . 0 1 0 0 8 ; ψ 3 ( 2 ) = 2
δ 3 ( 3 ) = m a x { 0.028 ∗ 0.3 , 0.0504 ∗ 0.2 , 0.042 ∗ 0.5 } ∗ 0.7 = 0.0147 ; ψ 3 ( 3 ) = 3 \delta_3(3) = max\{0.028*0.3, 0.0504*0.2, 0.042*0.5\}*0.7 = 0.0147; \quad\psi_3(3) = 3 δ 3 ( 3 ) = m a x { 0 . 0 2 8 ∗ 0 . 3 , 0 . 0 5 0 4 ∗ 0 . 2 , 0 . 0 4 2 ∗ 0 . 5 } ∗ 0 . 7 = 0 . 0 1 4 7 ; ψ 3 ( 3 ) = 3
t=4
δ 4 ( 1 ) = m a x { 0.00756 ∗ 0.5 , 0.01008 ∗ 0.3 , 0.0147 ∗ 0.2 } ∗ 0.5 = 0.00189 ; ψ 4 ( 1 ) = 1 \delta_4(1) = max\{0.00756*0.5, 0.01008*0.3, 0.0147*0.2\}*0.5 = 0.00189; \quad\psi_4(1) = 1 δ 4 ( 1 ) = m a x { 0 . 0 0 7 5 6 ∗ 0 . 5 , 0 . 0 1 0 0 8 ∗ 0 . 3 , 0 . 0 1 4 7 ∗ 0 . 2 } ∗ 0 . 5 = 0 . 0 0 1 8 9 ; ψ 4 ( 1 ) = 1
δ 4 ( 2 ) = m a x { 0.00756 ∗ 0.2 , 0.01008 ∗ 0.5 , 0.0147 ∗ 0.3 } ∗ 0.6 = 0.003024 ; ψ 4 ( 2 ) = 2 \delta_4(2) = max\{0.00756*0.2, 0.01008*0.5, 0.0147*0.3\}*0.6 = 0.003024;\quad\psi_4(2) = 2 δ 4 ( 2 ) = m a x { 0 . 0 0 7 5 6 ∗ 0 . 2 , 0 . 0 1 0 0 8 ∗ 0 . 5 , 0 . 0 1 4 7 ∗ 0 . 3 } ∗ 0 . 6 = 0 . 0 0 3 0 2 4 ; ψ 4 ( 2 ) = 2
δ 4 ( 3 ) = m a x { 0.00756 ∗ 0.3 , 0.01008 ∗ 0.2 , 0.0147 ∗ 0.5 } ∗ 0.3 = 0.002205 ; ψ 4 ( 3 ) = 3 \delta_4(3) = max\{0.00756*0.3, 0.01008*0.2, 0.0147*0.5\}*0.3 = 0.002205;\quad\psi_4(3) = 3 δ 4 ( 3 ) = m a x { 0 . 0 0 7 5 6 ∗ 0 . 3 , 0 . 0 1 0 0 8 ∗ 0 . 2 , 0 . 0 1 4 7 ∗ 0 . 5 } ∗ 0 . 3 = 0 . 0 0 2 2 0 5 ; ψ 4 ( 3 ) = 3
(3)終止
P ∗ = m a x 1 ≤ i ≤ 3 δ 4 ( i ) = 0.003024 P^*=max_{1\leq i\leq 3}\delta_4(i) = 0.003024 P ∗ = m a x 1 ≤ i ≤ 3 δ 4 ( i ) = 0 . 0 0 3 0 2 4
i 4 ∗ = a r g m a x i [ δ 4 ( i ) ] = 2 i_4^*=argmax_i[\delta_4(i)] = 2 i 4 ∗ = a r g m a x i [ δ 4 ( i ) ] = 2
(4)最優路徑回溯
i 3 ∗ = ψ 4 ( i 4 ∗ ) = 2 i_3^*=\psi_4(i_4^*) = 2 i 3 ∗ = ψ 4 ( i 4 ∗ ) = 2
i 2 ∗ = ψ 3 ( i 3 ∗ ) = 2 i_2^*=\psi_3(i_3^*) = 2 i 2 ∗ = ψ 3 ( i 3 ∗ ) = 2
i 1 ∗ = ψ 2 ( i 2 ∗ ) = 3 i_1^*=\psi_2(i_2^*) = 3 i 1 ∗ = ψ 2 ( i 2 ∗ ) = 3
I ∗ = ( i 1 ∗ , i 2 ∗ , i 3 ∗ , i 4 ∗ ) = ( 3 , 2 , 2 , 2 ) I^*=(i_1^*,i_2^*,i_3^*,i_4^*)=(3,2,2,2) I ∗ = ( i 1 ∗ , i 2 ∗ , i 3 ∗ , i 4 ∗ ) = ( 3 , 2 , 2 , 2 )
用代碼驗算一下~~
import numpy as np
def viterbi ( A, B, pai, o, T, N) :
a = [ ]
i_star = np. zeros( T, np. int )
delta = np. zeros( ( T, N) )
psi = np. zeros( ( T, N) , np. int )
for i in range ( N) :
delta[ 0 ] [ i] = pai[ i] * B[ i] [ o[ 0 ] ]
psi[ 0 ] [ i] = 0
for t in range ( T- 1 ) :
t = t + 1
for i in range ( N) :
for j in range ( N) :
a. append( delta[ t- 1 ] [ j] * A[ j] [ i] )
delta[ t] [ i] = np. max ( a) * B[ i] [ o[ t] ]
psi[ t] [ i] = np. argmax( a, axis= 0 )
a = [ ]
psi = psi + 1
P_star = np. max ( delta[ T- 1 ] )
i_star[ T- 1 ] = np. argmax( delta[ T- 1 ] , axis= 0 ) + 1
for t in range ( T- 1 ) :
t = T - t - 2
a = t + 1
b = i_star[ t+ 1 ] - 1
i_star[ t] = psi[ a] [ b]
return i_star, P_star
if __name__ == "__main__" :
T = 4
N = 3
O = [ '紅' , '白' , '紅' , '白' ]
A = [ [ 0.5 , 0.2 , 0.3 ] ,
[ 0.3 , 0.5 , 0.2 ] ,
[ 0.2 , 0.3 , 0.5 ] ]
B = [ [ 0.5 , 0.5 ] ,
[ 0.4 , 0.6 ] ,
[ 0.7 , 0.3 ] ]
p_i = [ 0.2 , 0.4 , 0.4 ]
o = np. zeros( T, np. int )
for i in range ( T) :
if O[ i] == '白' :
o[ i] = 1
else :
o[ i] = 0
I, P = viterbi( A, B, p_i, o, T, N)
print ( '最優路徑: ' )
print ( I)
print ( '最優路徑的概率:' )
print ( P)
運行結果:
10.4
題目
試用前向概率和後向概率推導
P ( O ∣ λ ) = ∑ i = 1 N ∑ j = 1 N α t ( i ) a i j b j ( o t + 1 ) β t + 1 ( j ) , t = 1 , 2 , . . . , T − 1 P(O|\lambda) = \sum^N_{i=1}\sum^N_{j=1}\alpha_t(i)a_{ij}b_j(o_{t+1})\beta_{t+1}(j), t=1,2,...,T-1 P ( O ∣ λ ) = ∑ i = 1 N ∑ j = 1 N α t ( i ) a i j b j ( o t + 1 ) β t + 1 ( j ) , t = 1 , 2 , . . . , T − 1
這個式子是在書中的公式(10.21),書上是用前向概率和後向概率文字推導得出,α t ( i ) a i j b j ( o t + 1 ) β t + 1 ( j ) \alpha_t(i)a_{ij}b_j(o_{t+1})\beta_{t+1}(j) α t ( i ) a i j b j ( o t + 1 ) β t + 1 ( j ) 等價於p ( o 1 , o 2 , . . . , o T , i t = q i , i t + 1 = q j ∣ λ ) p(o_1,o_2,...,o_T,i_t=q_i,i_{t+1}=q_j|\lambda) p ( o 1 , o 2 , . . . , o T , i t = q i , i t + 1 = q j ∣ λ ) ,兩次求和則q i , q j q_i,q_j q i , q j 取到所有可能的情況。
詳細的數學證明可以參考:https://blog.csdn.net/weixin_35479108/article/details/87907429
這裏補充一個數學歸納法的證明
(1)t = 1
P ( O ∣ λ ) = ∑ i = 1 N ∑ i = 1 N α 1 ( i ) a i j b j ( o 2 ) β 2 ( j ) = ∑ i = 1 N α 1 ( i ) ∑ i = 1 N a i j b j ( o 2 ) β 2 ( j ) = ∑ i = 1 N α 1 ( i ) β 1 ( i ) = ∑ i = 1 N π i b i ( o 1 ) β 1 ( i ) P(O|\lambda)\\ = \sum^N_{i=1}\sum^N_{i=1}\alpha_1(i)a_{ij}b_j(o_2)\beta_{2}(j)\\=\sum^N_{i=1}\alpha_1(i)\sum^N_{i=1}a_{ij}b_j(o_2)\beta_{2}(j)\\=\sum^N_{i=1}\alpha_1(i)\beta_1(i)\\=\sum^N_{i=1}\pi_ib_i(o_1)\beta_1(i) P ( O ∣ λ ) = ∑ i = 1 N ∑ i = 1 N α 1 ( i ) a i j b j ( o 2 ) β 2 ( j ) = ∑ i = 1 N α 1 ( i ) ∑ i = 1 N a i j b j ( o 2 ) β 2 ( j ) = ∑ i = 1 N α 1 ( i ) β 1 ( i ) = ∑ i = 1 N π i b i ( o 1 ) β 1 ( i )
這個即爲公式(10.21),後向算法的定義式,滿足條件
(2)假設t=k時等式成立(t = 1,2,…T-2)
即P ( O ∣ λ ) = ∑ i = 1 N ∑ j = 1 N α k ( i ) a i j b j ( o k + 1 ) β k + 1 ( j ) P(O|\lambda) = \sum^N_{i=1}\sum^N_{j=1}\alpha_k(i)a_{ij}b_j(o_{k+1})\beta_{k+1}(j) P ( O ∣ λ ) = ∑ i = 1 N ∑ j = 1 N α k ( i ) a i j b j ( o k + 1 ) β k + 1 ( j )
那麼對於t=k+1,有
∑ i = 1 N ∑ j = 1 N α k + 1 ( i ) a i j b j ( o k + 2 ) β k + 2 ( j ) = ∑ i = 1 N α k + 1 ( i ) ∑ j = 1 N a i j b j ( o k + 2 ) β k + 2 ( j ) = ∑ i = 1 N α k + 1 ( i ) β k + 1 ( i ) = ∑ i = 1 N β k + 1 ( i ) [ ∑ j = 1 N α k ( j ) a i j ] b i ( o k + 1 ) = ∑ i = 1 N ∑ j = 1 N α k ( i ) a i j b j ( o k + 1 ) β k + 1 ( j ) = P ( O ∣ λ ) \sum^N_{i=1}\sum^N_{j=1}\alpha_{k+1}(i)a_{ij}b_j(o_{k+2})\beta_{k+2}(j)\\=\sum^N_{i=1}\alpha_{k+1}(i)\sum^N_{j=1}a_{ij}b_j(o_{k+2})\beta_{k+2}(j)\\=\sum^N_{i=1}\alpha_{k+1}(i)\beta_{k+1}(i)\\=\sum^N_{i=1}\beta_{k+1}(i)[\sum_{j=1}^N\alpha_k(j)a_{ij}]b_i(o_{k+1})\\=\sum^N_{i=1}\sum^N_{j=1}\alpha_k(i)a_{ij}b_j(o_{k+1})\beta_{k+1}(j)\\=P(O|\lambda) ∑ i = 1 N ∑ j = 1 N α k + 1 ( i ) a i j b j ( o k + 2 ) β k + 2 ( j ) = ∑ i = 1 N α k + 1 ( i ) ∑ j = 1 N a i j b j ( o k + 2 ) β k + 2 ( j ) = ∑ i = 1 N α k + 1 ( i ) β k + 1 ( i ) = ∑ i = 1 N β k + 1 ( i ) [ ∑ j = 1 N α k ( j ) a i j ] b i ( o k + 1 ) = ∑ i = 1 N ∑ j = 1 N α k ( i ) a i j b j ( o k + 1 ) β k + 1 ( j ) = P ( O ∣ λ )
得證
解答
10.5
題目
比較維特比算法中變量δ \delta δ 的計算和前向算法中變量α \alpha α 的計算的主要區別.
解答
計算變量α \alpha α 的時候直接對上個的結果進行數值計算,而計算變量δ \delta δ 需要在上個結果計算的基礎上選擇最大值。