隐马尔可夫模型后向算法详细推导

HMM 是关于时序的概率模型, 为\(\bf\color{red}{生成模型}\),

隐马尔可夫模型描述由一个隐藏的马尔可夫链随机生成不可观测的状态随机序列,再由各个状态生成一个观测而产生观测随机序列的过程。 隐藏的马尔可夫链随机生成的状态的序列,称为状态序列(state sequence);每个状态生成一个观测,而由此产生的观测的随机序列,称为观测序列(observation sequence)。序列的每一个位置又可以看作是一个时刻。

2个基本假设

1. 齐次马尔可夫性的假设, 即假设隐藏的马尔可夫链在任意时刻 t 的状态只依赖前一时刻的状态, 与其他时刻的状态及观测无关, 也与时刻无关

2. 观测独立性假设, 即假设任意时刻的观测只依赖于该时刻的马尔可夫链的状态,与其他的观测及状态无关.

概率计算问题

给定模型 \(\lambda = (A, B, \pi)\) 和 观测数据 \(O=(o_1, o_2, \cdots, o_3)\), 计算模型 λ 下观测序列 O 出现的概率 P(O|λ), 由于直接计算法复杂度太高, 选择其他方法

前向算法

直接计算方法有太多重叠的子问题, 比如对于只有最后一位 T 不同的 N 个状态序列, 我们还是需要计算复杂度为 O(NT), 如果我们能将前 T -1 位的概率计算结果保存下来, 那我们只需要 O(N) 的计算复杂度. 而且该问题具有最优子结构, T-1 观察序列对应的状态序列必定在 T 个观察值对应的状态序列的子串, 所以这是个动态规划问题.

满足动态规划的两个条件:

  1. 重叠子问题
  2. 最优子结构

所以现在我们需要确定的在表单中填写什么, 这一直是动态规划最关键的一环.

很直观的就是, 我们看看, t 观察序列可以如何通过 t-1 得到?

想知道第 t 个观察值是吧, 那么我们需要先知道 t 个观察值对应的状态值 \(q_i\), 当然 t-1 序列不会包含 \(i_t=q_i\)的信息, 如果我们想知道 \(q_i\) 信息, 只能通过 \(i_{t-1}=q_j\) 来得知, 所以我们 t-1 序列提供的信息包含 \(i_{t-1}=q_j\), 即表中信息包含状态码, 知道了 \(q_i\), 知道对应观测值概率事件很简单的事.

后向算法

后项概率: 给定马尔可夫模型λ, 定义在时刻 t 状态的为 \(q_i\) 的条件下, 从 t+1 到 T 的部分观测序列为\(o_{t+1}, o_{t+2},\cdots,o_T\) 的概率为后向概率, 记作:

\[\beta_{t}(i)=P(o_{t+1}, o_{t+2},\cdots,o_T|i_t=q_i,\lambda) \]

算法:
输入: 隐马尔可夫模型λ, 观测序列 O
输出: 观测序列概率 P(O|λ)

(1) \(\beta_{T-1}(i) = b_i(o_T)\)
(2) 对 \(t = T-2, T-3,\cdots, 2, 1\)

\[\begin{align*} \beta_{t}(i) &= P(o_{t+1}, o_{t+2},\cdots,o_T|i_t=q_i,\lambda) \\ &=\sum_{j=1}^N{P(o_{t+1}, o_{t+2},\cdots,o_T, i_{t+1}=q_j|i_t=q_i,\lambda)} \\ &=\sum_{j=1}^N{P(o_{t+1}, o_{t+2},\cdots,o_T|i_{t+1}=q_j, i_t=q_i,\lambda)} \cdot P(i_{t+1}=q_j|i_t=q_i,\lambda)\\ &=\sum_{j=1}^N{P(o_{t+1}, o_{t+2},\cdots,o_T|i_{t+1}=q_j, i_t=q_i,\lambda)} \cdot a_{ij}\\ &=\sum_{j=1}^N{P(o_{t+1}, o_{t+2},\cdots,o_T|i_{t+1}=q_j,\lambda)} \cdot a_{ij}\quad \leftarrow 假设1 \\ &=\sum_{j=1}^N{P(o_{t+1}| o_{t+2},\cdots,o_T,i_{t+1}=q_j,\lambda)\cdot P(o_{t+2},\cdots,o_T|i_{t+1}=q_j,\lambda)} \cdot a_{ij}\quad \\ &=\sum_{j=1}^N{P(o_{t+1}|i_{t+1}=q_j,\lambda)\cdot P(o_{t+2},\cdots,o_T|i_{t+1}=q_j,\lambda)} \cdot a_{ij}\quad \leftarrow 假设2\\ &=\sum_{j=1}^N a_{ij}\cdot b_j(o_{t+1})\cdot \beta_{t+1}(j) \quad \end{align*}\]

\(P(O|λ) = \sum_{i=1}^N \pi_ib_i(o_1)\beta_1(i)\)

通过该公式, 设置 \(\beta_{T}(i) = 1\), 也可以,不过很难解释其意义, 只有数学上计算而已.

posted @ 2018-03-27 11:36  nowgood  阅读(4224)  评论(1编辑  收藏  举报