当你去学习一个算法的时候,你首先要去搞清楚它是什么,能用来做什么。如果上来就进行公式推导,那样只会让你更加迷糊,只有彻底了解了之后学起来才会事半功倍。
本篇文章主要有两个目的:
1 、让大家了解什么是隐马尔科夫模型。为了让大家深入理解,会先介绍什么是马尔科夫模型,然后介绍什么是隐马尔可夫模型,然后总结两者的联系和区别。
2 、带大家认识马尔可夫模型的三种应用场景。大家可以理解为能解决哪三种问题,以及三种场景下使用的什么算法,以及不涉及公式推导的情况下每种算法的简单讲解。
马尔可夫模型是描述状态序列的概率模型,某个时刻的状态只依赖于上个时刻的状态,和更早的状态没有关系。
假如天气预报只和前一天的天气有关,如果第一天是雨天,第二天还是雨天的概率是0.8,是晴天的概率是0.2;如果第一天是晴天,第二天还是晴天的概率是0.6,是雨天的概率是0.4。问:如果第一天晴天和雨天概率分别是 0.5,请问第三天仍然是雨天的概率是多少?
这里面我们把第一天晴天和雨天概率教练做初始状态概率分布;把晴天雨天叫做状态,把某个时间点到某个时间点的天气列表叫做状态序列;把晴天雨天互相转移的概率叫做状态转移概率,四种转移概率组成的矩阵叫做状态转移概率矩阵。马尔可夫模型由初始状态概率分布、状态集合、状态转移概率矩阵组成。
但实际情况,纯粹的马尔科夫情景很少,适用的场景也少。比如上面的例子,当前天气不可能只和前一天天气有关。
这里拓展一下,如果当前天气只依赖于前两天的天气,则属于二阶马尔科夫模型;如果当前天气只依赖于前三天的天气,则属于三阶马尔科夫模型。这些可以统称为 n 阶马尔科夫模型,n 表示只依赖于前 n 个状态。我们讲的马尔科夫模型其实是一阶马尔科夫模型。
隐马尔可夫模型就是在马尔可夫模型的基础上引入了隐藏状态的概念。
马尔科夫模型和状态相关的只有一个,而隐马尔可夫模型和状态相关的有两个,分别是隐藏状态和观测状态。
先举例理解下隐马尔可夫模型:有 AB 两个箱子,A 箱子有 1 个白球9 个黑球,B 箱子有 9 个白球1 个黑球。如果本次从 A 箱子拿球,那么下次依然从 A 箱子拿球概率是 30%,从 B 箱子拿球概率是 70%;如果本次从 B 箱子拿球,那么下次从 A 箱子拿球概率是 60%,依然从 B 箱子拿球概率是 40%。第一次从 A 箱子拿球概率是 80%,从 B 箱子拿球概率是 20%。经过六次取球,分别取到了黑,白,白,黑,黑,白的球 。
隐马尔可夫模型与马尔科夫模型的区别在于状态上,马尔科夫只有一个状态,可以被观测到。但隐马尔可夫模型有两个状态,分别是隐藏状态和观测状态。观测状态指的是从箱子里面抓取的白球和黑球,这个我们可以直观看到。隐藏序列指的是箱子 A 和箱子 B,模拟实际中我们无法观测到的状态。需要注意的是,每个观测结果只与生成它的状态有关,比如例子中红黑球的概率只和 当前是 A 箱子还是 B 箱子有关,和之前是哪个箱子没有关系。
隐马尔可夫模型是由初始状态概率,概率转移矩阵和生成观测状态概率矩阵组成,对应到上面的示例,初始概率分布(A 箱子 80%,B 箱子 20%),隐藏状态转移矩阵(AB 两个箱子互相转换的概率),生成观测状态概率矩阵(A 箱子 B 箱子抓到黑白球的概率)。
本质上,隐马尔可夫模型就是马尔科夫模型的延伸,马尔科夫模型的状态都是可以直接看到的,但隐马尔可夫模型的状态是看不到的,只能看到状态下出现的观测结果。
隐马尔可夫模型的主要应用场景有三种,大家在使用过程中往里套就行。
已知:隐马尔可夫模型的初始状态概率、隐藏状态转移矩阵、生成观测状态概率矩阵
求:这个某个观测序列出现的概率
分析:这个问题就是要找到所有出现这种观测状态序列的隐藏状态序列,然后让隐藏状态乘以对应的生成观测状态概率即可。当列出所有可能的情况后,大家第一思路肯定是计算每条的概率然后相加,当然这是没问题的,但是复杂度很高。还有另外一种思路,类似于深度学习的前向算法,一层层的算,这样极大的降低了复杂度。
算法:前向算法或后向算法
已知:观测序列
求:使观测序列最大的隐马尔科夫模型参数(隐藏状态初始概率,隐藏状态转移矩阵,生成观测状态概率矩阵)
分析:通过观测概率来求模型参数,典型的最大似然估计。但是隐马尔可夫模型有 隐藏层,所以应该用最大似然的升级版 EM 算法。 EM 算法是一种求解最大似然估计的方法,它通过引入隐变量将最大似然问题转化成多个期望最大化问题,完美适配该场景。
算法:Baum-Welch (EM 算法的一种应用,专门用于训练隐马尔可夫模型参数的一种算法)
已知:隐马尔科夫模型参数(隐藏状态初始概率,隐藏状态转移矩阵,生成观测状态概率矩阵)和观测序列
求:概率最大的隐藏状态序列
算法:维特比