自然语言处理从小白到大白系列(3)聊聊序列模型中的隐马模型

如标题一样,隐马尔可夫模型谜一样的推导和应用,一直是机器学习入门朋友们的一个拦路虎。就是那种,提起来大致知道:噢!隐马模型啊,就是那个转移来转移去的一个模型,要解决三个基本问题,哪三个来着?对了,还有那啥维特比算法,前向后向算法,好了我懂!可是聪明的你,真的弄懂了吗?本文就来捋一捋,这是何方神圣,究竟有什么用处??

通过阅读本文,你将会掌握以下主要知识点:

  • 隐马模型的初步理解
  • 隐马模型的三个重要问题
  • 什么是维特比算法
  • Baum welch 算法
  • EM算法
  • HMM的实战演练

1. 隐马模型的初步理解

1.1 马尔科夫模型

首先,我们要知道,隐马尔可夫模型是一种概率图模型,可以看成是概率图模型里面的动态贝叶斯网络,为什么说是动态的贝叶斯网络呢,就是由于它是随着时间节点,网络结构是不断变化的。

先说马尔科夫模型,马尔科夫模型的意思是说:一个系统中,某个时刻t的状态,取决于它在时间1,2,3,…,t-1时刻的状态,就是说是从前面的状态转移过来的。好了,既然有这个定义,那么我们就可以用数学表达式写一下,时刻t状态为Si的概率是:
​​​​在这里插入图片描述
其中, q t q_t qt是t时刻的状态变量, S j S_j Sj表示第j个实际状态(tips:一定要注意本文定义的符号的含义,不然到后面就整懵了)

好的,这样一个式子,想一想,第100个时刻的状态,就和前面99个时刻的状态有关,那1000呢,10000呢,是不是已经复杂到不想计算了,因此,为了简化这样一个问题,我们引入一阶马尔可夫链,官方定义:

如果在特定情况下,系统在时间 t 的状态只与其在时间 t-1 的状态相关,则该系统构成一个离散的一阶马尔柯夫链:
在这里插入图片描述
看到没,已经将除前一个时刻以外的所有时刻的状态都忽视了,是不是看起来清爽了许多,其实这样一个假设在处理这类问题的时候是非常常用的,比如说语言模型的n-gram,不也是用的这样一个马尔可夫性的假设,来简化n元语法吗。

但是还有一个问题,就是在t时刻状态由 S i S_i Si转移到 S j S_j Sj时,和在t’时刻,状态由 S i S_i Si转移到 S j S_j Sj,概率是一样的吗??如果不一样,这还是一个依赖于时间的模型,会更加复杂,所以我们还要做一个假设,就是状态转移概率独立于时间。官方定义:

如果只考虑公式(5.15)独立于时间 t 的随机过程,即所谓的不动性假设,状态与时间无关,那么:
在这里插入图片描述
以上这个随机过程,就被称为是马尔柯夫模型 (Markov Model),当然不用说,要满足转移概率大于等于0,从某时刻转移出去的概率之和要等于1,这些应该都很好理解。所以:
在这里插入图片描述

(马尔柯夫模型又可视为随机有限状态自动机,该有限状态自动机的每一个状态转换过程都有一个相应的概率,该概率表示自动机采用这一状态转换的可能性。)

如果还是不好理解的话,画一个图来表示马尔科夫模型的转移:
在这里插入图片描述

现在问一下,如果是一阶的马尔科夫模型,状态序列 S 1 , S 2 , . . . , S T S_1,S_2,...,S_T S1,S2,...,ST的概率应该怎么写呢?很简单对吧:

在这里插入图片描述

这里的 p i p_i pi是初始状态的概率。

所有刚才那个转移图,t,i,p序列出现的概率是:

在这里插入图片描述

1.2 隐马尔可夫模型:

刚才是从随机过程到马尔科夫模型,好像都很容易理解的样子,现在我们讨论一下隐马尔可夫模型,隐,隐在什么地方?

