隐马尔科夫(Hidden Markov model)模型是一类基于概率统计的模型,是一种结构最简单的动态贝叶斯网,是一种重要的有向图模型。自上世纪80年代发展起来,在时序数据建模,例如:语音识别、文字识别、自然语言处理等领域广泛应用。隐马尔科夫模型涉及的变量、参数众多,应用也很广泛,以至于很多人不明白模型到底在做什么,模型能够做什么。

HMM中hidden&Markov

首先需要明确的是什么是马尔科夫性质。假设随机过程中某一时刻的状态 s t s_t st​的概率分布满足:
p ( s t ∣ s t − 1 , s t − 2 , . . . , s 0 ) = p ( s t ∣ s t − 1 ) p(s_t|s_{t-1},s_{t-2},...,s_0)=p(s_t|s_{t-1}) p(st​∣st−1​,st−2​,...,s0​)=p(st​∣st−1​)

通俗的说就是,随机过程中某一时刻的状态 s t s_t st​,只与它前一时刻的状态 s t − 1 s_{t-1} st−1​有关,以上就是马尔科夫性质。我们知道自然世界中的很多现象都不符合这一性质,但是我们可以假设其具有马尔科夫性质,这为原来很多无章可循的问题提供了一种解法。
如果某一随机过程满足马尔科夫性质,则称这一过程为马尔科夫过程,或称马尔科夫链。

在马尔科夫链中,每一个圆圈代表相应时刻的状态,有向边代表了可能的状态转移,权值表示状态转移概率。
那HMM中的隐体现在哪呢?这里“隐”指的是马尔科夫链中任意时刻的状态变量不可见,也就是说状态序列 s 0 , s 1 , . . . , s t s_0,s_1,...,s_t s0​,s1​,...,st​无法直接观测到。但是HMM中每时刻有一个可见的观测值 o t o_t ot​与之对应,而且 o t o_t ot​有且仅于当前时刻隐状态 s t s_t st​有关, s t s_t st​外化表现为 o t o_t ot​的概率称为输出概率,因此隐马尔科夫模型的结构图如下所示。

因此隐马尔科夫模型中马尔科夫链指的是隐状态 s 0 , s 1 , . . . , s t s_0,s_1,...,s_t s0​,s1​,...,st​序列。

HMM之掷骰子

上面的定义虽然给出了隐马尔科夫模型的书面表达,但是对于隐马尔科夫模型的隐状态、观测值、转移概率、输出概率我们依然没有一个直观的概念。下面将采用掷骰子的例子,将隐马尔科夫模型的各种概念和例子中的变量联系起来。
我们假设一个赌场里来了一个老千,他带有两种作弊骰子,分别记为骰子2,骰子3,骰子2掷出较小点数的概率较大,骰子3掷出较大点数的概率更大。所以现在我们有三种骰子,分别是赌场正常骰子1,和两种作弊骰子2,骰子3。这就是三种隐状态,因为我们不知道老千每次使用的是哪种骰子。但是我们知道老千切换骰子的习惯,可以表示如下图:

这个概率就是转移概率,表明了隐状态从一种状态转换到另一种状态的概率,可以写成矩阵的形式:
A = ( 0.15 0.45 0.40 0.30 0.20 0.50 0.20 0.50 0.30 ) A= \left( \begin{matrix} 0.15 & 0.45 & 0.40\\ 0.30 & 0.20 & 0.50\\ 0.20 & 0.50 & 0.30 \end{matrix} \right) A=⎝⎛​0.150.300.20​0.450.200.50​0.400.500.30​⎠⎞​

我们也知道三种骰子掷出1~6点的概率分别如下:

这些概率就称作输出概率,因为这个概率表明了从某种骰子(隐变量)到骰子点数(可观测值)的概率。输出概率也可以用矩阵的形式表示如下:
B = ( 0.16 0.16 0.16 0.16 0.16 0.16 0.06 0.06 0.06 0.06 0.06 0.70 0.40 0.20 0.15 0.05 0.05 0.05 ) B= \left( \begin{matrix} 0.16 & 0.16 & 0.16 & 0.16 & 0.16 & 0.16\\ 0.06 & 0.06 & 0.06 & 0.06 & 0.06 & 0.70\\ 0.40 & 0.20 & 0.15 & 0.05 & 0.05 & 0.05 \end{matrix} \right) B=⎝⎛​0.160.060.40​0.160.060.20​0.160.060.15​0.160.060.05​0.160.060.05​0.160.700.05​⎠⎞​

