隐马尔可夫模型(HMM),了解一下?

隐马尔可夫模型(HMM)

1. 隐马尔可夫模型基本概念

1.1 定义

  • 隐马尔可夫模型,又叫做HMM,是关于时序的概率模型,描述一个由隐藏的马尔科夫链随机生成不可观测的状态随机序列,再由各个状态生成一个可观测的观测随机序列的过程。
  • 状态序列(state sequence): 由隐藏的马尔可夫链生 成的状态的序列;
  • 观测序列(observation sequence): 每个状态生成一个观测,由此产生一个观测序列;
  • 序列的每一个位置可以看做一个时刻;
  • 隐马尔可夫模型属于生成模型。在语音识别、自然语言处理等领域应用广泛

三元组来表示一个隐马尔可夫模型 -w93

  • π 初始状态概率向量。 表示第1个时刻处于各个状态的概率
  • A 状态转移概率矩阵。 Aij 表示由状态i转移到状态j的概率
  • B 观测概率矩阵。 每一行对应一个状态,每一列对应一个观测,表示在该状态下,出现某个观测的概率

两个基本假设:

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

应用:标注。
标注问题是给定观测序列预测其对应的标记序列。这是标记序列对应着状态序列。可以假设标注问题的数据是由隐马尔可夫模型生成的。

再多的公式也不如一个例子:
掷骰子,非常经典的问题,三种骰子,给出一个观测到的结果序列,那么对应的骰子序列,就是对应的隐藏状态序列。
-w360
-w360
-w360

1.2 观测序列生成过程

  • 按照初始状态概率分布 π 产生初始时刻 t=1 的状态
  • 按照观测概率矩阵,产生在此状态下的观测
  • 按照状态转移概率矩阵,得到下一个时刻 t=2 的状态
  • 依次直到t=T为止,就产生了一个长度为T的观测序列和状态序列

1.3 3个基本问题

  1. 概率计算。给定模型-w93
    ,以及观测序列 O ,求该观测序列出现的概率
  2. 学习问题。已知观测序列 O ,求模型参数A, B, π,使得该模型下该观测序列出现的概率最大,即用极大似然估计的方法估计参数
  3. 预测问题。给定模型和观测序列,求对应的最有可能的状态序列。即最大化条件概率P(I|O)

2. 概率计算方法

给出模型 + 观测序列。求该观测序列出现的概率

2.1 直接计算法

把所有可能出现该观测序列的状态序列,全部枚举出来。然后计算每一个状态序列+观测序列对应的概率。取其中最大的一个作为该观测序列的概率。
当马尔可夫链比较长的时候,枚举的情况太多,导致此方法理论可行,实际往往不行。

2.2 前向算法

先说一个简单的问题,假如你知道了隐藏的状态序列,让你求当前观测的序列概率。

-w182

那么概率的计算无非就是各个概率的相乘:(包括状态到状态的转移概率,以及状态到观测的概率)
-w844

现在问题升级:不知道隐藏状态序列,如何求出观测序列概率?

解法也很简单:对于t=1时刻,依次假设当前处于某一个状态,然后计算该状态下得到观测O(1)的概率。那么把所有的状态计算出来的概率**求和**,就得到了t=1时刻,出现该观测的概率(也就是我们要求的结果)。
然后开始递推,假设已经求出来t=T-1时刻,每一个状态对应的概率。那么对于t=T时刻,我们依旧遍历当前处于的状态,然后依据t=T-1的各状态概率计算结果,来得到t=T时刻,处于各个状态并得到T时刻观测的概率。遍历各个状态的概率,**求和**就得到了T时刻观测的概率,这个概率就是出现整个观测序列的概率,也就是我们要求的最终结果.
这就是前向算法(forward algorithm)。

比如下面这个例子:我们模型参数(骰子及各个概率),要求出出现观测1,6,3的概率是多少?

首先,如果我们只掷一次骰子:

观测结果为1。产生这个结果的总概率可以按照如下来计算,总概率为0.18:

P1表示第一次掷,对应的每一行,一次表示当前投掷的时候,分别使用的是D6 D4 D8骰子。

