本文主线:首先从隐马尔科夫模型开始说起,接着由马尔科夫模型的计算引出EM模型,并进行讲解。
(内容会尽量以交流白话的形式,便于大家理解,文章中对模型的介绍会先提出一些专业名词,然后结合实例对公式和名词进行解释。)
1、什么是隐马尔科夫:
隐马尔科夫主要在于“隐”字,因为其中有一个状态是看不到的,比如我们有三个不同的骰子,你怎么根据你看到最终得到的点数序列推算出各个点数是哪个骰子投掷出来的?也就是说我们之前遇到的模型一般都是由x如何得到y,但是现在是x先得到了z,然后再根据z得到了y,但是z我们是不知道,也无法直接得到的,所以我们要解决这个问题。目前主流描述为:由一个隐藏的马尔科夫链随机生成不可观测的状态随机序列,然后再根据这个状态随机序列,生成可观测的序列。
可能你听了上面的概念还有些不理解,接下来我还是先把需要的理论列一下,然后根据一个例子进行通俗的解释。
2、隐马尔科夫模型
主要包括五个元素:可观测序列,状态序列,初始状态分布π,状态转移矩阵A,观测概率分布B。
其中的关系:(帮助后续理解例子中的关系)
我们一般如何描述一个隐马尔科夫模型,一般来说 隐马尔科夫模型=(A,B,π),A,B,π就是该模型的参数,就类似logstic regression 中的权重 w 类似。
那么可观测序列和状态序列以及上述三个参数之间的关系 呢?
A,和π确定了隐藏的马尔科夫链,生成了状态序列,其中状态序列在和B进行运算就得到了观测序列。
3、通过例子理解模型以及参数含义
该例子来自于统计学习方法,方便大家下去对照理解。
盒子(box) | b1 | b2 | b3 | b4 |
红球数 | 5 | 3 | 6 | 8 |
白球数 | 5 | 7 | 4 | 2 |
抽球过程描述: 开始先从4个盒子里以等概率随机选取一个盒子,从这个盒子中随机抽出一个球,记录其颜色后放回。然后从当前盒子转移到下一个盒子:规则为:如果当前盒子是盒子1,那么下一个盒子一定是盒子2或者3,如果当前盒子是盒子2,那么分别以概率0.4和0.6转移到左边或者右边的盒子,如果当前盒子是盒子4,那么各以0.5的概率停留在盒子4或者转移到盒子3;确定转移的盒子之后,再从该盒子中随机抽取一个球,记录其颜色后放回,如此重复5次,得到球的观测序列:
Q={红,红,白,白,红}
在这个过程中,以为观察者智能看到球的最后抽取出来的颜色,看不到球是哪个盒子中取出的。因此抽取盒子该序列是隐藏的。
那么好了,根据上述的描述,我们来对应下上述的参数和名词吧:
初始状态分布π:也就是初始的状态,上面提到“从4个盒子里以等概率随机选取一个盒子”,因此:
初始状态分布π={0.25,0.25,0.25,0.25}
状态转移矩阵A:状态转移就是从一个状态转移到下一个时刻的状态,这里指的是从当前时刻的盒子转移到下一时刻的盒子。根据上面的描述,可以知道状态转移的概率,比如当前是盒子1,那么下一时刻转移到盒子2的概率就是1,其余的都是0。因此我们可以推导出状态转移矩阵A:
盒子b1 | b2 | b3 | b4 | |
盒子b1 | 0 | 1 | 0 | 0 |
b2 | 0.4 | 0 | 0.6 | 0 |
b3 | 0 | 0.4 | 0 | 0.6 |
b4 | 0 | 0 | 0.5 | 0.5 |
观测概率分布B:上面我们提到了观测序列是根据(观测概率分布B和状态序列生成的),因此很容易得到观测概率分布B的矩阵,也就是当我们的状态序列中某一时刻乘以观测分布矩阵就可以得到观测序列的某一时刻,eg:假如我们知道了当前要抽取的盒子为盒子1,那么我们可以根据盒子里面球的个数知道将要得到的观测状态为红球的概率为0.5,白球的状态也为0.5。
红球 | 白球 | |
盒子b1 | 0.5 | 0.5 |
b2 | 0.3 | 0.7 |
b3 | 0.6 | 0.4 |
b4 | 0.8 | 0.2 |
好了,这就是隐马尔科夫模型,包括三个参数:(A,B,π),并且包含了两个状态,接下来的问题就围绕着这几个参数和状态展开,无非就是根据谁来求解谁。接下来就很自然的导出了隐马尔科夫的3个基本问题。
4、隐马尔科夫的3个基本问题
(1)、概率计算问题: 给定模型(A,B,π),和观测序列O,计算在模型下观测序列O出现的概率.
此处的问题就可以用前向或者后向算法来实现,直接说概念可能有点难以理解,简单来说就是利用模型的参数和传递的关系一个一个来计算最终状态的概率,然后在进行累加便可。
(2)、学习问题: 已知观测序列O,估计模型(A,B,π)参数,使得在该模型下观测序列概率最大。即用极大似然估计的方法估计参数。
其中在学习问题中有一种解法就是利用EM算法(这里叫 Baum-Welch算法),下面现将EM算法进行解读
EM算法:
EM算法就是含有隐变量的概率模型参数的极大似然估计法。所以EM算法可以很好的解决该问题(简直就是量身设计)。EM算法主要分为两步,E步:求期望,M步:求极大值。但是这里需要求解极大似然估计函数,因为没有解析解,所以只能通过迭代的方法,不断的逼近解,就像logistic regression中求权重w一样(脑补w3如何由w2得到,w2又如何由w1求得),所以可以说EM算法适用于求解该问题的一种迭代算法(一般来说需要用到EM算法的问题都具有1、含有隐变量2、式子里面有积分)
最主要的就是Q函数方程的建立,得到Q函数以后E M两步就可以知道如何求得了.
收敛性:可以保证估计的序列收敛到稳定点,但是不保证收敛到极大值点。
(3)、预测问题: 也成为解码问题,已知模型(A,B,π)和观测序列O,求当给定观测序列时,计算最有可能的对应的状态序列。
该问题最有名的一个算法就是维比特算法(Viterbi),该算法是一个动态规划问题,当最终求解到最后一个状态时,在进行往回推,一步步的根据概率值从而对应相应的状态,回推到头的时候所有的状态序列也就推导出来了。