HMM 是关于时序的概率模型, 为(fcolor{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 个观察值对应的状态序列的子串, 所以这是个动态规划问题.
满足动态规划的两个条件:
- 重叠子问题
- 最优子结构
所以现在我们需要确定的在表单中填写什么, 这一直是动态规划最关键的一环.
很直观的就是, 我们看看, 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) 的概率为后向概率, 记作:
算法:
输入: 隐马尔可夫模型λ, 观测序列 O
输出: 观测序列概率 P(O|λ)
(1) (eta_{T-1}(i) = b_i(o_T))
(2) 对 (t = T-2, T-3,cdots, 2, 1)
(P(O|λ) = sum_{i=1}^N pi_ib_i(o_1)eta_1(i))
通过该公式, 设置 (eta_{T}(i) = 1), 也可以,不过很难解释其意义, 只有数学上计算而已.