概率图模型(5)隐马尔科夫模型

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_41554005/article/details/100373366

概率图模型的综合叙述:

特征函数便是图中的conditional。对图简单的说明,综合概述Naive Bayes,Logistic Regression,HMM,Linear-chain CRF之间的关系。Naive Bayes经过条件参数的加入即为Logistic Regression,同时这两者经过序列化即特征函数加入了对相邻状态之间的判断即变为HMM和Linear-chain CRF,最后经过广义图模型的扩展变为最后两者。

图例举例说明HMM:

img

白箱里有2个红球,8个蓝球;黑箱里有7个红球,3个蓝球。有放回取球。即白箱的观测概率 P O = 0.2 0.8 P_{O白}=红球0.2,蓝球0.8 ,黑箱的观测概率 P O = 0.7 0.3 P_{O黑}=红球0.7,蓝球0.3

设定规则,当我从白箱取球时,下一次继续从白箱取球的概率是0.4,从黑箱取球的概率是0.6。当我从黑箱取球时,下一次继续从黑箱取球的概率是0.7,从白箱取球的概率是0.3。即白箱的状态转移概率 P S = 0.4 0.6 P_{S白}=白箱0.4,黑箱0.6 , 黑箱的状态转移概率 P S = 0.3 0.7 P_{S黑}=白箱0.3,黑箱0.7

从哪个箱子里取球不可观测,只能观测取出球的颜色。HMM从可观测的球的序列中进行推测。请自行推断HMM与CRF之间的conditional关系。

HMM综述:

隐马尔科夫模型(Hidden Markov Model,以下简称HMM)是比较经典的机器学习模型了,它在语言识别,自然语言处理,模式识别等领域得到广泛的应用。当然,随着目前深度学习的崛起,尤其是RNN,LSTM等神经网络序列模型的火热,HMM的地位有所下降。但是作为一个经典的模型,学习HMM的模型和对应算法,对我们解决问题建模的能力提高以及算法思路的拓展还是很好的。

HMM模型使用范围:

使用HMM模型时我们的问题一般有这两个特征:

1)我们的问题是基于序列的,比如时间序列,或者状态序列。

2)我们的问题中有两类数据,一类序列数据是可以观测到的,即观测序列;而另一类数据是不能观察到的,即隐藏状态序列,简称状态序列。

有了这两个特征,那么这个问题一般可以用HMM模型来尝试解决。这样的问题在实际生活中是很多的。比如:我现在在打字写博客,我在键盘上敲出来的一系列字符就是观测序列,而我实际想写的一段话就是隐藏序列,输入法的任务就是从敲入的一系列字符尽可能的猜测我要写的一段话,并把最可能的词语放在最前面让我选择,这就可以看做一个HMM模型了。再举一个,我在和你说话,我发出的一串连续的声音就是观测序列,而我实际要表达的一段话就是状态序列,你大脑的任务,就是从这一串连续的声音中判断出我最可能要表达的话的内容。

从这些例子中,我们可以发现,HMM模型可以无处不在。但是上面的描述还不精确,下面我们用精确的数学符号来表述我们的HMM模型。

HMM模型的定义:

对于HMM模型,首先我们假设 Q Q 是所有可能的隐藏状态的集合, V V 是所有可能的观测状态的集合,即:
Q = { q 1 , q 2 , , q N } V = { v 1 , v 2 , , v M } Q=\{q_1,q_2,\ldots,q_N\}\\V=\{v_1,v_2,\ldots,v_M\}
其中,N是可能的隐藏状态数,M是所有的可能的观察状态数。

对于一个长度为 T T 的序列, I I 对应的状态序列, O O 是对应的观察序列,即:
I = i 1 , i 2 , , i T O = o 1 , o 2 , , o T I={i_1,i_2,\ldots,i_T}\\O={o_1,o_2,\ldots,o_T}
其中,任意一个隐藏状态 i t Q i_t\in Q ,任意一个观察状态 o t V o_t\in V

HMM模型做了两个很重要的假设如下:

