机器学习模型之隐马尔可夫(HMM)

1、隐马尔可夫模型简介

隐马尔可夫模型是一种生成模型,其广泛的应用于自然语言处理,语音识别,生物信息领域。

其模型可以描述为由状态集合,观测集合,初始集合生成相应的状态序列和观测序列的任务。定义如下

设Q表示状态集合,V表示观测集合。状态集合的个数为N,观测集合的个数为M,

\[Q = {q_{1},q_{2}......q_{N}} \\ V = {v_{1},v_{2}......v_{M}} \]

I是长度为T的状态序列,O是长度为T的观测序列。

\[I = {i_{1},i_{2}....i_{T}} \\ O = {o_{1},o_{2}....o_{T}} \]

A是状态转移概率矩阵。表示由状态\(q_{i}\)转移到状态\(q_{j}\)的概率大小

\[A = [a_{ij}]_{N * N} \]

B是观测概率矩阵,表示由状态\(q_{j}\)生成观测\(o_{k}\)的概率值。

\[B = [b_{j}(k)]_{N*M} \]

\(\pi\)表示状态初始值

\[\pi = [\pi_{i}] \]

所以,综上,隐马尔可夫模型可以用一个三元组来表示

\[\lambda = (A,B,\pi) \]

隐马尔可夫模型有两个假设:1、任何时刻t的状态只依赖于前一个时刻的状态。2、任意时刻的观测输出只依赖于当前时刻的状态。

隐马尔可夫模型有三个基本问题,接下来我们就一一进行详解,分别是:

  • 1、概率计算问题
    给定\(\lambda\),计算观测序列O的概率,即\(p(O|\lambda)\)
  • 2、学习问题
    给定观测序列O,学习参数\(\lambda\)使得\(p(O|\lambda)\)最大
  • 3、预测问题
    给定观测序列O和参数\(\lambda\),求使得\(p(I|O)\)最大的观测序列

2、概率计算问题

概率计算问题是已知参数\(\lambda\)来计算给定的观测序列O,我们有三种方法来计算\(P(O|\lambda)\),暴力解决法,前向计算法,后向计算法

2.1、暴力解决法

根据给定的参数\(\lambda\)我们可以穷举出所有得到序列\(O={o_{1},o_{2}....o_{T}}\)的可能性,并将相应的可能性相加即可得到最终的结果。对于任意一个状态序列\(I={i_{1},i_{2}....i_{T}}\)来说,\(P(I|\lambda) = \pi_{i_{1}} a_{i_{1}i_{2}} a_{i_{2}i_{3}}......a_{i_{T-1}i_{T}}\),对于某一个固定的序列I来说,\(P(O|I,\lambda) = b_{i_{1}}(o_{1}) b_{i_{2}}(o_{2})....b_{i_{T}}(o_{T})\),则对于一条固定的状态序列来说

\[P(O,I|\lambda) = \pi_{i_{1}} b_{i_{1}}(o_{1}) a_{i_{1}i_{2}} b_{i_{2}}(o_{2}) ...... a_{i_{T-1}i_{T}} b_{i_{T}}(o_{T}) \]

那么,对于所有的观测序列I来说,其概率为

\[P(O|\lambda) = \sum\limits_{I} \pi_{i_{1}} b_{i_{1}}(o_{1}) a_{i_{1}i_{2}} b_{i_{2}}(o_{2}) ...... a_{i_{T-1}i_{T}} b_{i_{T}}(o_{T}) \]

这里表示说,对于每一条状态序列来说,我们都可以得到相应的概率输出,最终,我们将所有的概率做一个加和,即可得到结果。

这种方法理论上是可行的,但在实际操作的时候,其时间复杂度为\(O(TN^{T})\),这里\(N^{T}\)表示一个排列组合,即将个数为N的状态放在T个时间上的排列组合。\(T\)表示时间步骤,对于每一个固定的状态序列来说,都需要复杂度为\(O(T)\),所以最终的时间复杂度为\(O(TN^{T})\),所以,这种方法由于时间复杂度较高,实际中不适用。

2.2、前向计算法

前向算法的逻辑如下所示。前向算法的整体逻辑是,首先每一个时间t,计算当前时间的每个状态到当前序列的概率值,在时间t+1步,将上一个时间t计算出来的概率值进行相加,然后再计算t+1时刻的每个状态的概率值。再最后一步T,将当前计算的状态概率值相加即可。时间复杂度为\(O(N^{2}T)\)

2.3、后向计算法

后向计算法的逻辑如下所示。其整体逻辑是从后向前进行计算,在每一个t+1步计算所有状态的概率值,在t步利用t+1计算的概率值和当前的概率转移等得到当前所有状态的概率值。

3、学习问题

学习问题是根据观测序列O来学习参数\(\lambda,I\)这两个参数,由于参数有含有隐变量\(I\),这块需要用EM算法(这块的推导稍微有些复杂,后续弄懂了再推吧)

4、预测问题

预测问题是已知\(\lambda\)\(O\),预测状态序列\(I^{*} = i_{1}^{*},i_{2}^{*}.....i_{t}^{*}\),可以用动态规划的方法来解决(也叫维特比算法)如下


这里可以用这个图来进行理解,维特比算法的思想是对于前一个时间t的状态概率来说,转移到时间t+1的状态中,我们选择可以使概率值最大的状态概率,并用一个集合记录这个最大概率是从时刻t的哪个状态来的,这里选择最大的概率一点好处就是少算了许多不值得算的概率,减少了计算量。换一种方式理解的话,假设我们状态有3个,时间T为10,那其实我们构造了两个3 * 10的矩阵,第一个矩阵为\(W_{ij}\),表示第i个状态在第j个时刻的输出概率值,这个值根据\(max(W_{1j-1}*a_{1j},W_{2j-1}*a_{2j},W_{3j-1}*a_{3j})*b_{j}(o)\)公式得到,而第二个矩阵\(V_{ij}\)表示第i个状态的在第j个时刻的最大值是由j-1时刻的哪个状态得来的,比如刚才式子中最大值是第二个即\(W_{2j-1}*a_{2j}\),则\(V_{ij} = 2\)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章