隐马尔可夫模型:观察序列概率估计

隐马尔可夫模型:观察序列概率估计(前向后向算法)

解码(decoding)问题(估计问题):给定观察序列 O = O 1 O 2 O T O = O_{1} O_{2} \cdots O_{T} 和模型 μ = ( A , B , π ) \mu = (\mathbf{A}, \mathbf{B}, \mathbf{\pi}) ,计算观察序列 O O 的概率,即 P ( O μ ) P(O | \mu)

穷举法:对于任意的状态序列 Q = q 1 q 2 q T Q = q_{1} q_{2} \cdots q_{T} ,有

P ( O Q ; μ ) = t = 1 T 1 P ( O t q t , q t 1 ; μ ) = b q 1 ( O 1 ) b q 2 ( O 2 ) b q T ( O T ) (6-8) \begin{aligned} P(O| Q ; \mu) & = \prod_{t = 1}^{T - 1} P(O_{t} | q_{t}, q_{t - 1}; \mu) \\ & = b_{q_{1}}(O_{1}) b_{q_{2}}(O_{2}) \cdots b_{q_{T}}(O_{T}) \end{aligned} \tag {6-8}

P ( Q ; μ ) = π q 1 a q 1 q 2 a q 2 q 3 a q T 1 q T (6-9) \begin{aligned} P(Q ; \mu) & = \pi_{q_{1}} a_{q_{1} q_{2}} a_{q_{2} q_{3}} \cdots a_{q_{T - 1} q_{T}} \end{aligned} \tag {6-9}

P ( O ; μ ) = Q P ( O , Q ; μ ) = Q P ( O Q ; μ ) P ( Q ; μ ) = Q ( π q 1 b q 1 ( O 1 ) t = 1 T 1 a q t q t + 1 b q t + 1 ( O t + 1 ) ) (6-11) \begin{aligned} P(O ; \mu) & = \sum_{Q} P(O, Q; \mu) \\ & = \sum_{Q} P(O | Q; \mu) P(Q ; \mu) \\ & = \sum_{Q} \left( \pi_{q_{1}} b_{q_{1}}(O_{1}) \prod_{t = 1}^{T - 1} a_{q_{t} q_{t + 1}} b_{q_{t + 1}}(O_{t + 1}) \right) \end{aligned} \tag {6-11}

该方式的问题是计算时间复杂度呈指数增长,假高模型 μ = ( A , B , π ) \mu = (\mathbf{A}, \mathbf{B}, \mathbf{\pi}) N N 个不同的状态,时间长度为 T T ,则可能状态序列数量为 N T N^{T} 。前向算法(前向计算过程,forward procedure)通过动态规划方式使“指数爆炸”问题可以在时间复杂度为 O ( N 2 T ) \mathcal{O}(N^{2} T) 的范围内解决。HMM的动态规划问题–般用格架[Manning、Schitze,1999](trellis,lattice)组织形式描述。对于一个在某一时间结束在一定状态的HMM,每一个格(结点)记录该HMM所有输出符号的概率,较长子路径的概率可以由较短子路径的概率计算出来。

在这里插入图片描述

