Viterbi 算法

Viterbi 算法, 命名以其开发商安德鲁·Viterbi, 是一种动态编程算法为发现暗藏的州很可能序列- 以Viterbi 道路著名 - 结果在被观察的事件序列, 特别是就暗藏的Markov 状况塑造。 向前算法 是一种紧密地相关的算法为计算被观察的事件序列的可能性。

Viterbi 算法最初被设想了作为一份错误校正的计划为喧闹的数字通信链接, 发现普遍应用在解码旋绕代码被利用在CDMA 和GSM 数字式多孔, 拨号盘里调制解调器, 卫星和深空间通信, 和802.11 无线LANs 。它并且现在是常用在信息理论、语音识别、计算语言学, 和bioinformatics 上。例如, 在演讲对文本语音识别, 音响信号对待被观察的事件顺序, 并且文本串认为是"暗藏的起因" 的音响信号。Viterbi 算法发现文本很可能串基于音响信号。

算法不是一般的; 它做一定数量的假定。首先, 被观察的事件和暗藏的事件必须是在序列。这个序列经常对应于时间。其次, 这两个序列需要联合, 并且一次被观察的事件需要对应于确切地一次暗藏的事件。第三, 计算很可能暗藏的序列由有些观点 t 决定 必须只取决于被观察的事件在观点 t, 和很可能序列在观点 t &S722; 1 。这些假定全部满意在一个优先处理的暗藏的Markov 模型。

条款"Viterbi 道路" (或更加一般"Viterbi foo" 如果"道路" 不是适当的) 并且"Viterbi 算法" 向发现唯一很可能解释为观察的相关动态编程算法并且被申请。例如, 在随机解析一种动态编程算法可能使用发现唯一很可能context-free 派生(解析) 串, 有时称"Viterbi 解析" 。

一个具体例子

假设您有居住很远并且您叫日报谈论的一个朋友什么每个您做了那天。您的朋友有只他是感兴趣在的三件事: 走在公园、购物, 和清洁他的公寓。什么的选择做由天气完全确定在一指定的天。您没有关于您的朋友居住的天气的确定信息, 但您知道一般趋向。根据什么他告诉您他做了□天, 您设法猜测什么天气一定是象。

您相信, 天气经营作为一分离Markov.chain 。有二个州, "多雨" 和"晴朗", 但您无法直接地观察他们, 即, 他们 掩藏 从您。在□天, 有某一机会, 您的朋友将执行以下活动的当中一个, 根据天气: "步行", "商店", 或"清洗" 。因为您的朋友告诉您关于他的活动, 那些是 观察。整个系统是那一个暗藏的Markov 模型(HMM) 。

您知道一般天气趋向在区域和您知道什么您的朋友喜欢平均做。换句话说, HMM 的参量为人所知。实际上, 您能写他们击落用Python 编程语言:


州= (' 多雨', ' 晴朗')

观察= (' 步行', ' 商店', ' 清洗')

start_probability = {' 多雨': 0.6, ' 晴朗': 0.4}

transition_probability = {
' 多雨': {' 多雨': 0.7, ' 晴朗': 0.3},
' 晴朗': {' 多雨': 0.4, ' 晴朗': 0.6},
}

emission_probability = {
' 多雨': {' 步行': 0.1, ' 商店': 0.4, ' 清洗': 0.5},
' 晴朗': {' 步行': 0.6, ' 商店': 0.3, ' 清洗': 0.1},
}

在这个片段, start_probability 提到您的不确定性关于哪个州HMM 是您的朋友首先电话您(所有您知道是它倾向于是多雨的平均) 。 transition_probability 提到天气的变动在部下的Markov.chain 。在这个例子, 有唯一明天将是晴朗的一次30% 机会如果今天是多雨的。 emission_probability 告诉您多么可能您的朋友将执行有些活动在□天。如果它是多雨的, 有50% 机会, 他清洗他的公寓; 如果它是晴朗的, 有60% 机会, 他将去散步外面。

您与您的朋友连续谈话三天和发现, 在第一天他去散步, 在他去购物的第二天, 并且在第三天他清洗了他的公寓。您有二个问题: 什么是观察这个序列的整体可能性? 并且什么是的rainy/sunny 天很可能序列会解释这些观察? 第一问题由向前算法回答; 秒钟由Viterbi 算法。这两算法结构地是因此相似(实际上, 他们是同样抽象算法的两个事例) 那他们可能被实施在一个唯一作用:


