【HMM】Hidden Markov Model

来自《统计学习方法》—李航


隐马尔可夫模型(Hidden Markov Model,HMM)是可用于标注问题(tagging,给定观测的序列预测其对应的标记序列)的统计学模型,描述由隐藏的马尔科夫链随机生成观测序列的过程,属于生成模型。HMM 在语音识别、自然语言处理、生物信息、模式识别等领域有着广泛的应用。

输入变量与输出变量均为连续变量的预测问题称为回归问题;
输出变量为有限个离散变量的预测问题称为分类问题;
输入变量与输出变量均为变量序列的预测问题称为标注问题。

1 HMM 的概念

1.1 引入

这里写图片描述

马尔可夫模型的观测序列本身就是状态序列;
隐马尔可夫模型的观测序列不是状态序列

1.1.1 Markov property

如果一个过程的“将来”仅依赖“现在”而不依赖“过去”,则此过程具有马尔可夫性,或称此过程为马尔可夫过程。
X ( t + 1 ) = f ( X ( t ) ) X(t+1) = f(X(t)) X(t+1)=f(X(t))

1.1.2 Markov chain

时间状态都离散的马尔可夫过程称为马尔可夫链

几种典型形状的马尔可夫链

这里写图片描述

  • (a). 状态转义概率组成的A矩阵没有零值的Markov链
  • (b). A矩阵有零值的Markov链
  • (c./d). 左-右形式的Markov链

Probabilistic Graphical Model

1.1.3 一阶离散马尔可夫模型

在这里插入图片描述

  • N N N 个状态, S 1 S_1 S1, S 2 S_2 S2 S N S_N SN
  • 存在一个离散的时间序列 t = 0 , t = 1 … … t=0,t=1…… t=0,t=1……
  • 在每个时刻t,系统只能处于唯一一个状态 q t q_t qt
  • 下一个时刻所处的状态是随机出现的
  • 当前状态 q t q_t qt 只与前面相邻的一个状态 q t − 1 q_{t-1} qt1 有关,与其他状态无关(日光族,积蓄什么的,不存在的)

P [ q t = j ∣ q t − 1 = i , q t − 1 = k ] = P [ q t = j ∣ q t − 1 = i ] P[q_t = j | q_{t-1} = i, q_{t-1} = k] = P[q_t = j | q_{t-1} = i] P[qt=jqt1=i,qt1=k]=P[qt=jqt1=i]

1.2 HMM 的定义

HMM 是关于时序的概率模型,描述由一个隐藏的马尔可夫链随机生成不可观测的状态随机序列(state sequence),再由各个状态生成一个观测而产生观测随机序列(观测序列,observation sequence)的过程。

序列的每一个位置又可以看作是一个时刻。

HMM 由初始概率分布状态转移概率分布以及观测概率分布确定,定义如下:

  • Q Q Q 是所有可能的状态的集合 V V V 是所有可能的观测的集合

Q = { q 1 , q 2 , . . . , q N } , V = { v 1 , v 2 , . . . , v M } Q = \{q_1,q_2,...,q_N\},V = \{v_1,v_2,...,v_M\} Q={q1,q2,...,qN}V={v1,v2,...,vM}

其中, N N N 是可能的状态数, M M M 是可能的观测数

  • I I I 是长度为 T T T状态序列 O O O 是对应的观测序列
    I = ( i 1 , i 2 , . . . , i T ) , O = ( o 1 , o 2 , . . . , o T ) I = (i_1,i_2,...,i_T),O = (o_1,o_2,...,o_T) I=(i1,i2,...,iT)O=(o1,o2,...,oT)

  • A A A状态转移概率矩阵

A = [ a i j ] N × N A = [a_{ij}]_{N \times N} A=[aij]N×N

其中,

a i j = P ( i t + 1 = q j ∣ i t = q i ) , i = 1 , 2 , . . . , N ; j = 1 , 2 , . . . , N a_{ij} = P(i_{t+1} = q_j|i_t = q_i), i = 1,2,...,N; j = 1,2,...,N aij=P(it+1=qjit=qi),i=1,2,...,N;j=1,2,...,N

是在时刻 t t t 处于状态 q i q_i qi 条件下在时刻 t + 1 t+1 t+1 转移到状态 q j q_j qj 的概率。

  • B B B观测概率矩阵

B = [ b j ( k ) ] N × M B = [b_j(k)]_{N \times M} B=[bj(k)]N×M

其中,

b j ( k ) = P ( o t = v k ∣ i t = q j ) , k = 1 , 2 , . . . , M ; j = 1 , 2 , . . . , N b_j(k) = P(o_t = v_k | i_t = q_j), k=1,2,...,M;j = 1,2,...,N bj(k)=P(ot=vkit=qj),k=1,2,...,M;j=1,2,...,N
是在时刻 t t t 处于状态 q j q_j qj 的条件下生成观测 v k v_k vk 的概率。

  • π \pi π初始状态概率向量