定义6-1(前向变量 α t ( i ) \alpha_{t}(i) :在 t t 时刻,HMM输出序列为 O = O 1 O 2 O t O = O_{1} O_{2} \cdots O_{t} ,并且状态为 s i s_{i} 的概率:

α t ( i ) = P ( O 1 O 2 O t , q t = s t ; μ ) (6-12) \alpha_{t}(i) = P(O_{1} O_{2} \cdots O_{t}, q_{t} = s_{t}; \mu) \tag {6-12}

由于 P ( O ; μ ) P(O ; \mu) 是在所有状态 q T q_{T} 下观察到序列 O = O 1 O 2 O T O = O_{1} O_{2} \cdots O_{T} 的概率:

P ( O ; μ ) = s i P ( O 1 O 2 O T , q t = s i ; μ ) = i = 1 N α T ( i ) (6-13) P(O ; \mu) = \sum_{s_{i}} P(O_{1} O_{2} \cdots O_{T}, q_{t} = s_{i}; \mu) = \sum_{i = 1}^{N} \alpha_{T}(i) \tag {6-13}

扫描二维码关注公众号,回复: 11302968 查看本文章

因此,对 P ( O ; μ ) P(O ; \mu) 的计算可转变为前向变量 α t ( i ) \alpha_{t}(i) 的快速计算。

在格架结构中, α t + 1 ( j ) \alpha_{t + 1}(j) 存放在结点 ( s j , t + 1 ) (s_{j}, t + 1) 处,表示在已知观察序列 O = O 1 O 2 O t + 1 O = O_{1} O_{2} \cdots O_{t + 1} 的情况下,从 t t 时刻到达 t + 1 t + 1 时刻的状态为 s j s_{j} 的概率。从初始时刻到 t + 1 t + 1 时刻,HMM到达状态 s j s_{j} ,并且输出观察序列为 O = O 1 O 2 O t + 1 O = O_{1} O_{2} \cdots O_{t + 1} 的过程可以分解为两个步骤:

  1. 从初始时刻到 t t 时刻,HMM到达状态 s i s_{i} 并输出观察序列 O = O 1 O 2 O t O = O_{1} O_{2} \cdots O_{t} ,概率为 α t ( i ) \alpha_{t}(i)

  2. 从状态 s i s_{i} 转移到状态 s j s_{j} ,并在状态 s j s_{j} O t + 1 O_{t + 1} ,概率为 a i j b j ( O t + 1 ) a_{ij} b_{j}(O_{t + 1})

在这里插入图片描述

由于HMM可以从 N N 个不同的 s i s_{i} 转移到 s j s_{j} ,因此, t + 1 t + 1 时刻的前向变量可由 t t 时刻前向变量 α t ( 1 ) , α t ( 2 ) , , α t ( N ) \alpha_{t}(1), \alpha_{t}(2), \cdots, \alpha_{t}(N) 归纳计算:

α t + 1 ( j ) = ( i = 1 N α t ( i ) a i j ) b j ( O t + 1 ) (6-14) \alpha_{t + 1}(j) = \left( \sum_{i = 1}^{N} \alpha_{t}(i) a_{ij} \right) b_{j}(O_{t + 1}) \tag {6-14}

前向变量 α t ( i ) \alpha_{t}(i) 可采用动态规划方法计算。

算法6-1(前向算法,forward procedure)

  1. 初始化

α 1 ( i ) = π i b i ( O 1 ) , 1 i N \alpha_{1}(i) = \pi_{i} b_{i}(O_{1}), 1 \leq i \leq N

  1. 归纳计算

α t + 1 ( j ) = ( i = 1 N α t ( i ) a i j ) b j ( O t + 1 ) ,   1 t T 1 \alpha_{t + 1}(j) = \left( \sum_{i = 1}^{N} \alpha_{t}(i) a_{ij} \right) b_{j}(O_{t + 1}), \ 1 \leq t \leq T - 1

  1. 求和:

P ( O μ ) = i = 1 N α T ( i ) P(O | \mu) = \sum_{i = 1}^{N} \alpha_{T}(i)

前向算法总体时间复杂度为 O ( N 2 T ) \mathcal{O}(N^{2}T)

P ( O ; μ ) P(O ; \mu) 还可以转变为后向变量 β t ( i ) \beta_{t}(i) ,通过动态规划快速计算。

定义6-2(后向变量 β t ( i ) \beta_{t}(i) :给定模型 μ = ( A , B , π ) \mu = (\mathbf{A}, \mathbf{B}, \mathbf{\pi}) ,并且在 t t 时刻状态为 s i s_{i} 的条件下,HMM输出观察序列 O = O t + 1 O t + 2 O T O = O_{t + 1} O_{t + 2} \cdots O_{T} 的概率:

β t ( i ) = P ( O t + 1 O t + 2 O T q t = s t ; μ ) (6-15) \beta_{t}(i) = P(O_{t + 1} O_{t + 2} \cdots O_{T} | q_{t} = s_{t}; \mu) \tag {6-15}

t t 时刻状态为 s i s_{i} 的条件下,HMM输出观察序列为 O = O t + 1 O t + 2 O T O = O_{t + 1} O_{t + 2} \cdots O_{T} 的过程可以分解为两个步骤:

  1. t t 时刻到 t + 1 t + 1 时刻,HMM由状态 s i s_{i} 转移至状态 s j s_{j} ,并从状态 s j s_{j} 输出 O t + 1 O_{t + 1} ,概率为 a i j b j ( O t + 1 ) a_{ij} b_{j}(O_{t + 1})

  2. t + 1 t + 1 时刻、状态 s j s_{j} 的条件下,HMM输出观察序列 O = O t + 2 O T O = O_{t + 2} \cdots O_{T} ,概率为 β t + 1 ( j ) \beta_{t + 1}(j)

在这里插入图片描述

因此:

β t ( i ) = j = 1 N a i j b j ( O t + 1 ) β t + 1 ( j ) (6-16) \beta_{t}(i) = \sum_{j = 1}^{N} a_{ij} b_{j}(O_{t + 1}) \beta_{t + 1}(j) \tag {6-16}

算法6-2(后向算法,backward procedure)

  1. 初始化

β T ( i ) = 1 , 1 i N \beta_{T}(i) = 1, 1 \leq i \leq N

  1. 归纳计算

β t ( i ) = j = 1 N a i j b j ( O t + 1 ) β t + 1 ( j ) ,   T 1 t 1 \beta_{t}(i) = \sum_{j = 1}^{N} a_{ij} b_{j}(O_{t + 1}) \beta_{t + 1}(j), \ T - 1 \geq t \geq 1

  1. 求和:

P ( O μ ) = i = 1 N π i b i ( O 1 ) β 1 ( i ) P(O | \mu) = \sum_{i = 1}^{N} \pi_{i} b_{i}(O_{1}) \beta_{1}(i)

后向算法的时间复杂度为 O ( N 2 T ) \mathcal{O}(N^{2}T)

一般采用前向、后向算法结合的方法计算观察序列的概率:

P ( O , q t = s i ; μ ) = P ( O 1 O 2 O T , q t = s i ; μ ) = P ( O 1 O 2 O t , q t = s i , O t + 1 O t + 2 O T ; μ ) = P ( O 1 O 2 O t , q t = s i ; μ ) P ( O t + 1 O t + 2 O T O 1 O 2 O t , q t = s i ; μ ) = P ( O 1 O 2 O t , q t = s i ; μ ) P ( O t + 1 O t + 2 O T q t = s i ; μ ) = α t ( i ) β t ( i ) (6-17) \begin{aligned} P(O, q_{t} = s_{i}; \mu) & = P(O_{1} O_{2} \cdots O_{T}, q_{t} = s{i}; \mu) \\ & = P(O_{1} O_{2} \cdots O_{t}, q_{t} = s{i}, O_{t + 1} O_{t + 2} \cdots O_{T}; \mu) \\ & = P(O_{1} O_{2} \cdots O_{t}, q_{t} = s{i}; \mu) P(O_{t + 1} O_{t + 2} \cdots O_{T} | O_{1} O_{2} \cdots O_{t}, q_{t} = s{i}; \mu) \\ & = P(O_{1} O_{2} \cdots O_{t}, q_{t} = s{i}; \mu) P(O_{t + 1} O_{t + 2} \cdots O_{T} | q_{t} = s{i}; \mu) \\ & = \alpha_{t}(i) \beta_{t}(i) \end{aligned} \tag {6-17}

因此

P ( O ; μ ) = i = 1 N α t ( i ) β t ( i ) ,   1 t T (6-18) \begin{aligned} P(O; \mu) = \sum_{i = 1}^{N} \alpha_{t}(i) \beta_{t}(i), \ 1 \leq t \leq T \end{aligned} \tag {6-18}

猜你喜欢

转载自blog.csdn.net/zhaoyin214/article/details/106479407