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 β 这两个公式,仔细看下,细心理解。前向概率从前往后递推, 后向概率从后向前递推。

前向算法

隐马尔科夫模型

相关推荐
江畔柳前堤2 小时前
大语言模型分布式训练:从并行策略到万卡工程的系统梳理
人工智能·分布式·深度学习·算法·目标检测·机器学习·语言模型
Forever Nore3 小时前
LeetCode 4 寻找两个正序数组的中位数 - 二分
算法·leetcode
罗西的思考5 小时前
【OpenClaw具身硬件】MiniClaw 阅读笔记---(1)基础
人工智能·算法·机器学习
蛋先生DX6 小时前
大模型参数存储格式揭秘:BF不是男朋友
深度学习·算法·llm
爱跳舞的烤冷面6 小时前
自学嵌入式第22天(数据结构——哈希)
数据结构·算法·哈希算法
猎嘤一号7 小时前
博弈论(Game Theory)的理论、算法与工程
人工智能·算法·安全·博弈论
月光船幽幽7 小时前
影子模式下保护 logits 不被修改
人工智能·python·算法
马拉AI7 小时前
腾讯开源 Agent 记忆系统,AI“换对话就忘”的问题有了新解法(附安装使用教程)
人工智能·算法·开源·科研
地平线开发者8 小时前
征程6工具链模型X86推理方式说明
算法
地平线开发者9 小时前
【征程6】校准量化中HistogramObserver解析
算法