以上转移概率矩阵和输出概率矩阵就囊括了整个HMM模型,这个模型描述了状态转移的所有可能以及概率,也表明了状态改变带来的外在表现的呈现以及概率。
因此,用一句话总结HMM模型就是:有一个随时间不断改变的隐藏状态,它持续影响系统的外在表现。

HMM模型五元组

HMM模型可以用五元组( O , S , A , B , Π O,S,A,B,\Pi O,S,A,B,Π)表示。其中

  • O : { o 0 , o 1 , . . . , 0 n } O:\{o_0,o_1,...,0_n\} O:{o0​,o1​,...,0n​}表示观测系列,是系统的外在可观测变量。
  • S : { s 0 , s 1 , . . . , s n } S:\{s_0,s_1,...,s_n\} S:{s0​,s1​,...,sn​}表示隐状态序列,是导致系统外在表现变化的内因。
  • A : { a i j = p ( s j ∣ s i ) } A:\{a_{ij}=p(s_j|s_i)\} A:{aij​=p(sj​∣si​)}表示状态转移概率。
  • B : { b i j = p ( o j ∣ s i ) } B:\{b_{ij}=p(o_j|s_i)\} B:{bij​=p(oj​∣si​)}表示输出概率。
  • Π : { π 0 , π 1 , . . . , π m } \Pi:\{\pi_0,\pi_1,...,\pi_m\} Π:{π0​,π1​,...,πm​},表示初始状态概率分布。

HMM三类问题

根据以上HMM模型五元组表示,我们可以归纳出HMM模型解决的三类主要问题。

1、评估问题

已知状态转移矩阵 A A A,输出矩阵 B B B,和观测序列,求该观测序列出现的可能性。
这就是评估问题,最显而易见的一个应用就是异常检测,如果一个多次HMM模型实验的结果都显示观测序列出现的概率较小,说明观测序列和模型不太吻合,则可以断定系统可能出现了异常。该问题最简单粗暴的解法就是直接组合出所有的可能隐藏状态序列,然后求出每个隐藏状态序列导致观测序列发生的概率,最后将概率求和即是最终结果。但是列举出所有可能的状态序列是一个指数爆炸增长的问题,在实际系统中不太可能实现。因此有人提出了forward/Backward 算法。(具体算法后面分章节再介绍)

2、解码问题

已知状态转移矩阵 A A A,输出矩阵 B B B,和观测序列,找出最有可能产生该观测序列的隐藏状态序列。
这个问题通常被称作解码问题,该问题通常也被称作“由果溯因”。隐状态通常是导致系统外在表现变化的“内因”,观测序列只是隐状态变化带来的“结果”。最常见的应用就是语音识别,即将某一段语音转化成对应的文字序列。解决该问题也可以采用同问题一类似的枚举法,只需要将所有可能序列的概率求和改为找最大概率对应序列即可,但同样效率不高。因此解决此类问题常用Viterbi算法。(具体算法后面分章节再介绍)

3、学习问题

已知仅仅是很多观测序列,估计HMM模型的参数的可能取值。
这个问题被称作学习问题,通过大量的样本数据去学习最优的模型参数,该问题的求解比较复杂,常采用Baum-Welch算法。

本人目前正在学习机器学习和自然语言处理,第一次接触隐马尔科夫模型,难免有许多总结得不准确的地方,HMM模型涉及的内容也比较的多,以后将边学习边改进扩充该块内容,欢迎大家交流讨论!

参考文献

知乎【如何用简单易懂的例子解释隐马尔可夫模型?】

