问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

隐马尔可夫模型(HMM)参数估计详解:从MLE到Baum-Welch算法

创作时间:
作者:
@小白创作中心

隐马尔可夫模型(HMM)参数估计详解:从MLE到Baum-Welch算法

引用
CSDN
1.
https://blog.csdn.net/weixin_44607838/article/details/117712270

隐马尔可夫模型(HMM)是一种统计模型,广泛应用于语音识别、自然语言处理等领域。本文将详细介绍HMM的参数估计方法,包括最大似然估计(MLE)和期望最大化(EM)算法,并给出具体的实现代码。

介绍

在之前的一篇文章中,我们介绍了隐马尔可夫模型(HMM)的基本知识。在本文中,我们将说明如何求解HMM的参数。废话不多说,我们直接进入正题。

MLE? YES OR NO?

说到参数估计,第一反应就是最大似然估计(MLE)。这里我们以Y是离散随机变量作为例子,假设Y总共有M种不同的取值,分别为{1,2,3,…M},同时我们假设模型有k个不同的隐含状态。因此我们的发射矩阵B的形状为k x m。则我们可以把所有需要估计的参数记做θ = (A,B,π),其中A和π分别为隐含状态的状态转移概率矩阵(transition matrix)初始状态概率分布

但是想要直接使用MLE,一个重要的前提就是,我们首先需要知道隐含状态序列{S0,S1,S2…ST}的具体取值,不然是没法写出似然函数的表达式的。

现在假设我们确实知道,那么我们得到序列{S0,S1,S2,…ST}的概率为

而在此基础上得到序列{Y0,Y1,Y2,…YT}的条件概率为

从而似然函数表达式为

但是尽管我们能够获取似然函数的表达式,但是由于参数量很大,求解是非常困难的,同时MLE的使用的前提是我们知道隐含状态序列的具体取值,但是实际上,我们是不可能知道的,也就是说在真实情况下,我们需要的是求解带有隐含变量(latent variable)的极大似然估计,那么很自然的,我们需要用到EM算法。在HMM的情景中,又被称为Baum-Welch 算法,那是因为在HMM被发明的时候,还并没有EM算法一说,但是本质上Baum-Welch算法就是一种EM的特例。

EM算法

EM算法绝对是我觉得自己学得最认真的算法之一,第一次学习的时候笔记翻来覆去总结了好几页,包括代码作业也是做得非常认真。当时自以为已经完全学懂了,但是时间一久,当在学习HMM时再次回看EM算法,发现已经忘得差不多了。说了这么多,其实就是发现,对于一个算法的理解不应该只停留在理论推导本身,更多地是需要将它与具体应用联系起来,并且多次的重复,只有这样,算法的思想才能真正留在你的大脑里。Sorry,扯远了。我们回到正题。

本质上,EM算法的存在就是解决带有隐变量的参数求解问题,EM算法通过不断求解目标函数下界的极大值来逼近目标似然函数的最大值。具体来说,EM算法分为E-step和M-step。我们拿HMM的例子来解释一下EM算法的两个步骤。假设这里我们使用O来表示观测序列,I表示隐藏状态序列,θ=(A,B,π)。

然后如下图所示

通过不断地交替重复E,M-step直到收敛。

那么问题就是为什么优化Q function可以等价于优化我们的目标函数呢?推导如下

注:以下推导参考别人的博客

我们利用EM算法对HMM模型的参数进行迭代更新,在每一个M-step,我们对于参数的优化结果为

1.π

2.转移矩阵A

其中的第[i,j]个元素的值为

注:上式存在一些不清晰的地方,第一个I=i 的下标为t,第二个I=j的下标为t+1。

3.发射矩阵 B

其中在状态为j的情况下观测到观测序列可能值中第k个位置的值的概率为

显然上面的表达式还是有些许复杂。为了方便计算,我们引入前向与后向概率的定义。如果有对这两个概念不清楚的朋友,可以参考刘建平老师的这篇文章。

通过这两个变量的定义,我们引出另一个变量,ξt(i,j)。它的意义其实就是在给定参数的情况下观测到当前序列O以及在时刻t状态为i,时刻t+1状态为j的概率。

因为参考了不同的文章,而不同文章对参数的notion不同,所以希望大家不要搞混,上文中的参数θ和下文中的参数λ是一个意思。

而通过ξt(i,j)的引入,我们可以改写我们的参数表达式。

因此完整的Baum-Welch算法流程如下

最后我们来写一下完整的代码。

# -*- coding:utf-8 -*-
import numpy as np

class Hidden_Markov_Model:
    def __init__(self,A,B,Pi):
        self.A=A #shape=[N,N]
        self.B=B #shape=[N,num_of_diff_observations]
        self.Pi=Pi #初始位置各states的概率
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号