隐马尔科夫模型(HMM)详解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
马尔科夫过程
马尔科夫过程可以看做是一个自动机,以一定的概率在各个状态之间跳转。
考虑一个系统,在每个时刻都可能处于N个状态中的一个,N个状态集合是{S1,S2,S3,...S N}。我们现在用q1,q2,q3,…q n来表示系统在t=1,2,3,…n时刻下的状态。在t=1时,系统所在的状态q取决于一个初始概率分布PI,PI(S N)表示t=1时系统状态为S N的概率。
马尔科夫模型有两个假设:
1. 系统在时刻t的状态只与时刻t-1处的状态相关;(也称为无后效性)
2. 状态转移概率与时间无关;(也称为齐次性或时齐性)
第一条具体可以用如下公式表示:
P(q t=S j|q t-1=S i,q t-2=S k,…)= P(q t=S j|q t-1=S i)
其中,t为大于1的任意数值,S k为任意状态
第二个假设则可以用如下公式表示:
P(q t=S j|q t-1=S i)= P(q k=S j|q k-1=S i)
其中,k为任意时刻。
下图是一个马尔科夫过程的样例图:
可以把状态转移概率用矩阵A表示,矩阵的行列长度均为状态数目,a ij表示P(S i|S i-1)。
隐马尔科夫过程
与马尔科夫相比,隐马尔科夫模型则是双重随机过程,不仅状态转移之间是个随机事件,状态和输出之间也是一个随机过程,如下图所示:
此图是从别处找来的,可能符号与我之前描述马尔科夫时不同,相信大家也能理解。
该图分为上下两行,上面那行就是一个马尔科夫转移过程,下面这一行则是输出,即我们可以观察到的值,现在,我们将上面那行的马尔科夫转移过程中的状态称为隐藏状态,下面的观察到的值称为观察状态,观察状态的集合表示为
O={O1,O2,O3,…O M}。
相应的,隐马尔科夫也比马尔科夫多了一个假设,即输出仅与当前状态有关,可以用如下公式表示:
P(O1,O2,…,O t|S1,S2,…,S t)=P(O1|S1)*P(O2|S2)*...*P(O t|S t) 其中,O1,O2,…,O t为从时刻1到时刻t的观测状态序列,S1,S2,…,S t则为隐藏状态序列。
另外,该假设又称为输出独立性假设。
举个例子
举个常见的例子来引出下文,同时方便大家理解!比如我在不同天气状态下去做一些事情的概率不同,天气状态集合为{下雨,阴天,晴天},事情集合为{宅着,自习,游玩}。假如我们已经有了转移概率和输出概率,即P(天气A|天气B)和P(事情a|天气A)的概率都已知道,那么则有几个问题要问(注意,假设一天我那几件事情中的一件),
1. 假如一周内的天气变化是下雨->晴天->阴天->下雨->阴天->晴天->阴天,那么我这一周自习->宅着->游玩->自习->游玩->宅着->自习的概率是多大?
2. 假如我这一周做事序列是自习->宅着->游玩->自习->游玩->宅着->自习,
不知道天气状态的情况下这个做事序列的概率是多大?
3.假如一周内的天气变化是下雨->晴天->阴天->下雨->阴天->晴天->阴天,那我们这一周最有可能的做事序列是什么?
4.假如我这一周做事序列是自习->宅着->游玩->自习->游玩->宅着->自习,那么这一周的天气变化序列最有可能是什么?
对于第一个问题,我想大家应该都能很快知道怎么算。(啥?不知道,答案在本文最后)
隐马模型基本要素及基本三问题
综上所述,我们可以得到隐马尔科夫的基本要素,即一个五元组{S,N,A,B,PI};
S:隐藏状态集合;
N:观察状态集合;
A:隐藏状态间的转移概率矩阵;
B:输出矩阵(即隐藏状态到输出状态的概率);
PI:初始概率分布(隐藏状态的初始概率分布);
其中,A、B、PI称为隐马尔科夫的参数,用X表示。
由上述问题可以引出隐马尔科夫的三个基本问题的其中两个,下文中为了简便,将隐马尔科夫模型简称为HMM(Hiden Markov Model)。
HMM的三个基本问题是:
1.给定模型(五元组),求某个观察序列O的概率(样例问题2)
(即已知模型参数,计算某一特定输出序列的概率.通常使用forward算
法解决.)
2. 给定模型和观察序列O,求可能性最大的隐藏状态序列(样例问题4)。
(即已知模型参数,寻找最可能的能产生某一特定输出序列的隐含状态
的序列.通常使用Viterbi算法解决.)
3. 对于给定的观察序列O,调整HMM的参数,使观察序列出现的概率
最大。(即已知输出序列,寻找最可能的状态转移以及输出概率.通常
使用Baum-Welch算法以及Reversed Viterbi算法解决.)前向算法
对于第一个基本问题,计算公式为:
即对于观察序列O,我们需要找出所有可能的隐藏状态序列S,计算出在给定模型下S输出为O的概率(就是样例问题一啊),然后计算概率之和。
直观上看,假如序列O的长度为T,模型的隐藏状态集合大小为N,那么一共有N T个可能的隐藏状态序列,计算复杂度极高O(N T),暴力算法太慢了。
解决方案就是动态规划(Dynamic Programming)。
假设观察序列为O1,O2,O3,….,O t.在时刻i(1
其中,S k为任意一个隐藏状态值。
则C(i+1,S r)的计算公式为:
其中,S r为任意一个隐藏状态值。A为转移概率。B为隐藏状态到观察状态的概率。为了便于理解,还是看图:
C(3,下雨)考虑了t=1和t=2的所有组合情况,同时也是C(4,下雨|阴天|晴天)的子问题。C(3,阴天)和C(3,晴天)也是如此计算,而C(i+1,S r)计算公式则可以表示成: