隐马尔可夫模型【维特比算法】

机器学习笔记

机器学习系列笔记,主要参考李航的《机器学习方法》,见参考资料。
第一章 机器学习简介
第二章 感知机
第三章 支持向量机
第四章 朴素贝叶斯分类器
第五章 Logistic回归
第六章 线性回归和岭回归
第七章 多层感知机与反向传播【Python实例】
第八章 主成分分析【PCA降维】

第九章 隐马尔可夫模型


文章目录


维特比算法是一种动态规划算法用于寻找最有可能产生观测事件序列的隐含状态序列.

一、维特比算法核心思想

viterbi维特比算法解决的是篱笆型的图的最短路径问题,图的节点按列组织,每列的节点数量可以不一样,每一列的节点只能和相邻列的节点相连,不能跨列相连.

过程非常简单:

  1. 为了找出S到E之间的最短路径,我们先从S开始从左到右一列一列地来看。

  2. 首先起点是S,从S到A列的路径有三种可能:S-A1、S-A2、S-A3,如下图:

S-A1、S-A2、S-A3中的哪一段都有可能是全局最短路径的备选项,我们继续往右看,到了B列。按B列的B1、B2、B3逐个分析:

如上图,经过B1的所有路径只有3条:

  1. S-A1-B1
  2. S-A2-B1
  3. S-A3-B1

以上这三条路径,各节点距离加起来对比一下,我们就可以知道其中哪一条是最短的。假设S-A3-B1是最短的,那么我们就知道了经过B1的所有路径当中S-A3-B1是最短的,其它两条路径路径S-A1-B1和S-A2-B1都比S-A3-B1长,绝对不是目标答案,可以删掉了,删掉了不可能是答案的路径,就是viterbi算法(维特比算法)的重点,因为后面我们再也不用考虑这些被删掉的路径了,现在经过B1的所有路径只剩一条路径了,如下图:

以此类推后面的结点......

二、viterbi算法

viterbi算法的核心主要是:

  1. 定义时刻t每个状态 s i s_i si的路径概率 δ t ( i ) \delta_t(i) δt(i).
  2. δ t ( i ) \delta_t(i) δt(i)的递推公式.
  3. 回溯每个时刻的最优状态.

给定 λ = ( A , B , π ) \lambda=(A,B,\pi) λ=(A,B,π)和长度为 T T T的观测序列

0 = { O 1 , O 2 , ⋯   , O T } , \mathbf{0}=\{O_1,O_2,\cdots,O_T\}, 0={O1,O2,⋯,OT},

求与观测序列O最匹配的状态序列

X = { X 1 , X 2 , ⋯   , X T } . \mathbf{X}=\{X_1,X_2,\cdots,X_T\}. X={X1,X2,⋯,XT}.

相当于找到使得 P ( X ∣ 0 , λ ) P(X|0,\lambda) P(X∣0,λ)最大的状态序列 X ∗ X^* X∗, 即

X ∗ = argmax ⁡ X P ( X ∣ O , λ ) , \mathbf{X}^*=\underset{\mathbf{X}}{\operatorname*{argmax}}P(\mathbf{X}|\mathbf{O},\lambda), X∗=XargmaxP(X∣O,λ),所求的最优状态序列 X\^\*也可以定义为
X ∗ = argmax ⁡ X P ( X , O ∣ λ ) . \mathbf{X}^*=\underset{\mathbf{X}}{\operatorname*{argmax}}P(\mathbf{X},\mathbf{O}|\lambda). X∗=XargmaxP(X,O∣λ).考虑时刻 t ≤ N t\leq N t≤N 状态为 s i ( 1 ≤ i ≤ N ) s_i\quad(1\leq i\leq N) si(1≤i≤N) 的所有单个路径
( X 1 , X 2 , ⋯   , X t − 1 , X t = s i ) . (X_1,X_2,\cdots,X_{t-1},X_t=s_i). (X1,X2,⋯,Xt−1,Xt=si).所对应的概率的最大值为(也就是每个时刻每个状态对应观察序列的概率,可以递推):

δ t ( i ) = max ⁡ X 1 , X 2 , . . . , X t − 1 P ( X t = s i , X 1 , X 2 , ⋯   , X t − 1 , O 1 , O 2 , ⋯   , O t ) , \delta_t(i)=\max\limits_{X_1,X_2,...,X_{t-1}}P(X_t=s_i,X_1,X_2,\cdots,X_{t-1},O_1,O_2,\cdots,O_t), δt(i)=X1,X2,...,Xt−1maxP(Xt=si,X1,X2,⋯,Xt−1,O1,O2,⋯,Ot),

显然对最优路径 X ∗ X^* X∗而言,
P ( X ∗ , O ∣ λ ) = max ⁡ 1 ≤ i ≤ N δ T ( i ) , P(X^*,O|\lambda)=\max\limits_{1\leq i\leq N}\delta_T(i), P(X∗,O∣λ)=1≤i≤NmaxδT(i),而且
X T ∗ = arg ⁡ max ⁡ s i , 1 ≤ i ≤ N δ T ( i ) . X_T^* = \arg\max\limits_{s_i,1\leq i\leq N} \delta_T( i) . XT∗=argsi,1≤i≤NmaxδT(i).

结合第一部分的动态规划思想,路径最大概率 δ t ( i ) ( 2 ≤ t ≤ T ) \delta_t(i)(2\leq t\leq T) δt(i)(2≤t≤T)的递推公式 如下:
δ t ( i ) = max ⁡ 1 ≤ j ≤ N [ δ t − 1 ( j ) a j i ] b i ( O t ) , i = 1 , 2 , ⋯   , N . \delta_t(i)=\max_{1\leq j\leq N}[\delta_{t-1}(j)a_{ji}]b_i(O_t),\mathrm{~}i=1,2,\cdots,N. δt(i)=1≤j≤Nmax[δt−1(j)aji]bi(Ot), i=1,2,⋯,N.由此我们可以递推计算出 δ T ( i ) , i = 1 , 2 , ⋯   , N . \delta_T(i),\quad i=1,2,\cdots,N. δT(i),i=1,2,⋯,N.完整算法框架如下:

参考资料

  1. 如何通俗的理解维特比算法
  2. 李航. 机器学习方法. 清华大学出版社, 2022.
相关推荐
Mintopia1 小时前
OpenClaw 对软件行业产生的影响
人工智能
陈广亮1 小时前
构建具有长期记忆的 AI Agent:从设计模式到生产实践
人工智能
会写代码的柯基犬2 小时前
DeepSeek vs Kimi vs Qwen —— AI 生成俄罗斯方块代码效果横评
人工智能·llm
Mintopia2 小时前
OpenClaw 是什么?为什么节后热度如此之高?
人工智能
爱可生开源社区2 小时前
DBA 的未来?八位行业先锋的年度圆桌讨论
人工智能·dba
叁两5 小时前
用opencode打造全自动公众号写作流水线,AI 代笔太香了!
前端·人工智能·agent
前端付豪5 小时前
LangChain记忆:通过Memory记住上次的对话细节
人工智能·python·langchain
strayCat232555 小时前
Clawdbot 源码解读 7: 扩展机制
人工智能·开源
王鑫星5 小时前
SWE-bench 首次突破 80%:Claude Opus 4.5 发布,Anthropic 的野心不止于写代码
人工智能