1) 齐次马尔科夫链假设。**即任意时刻的隐藏状态只依赖于它前一个隐藏状态。**当然这样假设有点极端,因为很多时候我们的某一个隐藏状态不仅仅只依赖于前一个隐藏状态,可能是前两个或者是前三个。但是这样假设的好处就是模型简单,便于求解。如果在时刻 t t 的隐藏状态是 i t = q i i_t=q_i ,在时刻 t + 1 t+1 的隐藏状态是 i t + 1 = q j i_t+1=q_j ,则从时刻 t t 到时刻 t + 1 t+1 的HMM状态转移概率 a i j a_ij 可以表示为:
a i j = P ( i t + 1 = q j i t = q i ) a_{ij}=P(i_{t+1}=q_j|i_t=q_i)
这样 a i j a_{ij} 可以组成马尔科夫链的状态转移矩阵 A A :
A = [ a 11 a 12 a 1 N a 21 a 22 a 2 N a N 1 a N 2 a N N ] N × N A = \left[\begin{array}{ccc} a_{11} \quad a_{12} \quad\ldots \quad a_{1N}\\a_{21} \quad a_{22}\quad \ldots \quad a_{2N}\\\quad \ldots \\a_{N1} \quad a_{N2} \quad\ldots \quad a_{NN} \end{array}\right]_{N\times N}
2) 观测独立性假设。**即任意时刻的观察状态只仅仅依赖于当前时刻的隐藏状态,这也是一个为了简化模型的假设。**如果在时刻 t t 的隐藏状态是 i t = q j i_t=q_j ,而对应的观察状态为 o t = v k o_t=v_k , 则该时刻观察状态 v k v_k 在隐藏状态 q j q_j 下生成的概率为 b j ( k ) b_j(k) ,满足:

b j ( k ) = P ( o t = v k i t = q j ) b_j(k)=P(o_t=v_k|i_t=q_j)

这样 b j ( k ) b_j(k) 可以组成观测状态生成的概率矩阵B:
B = [ b 1 ( 1 ) b 1 ( 2 ) b 1 ( M ) b 2 ( 1 ) b 2 ( 2 ) b 2 ( M ) b N ( 1 ) b N ( 2 ) b N ( M ) ] N × M B = \left[\begin{array}{ccc} b_{1}(1) \quad b_{1}(2) \quad\ldots \quad b_{1}(M)\\b_{2}(1) \quad b_{2}(2)\quad \ldots \quad b_{2}(M)\\\quad \ldots \\b_{N}(1) \quad b_{N}(2) \quad\ldots \quad b_{N}(M) \end{array}\right]_{N\times M}
除此之外,我们需要一组在时刻 t = 1 t=1 的隐藏状态概率分布 η \eta :
η = [ π ( i ) ] N , [ π ( i ) ] N = P ( i 1 = q i ) \eta=[\pi(i)]_N,其中[\pi(i)]_N=P(i_1=q_i)
一个HMM模型,可以由隐藏状态初始概率分布 \prod , 状态转移概率矩阵 A A 和观测状态概率矩阵 B B 决定。 A A η \eta 决定状态序列, B B 决定观测序列。因此,HMM模型可以由一个三元组λλ表示如下:
λ = ( A , B , η ) \lambda=(A,B,\eta)

一个HMM模型实例:

下面我们用一个简单的实例来描述上面抽象出的HMM模型。这是一个盒子与球的模型,例子来源于李航的《统计学习方法》。

假设我们有3个盒子,每个盒子里都有红色和白色两种球,这三个盒子里球的数量分别是:

盒子 1 2 3
红球数 5 4 7
白球数 5 6 3

按照下面的方法从盒子里抽球,开始的时候,从第一个盒子抽球的概率是0.2,从第二个盒子抽球的概率是0.4,从第三个盒子抽球的概率是0.4。以这个概率抽一次球后,将球放回。然后从当前盒子转移到下一个盒子进行抽球。

规则是:

如果当前抽球的盒子是第一个盒子,则以0.5的概率仍然留在第一个盒子继续抽球,以0.2的概率去第二个盒子抽球,以0.3的概率去第三个盒子抽球。