情况拓展,投掷两次骰子:

看到结果为1,6.产生这个结果的总概率为0.05:

我们拿P2列,D6行来解释下:它表示第二次投掷用的是D6骰子,那么第一次用哪个那?都有可能!所以第二次观测到6的总概率,就是(第一次用D6并投出了1的概率 + 第一次用D4并投出了1 + 第一次用D8并投出了1) * 第二次用了D6 * D6投出了6.
也就是说,第二个状态是D6,那么他可能是怎么来的那?它是由第一个状态转化来的,而且每一种第一个状态都可能以不同的概率转换成第二个状态。(这里我们为了简单,认为都是1/3)
然后依次遍历第二个状态所有的状态,求出概率后,把概率加起来就是我们t=2时刻的观测出现的概率了。

继续拓展,投三次:

看到结果为1,6,3,总概率为0.03:

这样一步一步的计算,无论马尔可夫链有多长,总能算完。相比直接穷举这样复杂度会低很多。减少计算量的关键在于每一次计算都直接引用前一个计算的结果,避免了重复计算。局部计算前向概率,然后利用路径结构将前向概率递推到全局。

2.3 后向算法

与前向计算相对应的是后向计算。从后向前推,大体的思想也是利用之前计算的结果来计算当前时刻的概率。

3. 学习算法

学习算法。主要是给出观测概率,让我们估计模型参数。也就是学习这个模型是什么。是最常见的情况。

3.1 监督学习方法

如果给出了多个观测序列和对应的状态序列,那么就属于监督学习。
所谓的监督学习就是用频率来估计概率。属于极大似然估计
比如:统计每个状态序列t=1时刻的状态,那么状态的频率我们就认为是状态的初始概率π

3.2 非监督学习方法 EM算法 Baum-Welch算法

非监督学习利用的是EM算法来进行参数估计

只有观测序列,没有状态序列,目标是求出对应的隐马尔可夫模型参数。那么隐马尔可夫模型实际上是一个含有隐变量的概率模型:
-w244

  • 第一步:定义完全数据的对数似然函数。

定义完全数据为:-w274
完全数据的对数似然函数是-w104

  • 第二步:EM算法的E步:

利用当前模型参数的估计值,得到完全数据的对数似然函数的期望:
-w281

其中,-w18是当前模型参数的估计值。-w15是要极大化的模型参数。

  • 第三步:EM算法的M步:

将上面公式拆解成三部分,分别只包含π, A, B然后分别极大化每一部分。利用了概率和为1这个约束条件,再加上拉格朗日乘子法得到最终结果。

4. 预测算法

已知模型参数和观测序列,目标:求出最可能的状态序列

4.1 近似算法

思想非常简单:在每个时刻t选择在该时刻最优可能出现的状态,从而得到一个状态序列,作为最终的预测结果。

4.2 维特比算法

维特比算法是用动态规划解决隐马尔可夫预测问题。求概率最大路径,这时一条路径对应着一个状态序列。
最优路径特性:从路径中间截开,那么前面一段和后面一段都是最优的。
跟前向算法求观测概率一样,我们还是递推的来求,但是这次只关注如何选择状态可以得到一个最大概率,而不是概率的和。最大的那个概率对应的状态,就是我们预测的状态。
继续拿投骰子说事:
首先,如果我们只投一次骰子:

观测结果为1,对应最大概率的骰子序列就是D4,因为D4产生1的概率是1/4,大于1/6和1/8.

继续,投两次骰子:

观测结果为1,6. 这时我们需要计算三个值,分别是第二个骰子是D4,D6,D8的最大概率。

以第二个骰子是D6为例。第一个可选的状态为D4,D6,D8,分别计算出概率为:
-w482

最终,P2(D6)选上面三个中概率最大的一个。

依次计算出P2(D4)和P2(D8),然后从这些里面取最大概率值,作为第二轮的预测状态。

这里跟前向传播比较相似,只不过每次都只取最大值。同样是利用了之前的计算结果,所以减小了计算量。


欢迎关注公众号:机器学习荐货情报局
一起进步,一起学习,一起充电~
欢迎投稿,讨论,拍砖

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值