π = ( π i ) \pi = (\pi_i) π=(πi)

其中,

π = P ( i 1 = q i ) , i = 1 , 2 , . . . , N \pi = P(i_1 = q_i),i=1,2,...,N π=P(i1=qi),i=1,2,...,N

是时刻 t = 1 t=1 t=1 处于状态 q i q_i qi 的概率。


HMM 由初始状态概率向量 π \pi π状态转移概率矩阵 A A A观测概率矩阵 B B B 决定。 π \pi π A A A 决定状态序列, B B B 决定观测序列。因此 HMM λ \lambda λ 可用如下的三元符号表示:

λ = ( A , B , π ) \lambda = (A,B,\pi) λ=(A,B,π)

A , B , π A,B,\pi A,B,π 称为 HMM 的三要素。

状态转移概率矩阵 A A A 与初始状态概率向量 π \pi π 确定了隐藏的马尔可夫链,生成不可观测的状态序列。观测概率矩阵 B B B 确定了如何从状态生成观测,与状态序列综合确定了如何产生观测序列

我们仔细分析下有效参数量

  • π ∈ R N \pi \in \mathbb{R}^{N} πRN,有效参数量为 N − 1 N-1 N1,因为所有初始状态概率的和要求为 1
  • A ∈ R N × N A \in \mathbb{R}^{N \times N} ARN×N,有效参数量为 N × N − N N×N-N N×NN,因为每行的概率的和要求为 1
  • B ∈ R N × M B \in \mathbb{R}^{N \times M} BRN×M,有效参数量为 N × M − N N×M-N N×MN,因为每行的概率的和要求为 1

从定义可知,HMM 作了两个基本假设:

  • 齐次马尔可夫性假设,即假设隐藏的马尔可夫链在任意时刻 t t t 的状态只依赖于其前一时刻的状态,与其他时刻的状态及观测无关,也与时刻 t t t 无关。
  • 观测独立性假设,即假设任意时刻的观测只依赖于该时刻的马尔可夫链的状态,与其他观测及状态无关。

P ( o t ∣ i r , o r , 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_r,o_r,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(otir,or,iT1,oT1,...,it+1,ot+1,it,it1,ot1,....,i1,o1)=P(otit)

HMM 可以用于标注(tagging),这时状态对应着标记,标注问题是给定观测的序列预测其对应的标记序列(反向操作)。可以假设标注问题的数据是由 HMM 生成的,这样我们可以利用 HMM 的学习和预测算法进行标注。


下面看一个 HMM 的例子。

盒子和球模型)假设有 4 个盒子,每个盒子里都装有红白两种颜色的球,盒子里红白数如下表所示:

盒子1234
红球数5368
白球数5742

按照下面的方法抽球,产生一个球的颜色的观测序列:开始,从 4 个盒子里以等概率随机选取 1 个盒子,从这个盒子里随机抽出 1 个球,记录其颜色后,放回;然后,从当前盒子随机转移到下一个盒子,规则是:如果当前盒子是盒子 1,那么下一盒子一定是盒子 2,如果当前是盒子 2 或 3,那么分别以概率 0.4 和 0.6 转移到左边或右边的盒子,如果当前是盒子 4,那么各以 0.5 的概率停留在盒子 4 或转移到盒子 3;确定转移的盒子后,再从这个盒子里随机抽出一歌球,记录其颜色,放回去;如此下去重复 4 次,得到一个球的颜色的观测序列

O = { 红,红,白,白,红 } O = \{红,红,白,白,红\} O={红,红,白,白,红}

在这里插入图片描述
在这个过程中,观察者只能观测到球的颜色的序列,观测不到球是从哪个盒子取出的,即观测不到盒子的序列(状态序列)。

在这个例子中有两个随机序列,一个是盒子的序列(状态序列),一个是球的颜色的观测序列(观测序列)。前者是隐藏的,只有后者是可观测的。这是一个 HMM 的例子,根据所给条件,可以明确状态集合、观测集合、序列长度以及模型的三要素。

  • 盒子对应状态,状态的集合是
    Q = { 盒子 1 ,盒子 2 ,盒子 3 ,盒子 4 } Q =\{盒子1,盒子2,盒子3,盒子4\} Q={盒子1,盒子2,盒子3,盒子4}

  • 球的颜色对应观测,观测的集合是

V = { 红,白 } , M = 2 V = \{红,白\},M=2 V={红,白},M=2

  • 状态序列观测序列长度 T = 5 T=5 T=5

  • 初始概率分布 π \pi π

