HMM算法

1. 概念

1.1. 马尔可夫链

随机过程有两个维度的不确定性。马尔可夫为了简化问题,提出了一种简化的假设,即随机过程中各个状态 s t s_t st的概率分布,只与它的前一个状态 s t − 1 s_{t-1} st−1有关, 即 P ( s t ∣ s 1 , s 2 , s 3 , ... , s t − 1 ) = P ( s t ∣ s t − 1 ) P(s_t|s_1, s_2, s_3, \dots,s_{t-1})=P(s_t|s_{t-1}) P(st∣s1,s2,s3,...,st−1)=P(st∣st−1)

这个假设后来被称为马尔可夫假设,而符合这个假设的随机过程则称为马尔可夫过程,也称为马尔可夫链。

P ( s t ∣ s 1 , s 2 , s 3 , ⋯   , s t − 1 ) = P ( s t ∣ s t − 1 ) P(s_t|s_1,s_2,s_3,\cdots,s_{t-1})=P(s_t|s_{t-1}) P(st∣s1,s2,s3,⋯,st−1)=P(st∣st−1)

时间和状态取值都是离散的马尔可夫过程也称为马尔可夫链。

1.2. 隐马尔可夫模型

P ( s 1 , s 2 , s 3 , ⋯   , o 1 , o 2 , o 3 , ⋯   ) = ∏ t P ( s t ∣ s t − 1 ) ⋅ P ( o t ∣ s t ) P(s_1,s_2,s_3,\cdots,o_1,o_2,o_3,\cdots)=\prod_{t} P(s_t | s_{t-1}) \cdot P(o_t | s_t) P(s1,s2,s3,⋯,o1,o2,o3,⋯)=t∏P(st∣st−1)⋅P(ot∣st)

隐含的是状态 s s s

隐马尔可夫模型由初始概率分布(向量 π \pi π),状态转移概率分布(矩阵 A A A)以及观测概率分布(矩阵 B B B )确定。

隐马尔可夫模型 λ \lambda λ 可以用三元符号表示, 即 λ = ( A , B , π ) \lambda = (A, B, \pi) λ=(A,B,π)

其中 A , B , π A,B,\pi A,B,π 称为模型三要素。

具体实现的过程中,如果观测的概率分布是定的,那么 B B B 就是确定的。在 hhmlearn 中,实现了三种概率分布的 HMM 模型:MultinominalHMM,GaussianHMM,GMMHMM。还可以定义不同的 emission probabilities,生成不同的HMM模型。

1.3. 两个基本假设

  1. 齐次马尔科夫假设(状态)
    P ( i t ∣ i t − 1 , o t − 1 , ... , i 1 , o 1 ) = P ( i t ∣ i t − 1 ) , t = 1 , 2 , ... , T P(i_t|i_{t-1},o_{t-1},\dots,i_1,o_1) = P(i_t|i_{t-1}), t=1,2,\dots,T P(it∣it−1,ot−1,...,i1,o1)=P(it∣it−1),t=1,2,...,T

    假设隐藏的马尔可夫链在任意时刻 t t t的状态 → i t \rightarrow i_t →it

    只依赖于其前一时刻的状态 → i t − 1 \rightarrow i_{t-1} →it−1

    与其他时刻的状态 → i t − 1 , ⋯   , i 1 \rightarrow i_{t-1}, \cdots,i_1 →it−1,⋯,i1

    及观测无关 → o t − 1 , ⋯   , o 1 \rightarrow o_{t-1},\cdots,o_1 →ot−1,⋯,o1

    也与时刻 t t t 无关 t = 1 , 2 , ⋯   , T t=1,2,\cdots,T t=1,2,⋯,T

  2. 观测独立性假设(观测)
    P ( o t ∣ i T , o T , i T − 1 , o T − 1 , ... , i t + 1 , o t + 1 , i t , i t − 1 , o t − 1 , ... , i 1 , o 1 ) = P ( o t ∣ i t ) P(o_t|i_T,o_T,i_{T-1},o_{T-1},\dots,i_{t+1},o_{t+1},i_t,i_{t-1},o_{t-1},\dots,i_1,o_1)=P(o_t|i_t) P(ot∣iT,oT,iT−1,oT−1,...,it+1,ot+1,it,it−1,ot−1,...,i1,o1)=P(ot∣it) 假设任意时刻 t t t 的观测 → o t \rightarrow o_t →ot

    只依赖于该时刻的马尔可夫链的状态 → i t \rightarrow i_t →it

    与其他观测 → o T , o T − 1 , ⋯   , o t + 1 , o t − 1 , ⋯   , o 1 \rightarrow o_T,o_{T-1},\cdots,o_{t+1},o_{t-1},\cdots,o_1 →oT,oT−1,⋯,ot+1,ot−1,⋯,o1

    及状态无关 → i T , i T − 1 , ⋯   , i t + 1 , i t − 1 , ⋯   , i 1 \rightarrow i_T,i_{T-1},\cdots,i_{t+1},i_{t-1},\cdots,i_1 →iT,iT−1,⋯,it+1,it−1,⋯,i1