隐马尔科夫(HMM)模型相关推荐

  1. 【深度剖析HMM(附Python代码)】1.前言及隐马尔科夫链HMM的背景

    1. 前言 隐马尔科夫HMM模型是一类重要的机器学习方法,其主要用于序列数据的分析,广泛应用于语音识别.文本翻译.序列预测.中文分词等多个领域.虽然近年来,由于RNN等深度学习方法的发展,HMM模型逐 ...

  2. 机器学习——隐马尔科夫(HHM)原理

    机器学习--隐马尔科夫(HHM)模型原理 1 从马尔科夫模型到隐马尔科夫模型 1.1 马尔科夫过程引入 首先,我们先给出一张图: 在上面的图里,给出的是一个链式的结构,结构中的每一个节点称之为一个状态 ...

  3. python做空矩阵_【手把手教你】Python实现基于隐马尔科夫的多空策略

    前言 我们通常使用股市的一手数据来创建一个策略模型,预测下一时刻价格的多少.走势的判断或其他. 今天,我们想结合多样的市场条件(波动性,交易量,价格变化等等)和结合隐马尔科夫(HMM)来构建我们的交易 ...

  4. 隐马尔科夫模型HMM(一)HMM模型

    2019独角兽企业重金招聘Python工程师标准>>> 隐马尔科夫模型(Hidden Markov Model,以下简称HMM)是比较经典的机器学习模型了,它在语言识别,自然语言处理 ...

  5. 机器学习知识点(二十五)Java实现隐马尔科夫模型HMM之jahmm库

    1.隐马尔可夫模型HMM的应用场景,关乎于序列和状态变化的都可以.    发现java有可库,专为开发HMM,可惜只能在CSDN上有得下载.     2.jahmm是java开发隐马尔科夫模型的一个j ...

  6. 隐马尔科夫模型HMM自学 (3)

    Viterbi Algorithm 本来想明天再把后面的部分写好,可是睡觉今天是节日呢?一时情不自禁就有打开电脑.......... 找到可能性最大的隐含状态序列 崔晓源 翻译 多数情况下,我们都希望 ...

  7. 隐马尔科夫模型HMM自学 (2)

    HMM 定义 崔晓源 翻译 HMM是一个三元组 (,A,B).  the vector of the initial state probabilities;  the state transitio ...

  8. 隐马尔科夫模型HMM自学(1)

    介绍 崔晓源 翻译 我们通常都习惯寻找一个事物在一段时间里的变化规律.在很多领域我们都希望找到这个规律,比如计算机中的指令顺序,句子中的词顺序和语音中的词顺序等等.一个最适用的例子就是天气的预测. 首 ...

  9. 【NLP】用于语音识别、分词的隐马尔科夫模型HMM

    大家好,今天介绍自然语言处理中经典的隐马尔科夫模型(HMM).HMM早期在语音识别.分词等序列标注问题中有着广泛的应用. 了解HMM的基础原理以及应用,对于了解NLP处理问题的基本思想和技术发展脉络有 ...

最新文章

  1. WebVie打开woffice文档
  2. ubuntu16.04打开软件或终端的窗口自动在左上角
  3. oracle元字符,正则表达式元字符
  4. Java知多少(66)输入输出(IO)和流的概述
  5. Graph Embedding:word2vec更进一步?
  6. Ribbon Finance将WBTC Theta Vault存款上限提高至250WBTC
  7. npm 端口设置成80_13 个 NPM 快速开发技巧
  8. 融完5亿美元创始人出局?腾讯投资的明星无人车公司Zoox地震了
  9. python字典和集合对象可以进行索引操作_建议收藏丨纯知识点:Python基础—字典、集合操作大全...
  10. 批量将ANSI文本txt文件转换成UTF8编码格式 (vbs方法)
  11. python鼠标移动_python自动化之鼠标移动
  12. node jade模板
  13. 软件可维护性测试方法,软件可维护性
  14. 3月16日—3月20日四年级课程表
  15. 关于泰勒展开的细节-《三体》读后感的读后感...
  16. Excel中通过FREQUENCY统计分数段
  17. 初识SafetyNet简要梳理
  18. CCAI 2017 | 中国工程院院士李德毅:L3的挑战与量产
  19. 考研路上的那些一战二战三战成功与失败的故事系列之十三
  20. agc012E Camel and Oases(状压dp+思路题)

热门文章

  1. 程序员坐牢会被安排写代码吗?
  2. css过长文字自动换行
  3. ad16自动布线设置规则_pcb自动布线设置_设置线间距与宽度设置_pcb布局布线技巧...
  4. html添加靠左的图片,div 居左靠左布局 CSS居左靠左布局
  5. NASA搞无人车?中国航天也将携手人工智能技术
  6. MPPT电源控制器设计
  7. 在基于ZYNQ MPSOC XCZU3CG自定义单板上运行DPU例程
  8. 安防工程属于计算机系统集成的文件,安防系统集成(工程)市场规模为960亿元
  9. HMC5883L地磁传感器驱动
  10. 浅谈Jsch SSH2