动态规划与维特比算法

姓名:wagsyang
时间:星期五, 23. 十二月 2016 04:15下午


动态规划

对于一个求最短路径问题,比如:

我们可以枚举出每条路径,然后计算最短路径。在这个过程中,有些路径被重复计算,比如,distance(A-B1-C1-D1-E)和distance(A-B1-C1-D2-E),重复计算了distance(A-B1-C1),这样大大增加了运算量。使用动态规划可以避免重复计算。
动态规划的思想是通过将一个问题拆解为子问题,子问题拆解为子子问题,…,最后只计算一次这样子问题,子子问题,…,并把这些计算结果存储起来。当需要计算某个目标问题时,只需要递归地计算这个目标问题拆解的子问题,这些子问题只被计算一次,并保存,避免了重复计算。
比如以上的最短路径问题:

JN(x)=minSN(x){d[x,SN(x)+JN1[SN(x)]}J1(x)=d(x,E)

其中, JN(x) 表示由状态x到终点E的距离, SN(x) 表示状态为x的下一级的选取状态。例如, J2(C1) 表示为C级的C1状态到终点E的距离, S2(C1)=D1 表示C1状态的下一级选择的状态为D1(原因如下)。
具体地:
N=1(D级)
J1(D1)=3J1(D2)=2J1(D3)=5

N=2(C级)
J2(C1)=mind(C1,D1)+J1(D1)d(C1,D2)+J1(D2)d(C1,D3)+J1(D3)=min3+12+35+2=4:S2(C1)=D1

J2(C2)=mind(C2,D1)+J1(D1)d(C2,D2)+J1(D2)d(C2,D3)+J1(D3)=min3+42+15+2=3:S2(C2)=D2

J2(C3)=mind(C3,D1)+J1(D1)d(C3,D2)+J1(D2)d(C3,D3)+J1(D3)=min3+32+65+4=6:S2(C3)=D1

N=3(B级)
J3(B1)=mind(B1,C1)+J2(C1)d(B1,C2)+J2(C2)d(B1,C3)+J2(C3)=min2+43+34+6=6:S3(B1)=C1/C2

J3(B2)=mind(B2,C1)+J2(C1)d(B2,C2)+J2(C2)d(B2,C3)+J2(C3)=min1+42+33+6=5:S3(B2)=C1/C2

J3(B3)=mind(B3,C1)+J2(C1)d(B3,C2)+J2(C2)d(B3,C3)+J2(C3)=min3+44+31+6=7:S3(B3)=C1/C2/C3

N=4(A级)
J4(A)=mind(A,B1)+J1(B1)d(A,B2)+J1(B2)d(A,B3)+J1(B3)=min3+65+54+7=9:S4(A)=B1

最短路线为:A-B1-C1-D1-E或A-B1-C2-D2-E
通过以上例子可以很清楚地看到动态规划的思想——逆向递推,求子问题。


维特比算法

动态规划用途十分广泛,维特比算法是动态规划在HMM中的应用。因此其思想也还是动态规划。
维特比算法用于解决HMM的预测或者叫解码问题。具体的,已知模型参数 λ=(A,B,π) 和观测序列 O=(o1,o2,...,oT) 求在该观测序列下的概率 P(I|O) 最大的状态序列 I=(i1,i2,...,iT)
对于 P(I|O) 不好解决,我们可以用贝叶斯公式进行变换:

P(I|O)=P(IO)P(O)

对于分母P(O)的计算属于HMM的概率计算问题,因此重点在于解决分子项P(IO)。最终问题转化为:
maxi1,..,iT{P(i1,...,iT|o1,...,oT)}=>maxi1,..,iT{P(i1,...,iT,o1,...,oT)}

定义两个变量 δt(i) ψt(i) 分别表示时刻t状态为i的所有单个路径 (i1,i2,...,it) 中概率最大值和概率最大值的第t-1个结点。即,
δt(i)=maxi1,..,it1{P(it=i,it1,...,i1,ot1,...,o1)}
由定义可递推:
δt+1(i)==maxi1,..,it{P(it+1=i,it,...,i1,ot,...,o1)}max1jN[δt(j)aji]bi(ot+1)

维特比算法就是求解时刻T的最大概率,递推的计算前面的概率即子问题,所得出的结果就是最优路径。
此算法与上面动态规划的区别:

目标:最短路径vs最优路径
方法: 路径之和vs 概率乘积
着手点:有向图终点最大值vs有向图终点最大值
过程:递推求子问题vs递推求子问题

举个例子:
已知模型参数 λ=(A,B,π)

A=0.50.30.20.20.50.30.30.20.5,B=0.50.40.70.50.60.3,π=(0.2,0.4,0.4)T

已知观测序列O=(红,白,红),求最优路径( i1,i2,i3 ).
解:
t=1时, δ1(i)=πibi(o1) ,
δ1(1)=0.10δ1(2)=0.16δ1(3)=0.28

t=2时,

δ2(1)=max1j3[δ1(j)aj1]b1(o2)]=maxj0.100.50.160.30.280.20.5=0.0280,ψ2(1)=3δ2(2)=max1j3[δ1(j)aj2]b2(o2)]=maxj0.100.20.160.50.280.30.6=0.0504,ψ2(2)=3δ2(3)=max1j3[δ1(j)aj3]b3(o2)]=maxj0.100.30.160.20.280.50.3=0.0420,ψ2(3)=3

t=3时,
δ3(1)=max1j3[δ2(j)aj1]b1(o3)]=maxj0.0280.50.05040.30.0420.20.5=0.07560,ψ3(1)=2δ3(2)=max1j3[δ2(j)aj2]b2(o3)]=maxj0.0280.20.05040.50.0420.30.4=0.01008,ψ3(2)=2δ3(3)=max1j3[δ2(j)aj3]b3(o3)]=maxj0.0280.30.05040.20.0420.50.7=0.01470,ψ3(3)=3

P 为最优路径的概率,则
P=max1i3δ3(i)=0.0147

最优路径终点为 i3=3 ,逆向递推得
t=2时, i2=3
t=1时, i1=3
最终,( i1,i2,i3 )=(3,3,3)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值