1.4. 三个基本问题

  1. 概率计算问题

    输入:模型 λ = ( A , B , π ) \lambda=(A,B,\pi) λ=(A,B,π),观测序列 O = ( o 1 , o 2 , ... , o T ) O=(o_1,o_2,\dots,o_T) O=(o1,o2,...,oT)

    输出: P ( O ∣ λ ) P(O|\lambda) P(O∣λ)

  2. 学习问题

    输入:观测序列 O = ( o 1 , o 2 , ⋯   , o T ) O=(o_1,o_2,\cdots,o_T) O=(o1,o2,⋯,oT)

    输出: λ = ( A , B , π ) \lambda=(A,B,\pi) λ=(A,B,π)

  3. 预测问题, 也称为解码问题(Decoding)

    输入:模型 λ = ( A , B , π ) \lambda=(A,B,\pi) λ=(A,B,π),观测序列 O = ( o 1 , o 2 , ... , o T ) O=(o_1,o_2,\dots,o_T) O=(o1,o2,...,oT)

    输出:状态序列 I = ( i 1 , i 2 , ⋯   , i T ) I=(i_1,i_2,\cdots,i_T) I=(i1,i2,⋯,iT)

    因为状态序列是隐藏的,不可观测的,所以叫解码。

2. 算法

2.1 观测序列生成算法

输入: λ = ( A , B , π ) \lambda=(A,B,\pi) λ=(A,B,π) ,观测序列长度 T T T

输出:观测序列 O = ( o 1 , o 2 , ... , o T ) O=(o_1,o_2,\dots,o_T) O=(o1,o2,...,oT)

  1. 按照初始状态分布 π \pi π 产生 i 1 i_1 i1
  2. t = 1 t=1 t=1
  3. 按照状态 i t i_t it 的观测概率分布 b i t ( k ) b_{i_t}(k) bit(k) 生成 o t o_t ot
  4. 按照状态 i t i_t it 的状态转移概率分布 a i t , i t + 1 {a_{i_t, {i_{t+1}}}} ait,it+1 产生状 i t + 1 i_{t+1} it+1, i t + 1 = 1 , 2 , ... , N \color{red}i_{t+1}=1,2,\dots,N it+1=1,2,...,N
  5. t = t + 1 t=t+1 t=t+1 如果 t < T t<T t<T 转到3,否则,终止

