【机器学习基础】HMM隐马尔可夫模型

时间:2024-03-24 16:52:05

目录

一 马尔可夫链

二 隐马尔可夫模型

2.1 两个很重要的假设

        2.2 三类问题

三 参考文献


        隐马尔可夫模型(Hidden Markov Model,HMM)是统计模型,它用来描述一个含有隐含未知参数的马尔可夫过程。其难点是从可观察的参数中确定该过程的隐含参数,然后利用这些参数来作进一步的分析,例如模式识别。

        HMM模型解决的问题一般都包含两个特征:(1)问题是基于序列的,比如时间序列;(2)问题中包含两种状态属性,一种是我们可以观测到的状态序列,称为可见状态序列或者观测序列,一种是隐藏的状态序列,称为隐含序列,有的地方也叫状态序列。

        要了解HMM,首先需要知道什么是马尔可夫链以及马尔可夫性质:

 

一 马尔可夫链

马尔可夫链是一组具有马尔可夫性质的离散随机变量的集合,而马尔可夫性质指的是一个时刻一个事件的发生概率,只与其前一刻的随机变量的概率相关,而与再之前的没有关系。举个简单的例子,比如我要预测今天的天气是不是会下雨,那么如果满足马尔可夫性质的话,那就只与昨天的天气有关系,而与再之前的天气没有关系。这样去假设的话在很多场景下可能都不是完全符合(就比如预测股票价格),但是这么做可以大大地简化模型的复杂度,因此马尔可夫链在很多时间序列模型中得到广泛的应用。数学表达如下:

假设状态序列为【机器学习基础】HMM隐马尔可夫模型,则

                                                         【机器学习基础】HMM隐马尔可夫模型

二 隐马尔可夫模型

在了解了马尔可夫链之后,我们发现其最大的缺点就是在于当前时刻状态的概率只与前一个时刻状态的概率相关,这一点很多场景都不满足这种情况,所以就出现了隐马尔科夫模型。隐马尔科夫模型是在马尔科夫模型的基础之上加上了一个隐变量,在考虑当前时刻的状态概率时,还需要同时参考当前时刻与上一时刻的隐变量的状态。拿股票价格预测来举例,比如说我还是要预测今天的股票价格,那么现在就不仅仅只考虑昨天的股票价格了,还要考虑一下最近这支股票的价格趋势,综合这两个条件去考虑,是不是就显得更为合理了一些,那么这个趋势就是隐藏的变量。

        先定义一些变量以支撑后续的表达,假设【机器学习基础】HMM隐马尔可夫模型是所有可观测状态的集合,M是可观测状态的数量,【机器学习基础】HMM隐马尔可夫模型是所有隐含状态的集合,N是隐含状态的数量。那么对应一个长度为T的序列,其隐含序列用【机器学习基础】HMM隐马尔可夫模型表示,观测序列用【机器学习基础】HMM隐马尔可夫模型表示,其中【机器学习基础】HMM隐马尔可夫模型

2.1 两个很重要的假设

        (1)齐次马尔可夫链假设

        任意时刻的隐藏状态只依赖于它的前一刻的隐藏状态,这样的假设其实也存在有一些场景并不满足这样的条件,但是这样做的好处就是能让模型变得简单,便于求解。假设在时刻t的隐含状态为【机器学习基础】HMM隐马尔可夫模型,在t+1时刻的隐含状态为【机器学习基础】HMM隐马尔可夫模型,那么根据假设则在隐含状态从t时刻转移到t+1时刻时的转移概率为:

                                                                    【机器学习基础】HMM隐马尔可夫模型

        (2)观测独立性假设

        任意时刻的观测状态只依赖于当前时刻的隐含状态,这个也是为了简化模型。假设在时刻t的隐含状态为【机器学习基础】HMM隐马尔可夫模型,对应的观测状态为【机器学习基础】HMM隐马尔可夫模型,那么从隐含状态生成观测状态的概率为:【机器学习基础】HMM隐马尔可夫模型

        下面以一个掷骰子的例子来解释HMM主要解决的问题和其中使用到的算法:

        假设有3个不同的骰子,第一个骰子是4个面的,其面上的数字分别是1,2,3,4,第二个骰子是6个面的,其面上的数字分别是1,2,3,4,5,6,第三个骰子是8个面的,其面上的数字分别是1,2,3,4,5,6,7,8。

 

  