π = ( 0.25 , 0.25 , 0.25 , 0.25 ) T \pi = (0.25,0.25,0.25,0.25)^T π=(0.25,0.25,0.25,0.25)T

  • 状态转移概率分布 A A A

A = [ 0 1 0 0 0.4 0 0.6 0 0 0.4 0 0.6 0 0 0.5 0.5 ] A = \begin{bmatrix} 0& 1& 0& 0\\ 0.4& 0& 0.6& 0\\ 0& 0.4& 0& 0.6\\ 0& 0& 0.5& 0.5 \end{bmatrix} A= 00.400100.4000.600.5000.60.5

  • 观测概率分布 B B B

B = [ 0.5 0.5 0.3 0.7 0.6 0.4 0.8 0.2 ] B = \begin{bmatrix} 0.5 & 0.5\\ 0.3 & 0.7\\ 0.6 & 0.4\\ 0.8 & 0.2 \end{bmatrix} B= 0.50.30.60.80.50.70.40.2

1.3 观测序列的生成过程

根据 HMM 定义,可以将一个长度为 T T T 的观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT) 的生成过程描述如下:

输入: HMM λ = ( A , B , π ) \lambda = (A,B,\pi) λ=(A,B,π),观测序列长度 T T T
输出: 观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,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 = 1 , 2 , . . . , N i_{t+1} = 1,2,...,N it+1=1,2,...,N
(5)令 t = t + 1 t = t+1 t=t+1;如果 t < T t<T t<T,转步(3);否则,终止

1.4 HMM 的 3 个基本问题

HMM 有三个基本问题:

(1)概率计算问题(评估问题,求观测序列出现的概率)。给定模型 λ = ( A , B , π ) \lambda = (A,B,\pi) λ=(A,B,π) 和观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT),计算在模型 λ \lambda λ 下观测序列 O O O 出现的概率 P ( O ∣ λ ) P(O|\lambda) P(Oλ)

(2)学习问题(求HMM模型参数)。已知观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT),估计模型 λ = ( A , B , π ) \lambda = (A,B,\pi) λ=(A,B,π) 参数,使得在该模型下观测序列概率 P ( O ∣ λ ) P(O|\lambda) P(Oλ) 最大。即用极大似然估计的方法估计参数。

(3)预测问题(求状态序列),也称解码(decoding)问题。已经模型 λ = ( A , B , π ) \lambda = (A,B,\pi) λ=(A,B,π) 和观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT),求给定观测序列条件概率 P ( I ∣ O ) P(I|O) P(IO) 最大的状态序列 I = ( i 1 , i 2 , . . . , i T ) I=(i_1,i_2,...,i_T) I=(i1,i2,...,iT)。即给定观测序列,求最有可能的对应的状态序列。

下面用一个例子,来形象化上面三个问题

赌场的欺诈

在这里插入图片描述
在这里插入图片描述

某赌场在投骰子根据点数决定胜负时,暗中采取了如下作弊手段,在连续多次投骰子的过程中,通常使用公平骰子 S 1 S_1 S1,偶尔混进一个灌铅骰子 S 2 S_2 S2

公平骰子 S 1 S_1 S1 和灌铅骰子 S 2 S_2 S2 的区别如下:

骰子 S 1 S_1 S1骰子 S 2 S_2 S2
1 1 11/60
2 2 21/61/8
3 3 31/61/8
4 4 41/63/16
5 5 51/63/16
6 6 61/63/8

一次连续投骰子的过程模拟如下:

时间1234567
骰子 S 1 S_1 S1 S 1 S_1 S1 S 1 S_1 S1 S 2 S_2 S2 S 1 S_1 S1 S 1 S_1 S1 S 1 S_1 S1
投出点数3345162

上表中,第二列“骰子”相当于状态序列(隐序列),第三列“投出点数”相当于观测序列(明序列)

问题1—概率计算问题(评估问题)

  • 一个骰子投出的点数记录为,131452,会出现这个点数记录的概率有多大

问题2—学习问题(似然估计)

  • 一个骰子投出的点数记录为,131452,作弊骰子投出各点数的概率是怎么样?公平骰子投出各点数的概率又是怎么样的?赌场是何时换用骰子的(转换概率如何)?——从大量的点数序列样本中学习得出

问题3—预测问题(解码问题)

  • 一个骰子投出的点数记录为,131452,点数序列中的哪些点数是用骰子 S 2 S2 S2 投出的?

2 三个基本问题的解法

2.1 概率计算算法