书中定义了 I = ( i 1 , i 2 , ... , i T ) , Q = q 1 , q 2 , ... , q T I=(i_1,i_2,\dots,i_T), Q={q_1,q_2,\dots,q_T} I=(i1,i2,...,iT),Q=q1,q2,...,qT,根据定义, i t i_t it 的取值集合应该是 Q Q Q,而上面算法描述中说明了 i t + 1 = 1 , 2 , ... , N \color{red}i_{t+1}=1,2,\dots,N it+1=1,2,...,N 注意这里面的 i t i_t it实际上不是状态, 而是对应了前面的 i , j i,j i,j的含义,实际的状态应该是 q i t q_{i_t} qit这个算法中的 a i t i t + 1 = P ( i t + 1 = q i t + 1 ∣ i t = q i t ) a_{i_ti_{t+1}}=P(i_{t+1}=q_{i_{t+1}}|i_t=q_{i_t}) aitit+1=P(it+1=qit+1∣it=qit) 这里同样的符号,表示了两个不同的含义。

Rabiner定义的 a i j a_{ij} aij是这样的 A = a i j , a i j = P r ( q j a t t + 1 ∣ q i a t t ) A={a_{ij}},a_{ij}=Pr(q_j at t+1|q_i at t) A=aij,aij=Pr(qjatt+1∣qiatt) 这里理解就好, 有时候用角标 i i i代表对应的state, 有时候用 q i q_i qi代表对应的state。

2.2. 学习算法

概率计算算法

前向概率与后向概率

给定马尔可夫模型 λ \lambda λ,定义到时刻 t t t部分观测序列为 o 1 , o 2 , ... , o t o_1, o_2, \dots ,o_t o1,o2,...,ot, 且状态 q i q_i qi的概率为前向概率, 记作 α t ( i ) = P ( o 1 , o 2 , ... , o t , i t = q i ∣ λ ) \alpha_t(i)=P(o_1,o_2,\dots,o_t,i_t=q_i|\lambda) αt(i)=P(o1,o2,...,ot,it=qi∣λ) 给定马尔可夫模型 λ \lambda λ, 定义到时刻 t t t状态为 q i q_i qi的条件下, 从 t + 1 t+1 t+1到 T T T的部分观测序列为 o t + 1 , o t + 2 , ... , o T o_{t+1}, o_{t+2}, \dots ,o_T ot+1,ot+2,...,oT的概率为后向概率, 记作 β t ( i ) = P ( o t + 1 , o t + 2 , ... , o T ∣ i t = q i , λ ) \beta_t(i)=P(o_{t+1},o_{t+2},\dots,o_T|i_t=q_i, \lambda) βt(i)=P(ot+1,ot+2,...,oT∣it=qi,λ)

关于 α \alpha α 和 β \beta β 这两个公式,仔细看下,细心理解。前向概率从前往后递推, 后向概率从后向前递推。

前向算法

隐马尔科夫模型

相关推荐
研究点啥好呢1 小时前
Momenta算法工程师面试题精选:10道高频考题+答案解析
人工智能·算法·求职招聘·面试笔试
Resistance丶未来1 小时前
DeepSeek-V4 新手快速上手指南
数据结构·python·gpt·算法·机器学习·claude·claude 4.6
无限进步_2 小时前
【C++】寻找数组中出现次数超过一半的数字:三种解法深度剖析
开发语言·c++·git·算法·leetcode·github·visual studio
Via_Neo2 小时前
Nim Game
算法
人道领域2 小时前
【LeetCode刷题日记】150.逆波兰表达式求值
java·数据结构·算法·leetcode
蓝桉~MLGT2 小时前
中级软考(软件工程师)算法特辑——常考的六大基础排序算法
java·算法·排序算法
minji...2 小时前
Linux 网络套接字编程(五)TCP 回声服务器的实现(单进程(单线程)/多进程/多线程/线程池四个版本)
linux·服务器·开发语言·网络·c++·tcp/ip·算法
嘻嘻哈哈樱桃2 小时前
牛客经典101题题解集--堆/栈/队列
java·开发语言·算法
凯瑟琳.奥古斯特2 小时前
常见排序算法性能对比
数据结构·算法·排序算法