【机器学习基础】HMM隐马尔可夫模型

 

     那么我们现在进行掷骰子,规则是每次从这三个骰子中随机选取一个,掷一次我们将数字记录下来,然后将骰子放回,一共掷十次,我们就可以得到一个结果,比如:1,6,5,2,3,7,6,3,5,6。这一串序列我们就称之为可见状态链,即我们可以观测到的结果值,但是在这其中其实还有我们没有观测到的并且会对结果的产生造成影响的序列,就是我们每次使用的是几面的骰子的序列,这个叫做隐含状态链,比如,可以为:D4 D6 D8 D6 D8 D8 D6 D4 D6 D8。一般来说,HMM中说道的马尔可夫链其实是指隐含状态链,那么我们接下来阐述一下用到的这几个概念:

        (1)可见状态链:我们实际观测到的结果序列,比如在这个例子中就是1,2,3,4,5,6,7,8这一个集合。

        (2)隐含状态链:隐藏状态的序列,描述的是在事件发生时隐藏状态的各个取值的集合,比如在这个例子中就是D6 D4 D8 D6 D8 D8 D6 D4 D6 D8这一个集合

        (3)转移概率:隐含状态之间转换的概率,比如说我当前取的是4面的骰子,下一次取6面的骰子的概率,在本样例中,为了简单期间,我们假设的是在取骰子的时候是完全随机的,即取哪一种骰子的概率都是三分之一。转移概率如果可视化的话如下图所示:

【机器学习基础】HMM隐马尔可夫模型

        (4)输出概率 :从隐含状态到可见状态的概率,比如说我那的是4面的骰子,那么我掷的点数为1的概率。

        有了上面几个概念之后,现在可以把掷骰子的隐马尔可夫模型图画出来如下图所示,从这个图中我们可以看到

【机器学习基础】HMM隐马尔可夫模型

       

        2.2 三类问题

与HMM相关的算法主要分成三类,分别解决三类问题:

2.2.1 已知骰子有几种(隐含状态数量),每种骰子之间的转移概率,根据掷骰子掷出的结果(可见状态链),我想知道每次掷出来的都是哪种骰子(隐含状态链)

        这个问题可以用Viterbi算法求解,也就是说,找到一条隐含状态序列,产生观测结果的概率最大。还是拿上面那个掷了十次的结果来说,可观测序列为:1,6,5,2,3,7,6,3,5,6。

        现在一步一步来看看是怎么计算的,先看我们第一次掷骰子:

 

【机器学习基础】HMM隐马尔可夫模型

        从可观测结果看到序列为1,那么这三个骰子中,三个骰子都可以掷出1的结果,但是用4面骰子掷出1的概率明显比其他的两个骰子掷出1的概率要大,所以如果我们需要让求出的隐含状态序列产生这个可观测的序列的概率最大,那么第一个隐含状态肯定是D4,接下来看掷两次的情况:

【机器学习基础】HMM隐马尔可夫模型

 

        观测结果为1,6,同样,如果要让概率最大,那么第1个肯定还是D4,那么就看在第一个为D4的情况下,第二个骰子是选择D4、D6还是D8的概率,那么就需要算出使用每一种骰子的概率,然后选择最大的那一个作为第二个骰子的隐含状态:

【机器学习基础】HMM隐马尔可夫模型

【机器学习基础】HMM隐马尔可夫模型

【机器学习基础】HMM隐马尔可夫模型

【机器学习基础】HMM隐马尔可夫模型

        根据上面的结果,可以看出第二个骰子选六面体的概率是最大的,以此类推,再看投掷三个骰子的情况:

【机器学习基础】HMM隐马尔可夫模型

        情况也是跟上面两次投掷一样,需要分别算出第三次投掷选择D4,D6和D8的概率,然后选择概率最大的那一个,这里就不分别计算了,直接给出计算的结果:

【机器学习基础】HMM隐马尔可夫模型

         以此类推,直到求完所有的可观测序列,那么就得到了隐含状态序列。

       


Viterbi算法描述:

维特比算法是通用的解码算法,是基于动态规划的求序列最短路径的方法,那么既然是动态规划,那就需要找到对应的局部状态和递推公式。

依照上面的例子,在时刻t的隐藏状态为所有可能的状态转移路径中的概率最大值。记为【机器学习基础】HMM隐马尔可夫模型:

                                    【机器学习基础】HMM隐马尔可夫模型

那么,如果要根据t时刻来递推t+1时刻时,再回想一下上面的例子,是不是应该拿到t时刻的概率最大对应的那一个隐藏状态,来进行状态转移,那么这里可以把上面公式中的P展开来看

                                    【机器学习基础】HMM隐马尔可夫模型

根据这个去不断地递推,可以从1时刻一直递推到T时刻(假设序列长度为T),那么获得的隐藏状态序列就是问题的解。


        2.2.2 已知骰子有几种(隐含状态数量),每种骰子之间的转移概率,根据掷骰子掷出的结果(可见状态链),我想知道掷出这个结果的概率

         这类问题其实和第一类有一些相似,第一类求的是最大的概率,这一类求的是所有可能的情况的概率和。解决这个问题的方法有两种:前向算法(forward Algorithm)和后向算法

        先说前向算法,类似地,还是一步一步来看一看算法是如何计算的,首先先掷一次骰子:

【机器学习基础】HMM隐马尔可夫模型

 

【机器学习基础】HMM隐马尔可夫模型

【机器学习基础】HMM隐马尔可夫模型

【机器学习基础】HMM隐马尔可夫模型

【机器学习基础】HMM隐马尔可夫模型

         接下来看掷第二次骰子的情况:

【机器学习基础】HMM隐马尔可夫模型

【机器学习基础】HMM隐马尔可夫模型

【机器学习基础】HMM隐马尔可夫模型

【机器学习基础】HMM隐马尔可夫模型

【机器学习基础】HMM隐马尔可夫模型

        以此类推,当我们算完所有的状态之后,我们可以得到一个值,这个值代表的就是根据给定的骰子数量以及它们之间的转移概率,能够掷出这个值的概率。

        后向算法其实和前向算法非常类似,唯一的区别就是后向算法用的是“后向概率”,这里就不赘述了,直接看下面的公式。


        前向算法公式描述如下:

前向算法本质上属于动态规划算法,即我们需要从子问题的最优解慢慢地拓展到整个问题的最优解。假设时刻t的隐藏状态为【机器学习基础】HMM隐马尔可夫模型,观测序列为【机器学习基础】HMM隐马尔可夫模型的概率为前向概率,记为【机器学习基础】HMM隐马尔可夫模型

                                               【机器学习基础】HMM隐马尔可夫模型

有了时刻t的前向概率之后,既然是动态规划,那就需要根据t时刻的结果来递推t+1时刻各个隐藏状态的前向概率,下图中,上面说过【机器学习基础】HMM隐马尔可夫模型表示的是时刻t的隐藏状态为【机器学习基础】HMM隐马尔可夫模型,观测序列为【机器学习基础】HMM隐马尔可夫模型的前向概率,那么【机器学习基础】HMM隐马尔可夫模型就表示时刻t的隐藏状态为【机器学习基础】HMM隐马尔可夫模型,t+1时刻的隐藏状态为【机器学习基础】HMM隐马尔可夫模型的概率,那么把t时刻的所有可能隐藏状态的前向概率做累加,就可以得到t+1时刻观测到【机器学习基础】HMM隐马尔可夫模型,并且t+1时刻的隐藏状态为【机器学习基础】HMM隐马尔可夫模型的前向概率:

                                                 【机器学习基础】HMM隐马尔可夫模型

假设序列的长度为T,那么我们根据上述公式可以递推出每一个时刻的前向概率,把T时刻的各个隐藏状态的前向概率累加,就是时刻T时观测结果为【机器学习基础】HMM隐马尔可夫模型的概率,即【机器学习基础】HMM隐马尔可夫模型

 

【机器学习基础】HMM隐马尔可夫模型

 

后向算法公式描述如下:

后向算法和前向算法非常类似,区别在于后向算法使用的是后向概率,后向概率定义如下:

假设时刻t的隐藏状态为【机器学习基础】HMM隐马尔可夫模型,从t+1时刻到最后T时刻的观测序列为【机器学习基础】HMM隐马尔可夫模型的概率为后向概率,记为【机器学习基础】HMM隐马尔可夫模型

                                           【机器学习基础】HMM隐马尔可夫模型

后向算法刚好与前向算法相反,现在我们是已知t+1时刻的各个隐藏状态的后向概率,要递推出t时刻的各个隐藏状态的后向概率,其实这个地方依照着前向概率的公式来就行,如下图所示,t+1时刻隐藏状态为【机器学习基础】HMM隐马尔可夫模型,t时刻的隐藏状态为【机器学习基础】HMM隐马尔可夫模型,并且观测状态为【机器学习基础】HMM隐马尔可夫模型的概率为【机器学习基础】HMM隐马尔可夫模型,那么把t+1时刻的所有隐藏状态的概率加来,就是t时刻隐藏状态为【机器学习基础】HMM隐马尔可夫模型并且观测状态为【机器学习基础】HMM隐马尔可夫模型的后向概率:

                                          【机器学习基础】HMM隐马尔可夫模型

假设序列的长度为T,那么我们根据上述公式可以递推出每一个时刻的后向概率,把1时刻的各个隐藏状态的后向概率累加,就是观测结果为【机器学习基础】HMM隐马尔可夫模型的概率,即【机器学习基础】HMM隐马尔可夫模型

【机器学习基础】HMM隐马尔可夫模型

 


        2.2.3. 只是已知骰子有几种(隐含状态数量),观测到很多次掷骰子的结果(可见状态链),我想反推出每种骰子是什么(转换概率)

//待补充完整

        

 

三 参考文献

1. 隐马尔科夫模型HMM

2. 一文搞懂HMM(隐马尔可夫模型)

3. HMM超详细讲解+代码