1、viterbi算法应用场景
viterbi算法是viterbi发明的,最初用于数字通信中解卷积,现在也被用于语音识别,词性标注等。其属于一种动态规划算法。
简单来说,存在这样一种任务场景:
已知观察序列
{
o
1
,
o
2
,
.
.
.
,
o
T
}
\{o_1,o_2,...,o_T\}
{o1,o2,...,oT},希望知道对应的最可能的隐状态序列
{
h
1
,
h
2
,
.
.
.
,
h
T
}
\{h_1,h_2,...,h_T\}
{h1,h2,...,hT}。
在隐马尔可夫模型假设中有:
初始状态概率:
π
i
=
p
(
h
1
=
i
)
,
i
=
1
,
.
.
.
,
m
\pi_i=p(h_1=i),i=1,...,m
πi=p(h1=i),i=1,...,m,
m
m
m为隐状态数量。
转移概率:
a
i
j
=
p
(
h
t
=
j
∣
h
t
−
1
=
i
)
a_{ij}=p(h_t=j|h_{t-1}=i)
aij=p(ht=j∣ht−1=i), 即在任意时刻
t
−
1
t-1
t−1从状态
i
i
i转移到状态
j
j
j的概率,
t
=
2
,
.
.
.
T
t=2,...T
t=2,...T。
观察概率:
b
i
(
k
)
=
p
(
o
t
=
k
∣
h
t
=
i
)
b_i(k)=p(o_t=k|h_t=i)
bi(k)=p(ot=k∣ht=i),即在任意时刻状态
i
i
i生成观察
o
t
=
k
o_t=k
ot=k的概率。
假设模型概率
π
i
\pi_i
πi,
a
i
j
a_{ij}
aij,
b
i
(
k
)
b_i(k)
bi(k) 都已知,则问题形式化为求:
h
1
∗
,
.
.
.
.
,
h
T
∗
=
arg
max
h
1
,
.
.
.
,
h
T
p
(
h
1
,
.
.
.
,
h
T
∣
o
1
,
.
.
.
,
o
T
)
=
arg
max
h
1
,
.
.
.
,
h
T
p
(
h
1
,
.
.
.
,
h
T
,
o
1
,
.
.
.
,
o
T
)
h_1^*,....,h_T^*=\arg\max\limits_{h_1,...,h_T} p(h_1,...,h_T|o_1,...,o_T)=\arg\max\limits_{h_1,...,h_T} p(h_1,...,h_T,o_1,...,o_T)
h1∗,....,hT∗=argh1,...,hTmaxp(h1,...,hT∣o1,...,oT)=argh1,...,hTmaxp(h1,...,hT,o1,...,oT)。
2、viterbi算法的导出
此任务为多步骤最佳决策或路径问题,自然考虑使用动态规划思想求解,需要构造递推式。
由于目标是求最大可能性(概率)的状态路径,因此要求的是所有路径中的最大概率。
假设
T
T
T时刻路径最大概率:
max
h
1
,
.
.
.
,
h
T
p
(
h
1
,
.
.
.
,
h
T
−
1
,
h
T
,
o
1
,
o
2
,
.
.
.
,
o
T
)
=
max
h
T
max
h
1
,
.
.
.
,
h
T
−
1
p
(
h
1
,
.
.
.
,
h
T
−
1
,
h
T
,
o
1
,
o
2
,
.
.
.
,
o
T
)
=
max
h
T
max
h
1
,
.
.
.
,
h
T
−
1
P
(
h
1
,
.
.
.
,
h
T
−
1
,
o
1
,
o
2
,
.
.
.
,
o
T
−
1
)
p
(
h
T
∣
h
T
−
1
)
p
(
o
T
∣
h
T
)
\max\limits_{h_1,...,h_{T}}p(h_1,...,h_{T-1},h_{T},o_1,o_2,...,o_T)\\ =\max\limits_{h_T}\max\limits_{h_1,...,h_{T-1}}p(h_1,...,h_{T-1},h_{T},o_1,o_2,...,o_T)\\ =\max\limits_{h_T}\max\limits_{h_1,...,h_{T-1}}P(h_1,...,h_{T-1},o_1,o_2,...,o_{T-1})p(h_T|h_{T-1})p(o_T|h_T)
h1,...,hTmaxp(h1,...,hT−1,hT,o1,o2,...,oT)=hTmaxh1,...,hT−1maxp(h1,...,hT−1,hT,o1,o2,...,oT)=hTmaxh1,...,hT−1maxP(h1,...,hT−1,o1,o2,...,oT−1)p(hT∣hT−1)p(oT∣hT)
此时貌似看到了递归结构:
max
h
1
,
.
.
.
,
h
T
p
(
h
1
,
.
.
.
,
h
T
−
1
,
h
T
,
o
1
,
o
2
,
.
.
.
,
o
T
)
=
max
h
T
max
h
1
,
.
.
.
,
h
T
−
1
P
(
h
1
,
.
.
.
,
h
T
−
1
,
o
1
,
o
2
,
.
.
.
,
o
T
−
1
)
p
(
h
T
∣
h
T
−
1
)
p
(
o
T
∣
h
T
)
\max\limits_{h_1,...,h_{T}}p(h_1,...,h_{T-1},h_{T},o_1,o_2,...,o_T)\\ =\max\limits_{h_T}\max\limits_{h_1,...,h_{T-1}}P(h_1,...,h_{T-1},o_1,o_2,...,o_{T-1})p(h_T|h_{T-1})p(o_T|h_T)
h1,...,hTmaxp(h1,...,hT−1,hT,o1,o2,...,oT)=hTmaxh1,...,hT−1maxP(h1,...,hT−1,o1,o2,...,oT−1)p(hT∣hT−1)p(oT∣hT)---------------
(
1
)
(1)
(1)
错误推导:
记
M
(
T
)
=
max
h
1
,
.
.
.
,
h
T
p
(
h
1
,
.
.
.
,
h
T
−
1
,
h
T
,
o
1
,
o
2
,
.
.
.
,
o
T
)
M(T)=\max\limits_{h_1,...,h_{T}}p(h_1,...,h_{T-1},h_{T},o_1,o_2,...,o_T)
M(T)=h1,...,hTmaxp(h1,...,hT−1,hT,o1,o2,...,oT),
则
M
(
T
)
=
M
(
T
−
1
)
max
h
T
p
(
h
T
∣
h
T
−
1
)
p
(
o
T
∣
h
T
)
M(T)=M(T-1)\max\limits_{h_T}p(h_T|h_{T-1})p(o_T|h_T)
M(T)=M(T−1)hTmaxp(hT∣hT−1)p(oT∣hT)
实际上
(
1
)
(1)
(1)式中
max
h
1
,
.
.
.
,
h
T
−
1
P
(
h
1
,
.
.
.
,
h
T
−
1
,
o
1
,
o
2
,
.
.
.
,
o
T
−
1
)
\max\limits_{h_1,...,h_{T-1}}P(h_1,...,h_{T-1},o_1,o_2,...,o_{T-1})
h1,...,hT−1maxP(h1,...,hT−1,o1,o2,...,oT−1)不能被单独计算,因为
p
(
h
T
∣
h
T
−
1
)
p(h_T|h_{T-1})
p(hT∣hT−1)中还含有
h
T
−
1
h_{T-1}
hT−1。
如果
h
T
−
1
h_{T-1}
hT−1取
max
h
1
,
.
.
.
,
h
T
−
1
P
(
h
1
,
.
.
.
,
h
T
−
1
,
o
1
,
o
2
,
.
.
.
,
o
T
−
1
)
\max\limits_{h_1,...,h_{T-1}}P(h_1,...,h_{T-1},o_1,o_2,...,o_{T-1})
h1,...,hT−1maxP(h1,...,hT−1,o1,o2,...,oT−1)的
h
T
−
1
∗
h_{T-1}^*
hT−1∗,则得到基于贪心的算法。
正确推导1:
记
M
(
T
,
h
T
)
=
max
h
1
,
.
.
.
,
h
T
−
1
p
(
h
1
,
.
.
.
,
h
T
−
1
,
o
1
,
o
2
,
.
.
.
,
o
T
−
1
)
p
(
h
T
∣
h
T
−
1
)
M(T,h_T)=\max\limits_{h_1,...,h_{T-1}}p(h_1,...,h_{T-1},o_1,o_2,...,o_{T-1})p(h_T|h_{T-1})
M(T,hT)=h1,...,hT−1maxp(h1,...,hT−1,o1,o2,...,oT−1)p(hT∣hT−1),
则由(1)式得
M
(
T
,
h
T
)
=
max
h
T
−
1
max
h
1
,
.
.
.
,
h
T
−
2
p
(
h
1
,
.
.
.
,
h
T
−
2
,
o
1
,
o
2
,
.
.
.
,
o
T
−
2
)
p
(
h
T
−
1
∣
h
T
−
2
)
p
(
o
T
−
1
∣
h
T
−
1
)
p
(
h
T
∣
h
T
−
1
)
=
max
h
T
−
1
M
(
T
−
1
,
h
T
−
1
)
p
(
o
T
−
1
∣
h
T
−
1
)
p
(
h
T
∣
h
T
−
1
)
M(T,h_T) \\=\max\limits_{h_{T-1}}\max\limits_{h_1,...,h_{T-2}}p(h_1,...,h_{T-2},o_1,o_2,...,o_{T-2})p(h_{T-1}|h_{T-2})p(o_{T-1}|h_{T-1})p(h_T|h_{T-1}) \\=\max\limits_{h_{T-1}}M(T-1,h_{T-1})p(o_{T-1}|h_{T-1})p(h_T|h_{T-1})
M(T,hT)=hT−1maxh1,...,hT−2maxp(h1,...,hT−2,o1,o2,...,oT−2)p(hT−1∣hT−2)p(oT−1∣hT−1)p(hT∣hT−1)=hT−1maxM(T−1,hT−1)p(oT−1∣hT−1)p(hT∣hT−1)
其中
M
(
T
−
1
,
h
T
−
1
)
=
max
h
1
,
.
.
.
,
h
T
−
2
p
(
h
1
,
.
.
.
,
h
T
−
2
,
o
1
,
o
2
,
.
.
.
,
o
T
−
2
)
p
(
h
T
−
1
∣
h
T
−
2
)
M(T-1,h_{T-1})=\max\limits_{h_1,...,h_{T-2}}p(h_1,...,h_{T-2},o_1,o_2,...,o_{T-2})p(h_{T-1}|h_{T-2})
M(T−1,hT−1)=h1,...,hT−2maxp(h1,...,hT−2,o1,o2,...,oT−2)p(hT−1∣hT−2)。
M
(
2
,
h
2
)
=
max
h
1
p
(
h
1
,
o
1
)
p
(
h
2
∣
h
1
)
M(2,h_{2})=\max\limits_{h_1}p(h_1,o_1)p(h_2|h_1)
M(2,h2)=h1maxp(h1,o1)p(h2∣h1)
M
(
1
,
h
1
)
=
p
(
h
1
)
M(1,h_{1})=p(h_1)
M(1,h1)=p(h1)
正确推导2:
记:
M
(
T
,
h
T
)
=
max
h
1
,
.
.
.
,
h
T
−
1
p
(
h
1
,
.
.
.
,
h
T
−
1
,
o
1
,
o
2
,
.
.
.
,
o
T
−
1
)
p
(
h
T
∣
h
T
−
1
)
p
(
o
T
∣
h
T
)
=
max
h
1
,
.
.
.
,
h
T
−
1
p
(
h
1
,
.
.
.
,
h
T
,
o
1
,
o
2
,
.
.
.
,
o
T
)
M(T,h_T)=\max\limits_{h_1,...,h_{T-1}}p(h_1,...,h_{T-1},o_1,o_2,...,o_{T-1})p(h_T|h_{T-1})p(o_T|h_T) \\=\max\limits_{h_1,...,h_{T-1}}p(h_1,...,h_{T},o_1,o_2,...,o_{T})
M(T,hT)=h1,...,hT−1maxp(h1,...,hT−1,o1,o2,...,oT−1)p(hT∣hT−1)p(oT∣hT)=h1,...,hT−1maxp(h1,...,hT,o1,o2,...,oT),
则由(1)式得
M
(
T
,
h
T
)
=
max
h
T
−
1
M
(
T
−
1
,
h
T
−
1
)
p
(
h
T
∣
h
T
−
1
)
p
(
o
T
∣
h
T
)
M(T,h_T)=\max\limits_{h_{T-1}}M(T-1,h_{T-1})p(h_{T}|h_{T-1})p(o_T|h_T)
M(T,hT)=hT−1maxM(T−1,hT−1)p(hT∣hT−1)p(oT∣hT)
其中
M
(
T
−
1
,
h
T
−
1
)
=
max
h
1
,
.
.
.
,
h
T
−
2
p
(
h
1
,
.
.
.
,
h
T
−
1
,
o
1
,
o
2
,
.
.
.
,
o
T
−
1
)
M(T-1,h_{T-1})=\max\limits_{h_1,...,h_{T-2}}p(h_1,...,h_{T-1},o_1,o_2,...,o_{T-1})
M(T−1,hT−1)=h1,...,hT−2maxp(h1,...,hT−1,o1,o2,...,oT−1)。
M
(
1
,
h
1
)
=
p
(
h
1
,
o
1
)
M(1,h_{1})=p(h_1,o_1)
M(1,h1)=p(h1,o1)。
最优状态路径推导(从后向前):
已知
T
T
T时刻的最大概率
max
h
T
M
(
T
,
h
T
)
\max\limits_{h_T}M(T,h_T)
hTmaxM(T,hT)以及最佳状态
h
T
∗
=
arg
max
h
T
M
(
T
,
h
T
)
h_T^*=\arg\max\limits_{h_T}M(T,h_T)
hT∗=arghTmaxM(T,hT),则需要查找得到最大概率
M
(
T
,
h
T
∗
)
M(T,h_T^*)
M(T,hT∗)的
h
T
−
1
∗
h_{T-1}^*
hT−1∗。
M
(
T
,
h
T
∗
)
=
max
h
T
−
1
M
(
T
−
1
,
h
T
−
1
)
p
(
h
T
∗
∣
h
T
−
1
)
p
(
o
T
∣
h
T
∗
)
M(T,h_T^*)=\max\limits_{h_{T-1}}M(T-1,h_{T-1})p(h_{T}^*|h_{T-1})p(o_T|h_T^*)
M(T,hT∗)=hT−1maxM(T−1,hT−1)p(hT∗∣hT−1)p(oT∣hT∗),
即
h
T
−
1
∗
=
arg
max
h
T
−
1
M
(
T
−
1
,
h
T
−
1
)
p
(
h
T
∗
∣
h
T
−
1
)
p
(
o
T
∣
h
T
∗
)
h_{T-1}^*=\arg\max\limits_{h_{T-1}} M(T-1,h_{T-1})p(h_{T}^*|h_{T-1})p(o_T|h_T^*)
hT−1∗=arghT−1maxM(T−1,hT−1)p(hT∗∣hT−1)p(oT∣hT∗)。
为减少计算量,可以在正向递推时用二维矩阵记录路径依赖关系。
D
(
t
,
h
t
)
=
h
t
−
1
=
arg
max
h
t
−
1
M
(
t
−
1
,
h
t
−
1
)
p
(
h
t
∣
h
t
−
1
)
p
(
o
t
∣
h
t
)
D(t,h_{t}) = h_{t-1} = \arg\max\limits_{h_{t-1}} M(t-1,h_{t-1})p(h_{t}|h_{t-1})p(o_t|h_t)
D(t,ht)=ht−1=arght−1maxM(t−1,ht−1)p(ht∣ht−1)p(ot∣ht)。
注意1:
有时候可能试图假设已知
t
t
t时刻最佳路径
h
1
∗
,
.
.
.
,
h
t
∗
h_1^*,...,h_{t}^*
h1∗,...,ht∗,推导
t
+
1
t+1
t+1时刻的最佳路径
h
1
∗
∗
,
.
.
.
,
h
t
+
1
∗
∗
h_1^{**},...,h_{t+1}^{**}
h1∗∗,...,ht+1∗∗。但是需要知道
t
+
1
t+1
t+1时刻的最佳路径可能不包含
t
t
t时刻最佳路径
h
1
∗
,
.
.
.
,
h
t
∗
h_1^*,...,h_{t}^*
h1∗,...,ht∗。因此
t
+
1
t+1
t+1时刻最佳路径的概率
P
(
h
1
∗
∗
,
.
.
.
,
h
t
+
1
∗
∗
,
o
1
,
o
2
,
.
.
.
,
o
t
+
1
)
P(h_1^{**},...,h_{t+1}^{**},o_1,o_2,...,o_{t+1})
P(h1∗∗,...,ht+1∗∗,o1,o2,...,ot+1)不能由
t
t
t时刻最佳佳路径的概率
P
(
h
1
∗
,
.
.
.
,
h
t
∗
,
o
1
,
o
2
,
.
.
.
,
o
t
)
P(h_1^*,...,h_{t}^*,o_1,o_2,...,o_{t})
P(h1∗,...,ht∗,o1,o2,...,ot)直接计算得到。
p
(
h
1
∗
∗
,
.
.
.
,
h
T
−
1
∗
∗
,
h
T
∗
∗
,
o
1
,
o
2
,
.
.
.
,
o
T
)
≠
max
h
T
P
(
h
1
∗
,
.
.
.
,
h
T
−
1
∗
,
h
T
,
o
1
,
o
2
,
.
.
.
,
o
T
)
p
(
h
T
∣
h
T
−
1
∗
)
p
(
o
T
∣
h
T
)
p(h_1^{**},...,h_{T-1}^{**},h_{T}^{**},o_1,o_2,...,o_T) \neq\max\limits_{h_{T}}P(h_1^*,...,h_{T-1}^*,h_{T},o_1,o_2,...,o_{T})p(h_T|h_{T-1}^*)p(o_T|h_T)
p(h1∗∗,...,hT−1∗∗,hT∗∗,o1,o2,...,oT)=hTmaxP(h1∗,...,hT−1∗,hT,o1,o2,...,oT)p(hT∣hT−1∗)p(oT∣hT)
如果假设近似相等得到贪心算法。
注意2:
假设
h
1
∗
,
.
.
.
,
h
t
∗
h_1^*,...,h_{t}^*
h1∗,...,ht∗是从
1
1
1到
t
t
t时刻最可能的路径(概率最大)。
则
h
1
∗
,
.
.
.
,
h
t
−
1
∗
h_1^*,...,h_{t-1}^*
h1∗,...,ht−1∗不是从
1
1
1到
t
−
1
t-1
t−1时刻最可能路径。
但是
h
1
∗
,
.
.
.
,
h
t
−
1
∗
h_1^*,...,h_{t-1}^*
h1∗,...,ht−1∗是从
1
1
1到
t
−
1
t-1
t−1时刻,经过
h
t
−
1
∗
h_{t-1}^*
ht−1∗的所有路径中最可能的一条。
3、篱笆网络有向图的最短路径问题
任何基于图的最短路径问题都可以通过动态规划来解决。而viterbi算法则是用于解决一种特殊图的最短路径问题。这个特殊图但就是篱笆网络有向图。
假设篱笆网络节点为 h i t h^t_{i} hit, t = 1 , . . . , T t=1,...,T t=1,...,T, i = 1 , . . . , K i=1,...,K i=1,...,K为。 a i j t a^{t}_{ij} aijt为从节点 h i t h^t_{i} hit到节点 h j t + 1 h^{t+1}_{j} hjt+1的权重, t = 1 , . . . , T − 1 t=1,...,T-1 t=1,...,T−1。
则从第一层节点到最后一层节点的最短路径 M L ML ML按下列递归步骤求解:
设
M
(
T
,
j
)
M(T,j)
M(T,j)为从第
1
1
1层节点
h
j
T
h^{T}_j
hjT的最短路径,则
M
L
=
min
j
M
(
T
,
j
)
ML=\min\limits_{j}M(T,j)
ML=jminM(T,j)。
如果
M
(
T
,
j
)
M(T,j)
M(T,j)最优路径经过节点
h
i
T
−
1
h^{T-1}_i
hiT−1,则从第一层到
h
i
T
−
1
h^{T-1}_i
hiT−1的子路径也是最优路径。因为最优路径必然经过第
T
−
1
T-1
T−1节点中的一个,因此下式成立:
M
(
T
,
j
)
=
min
i
M
(
T
−
1
,
i
)
+
a
i
j
T
−
1
M(T,j)=\min\limits_iM(T-1,i)+a^{T-1}_{ij}
M(T,j)=iminM(T−1,i)+aijT−1。
M
(
1
,
k
)
=
0
M(1,k)=0
M(1,k)=0。
也可以从前向后递归:
设
M
(
1
,
i
)
M(1,i)
M(1,i)为从节点
h
i
1
h^{1}_i
hi1到第
T
T
T层的最短路径,则
M
L
=
min
i
M
(
1
,
i
)
ML=\min\limits_{i}M(1,i)
ML=iminM(1,i)。
M
(
1
,
j
)
=
min
i
M
(
2
,
j
)
+
a
i
j
2
M(1,j)=\min\limits_iM(2,j)+a^{2}_{ij}
M(1,j)=iminM(2,j)+aij2。
M
(
T
,
k
)
=
0
M(T,k)=0
M(T,k)=0。