隐马尔可夫模型简单理解

本文详细介绍了隐马尔可夫模型(HMM),从马尔可夫模型的基础出发,阐述了HMM的定义、特点及应用场景。通过实例解析了HMM的三个基本问题:估计问题、序列问题(维特比算法)和参数估计问题,重点讲解了前向算法、后向算法和维特比算法的工作原理,旨在帮助读者深入理解并掌握HMM。
摘要由CSDN通过智能技术生成


本文属于我的机器学习/深度学习系列文章,点此查看系列文章目录

前言

最近NLP课上讲完了隐马尔可夫模型,听得我一脸懵逼。
在这里插入图片描述

但是HMM实在是太优美、太好用了,因此决定写一篇博客好好理解一下HMM,同时给其他与我一样有疑难的童鞋们解惑。

一、马尔可夫模型

为了理解隐马尔可夫模型,首先要知道马尔可夫模型怎么来的。

马尔可夫模型是一个随机过程,假设一个系统存在N个状态,记为 s 1 , s 2 , . . . , s N s_1,s_2,...,s_N s1,s2,...,sN,状态的转移依据时间进行。我们用 q t q_t qt表示系统在时间t的状态变量( s i s_i si中的一个),那么有t时刻,状态取值为 s j , ( 1 ≤ j ≤ N ) s_j,(1\le j \le N) sj,(1jN)的概率则取决于前t-1个时刻的状态,如下:
p ( q t = s j ∣ q t − 1 = s i , q t − 2 = s k , . . . ) p(q_t=s_j|q_{t-1}=s_i,q_{t-2}=s_k,...) p(qt=sjqt1=si,qt2=sk,...)

简言之就是后面的状态依赖于前面所有已有状态

