隐含状态解码问题的描述
上一篇我们讲完了概率估计问题,这里我们再来讲一下隐马尔科夫模型的状态解码问题。
解码 Decoding,就是给定一个已知的观测序列,求它最有可能对应的状态序列。那么用形式化的语言来说,就是已知模型λ = (A, B, π)和观测序列(O = (o_{1},o_{2},...,o_{T})),求使得条件概率P(I|O)最大的隐状态序列I = ((i_{1},i_{2},...,i_{T}))
我们一步一步地来,先不考虑输出观测,仅仅只考虑隐状态的转移,来体会一下思路,首先我们的目标是去找到路径概率最大的一条状态序列。
我们对着下面这幅图来说,会让大家更好理解一些:
图中展现的隐马尔科夫模型中的状态序列,其中一共包含 5 种隐含状态,状态序列的长度为 7,那么图中很明显横轴是时间轴,纵轴是状态轴。
最大路径概率与维特比算法
我们从整个隐含状态序列的最后往前面看,在第 7 个时间点,也就是最后一个时间点这,我们要考虑状态序列的最后一个状态是状态 [1,2,3,4,5] 中的哪一个?实质上就是比较路径以谁为结束状态,整个路径的概率最大。
那怎么操作?我们首先关注的是最后一个时间节点 7,问题就落脚在如果状态转移路径以结束于状态 k 的路径概率最大(可以是状态 1 ~ 状态 5 中的任意一个,我们先不管它具体是哪一个了,只知道肯定是其中一个),那么这个概率该怎么表示呢?很显然,它依赖于时间节点 6 可能选取的 5 个状态。
实际上,时间节点 6 取 5 个状态中的任意一个都是有可能的,可能由时间节点 6 处的状态 1 转移到时间节点 7 处的状态 k,也可能由状态 2 转移到时间节点 7 的状态 k,当然也可以是状态 3、状态 4 或者状态 5。最终就看从哪里转移过去的路径概率最大,就选择从哪里转移过去,过程示意如下图所示:
我们令 (X_{6i}) 表示到达时间节点 6 时,此时状态为 i 的最大路径概率,当然了,状态 i 可以取 {1,2,3,4,5} 中的任意一个,那么实际上就有 (X_{61}、 X_{62}、 X_{63}、 X_{64}、 X_{65}) 五个不同的值。在上面这幅图中,就对应了虚线框中五种颜色示意的到达时间节点 6 的五条路径,它们分别都是在时间节点 6 时到达对应状态 i 的最大概率路径。
那么用它乘以对应的状态转移概率,即 (X_{6i}A_{ik}),就前进到第 7 个时间节点了,计算出隐含状态序列 {x,x,x,x,x,i,k} 的路径概率。那么首先我们固定一个第 7 个时间节点结束的状态,比如选取状态 1,那么我们可以分别求出从第 6 个时间节点的状态 1、状态 2、状态 3、状态 4、状态 5 分别转移到第 7 个节点状态 1 的概率:(X_{61}A_{11})、(X_{62}A_{21})、(X_{63}A_{31})、(X_{64}A_{41})、(X_{65}A_{51}),我们计算出这 5 个值,取最大的就是我们结束于状态 1 的最大路径概率。
同样地,我们可以分别假设,令第 7 个时间节点的结束状态分别为 2、3、4、5,按照上面的方法,可以分别计算出结束于每一个状态的最大路径概率,我们取最大的一个,就可以真正地定下这条路径最后结束于哪一个状态了。
这里我们补充一点,为什么要强调 (X_{6i}) 是表示到达时间节点 6 时,状态为 i 的最大路径概率?最大二字道理何在?因为我们需要 (X_{6i}A_{ik}) 最大,由于对于每一个指定的状态 k,(A_{ik}) 都是固定的,那么就必须要求 (X_{6i}) 是最大的,否则如果有更大的第 6 时间节点到达状态 i 的路径概率 (X′_{6i}),那我们就拿它去替换掉原有的 (X_{6i}) 就好了,因此 (X_{6i}) 表示最大概率的道理就在这。
但是问题来了,每一个(X_{6i}) 是多少?它也是未知的,同样的道理,它依赖于第五个时间点的 (X_{5j}),即每一个时间点到达某个具体状态的最大路径概率都需要知道前一个时间点的到达各状态的最大路径概率,然后乘以状态转移概率比较而来,那何时是个尽头?走到头就是尽头。对,没错。要走到最早的时间点节点 1,时间点 1 的最大概率我们是可以直接算出来的。
那么我们从时间节点 1 出发,正过来,重新描述一下整个过程:
- 首先我们在时间节点 1,我们计算出各状态出现的概率,由于只有一个节点,因此这个概率值就是此时的最大路径概率 (X_{1i})。
- 然后我们再向前前进到时间节点 2,对于每一个状态 j,我们通过利用时间节点 1 的每一个状态的最大路径概率乘以转移概率,会得到 5 个到达时间节点 2,状态 j 的路径概率值,取最大的一个就是此时的最大路径概率 (X_{2j})。
- 即 (X_{2j}=max(X_{1i}A_{ij})),i 遍历 1、2、3、4、5 每一个状态。同时我们还需要记录一下此时在时间节点 2、状态 j 这个节点在获取最大路径概率 (X_{2j}) 的情况下,是由时间节点 1 中的哪个状态转移而来的,把状态序号记录下来。
以此类推,我们基于时间节点 t,各状态的最大路径概率,就可以向前计算出 t+1 各状态的最大路径概率,直到最后一个时间节点 T,我们得到时间节点 T 的所有状态的最大概率路径 (X_{Ti}),取最大的一个 (max(X_{Ti})),i 遍历 1、2、3、4、5,就是我们要求的最大路径概率以及结束的状态,然后依据我们记录的前一状态进行回溯,就能够把整个状态序列给找出来了。
上述,就是求取最大概率路径的过程,也就是大名鼎鼎的维特比算法。
应用维特比算法进行解码
接下来,我们进一步把维特比算法引入到隐马尔科夫模型的解码中来,维特比算法中的最大概率路径就对应着隐马尔科夫模型中要找的那个最有可能的隐状态序列,不过此时在计算的过程中,我们不光要考虑隐状态的状态转移概率,还要考虑观测输出概率。
换句话说,就是我们要寻找一条隐含状态序列((i_{1},i_{2},i_{3},...,i_{t})),用它去生成我们指定的观测序列((o_{1},o_{2},o_{3},...,o_{t})),使得这个观测序列存在的概率最大?
用公式的语言来描述我们的目标就是:
(δ_{t}(i) = maxP(i_{t}=i,i_{t-1},...,i_{1},o_{t},...,o_{1}), i=1,2,3,...,N)
它表示在时刻 t,结束于隐状态 i,同时满足观测序列 ((o_{1},o_{2},o_{3},...,o_{t})) 的最大路径概率,这个表达式同时考虑了隐状态和输出观测,是一个联合概率,其中 i 取 i=1,2,3,…,N,最终我们也是取 P 值最大的一个。
那么依次类推:
(δ_{t+1}(i) = maxP(i_{t+1}=i,i_{t},i_{t-1},...,i_{1},o_{t+1},o_{t},...,o_{1}), i=1,2,3,...,N)
那么,(δ_{t+1}(i)) 和 (δ_{t}(i)) 的递推关系是怎么样的?我们根据隐马尔科夫模型先进行状态转移,再进行观测输出的过程,不难写出它们的递推关系:
(δ_{t+1}(i) = max(δ_{t}(j)a_{ji}b_{io_{t+1}}), 1≤j≤N)
当然,我们也可以证明一下这个过程,其实非常简单,实质上也就是反复使用贝叶斯公式进行概率等式的转换。
(max(δ_{t}(j)a_{ji}b_{io_{t+1}}))
=(max(maxP(i_{t}=j,i_{t-1},...,i_{1},o_{t},...o_{1}))P(i_{t+1}=i|i_{t}=j)P(o_{t+1}|i_{t+1}=i))
=(maxP(i_{t}=j,i_{t-1},...,i_{1},o_{t},...,o_{1})P(i_{t+1}=i|i_{t}=j)P(o_{t+1}|i_{t+1}=i))
=(maxP(i_{t+1}=i,i_{t}=j,i_{t-1},...,i_{1},o_{t},...,o_{1})P(o_{t+1}|i_{t+1}=i))
=(maxP(i_{t+1}=i,i_{t},i_{t-1},...,i_{1},o_{t+1},o_{t},...,o_{1}) = δ_{t+1}(i))
因此,我们回过头来看一下这个递推公式:
(δ_{t+1}(i) = max(δ_{t}(j)a_{ji}b_{io_{t+1}}))
和上面维特比算法中的简单路径概率的例子相比,其实就是多了一个观测输出概率(b_{io_{t+1}}),这个值是已知的,比单纯的简单路径概率问题多进行一次观测输出概率的相乘运算,因此本质上并无二致。
因此,我们同样地按照维特比算法中的思路从 (δ_{1}(i)),一步一步按照之前介绍过的方法推导到(δ_{T}(i)),求得最大的概率,同时在递推的过程中,在每一个时间点 t 都记录好上一个时间点 t-1 的隐含状态,以便于我们最后的状态回溯。还是那句话,思路和维特比算法中的最大路径概率计算没有什么大的区别。