要弄清楚这个,就先得分清楚:状态序列和观测序列的概念。状态序列,可以理解为刚才的马尔科夫模型的状态;观测序列是指:在每个时刻,当前时刻的状态值,以一定概率产生这样一个观测值,那是不是在每个时刻都有一个观测值,所有观测值连起来,就是一个观测序列。那定义这样一个东西有什么用呢?是由于,在实际的情况里,状态值也许是不可见的,我们能看到的,只是观测值,要挖掘这样一个隐藏的关系,则就用到了我们说的隐马尔可夫模型。

好了,你说还是不明白,太抽象,那么我们举个业界经典的例子。

  • 某赌场在投骰子,根据点数决定胜负。在多次投掷骰子的时候采取了如下手段进行作弊:准备了两个骰子A和B,其中A为正常骰子,B为灌铅骰子,由于怕被发现,所有连续投掷的时候偶尔使用一下B,A和B之间转换的概率如下:

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

所以,我们要解决的问题,就是

  • 1.通过抛出的观测序列和给定模型,评估产生这个观测序列的概率是多大?
  • 2.通过抛出的点数序列,解码出最可能是什么时候作的弊?
  • 3.给定观测序列,求出模型参数,即,正常骰子到灌铅骰子的转移概率,以及各自产生点数的概率?

在这里插入图片描述

在这里插入图片描述

好了,假设你已经懂了隐马尔可夫模型的基本定义,那在隐马尔可夫模型里面,我们根据上面提出,抽象出来三类基本问题:

2. 隐马模型的三个重要问题

  • 1.评估问题

  • 2.解码问题

  • 3.学习问题

2.1 评估问题

各个击破,先是评估问题,评估问题很容易理解,就是给出模型参数和一段观测序列,然后评估产生这个序列的概率有多大。规范描述:
在这里插入图片描述
对于这样一个问题,首先要搞清楚的是,对于某个时刻的任意状态,都有可能产生O_t。那么我们把概率改写成如下:
在这里插入图片描述

上式应该好理解,添加了一个中间变量Q(状态),这是由于O必须由Q产生,所以把过程分解一下,得到这样一个式子。
然后分解来看,
在这里插入图片描述
这个没有问题,但是问题是,5.22和5.23,只计算了从头到尾的某一个状态序列。你想想,如果状态有N个,时间有T个,产生可能的序列是 N T N^T NT个!!因为每个时刻都可能产生N个状态。这还算个毛,没法进行下去了。对于这样一个问题,我们隐隐约约感觉,问题是可以简化的,就是说,计算是有冗余的,而且我们还隐隐约约记得,老师曾经讲过一个叫动态规划的方法。

好的,不哔哔,拿出动态规划大法,我们知道,动态规划的问题关键是找到状态转移方程,就是说问题可以化成子问题解决。
这里就要想想了,如何定义一个变量,从这个变量推导下一个变量。这里由于是N个状态,T个时间
在这里插入图片描述

那么可以这样定义一个变量
在这里插入图片描述
这个alpha_t(i)的含义是,在前面t个时刻,观测分别是O1-Ot的时候,在t时刻状态取到S_i时的概率是多少,注意哦,只考虑t时刻状态S_i。那么我们想,在t时刻状态有N个,当然这个alpha_t(i)和我们最终的P有如下关系:
在这里插入图片描述
(就是把t时刻所有的状态加起来)
那么定义这个变量之后,如何列转移方程呢?即如何从alpha_t(i)到alpha_t+1(j)?当然要先成转移概率,乘以产生观测值概率,再把t时刻所有的状态加起来:
在这里插入图片描述
算到最后,再带入5.25,大功告成。这样,是不是就可以把所有时刻,所有状态遍历一次,就得到了最终的结果?是不是高效又牛逼?
算法的时间复杂性:
每计算一个 a t ( i ) a_t(i) a

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值