人工智能里的数学修炼 | 概率图模型 : 隐马尔可夫模型
人工智能里的数学修炼 | 隐马尔可夫模型:前向后向算法
人工智能里的数学修炼 | 隐马尔可夫模型 : 维特比(Viterbi)算法解码隐藏状态序列
人工智能里的数学修炼 | 隐马尔可夫模型:基于EM的鲍姆-韦尔奇算法求解模型参数
已经较为清楚的讲述了隐马尔可夫模型及其在实际应用的三个问题:1. 生成观察序列概率, 2. 预测问题, 3. 模型参数学习问题。
这里介绍求解第二个预测问题的维特比算法,这里举个例子回归一下预测问题
在语音识别等任务中,观测值为语音信号,隐藏状态为文字,目标就是根据观测信号来推断最有可能的状态序列
一、维特比算法的可递推局部状态
维特比算法是一种基于动态规划的求序列最短路径的方法,它通过确定一个合适的局部状态,利用局部状态进行递推,实现问题的求解。
在隐马尔可夫模型中,维特比算法定义了两个局部状态进行递推。
第一个局部状态 δ t ( i ) \delta_{t}(i) δt(i)用于记录在时刻 t t t隐藏状态为 i i i所有可能的状态转移路径 i i , i 2 , . . . , i t i_{i},i_{2},...,i_{t} ii,i2,...,it中的概率最大值,记为
δ 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}) δt+1(i)=max1≤j≤N[δt(j)aji]bi(ot+1)这里 a j i a_{ji} aji表示由状态j向状态i的状态转移概率, b i ( o t + 1 ) b_{i}(o_{t+1}) bi(ot+1)表示由隐藏状态 i i i输出观测状态 o t + 1 o_{t+1} ot+1的概率。
第二个局部状态 Ψ t ( i ) \Psi _{t}(i) Ψ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(i)=argmax1≤j≤N[δt−1(j)aji]有了这两个可递推的局部状态,我们可以从初始时刻递推到时刻 T T T,得到过程中 Ψ t ( i ) \Psi _{t}(i) Ψt(i)依次记录的最优隐藏状态序列。
二、维特比算法的递推流程
已知: 隐马尔可夫模型 λ = { A , B , π } \lambda=\{A,B,\pi\} λ={A,B,π},观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_{1},o_{2},...,o_{T}) O=(o1,o2,...,oT)
输出:最有可能的隐藏状态序列 I ∗ = i 1 ∗ , i 2 ∗ , . . . , i T ∗ I^{*}={i^{*}_{1},i^{*}_{2},...,i^{*}_{T}} I∗=i1∗,i2∗,...,iT∗
- 初始化局部状态:
δ 1 ( i ) = π i b i ( o 1 ) , i = 1 , 2 , . . . , N \delta_{1}(i)=\pi_{i}b_{i}(o_{1}),i=1,2,...,N δ1(i)=πibi(o1),i=1,2,...,N其中 π i \pi_{i} πi表示初始隐藏状态为 i i i的概率, b i ( o 1 ) b_{i}(o_{1}) bi(o1)表示隐藏状态为 i i i,输出观测状态为 o 1 o_{1} o1的概率
- 进行动态规划的递推, t = 2 , 3 , . . . , T 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)=max1≤j≤N[δt−1(j)aji]bi(ot),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 Ψt(i)=argmax1≤j≤N[δt−1(j)aji],i=1,2,...,N
- 计算 T T T时刻最大的 δ T ( i ) \delta_{T}(i) δT(i), 即为最可能的隐藏状态序列出现的概率,同时计算 Ψ t ( i ) \Psi_{t}(i) Ψt(i)时刻最大的 δ T ( i ) \delta_{T}(i) δT(i), 即为时刻 T T T最可能的隐藏状态
P ∗ = m a x 1 ≤ j ≤ N δ T ( i ) P^{*}=max_{1\leq j \leq N}\delta_{T}(i) P∗=max1≤j≤Nδ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)] iT∗=argmax1≤j≤N[δT(i)]
- 局部状态 Ψ t ( i ) \Psi _{t}(i) Ψt(i)记录的序列,记为最可能的隐藏状态序列, 对于 t = T − 1 , T − 2 , . . . . , 1 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}) it∗=Ψt+1(it+1∗)
最终可以得到最有可能的隐藏状态序列 I ∗ = i 1 ∗ , i 2 ∗ , . . . , i T ∗ I^{*}={i^{*}_{1},i^{*}_{2},...,i^{*}_{T}} I∗=i1∗,i2∗,...,iT∗