viterbi算法与动态规划

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=jht1=i), 即在任意时刻 t − 1 t-1 t1从状态 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=kht=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,...,hTo1,...,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,...,hT1,hT,o1,o2,...,oT)=hTmaxh1,...,hT1maxp(h1,...,hT1,hT,o1,o2,...,oT)=hTmaxh1,...,hT1maxP(h1,...,hT1,o1,o2,...,oT1)p(hThT1)p(oThT)
此时貌似看到了递归结构:
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,...,hT1,hT,o1,o2,...,oT)=hTmaxh1,...,hT1maxP(h1,...,hT1,o1,o2,...,oT1)p(hThT1)p(oThT)--------------- ( 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,...,hT1,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(T1)hTmaxp(hThT1)p(oThT)

实际上 ( 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,...,hT1maxP(h1,...,hT1,o1,o2,...,oT1)不能被单独计算,因为 p ( h T ∣ h T − 1 ) p(h_T|h_{T-1}) p(hThT1)中还含有 h T − 1 h_{T-1} hT1
如果 h T − 1 h_{T-1} hT1 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,...,hT1maxP(h1,...,hT1,o1,o2,...,oT1) h T − 1 ∗ h_{T-1}^* hT1,则得到基于贪心的算法。

正确推导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,...,hT1maxp(h1,...,hT1,o1,o2,...,oT1)p(hThT1)
则由(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)=hT1maxh1,...,hT2maxp(h1,...,hT2,o1,o2,...,oT2)p(hT1hT2)p(oT1hT1)p(hThT1)=hT1maxM(T1,hT1)p(oT1hT1)p(hThT1)
其中 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(T1,hT1)=h1,...,hT2maxp(h1,...,hT2,o1,o2,...,oT2)p(hT1hT2)
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(h2h1)
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,...,hT1maxp(h1,...,hT1,o1,o2,...,oT1)p(hThT1)p(oThT)=h1,...,hT1maxp(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)=hT1maxM(T1,hT1)p(hThT1)p(oThT)
其中 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(T1,hT1)=h1,...,hT2maxp(h1,...,hT1,o1,o2,...,oT1)
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}^* hT1
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)=hT1maxM(T1,hT1)p(hThT1)p(oThT)
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^*) hT1=arghT1maxM(T1,hT1)p(hThT1)p(oThT)
为减少计算量,可以在正向递推时用二维矩阵记录路径依赖关系。
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)=ht1=arght1maxM(t1,ht1)p(htht1)p(otht)

注意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,...,hT1,hT,o1,o2,...,oT)=hTmaxP(h1,...,hT1,hT,o1,o2,...,oT)p(hThT1)p(oThT)
如果假设近似相等得到贪心算法。

注意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,...,ht1不是从 1 1 1 t − 1 t-1 t1时刻最可能路径。
但是 h 1 ∗ , . . . , h t − 1 ∗ h_1^*,...,h_{t-1}^* h1,...,ht1是从 1 1 1 t − 1 t-1 t1时刻,经过 h t − 1 ∗ h_{t-1}^* ht1的所有路径中最可能的一条。

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,...,T1

则从第一层节点到最后一层节点的最短路径 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 hiT1,则从第一层到 h i T − 1 h^{T-1}_i hiT1的子路径也是最优路径。因为最优路径必然经过第 T − 1 T-1 T1节点中的一个,因此下式成立:
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(T1,i)+aijT1
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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值