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