但是如果每次都考虑前t-1个状态实在太复杂了,并且并不是前面所有的状态都对当前状态有很大影响。因此我们有以下两点假设:

  1. 若在特定情况下,系统在时间t的状态仅与其在t-1的状态相关,则有
    p ( q t = s j ∣ q t − 1 = s i , q t − 2 = s k , . . . ) = p ( q t = s j ∣ q t − 1 = s i ) ( 1 ) p(q_t=s_j|q_{t-1}=s_i,q_{t-2}=s_k,...) = p(q_t=s_j|q_{t-1}=s_i)(1) p(qt=sjqt1=si,qt2=sk,...)=p(qt=sjqt1=si(1)

    不再考虑前面所有状态,改为只考虑前一个状态。这个也被称为离散一阶马尔可夫链

  2. 若只考虑公式(1)独立于时间的随机过程,假设状态与时间无关,则有 p ( q t = s j ∣ q t − 1 = s i ) = a i j , 1 ≤ i , j ≤ N a i j ≥ 0 ∑ j = 1 N a i j = 1 p(q_t=s_j|q_{t-1}=s_i) = a_{ij},1\le i,j\le N \\ a_{ij} \ge 0 \\ \sum_{j=1}^N a_{ij} = 1 p(qt=sjqt1=si=aij,1i,jNaij0j=1Naij=1

    假设了状态的转移不再受时间限制,只依赖前一个状态

如下是一个马尔可夫链的例子:
在这里插入图片描述
由上图计算从状态t经过状态i转移到状态p的概率,如下:
p ( t , i , p ) = p ( s 1 = t ) × p ( s 2 = i ∣ s 1 = t ) × p ( s 3 = p ∣ s 2 = i ) = 1.0 ∗ 0.3 ∗ 0.6 = 0.18 p(t,i,p) = p(s_1=t) \times p(s_2 = i|s_1=t)\times p(s_3=p|s_2=i)\\ =1.0 *0.3*0.6 = 0.18 p(t,i,p)=p(s1=t)×p(s2=is1=t)×p(s3=ps2=i)=1.00.30.6=0.18

二、隐马尔可夫模型

2.1 定义

在马尔可夫模型中,每个状态都是一个可观察事件,想象状态t表示(天气晴),i表示(天气阴),p表示(天气雨),则 p ( t , i , p ) p(t,i,p) p(t,i,p)就表示从晴天开始转换到阴天再转换到雨天的概率。注意在马尔可夫模型中,这些状态都是可以直接观察的,但很多情况下我们并不能直接观察到,我们只能通过一些特征去猜测当前的状态值(相当于多了一层随机过程),该模型是一个双重随机过程,其状态转换过程是不可观察的(隐蔽的),能观察的是这些隐蔽状态对应的随机函数。

以天气为例,晴天的结果就是地面是干燥的(随机函数输出),我们通过观测到地面是干燥的,猜测当前的状态可能是晴天。

下面是隐马尔可夫模型的一个图解:
在这里插入图片描述

隐马尔可夫序列更符合我们实际应用中遇到的状态转移情况,简言之就是通过观测自然现象,推测实际情况。

因此,我们可以发现一个HMM(隐马尔可夫模型)包含以下几部分:

  1. 模型中状态的数目N(晴天、阴天、雨天…),内容记为集合 S S S

  2. 从每个状态可能输出的不同特征(观测值)的数目M(干燥、潮湿…) ,内容记为集合 K K K

    注意不同的状态可能输出相同的特征(可观察结果)

  3. 状态转移概率矩阵 A = { a i j } A=\{a_{ij}\} A={ aij},这个和马尔可夫对应,在图解中就是 q i q_{i} qi转移到 q j q_j qj的概率矩阵,满足:
    p ( q t = s j ∣ q t − 1 = s i ) = a i j , 1 ≤ i , j ≤ N a i j ≥ 0 ∑ j = 1 N a i j = 1 p(q_t=s_j|q_{t-1}=s_i) = a_{ij},1\le i,j\le N \\ a_{ij} \ge 0 \\ \sum_{j=1}^N a_{ij} = 1 p(qt=sjqt1=si=aij,1i,jNaij0j=1Naij=1

    例如今天下雨,明天则是晴天的概率

  4. 从状态 s j s_j sj观察到特征 O k O_k Ok的概率分布矩阵 B = { b j ( k ) } B=\{b_j(k)\} B={ bj(k)} b j ( k ) b_j(k) bj(k)表示第j个天气对应第k个特征的概率,其中:
    b j ( k ) = P ( O t = v k ∣ q t = s j ) , 1 ≤ j ≤ N ; 1 ≤ k ≤ M b j ( k ) ≥ 0 ∑ k = 1 M b j ( k ) = 1 b_j(k) = P(O_t = v_k | q_t = s_j),1\le j\le N;1\le k\le M \\ b_j(k)\ge 0\\ \sum_{k=1}^Mb_j(k) = 1 bj(k)=P(Ot=vkqt=sj),1jN;1kMbj(k)0k=1Mbj(k)=1

    例如如果是雨天,地面会潮湿的概率

  5. 初始状态概率分布 π = { π i } \bm {\pi} =\{\pi_i\} π={ πi},其中:
    π i = P ( q 1 = s i ) , 1 ≤ i ≤ N π ≥ 0 ∑ i = 1 N π i = 1 \pi_i = P(q_1 = s_i), 1\le i \le N \\ \pi \ge 0\\ \sum_{i=1}^N\pi_i = 1 πi=P(q1=si),1iNπ0i=1Nπi=1

    例如起始是晴天还是雨天的概率

由此,我们可以将一个HMM记为五元组 ( μ = ( S , K , A , B , π ) ) (\mu = (S,K,\bm A,\bm B,\bm \pi)) (μ=(S,K,A,B,π))。上面的描述可能有点抽象,我们看一个实际的例子:

2.2 一个HMM例子

  • 设状态集合 S = { 晴 天 , 阴 天 , 雨 天 } S = \{晴天,阴天,雨天\} S={ }

  • 设观测集合 K = { 干 燥 、 潮 湿 } K= \{干燥、潮湿\} K={ 湿}

  • 状态之间转移概率矩阵 A \bm A A(我们用表格表示)

    \ 晴天 阴天 雨天
    晴天 0.4 0.5 0.1
    阴天 0.3 0.4 0.3
    雨天 0.2 0.3 0.5

    例如当前是晴天,转移到阴天的概率是0.5

  • 状态-特征转移概率矩阵 B \bm B B

    \ 干燥 潮湿
    晴天 0.8 0.2
    阴天 0.6 0.4
    雨天 0.3 0.7

    例如晴天导致地面干燥的概率是0.8

  • 初始状态概率分布 π \bm \pi π

    晴天 阴天 雨天
    0.3 0.4 0.3

那么我们连续观察三天地面结果,发现地面为“干湿湿”,对应状态序列为“晴阴雨”的概率就可以计算如下:
P ( “ 干 干 湿 ” , “ 晴 阴 雨 ” ) = P ( 晴 ) ∗ P ( 干 ∣ 晴 ) ∗ P ( 阴 ∣ 晴 ) ∗ P ( 干 ∣ 阴 ) ∗ P ( 雨 ∣ 阴 ) ∗ P ( 湿 ∣ 雨 ) = 0.3 ∗ 0.8 ∗ 0.5 ∗ 0.6 ∗ 0.3 ∗ 0.7 = 0.01512 P(“干干湿”,“晴阴雨”) = P(晴)*P(干|晴)*P(阴|晴)*P(干|阴)*P(雨|阴)*P(湿|雨) \\= 0.3 * 0.8*0.5*0.6*0.3*0.7 = 0.01512 P(湿)=P()P()P()P()P()P(湿)=0.30.80.50.60.30.7=0.01512

同样我们可以计算“晴晴晴”,“晴雨阴”等等所有状态的概率,概率最大者就是状态序列(每天的天气)的变化,这也是下面要讲的序列问题。

三、HMM的三个基本问题

了解了HMM之后,需要知道其三个基本问题:

  1. 估计问题:给定一个观察序列 O = O 1 O 2 . . . O T O=O_1O_2...O_T O=O1O2...OT和模型 μ = ( A , B , π ) \mu =(\bm A,\bm B,\bm \pi) μ=(A,B,π),如何快速计算该序列的概率 P ( O ∣ μ ) P(O|\mu) P(Oμ)

    计算观测序列产生的概率

  2. 序列问题:也叫预测问题,给定一个观察序列 O = O 1 O 2 . . . O T O=O_1O_2...O_T O=O1O2...OT和模型 μ = ( A , B , π ) \mu =(\bm A,\bm B,\bm \pi) μ=(A,B,π),如何快速有效地选择一定意义下“最优”的状态序列 Q = q 1 q 2 . . . q T Q=q_1q_2...q_T Q=q1q2...qT,使得该状态序列“最好地解释”观察序列。

    例子如上文造成“干干湿”观察序列的最可能天气变化状态序列是什么,计算每个可能状态序列的概率,取概率最大者就是实际天气状态的变化。

  3. 训练问题或参数估计问题:给定一个观察序列 O = O 1 O 2 . . . O T O=O_1O_2...O_T O=O1O2...OT,如何根据最大似然估计来求模型的参数值?即如何调节模型 μ = ( A , B , π ) \mu = (\bm A,\bm B,\bm \pi) μ=(A,B,π)的参数,使得 P ( O ∣ μ ) P(O|\mu) P(Oμ)最大?

    在实际问题中,HMM需要人为构建,构建的重点便是计算 A , B , π \bm A,\bm B,\bm \pi A,B,π

为了解决上述三个问题,需要理解前向、后向、维特比等系列算法和参数估计,如下内容所示。

3.1 估计问题:求解观察序列的概率

所谓求解观察序列概率,即在确定了模型 μ \mu μ的情况下,想要知道各个观察序列发生的可能性。比如观测到地面是“干干湿”的概率,需要联想是什么造成了“干干湿”,雨天也有可能发现地面是干的,只不过概率较小罢了。因此,产生“干干湿”的原因可能是一开始是晴天(由 π ( 晴 ) \bm \pi(晴) π())确定,然后乘上在“晴天”这一隐藏状态观察到“干”的概率,而第二个“干”则是由下一状态产生的,这个过程涉及到状态的转移和观测结果的生成,如“晴天”转到“晴天”再产生“干”,或者“晴天”转到“雨天”再产生干。

具体的数学推导公式不好理解,这里画一个图来解释

在这里插入图片描述

其中 π ( 晴 ) \bm \pi(晴) π()表示一开始是晴天的概率, a 晴 → 晴 a_{晴\to 晴} a表示从晴天转移到晴天的概率, b 晴 ( 干 ) b_晴(干) b()表示在晴天观察到地面干的概率

根据图结果我们可以看出要计算 P ( O ∣ μ ) P(O|\mu) P(Oμ),必须枚举所有可能的状态序列Q,假设模型有N个不同状态,时间长度为T,那么可能的状态序列就有 N T N^T NT个,当N和T稍大一些,指数级的运算就会使计算机不堪重负。而对于这类指数级的计算问题,要想降低其计算成本,容易想到利用动态规划,最终时间复杂度可以压缩到 O ( N 2 T ) O(N^2T) O(N2T),实现的算法是前后向算法

关于指数级问题联想动态规划不理解的可以参考我这篇文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值