def forward_viterbi(y, X 、sp 、tp, ep):
T = {}
为州在X:
## prob 。V. 道路V. prob 。
Tstate = (spstate 、州, spstate)
为产品在y:
U = {}
为next_state 在X:
共计= 0
argmax = 无
valmax = 0
为州在X:
(prob 、v_path, v_prob) = Tstate
p = epstateoutput * tpstatenext_state
prob * = p
v_prob * = p
共计+ = prob
如果v_prob > valmax:
argmax = v_path + next_state
valmax = v_prob
Unext_state = (共计、argmax, valmax)
T = U
## 向最终状态申请sum/max:
共计= 0
argmax = 无
valmax = 0
为州在X:
(prob 、v_path, v_prob) = Tstate
共计+ = prob
如果v_prob > valmax:
argmax = v_path
valmax = v_prob
回归(共计、argmax, valmax)

作用 forward_viterbi 采取以下论据: y 是观察序列, 即。 'walk', 'shop', 'clean'X 是套暗藏的州; sp是起动可能性; tp 是转变可能性; 并且 ep 是放射可能性。

算法从事绘图 T 和 U。每个是一测绘从州对三倍 (prob, v_path, v_prob)prob 是所有道路总可能性从一开始对现状, v_path 是Viterbi 道路由现状决定, 和 v_prob 是Viterbi 道路可能性由现状决定。测绘 T 举行这信息为一个指定的观点 t 及时, 和主循环修建 U, 举行相似的信息为时间 t+1 。由于Markov 物产, 关于些观点的信息及时在 t 之前 不是需要的。

算法开始由初始化的 T 对起动可能性: 总可能性为州是那个州的起动可能性; 并且Viterbi 道路向起动州是singleton 道路包括只那个州; Viterbi 道路的可能性是相同象起动可能性。

主循环考虑观察从 y 在序列。其圈不变式是由决定 T 遏制正确信息但排除观点及时当前的观察的。算法然后计算三倍 (prob, v_path, v_prob) 为各个可能的下个州。一个指定的下个州的总可能性, total 由增加获得所有道路的可能性达成那个州。更加精确地, 算法重复在所有可能的来源州。为各个来源州, T 举行所有道路的总可能性向那个州。这个可能性然后以当前的观察的放射可能性和转变可能性从来源州对下个州。收效的可能性prob 然后增加来 total。Viterbi 道路的可能性相似地被计算, 但而不是增加横跨所有道路你执行分离最大化。最初地最大值 valmax 是零。为各个来源州, Viterbi 道路的可能性向那个州为人所知。这太被倍增以放射和转变可能性和替换 valmax 如果它大于其当前值。那导致现状以下个州的Viterbi 道路被计算作为那最大化对应的argmax, 由延伸Viterbi 道路。三倍 (prob, v_path, v_prob) 被计算用这种方式被存放 U 和 U 一次被计算了为所有可能的下个州, 它替换 T, 如此保证圈不变式的举行在叠代的结尾。

在最后其它summation/maximization 执行(这能并且做在主循环里面由增加冒充观察在最后真正的观察以后) 。

在连续例子, forward/Viterbi 算法被利用如下:


def example():
回归forward_viterbi('walk ', ' 商店', ' 清洗',
州,
start_probability,
transition_probability,
emission_probability)

这显露, 总可能性 'walk', 'shop', 'clean' 是0.033612 并且Viterbi 道路是 'Sunny', 'Rainy', 'Rainy, 'Rainy'。Viterbi 道路遏制四个州因为第三观察组建了由第三状态和与第四个州的转变。换句话说, 基于被观察的活动, 它很可能是晴朗的当您的朋友去散步并且它开始次日下雨和然后保持了在下雨。

参考

  • 安德鲁·J. Viterbi 。错误跳起为旋绕代码和一种asymtotically 最宜的解码算法。 IEEE 交易在信息理论 13(2):260-267, 1967 年4月。(Viterbi 解码算法被描述在部分IV 。)
  • G. D. Forney 。Viterbi 算法。 IEEE 61(3):268-278, 1973 的3月行动年
  • L. R. Rabiner 。一个讲解在暗藏的Markov 模型和选择的应用在语音识别。 IEEE 77(2):257-286, 1989 的2月行动年。(描述向前算法和Viterbi 算法为HMMs) 。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值