机器学习笔记之隐马尔可夫模型(六)解码问题
机器学习笔记之隐马尔可夫模型——解码问题
- 引言
- 解码问题介绍
- 解码问题分析
引言
上一节介绍了使用狭义EM算法对模型参数λ\lambdaλ。本节将介绍使用维特比算法(Viterbi)处理解码问题(Decoding)
解码问题介绍
在隐马尔可夫模型中,解码问题被看做为 给定长度为TTT的观测序列{o1,o2,⋯,oT}\{o_1,o_2,\cdots,o_T\}{o1,o2,⋯,oT},目标是求解观测序列O\mathcal OO对应状态序列I\mathcal II的后验概率P(I∣O)P(\mathcal I \mid \mathcal O)P(I∣O)。即:
在解码问题中,模型参数
λ\lambdaλ是已知量,通常可以省略掉。
P(I∣O)=P(i1,i2,⋯,iT∣o1,o2,⋯,oT,λ)P(\mathcal I \mid \mathcal O) = P(i_1,i_2,\cdots,i_T \mid o_1,o_2,\cdots,o_T,\lambda)P(I∣O)=P(i1,i2,⋯,iT∣o1,o2,⋯,oT,λ)
实际上,解码问题与预测问题(Prediction)是存在一些差别的:
- 预测问题所表达的思想是,给定长度为ttt的观测序列O={o1,o2,⋯,ot}\mathcal O = \{o_1,o_2,\cdots,o_t\}O={o1,o2,⋯,ot}作为条件,求解下一时刻的观测变量ot+1o_{t+1}ot+1或者状态变量it+1i_{t+1}it+1的后验概率。即:
预测往往是给定前面若干时刻的观测序列,求解下一时刻的相关信息。
P(ot+1∣o1,o2,⋯,ot)P(it+1∣o1,o2,⋯,ot)P(o_{t+1} \mid o_1,o_2,\cdots,o_t) \\ P(i_{t+1} \mid o_1,o_2,\cdots,o_t)P(ot+1∣o1,o2,⋯,ot)P(it+1∣o1,o2,⋯,ot) - 解码问题更倾向于求解一个对应时刻的状态序列而不是未来时刻信息的判断。 即给定一个观测序列,将对应时刻的状态序列求解出来。
关于隐马尔可夫模型的相关概念、模型参数表示、模型特殊性质 见机器学习笔记之隐马尔可夫模型(五)学习问题——EM算法中的场景介绍。
首先,需要明确解码问题的目标:在给定 观测序列O\mathcal OO 的条件下,找出一组后验概率最大的、与观测序列对应时刻的状态序列I\mathcal II。
假设观测序列O\mathcal OO的长度为TTT,那么最终寻找的最优状态序列I\mathcal II的长度也是TTT。因此,可以统计一下,到底存在多少种满足条件的状态序列:
由于it(t=1,2,⋯,T)i_t(t =1,2,\cdots,T)it(t=1,2,⋯,T)的取值范围是离散的,根据状态值集合Q={q1,q2,⋯,qK}\mathcal Q = \{q_1,q_2,\cdots,q_{\mathcal K}\}Q={q1,q2,⋯,qK},因此,可以得到 KT\mathcal K^TKT个不重复的状态序列组合。
即:随着序列长度TTT的增加,状态序列组合的数量随着指数级别增长。
而解码问题就是从KT\mathcal K^TKT个排列组合中选择出一个最优组合。
解码问题分析
什么是最优组合?最优组合满足的标准是什么?通过解码问题的目标可以看出,希望找到这样一组状态序列I^\hat {\mathcal I}I^使得关于I^\hat {\mathcal I}I^的后验概率P(I^∣O,λ)P(\hat {\mathcal I} \mid \mathcal O,\lambda)P(I^∣O,λ)最大。即:
I^=argmaxIP(I∣O,λ)\hat {\mathcal I} = \mathop{\arg\max}\limits_{\mathcal I} P(\mathcal I \mid \mathcal O,\lambda)I^=IargmaxP(I∣O,λ)
I^={i^1,i^2,⋯,i^T}\hat {\mathcal I} = \{\hat i_1,\hat i_2,\cdots,\hat i_T\}I^={i^1,i^2,⋯,i^T},需要如何找出这些最优的状态值?
进行一些示例:
假设我们的状态序列I\mathcal II在ttt时刻的状态变量it=qk(k∈{1,2,⋯,K})i_t = q_k (k \in \{1,2,\cdots,\mathcal K\})it=qk(k∈{1,2,⋯,K})的条件下,此时从初始概率分布出发,要如何表示最优序列对应的概率分布结果?
- 基于上述假设和问题,首先观察:达到状态变量iti_tit共经过观测变量和状态变量 表示如下:
o1,o2,⋯,ot,i1,i2,⋯,it−1,it=qko_1,o_2,\cdots,o_t,i_1,i_2,\cdots,i_{t-1},i_t = q_ko1,o2,⋯,ot,i1,i2,⋯,it−1,it=qk - 基于这些变量,我们如何描述这些变量组成序列的优劣性:基于模型参数λ\lambdaλ的 联合概率分布:
P(o1,o2,⋯,ot,i1,i2,⋯,it−1,it=qk∣λ)P(o_1,o_2,\cdots,o_t,i_1,i_2,\cdots,i_{t-1},i_t = q_k \mid \lambda)P(o1,o2,⋯,ot,i1,i2,⋯,it−1,it=qk∣λ) - 联合概率分布结果越大,该序列就越优秀。如何获取联合概率分布的最大值?继续观察,其中o1,o2,⋯,oto_1,o_2,\cdots,o_to1,o2,⋯,ot是观测变量,是已知项;实际只有通过对状态变量的合适选择,才能够找到最优的联合概率分布结果:
记 ttt时刻状态变量it=qki_t=q_kit=qk的条件下,最优概率分布结果为δt(k)\delta_t(k)δt(k),其表达式如下:
δt(k)=maxi1,i2,⋯,it−1P(o1,o2,⋯,ot,i1,i2,⋯,it−1,it=qk∣λ)\delta_t(k) = \mathop{\max}\limits_{i_1,i_2,\cdots,i_{t-1}} P(o_1,o_2,\cdots,o_t,i_1,i_2,\cdots,i_{t-1},i_t = q_k \mid \lambda)δt(k)=i1,i2,⋯,it−1maxP(o1,o2,⋯,ot,i1,i2,⋯,it−1,it=qk∣λ)
- 基于上述假设和问题,首先观察:达到状态变量iti_tit共经过观测变量和状态变量 表示如下:
同理,如果将ttt时刻替换为t+1t+1t+1时刻,即状态变量it+1=qji_{t+1} = q_{j}it+1=qj确定的条件下,依然从初始概率分布出发,其最优概率分布结果δt+1(j)\delta_{t+1}(j)δt+1(j) 的表达式如下:
δt+1(j)=maxi1,i2,⋯,itP(o1,o2,⋯,ot,ot+1,i1,i2,⋯,it,it+1=qj)\delta_{t+1}(j) = \mathop{\max}\limits_{i_1,i_2,\cdots,i_t} P(o_1,o_2,\cdots,o_t,o_{t+1},i_1,i_2,\cdots,i_t,i_{t+1} = q_j)δt+1(j)=i1,i2,⋯,itmaxP(o1,o2,⋯,ot,ot+1,i1,i2,⋯,it,it+1=qj)
观察,δt(k)\delta_t(k)δt(k)与δt+1(j)\delta_{t+1}(j)δt+1(j)之间是否存在关联关系:
- 思考:如果不看δt(k),δt+1(j)\delta_t(k),\delta_{t+1}(j)δt(k),δt+1(j)是最优概率分布结果,它们只是两条序列产生的联合概率分布,δt(k),δt+1(j)\delta_t(k),\delta_{t+1}(j)δt(k),δt+1(j)之间仅相差两项:it+1=qj,ot+1i_{t+1} = q_j,o_{t+1}it+1=qj,ot+1。
- 而ot+1o_{t+1}ot+1依然是已知项,因此δt+1(j)\delta_{t+1}(j)δt+1(j)相当于δt(k)\delta_t(k)δt(k)的状态下,继续 执行了一次状态转移 得到it+1=qji_{t+1} =q_jit+1=qj状态。即:
δt+1(j)=δt(k)⋅akj⋅bj(ot+1)\delta_{t+1}(j) = \delta_t(k)\cdot a_{kj} \cdot b_j(o_{t+1})δt+1(j)=δt(k)⋅akj⋅bj(ot+1) - 但又因为δt(k),δt+1(j)\delta_t(k),\delta_{t+1}(j)δt(k),δt+1(j)都是最优概率分布结果,有必要 步骤2中执行的状态转移过程也是最优过程。
而从it→it+1=qji_t \to i_{t+1}=q_jit→it+1=qj的状态转移过程存在K\mathcal KK种情况,对应联合概率分布结果表示如下:
i=1→δt(1)⋅a1j⋅bj(ot+1)i=2→δt(2)⋅a2j⋅bj(ot+1)⋮i=K→δt(K)⋅aKj⋅bj(ot+1)i=1 \to \delta_t(1)\cdot a_{1j} \cdot b_j(o_{t+1}) \\ i=2 \to \delta_t(2)\cdot a_{2j} \cdot b_j(o_{t+1}) \\ \vdots \\ i=\mathcal K \to \delta_t(\mathcal K)\cdot a_{\mathcal K j} \cdot b_j(o_{t+1})i=1→δt(1)⋅a1j⋅bj(ot+1)i=2→δt(2)⋅a2j⋅bj(ot+1)⋮i=K→δt(K)⋅aKj⋅bj(ot+1)
从上述K\mathcal KK种结果中,必然存在一个最大值。该最大值对应的iii就是能够产生最优过程 的状态值的编号:
δt+1(j)=max1≤k≤K[δt(k)⋅akj⋅bj(ot+1)]\delta_{t+1}(j) = \mathop{\max}\limits_{1\leq k \leq \mathcal K} [\delta_t(k)\cdot a_{kj} \cdot b_j(o_{t+1})]δt+1(j)=1≤k≤Kmax[δt(k)⋅akj⋅bj(ot+1)]
至此,找到δt(k)\delta_t(k)δt(k)和δt+1(j)\delta_{t+1}(j)δt+1(j)之间的关联关系。
但δt(k),δt+1(j)\delta_t(k),\delta_{t+1}(j)δt(k),δt+1(j)仅表示对应时刻最优联合概率分布,而实际需要的是一个最优序列。因此:
令ϕt+1(j)\phi_{t+1}(j)ϕt+1(j)表示从δt(k)\delta_{t}(k)δt(k)到δt+1(j)\delta_{t+1}(j)δt+1(j)选择状态转移最优的状态变量结果qkq_kqk对应的下标kkk。即:
ϕt+1(j)=argmax1≤k≤K[δt(k)⋅akj⋅bj(ot+1)]\phi_{t+1}(j) = \mathop{\arg\max}\limits_{1 \leq k \leq \mathcal K} [\delta_t(k)\cdot a_{kj} \cdot b_j(o_{t+1})]ϕt+1(j)=1≤k≤Kargmax[δt(k)⋅akj⋅bj(ot+1)]
最终得到下标序列:{ϕ1,ϕ2,⋯,ϕT}\{\phi_1,\phi_2,\cdots,\phi_T\}{ϕ1,ϕ2,⋯,ϕT}
相关参考:
机器学习-隐马尔可夫模型6-Decoding问题-Viterbi算法
机器学习笔记之隐马尔可夫模型(六)解码问题相关推荐
- 【火炉炼AI】机器学习044-创建隐马尔科夫模型
[火炉炼AI]机器学习044-创建隐马尔科夫模型 (本文所使用的Python库和版本号: Python 3.6, Numpy 1.14, scikit-learn 0.19, matplotlib 2 ...
- 【机器学习】【隐马尔可夫模型-3】后向算法:算法详解+示例讲解+Python实现
0.前排提示 csdn有些数学公式编辑不出来,所以本博用容易书写的表达式来表示专业数学公式,如: (1) 在本博客中用α<T>(i)来表示 (2)在本博客中用[i=1, N]∑来表示 注 ...
- (转载)机器学习知识点(十一)隐马尔可夫模型
隐马尔可夫模型 (Hidden Markov Model,HMM) 最初由 L. E. Baum 和其它一些学者发表在一系列的统计学论文中,随后在语言识别,自然语言处理以及生物信息等领域 ...
- 【机器学习算法】隐马尔可夫模型HMM(一)
目录 一.马尔可夫模型 1. 马尔可夫性 2. 马尔可夫链 3. 马尔可夫链案例 二.隐马尔可夫模型HMM 1. named entity recognition(命名实体识别)问题概述 2. 什么是 ...
- 机器学习中的隐马尔科夫模型(HMM)详解
前导性推荐阅读资料: 从朴素贝叶斯分类器到贝叶斯网络(上) 从朴素贝叶斯分类器到贝叶斯网络(下) 欢迎关注白马负金羁的博客 http://blog.csdn.net/baimafujinji,为保证公 ...
- 机器学习算法之——隐马尔可夫模型(Hidden Markov Models,HMM) 代码实现
@Author:Runsen 隐形马尔可夫模型,英文是 Hidden Markov Models,就是简称 HMM. 既是马尔可夫模型,就一定存在马尔可夫链,该马尔可夫链服从马尔可夫性质:即无记忆性. ...
- 机器学习算法之隐马尔可夫模型
马尔可夫性质及马尔可夫链 马尔可夫性质 设 是一个随机过程,E为其状态空间,若对于任意的 任意的 ,随机变量X(t) 在已知变量 之下的条件分布函数只与 有关,而与 无关,即条件分布函数满 ...
- 隐马尔可夫模型的java实现_机器学习——python模拟隐马尔可夫模型
<统计学习方法> 李航著 第十章 隐马尔可夫模型 我是小白一个:本文代码转载地址文末有注释:有问题请多指教 先看书,看完书,代码就看懂了.程序只是将算法翻译成机器认识的罢了 import ...
- HMM学习笔记2 隐马尔科夫模型与前向算法
一 序 本系列文章摘自 52nlp(我爱自然语言处理: http://www.52nlp.cn/),原文链接在 HMM 学习最佳范例,有大佬做了二次整理,参见:https://blog.csdn.ne ...
最新文章
- Redis 启动杂项
- 敏捷结果30天之第六天:周五回顾,找到三件做的好以及三件需要改善的事情...
- C#如何得到运行中和杀死运行中的进程?
- mysql 表中添加数据类型_MySQL数据表添加字段(三种方式)
- 如何模拟Spring bean(版本2)
- 第六章 Qt布局管理器Layout
- logback指定不同包下的日志输出到不同的文件
- 纯新手DSP编程--5.29--基于CCS的DSP片级支持库CSL
- 全网首发:WORD应该是布局绘制二合一
- 用 cmd 查询硬盘序列号、笔记本电脑序列号、主板型号、电脑配置、WiFi 密码
- (一)抖音快手短视频去水印原理分析
- Docker Macvlan
- Forth 语言概要
- BZOJ2827 千山鸟飞绝
- 一级建造师能挂靠到三级资质的企业吗?
- Redis-Java客户端
- 磁共振检查头部能检测出什么_磁共振检查头部的注意事项
- 物联网开发笔记(30)- 使用Micropython开发ESP32开发板之控制240x240的oled屏幕显示二维码(ST7789芯片)
- py和ipynb文件互相转化
- BaseAdapter 的notifyDataSetInvalidated 和notifyDataSetChanged