隐马尔可夫模型
隐马尔可夫模型(hidden Markov model, HMM)适用于标注问题的统计学习模型,描述又隐藏的马尔可夫链随机生成观测序列的过程,属于生成模型。
引子
考虑一个这样的场景,我们是一个瓜农,在我们的瓜地里种着很多的瓜.
而瓜地有很多条行行~,我们称呼一条行行为一个膜.
然后呢,种瓜的时候,我会从这个瓜田中的随机一个膜开始种瓜.
再然后呢,我会从我的兜兜里摸出一枚瓜子儿,这粒瓜子儿呢,我先不说它是什么瓜的瓜子儿,因为是从我兜兜里摸出来的嘛,我兜兜里有甜瓜,西瓜,打瓜,哈密瓜,我可不知道会是哪一种呢.
别跟我说拿眼睛辨别一下,不看不看我就是不看 QAQ好啦,第一枚瓜子儿就这样投进了对应的区域,然后啊,我再依靠某种概率,走到瓜田的另外一个膜种瓜的地方,开始下一次投子儿...
我们的HMM研究的,就是这样一个问题.看起来挺简单的哈,那我们再来规范化一下.
HMM的基本概念
定义:HMM是一个关于时序的概率模型,描述由一个隐藏的马尔可夫链随机生成不可观测的状态随机序列,再有各个状态生成一个观测而产生观测随机序列的过程。
状态序列:隐马尔可夫链随机生成的状态序列。
观测序列:每个状态生成一个观测,由此而产生的观测的随机序列。
-
Q是所有可能的状态的合集
-
V是所有可能的观测的合集
-
I是长度为T的状态序列
-
O是状态序列对应的观测序列
-
A是状态转移概率矩阵
显然可以知道
指的是在t时刻状态为,并在t+1时刻由状态
转变为状态
的概率。
-
B是观测概率矩阵
显然也可以知道
指的是在t时刻状态为,并生成观测
的概率。
-
是初始状态概率向量
同理
指的是时刻t=1处于状态的概率
- 隐马尔科夫模型由初始概率分布,状态转移概率分布,观测概率分布确定。
即 HMM可由
表示.
我们可知状态转移概率矩阵A与初始状态概率向量
确定了隐马尔科夫链,生成不可观测的状态序列.观测概率矩阵B确定了如何从状态生成观测,与状态序列综合确定了如何产生观测序列.
-
让我们再来明确应用HMM时的两个假设:
- 齐次马尔科夫假设: 隐马尔科夫链在任意时刻t的状态只依赖于其前一刻的状态,与其他时刻的状态以及观测无关,也就是说与时刻t同样无关
- 独立观测性假设: 假设任意时刻的观测只依赖于该时刻的马尔科夫链的状态,与其他观测及状态无关
回到引子
再次回到我们种瓜的问题哈,有了上面的规范化术语储备,来让我们把它和我们的瓜田问题对应起来.
假设有一位我的迷妹,把我每次种瓜的瞬间都拿相机记录了下来
醒一醒不存在的.那么在她的底片上,就会有我按时间序列呈顺序分布的拍照剪影,我们称其为状态片段.
那么一整条胶卷也就形成了一个状态序列.
假设我在膜与膜之间切换的时候是遵循着一个特定的规律,譬如我从i膜切换到j膜的时候概率是
,那么我在膜与膜之间切换的概率自然就形成了一个概率矩阵,我们称其为状态转移矩阵.
再假设,冰雪聪明的迷妹能够发现我埋下去的是哪一种瓜的种子,那么这里将来也就会长出什么瓜嘛,而迷妹也发现了我摸出各个瓜子的几率其实是和膜相关的.
(这肯定啦,有的膜靠渠道近,那么水量足,我大概率就摸出来缺水的瓜,有的膜靠着土坡坡,那我大概率就摸出不怎么需要阳光的瓜嘛,这一切都是命运石之门的安排.)
(口胡,你明明都没有看摸出来的是什么瓜子儿的说.)倘若我当前所在的行是j行,想知道我摸出瓜子儿k的概率,那么这个概率也就被描述成为
.
观测序列的生成过程
-
我们可以将一个长度为T的观测序列O=(o_1,o_1,...,o_T)的生成过程描述如下:
-
输入HMM:
和序列长度 T
按照初始状态分布
产生状态
令t=1
按照状态
的观测概率分布
生成o_t (1)
按照状态
的状态转移概率分布
生成状态
,且
=1,2,...,N
令t=t+1,如果t < T,移步(1),否则,则终止.
输出观测序列
-
HMM的三个基本问题
概率计算问题 给定模型
和观测序列
,在模型
下计算序列O出现的概率P(O|
)
学习问题 已知观测序列
,估计模型
,使得在该模型下观测序列概率P(O|
)最大,即用最大似然估计的方法估计参数.
预测问题/解码问题 已知模型
和观测序列
,求给定观测序列条件概率
最大的状态序列.
概率计算算法
-
直接计算法
- 给定模型
的情况下,当我们需要知道
的时候,可以先求得状态序列
出现的概率:
- 倘若再次基础上附加上观测序列的生成概率的话,那就是:
- 这时候只要我们再把所有的序列
的概率加在一起,就可以得到我们期待的
了.
- 推导起来是不是轻松加愉快呢,但我们通常不采取这种方法是有原因的呀,下面来让我们看一下这种方法计算的复杂度.
1.计算的时候我们只需要计算等同于长度
的次数,也就是
次.
2.但是在我们在下一步将不同的累加起来的时候,就会发现,
可由N种元素
无限制混搭形成.即有
种组合方式,两者相乘我们就有
的复杂度,怪不得我们不用这种方法呢.ww
- 给定模型
-
前向算法
- 先来抛个小定义
前向概率: 给定HMM为
,已知截止到
时刻的观测序列
,又知道
时刻的状态
,记作:
-
给定HMM
与观测序列
1.初值
2.递推
- 这里显然是遵循了齐次马尔可夫定理的,我们在计算概率的时候是仅仅只用到了前一项.
- 可能会有一点儿难理解,那就再稍微解释一下. 这条递推公式的含义是, 后一项
的前向概率是前一项
的所有情况与对应的状态转移概率
的乘积的加和,在
中
是变化的,而
则是一开始就给定的
的
,之后再乘以对应的观测概率
就可以啦.
- 顺带一提的是,这里我们不强调各个项的顺序,因为累加可以类比于一种离散的积分,既然是积分,那么与被积分项无关的部分可以提到括号最外面,所以同理我们这里就不强调顺序啦.
3.终止
至此,我们就完美利用前向算法求出了我们需要的观测序列概率
啦.
-
举个前向算法的栗子叭
假设种瓜的杨同学目前只给三个膜种瓜,只带了西瓜籽儿和甜瓜籽儿这两种瓜籽儿.
状态转移矩阵:
观测矩阵:
初始状态向量:
设,
=(西瓜, 甜瓜, 西瓜),试用前向算法计算
-
解:
- 计算初值
- 递推
- 终止
T = 3,带入上一步的值,可得:
- 计算初值
-
后向算法
- 再来抛个小定义
后向概率: 给定HMM为
.定义在时刻
状态为
的情况下,从
到
的部分观测序列为
的概率为后向概率.
- 前面我们才讲过前向概率,可能到这里会有一点儿点儿晕,不慌,我们来看一个示意图:
前后向概率区分.jpg
- 在前后向概率的定义中涉及的元素均如图所示,可以轻易加以区分.
- 同时我们需要明确,前向概率的推进方向是由左及右,后向概率的推进方向是由右及左.
-
给定HMM
与观测序列
1.初值
2.递推
从中我们不难发现后向概率的递推和前向概率的递推有很大的相似性,这次固定的变成了
中的
,由左侧的
给定,而
则根据后一项的状态
的不同而变化.
3.终止
这里我们就成功利用后向算法计算出了我们想要的观测概率
了.
-
最后再举个后向算法的栗子叭,就拿刚才那一题好了,我们再把题目搬过来~
假设种瓜的杨同学目前只给三个膜种瓜,只带了西瓜籽儿和甜瓜籽儿这两种瓜籽儿.
状态转移矩阵:
观测矩阵:
初始状态向量:
设,
=(西瓜, 甜瓜, 西瓜),试用前向算法计算
-
解:
计算初值
递推
终止
检验后我们可以发现结果与之前我们利用前项算法得出的结论是一致的.ww