如果当前抽球的盒子是第二个盒子,则以0.5的概率仍然留在第二个盒子继续抽球,以0.3的概率去第一个盒子抽球,以0.2的概率去第三个盒子抽球。

如果当前抽球的盒子是第三个盒子,则以0.5的概率仍然留在第三个盒子继续抽球,以0.2的概率去第一个盒子抽球,以0.3的概率去第二个盒子抽球。

如此下去,直到重复三次,得到一个球的颜色的观测序列:
O = { } O=\{红,白,红\}
注意在这个过程中,观察者只能看到球的颜色序列,却不能看到球是从哪个盒子里取出的。

那么按照我们上一节HMM模型的定义

观察集合是: V = { } M V=\{红,白\},M

状态集合是: Q = { 1 2 3 } N = 3 Q=\{盒子1,盒子2,盒子3\},N=3

而观察序列和状态序列的长度为3。初始状态分布为:

η = ( 0.2 , 0.4 , 0.4 ) T \eta=(0.2,0.4,0.4)^T

状态转移概率分布矩阵为:
A = [ 0.5 0.2 0.3 0.3 0.5 0.2 0.2 0.3 0.5 ] A = \left[\begin{array}{ccc} 0.5 \quad 0.2 \quad 0.3\\0.3 \quad 0.5\quad 0.2 \\0.2 \quad 0.3 \quad0.5\end{array}\right]
观测状态概率矩阵为:
B = [ 0.5 0.5 0.4 0.6 0.7 0.3 ] B = \left[\begin{array}{cc} 0.5 \quad 0.5\\0.4 \quad 0.6\\0.7 \quad 0.3\end{array}\right]

HMM观测序列的生成:

从上一节的例子,我们也可以抽象出HMM观测序列生成的过程。

输入的是HMM的模型 λ = ( A , B , η ) \lambda=(A,B,\eta) ,观测序列的长度 T T

输出是观测序列 O = { o 1 , o 2 , . . . o T } O=\{o_1,o_2,...o_T\}

生成的过程如下:

1)根据初始状态概率分布ΠΠ生成隐藏状态i_1

  1. for t from 1 to T

​ a. 按照隐藏状态itit的观测状态分布 b i t ( k ) b_{i_t}(k) 生成观察状态 o t o_t

​ b. 按照隐藏状态 i t i_t 的状态转移概率分布 a i t i t + 1 a_{i_ti_{t+1}} 产生隐藏状态 i t + 1 i_{t+1} 。所有的 o t o_t 一起形成观测序列 O = o 1 , o 2 , . . . o T O={o_1,o_2,...o_T}

HMM模型的三个基本问题:

HMM模型一共有三个经典的问题需要解决:

1) 评估观察序列概率。即给定模型 λ = ( A , B , η ) \lambda=(A,B,\eta) 和观测序列

O = { o 1 , o 2 , . . . o T } O=\{o_1,o_2,...o_T\} ,计算在模型 λ \lambda 下观测序列 O O 出现的概率 P ( O λ ) P(O|\lambda) 。这个问题是HMM模型三个问题中最简单的。

2)模型参数学习问题。即给定观测序列 O = { o 1 , o 2 , . . . o T } O=\{o_1,o_2,...o_T\} ,估计模型 λ = ( A , B , η ) \lambda=(A,B,\eta) 的参数,使该模型下观测序列的条件概率 P ( O λ ) P(O|\lambda) 最大。这个问题的求解需要用到基于EM算法的鲍姆-韦尔奇算法.

3)预测问题,也称为解码问题。即给定模型 λ = ( A , B , η ) \lambda=(A,B,\eta) 和观测序列 O = { o 1 , o 2 , . . . o T } O=\{o_1,o_2,...o_T\} ,求给定观测序列条件下,最可能出现的对应的状态序列,这个问题的求解需要用到基于动态规划的维特比算法.

猜你喜欢

转载自blog.csdn.net/qq_41554005/article/details/100373366