概率计算问题(评估问题,求观测序列出现的概率)。给定模型 λ = ( A , B , π ) \lambda = (A,B,\pi) λ=(A,B,π) 和观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT),计算在模型 λ \lambda λ 下观测序列 O O O 出现的概率 P ( O ∣ λ ) P(O|\lambda) P(Oλ)

一个骰子投出的点数记录为,131452,会出现这个点数记录的概率有多大

本小节介绍计算观测序列概率 P ( O ∣ λ ) P(O|\lambda) P(Oλ) 的向前(forward)与向后(backward)算法。先介绍概念上可行但计算上不可行的直接计算法。

2.1.1 直接计算法

给定模型 λ = ( A , B , π ) \lambda = (A,B,\pi) λ=(A,B,π) 和观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT),计算在模型 λ \lambda λ 下观测序列 O O O 出现的概率 P ( O ∣ λ ) P(O|\lambda) P(Oλ)。最直接的方法是按概率公式直接计算。通过列举所有可能的长度为 T T T 的状态序列 I = ( i 1 , i 2 , . . . , i T ) I = (i_1,i_2,...,i_T) I=(i1,i2,...,iT),求各个状态序列 I I I 与观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT) 的联合概率 P ( O , I ∣ λ ) P(O,I|\lambda) P(O,Iλ),然后对所有可能的状态序列求和,得到 P ( O ∣ λ ) P(O|\lambda) P(Oλ)

状态序列 I = ( i 1 , i 2 , . . . , i T ) I = (i_1,i_2,...,i_T) I=(i1,i2,...,iT) 的概率是

P ( I ∣ λ ) = π i 1 a i 1 i 2 a i 2 i 3 . . . a i T − 1 i T P(I|\lambda) = \pi_{i_1}a_{i_1i_2}a_{i_2i_3}...a_{i_{T-1}i_T} P(Iλ)=πi1ai1i2ai2i3...aiT1iT

对固定的状态序列 I = ( i 1 , i 2 , . . . , i T ) I = (i_1,i_2,...,i_T) I=(i1,i2,...,iT),观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT) 的概率是 P ( O ∣ I , λ ) P(O|I,\lambda) P(OI,λ)

P ( O ∣ I , λ ) = b i 1 ( o 1 ) b i 2 ( o 2 ) . . . b i T ( o T ) P(O|I,\lambda) = b_{i_1}(o_1)b_{i_2}(o_2)...b_{i_T}(o_T) P(OI,λ)=bi1(o1)bi2(o2)...biT(oT)

O O O I I I 同时出现的联合概率为

P ( O , I ∣ λ ) = P ( O ∣ I , λ ) P ( I ∣ λ ) = π i 1 b i 1 ( o 1 ) a i 1 i 2 b i 2 ( o 2 ) . . . a i T − 1 i T b i T ( o T ) P(O,I|\lambda) = P(O|I,\lambda)P(I|\lambda)=\pi_{i_1} b_{i_1}(o_1)a_{i_1i_2}b_{i_2}(o_2)...a_{i_{T-1}i_T}b_{i_T}(o_T) P(O,Iλ)=P(OI,λ)P(Iλ)=πi1bi1(o1)ai1i2bi2(o2)...aiT1iTbiT(oT)

然后,对所有可能的状态序列 I I I 求和,得到观测序列 O O O 的概率 P ( O ∣ λ ) P(O|\lambda) P(Oλ),也即

P ( O ∣ λ ) = ∑ I P ( O , I ∣ λ ) = ∑ i 1 , i 2 , . . . , i T π i 1 b i 1 ( o 1 ) a i 1 i 2 b i 2 ( o 2 ) . . . a i T − 1 i T b i T ( o T ) P(O|\lambda) = \sum_IP(O,I|\lambda) = \sum_{i_1,i_2,...,i_T}\pi_{i_1} b_{i_1}(o_1)a_{i_1i_2}b_{i_2}(o_2)...a_{i_{T-1}i_T}b_{i_T}(o_T) P(Oλ)=IP(O,Iλ)=i1,i2,...,iTπi1bi1(o1)ai1i2bi2(o2)...aiT1iTbiT(oT)

但是,上面公式的计算量很大,是 O ( T N T ) O(TN^T) O(TNT) 阶的( I I I 的所有排列组合是 T ! T! T!,采用递归方式计算的话,复杂度是 T T T,序列长度 T T T,每个位置 N N N 种情况,也就是 N T N^T NT),这种算法不可行!下面介绍计算观测序列概率 P ( O ∣ λ ) P(O|\lambda) P(Oλ) 的有效算法,前向-后向算法(forward-backward algorithm)

未完待续。。。

2.1.2 向前算法

2.1.3 向后算法

2.1.4 一些概率与期望值的计算

2.2 学习算法

2.3 预测算法

  • 13
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值