人工智能里的数学修炼 | 隐马尔可夫模型 : 维特比(Viterbi)算法解码隐藏状态序列

人工智能里的数学修炼 | 概率图模型 : 隐马尔可夫模型
人工智能里的数学修炼 | 隐马尔可夫模型:前向后向算法
人工智能里的数学修炼 | 隐马尔可夫模型 : 维特比(Viterbi)算法解码隐藏状态序列
人工智能里的数学修炼 | 隐马尔可夫模型:基于EM的鲍姆-韦尔奇算法求解模型参数
已经较为清楚的讲述了隐马尔可夫模型及其在实际应用的三个问题:1. 生成观察序列概率, 2. 预测问题, 3. 模型参数学习问题。

这里介绍求解第二个预测问题的维特比算法,这里举个例子回归一下预测问题
在语音识别等任务中,观测值为语音信号,隐藏状态为文字,目标就是根据观测信号来推断最有可能的状态序列

一、维特比算法的可递推局部状态

维特比算法是一种基于动态规划的求序列最短路径的方法,它通过确定一个合适的局部状态,利用局部状态进行递推,实现问题的求解。
在隐马尔可夫模型中,维特比算法定义了两个局部状态进行递推。
第一个局部状态 δ t ( i ) \delta_{t}(i) 用于记录在时刻 t t 隐藏状态为 i i 所有可能的状态转移路径 i i , i 2 , . . . , i t i_{i},i_{2},...,i_{t} 中的概率最大值,记为
δ t + 1 ( i ) = m a x 1 j N [ δ t ( j ) a j i ] b i ( o t + 1 ) \delta_{t+1}(i)=max_{1\leq j\leq N}[\delta_{t}(j)a_{ji}]b_{i}(o_{t+1}) 这里 a j i a_{ji} 表示由状态j向状态i的状态转移概率, b i ( o t + 1 ) b_{i}(o_{t+1}) 表示由隐藏状态 i i 输出观测状态 o t + 1 o_{t+1} 的概率。
第二个局部状态 Ψ t ( i ) \Psi _{t}(i) 是用于记录在每个时刻最可能的隐藏状态,记为
Ψ t ( i ) = a r g m a x 1 j N [ δ t 1 ( j ) a j i ] \Psi _{t}(i)=argmax_{1\leq j\leq N}[\delta _{t-1}(j)a_{ji}] 有了这两个可递推的局部状态,我们可以从初始时刻递推到时刻 T T ,得到过程中 Ψ t ( i ) \Psi _{t}(i) 依次记录的最优隐藏状态序列。

二、维特比算法的递推流程

已知: 隐马尔可夫模型 λ = { A , B , π } \lambda=\{A,B,\pi\} ,观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_{1},o_{2},...,o_{T})
输出:最有可能的隐藏状态序列 I = i 1 , i 2 , . . . , i T I^{*}={i^{*}_{1},i^{*}_{2},...,i^{*}_{T}}

  1. 初始化局部状态:
    δ 1 ( i ) = π i b i ( o 1 ) , i = 1 , 2 , . . . , N \delta_{1}(i)=\pi_{i}b_{i}(o_{1}),i=1,2,...,N 其中 π i \pi_{i} 表示初始隐藏状态为 i i 的概率, b i ( o 1 ) b_{i}(o_{1}) 表示隐藏状态为 i i ,输出观测状态为 o 1 o_{1} 的概率
  2. 进行动态规划的递推, t = 2 , 3 , . . . , T t=2,3,...,T :
    δ t ( i ) = m a x 1 j N [ δ t 1 ( j ) a j i ] b i ( o t ) , i = 1 , 2 , . . . , N \delta_{t}(i)=max_{1\leq j \leq N}[\delta_{t-1}(j)a_{ji}]b_{i}(o_{t}),i=1,2,...,N Ψ t ( i ) = a r g m a x 1 j N [ δ t 1 ( j ) a j i ] , i = 1 , 2 , . . . , N \Psi _{t}(i)=argmax_{1\leq j\leq N}[\delta _{t-1}(j)a_{ji}],i=1,2,...,N
  3. 计算 T T 时刻最大的 δ T ( i ) \delta_{T}(i) , 即为最可能的隐藏状态序列出现的概率,同时计算 Ψ t ( i ) \Psi_{t}(i) 时刻最大的 δ T ( i ) \delta_{T}(i) , 即为时刻 T T 最可能的隐藏状态
    P = m a x 1 j N δ T ( i ) P^{*}=max_{1\leq j \leq N}\delta_{T}(i) i T = a r g m a x 1 j N [ δ T ( i ) ] i_{T}^{*}=argmax_{1\leq j \leq N}[\delta_{T}(i)]
  4. 局部状态 Ψ t ( i ) \Psi _{t}(i) 记录的序列,记为最可能的隐藏状态序列, 对于 t = T 1 , T 2 , . . . . , 1 t=T-1,T-2,....,1 :
    i t = Ψ t + 1 ( i t + 1 ) i_{t}^{*}=\Psi_{t+1}(i^{*}_{t+1})
    最终可以得到最有可能的隐藏状态序列 I = i 1 , i 2 , . . . , i T I^{*}={i^{*}_{1},i^{*}_{2},...,i^{*}_{T}}
发布了74 篇原创文章 · 获赞 269 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/Liangjun_Feng/article/details/95182088