从马尔可夫模型到隐马尔可夫模型

马尔可夫模型简介:

马尔可夫模型个人认为这个概念应该是从 随机过程 里面提出来的,由马尔可夫过程过来的概念。实际上掌握了随机过程里面对马尔可夫过程的特殊情况:离散参数离散状态的马尔可夫链的数学运算的话。就能够很好解决马尔可夫模型上面的计算问题,包括隐马尔科夫模型。讲马尔可夫模型以及过程重点在于其满足的性质-马尔可夫性。

随机过程:
现实中时常出现,某个事物满足一定的随机分布,但是其随机分布会随着时间的变化而变化。我们假设其在时刻符合随机分布并且用随机变量来表示。假设。但是在时间的时候就符合随机分布并且用随机变量来表示。假设。也就是说某个事物的某个特征会随着时间的变化其对应的分布也会发生变化。这样一个总体的过程,称之为 随机过程。

具体例子:
灯泡寿命问题,灯泡其实在每个时间点上都有一定的可能性会损坏,在这个时间点上损坏的可能性符合一个具体的正态分布(其是确定的),而随着时间的久远,灯泡损坏的可能性就变大了。所以在之后的某个时间点上灯泡损坏的可能性可能就符合另外一个具体的正态分布(其就和先前不一样了,会有变坏的趋势)。灯泡损坏在传统的概率论中也是一个经典例子,可能传统的概率论会认为灯泡的寿命长短符合一个随机分布,并且用一个随机变量来表示,我们研究这个分布的特征。这里和传统的概率论中不一样,可以发现的是,引入了随机过程,可以对随机现象更加深入彻底地描述和研究。

定义随机过程中的一些量。
参数:也就是上述的时间,如果是和时间有关,往往叫做时间序列。但是很多的现象研究不是和时间相关的。

状态:也就是上述的随着时间变化的随机变量。

马尔可夫过程:满足马尔科夫性的随机过程。

以后再解释
马尔可夫性:
马尔可夫链:

马尔可夫模型和上述的关系。

具体讲一下 隐马尔可夫模型。

隐马尔可夫模型:

L.Rabiner的经典例子:

一个房间里有N个坛子。M种球。每个坛子有内有未知状况的球。
每次都会 随机选一个坛子 有放回地取一个球观察。
这样可以记录下球的观察序列。

和普通的马尔可夫不一样,马尔可夫模型是可以确定状态序列的。也就是说序列上的每个项的分布是怎么样的是已知的。而隐马尔可夫模型是连序列上的每个项的是什么分布都不能够知道,都是随机的。

我个人认为隐马尔科夫模型 对应的是 马尔可夫过程。因为,每个状态都是一个随机变量。而很多地方会说是双重随机过程,这里的随机过程应该是不严谨的,而是简单地认为 马尔可夫模型 是一重随机过程。上个状态影响下个状态

形式上定义:(五要素定义)

  1. 状态项,并且状态项之间无法观察
  2. 输出(观察符号)
  3. 状态转移概率
  4. 输出概率
  5. 初始状态
    从而有 因为一般S,V不太出现在计算之中,所以可以简写为
    另外还有观察序列

对于这样的一个随机模型。
经常要解决三个基本问题:
1). 给定和,求解。 又叫作 计算问题。
2). 给定和,求解一个状态转换序列,使得最优可能产生上面的序列。又叫做估计问题。
3). 在模型参数(A或者B)未知或者参数不准确的情况下,由来调整参数。又叫做训练问题。

第一个问题:

暴力做法:

\begin{equation} \begin{aligned} P(O|\lambda) &= \sum_{ (x_1,x_2,x_3,...,x_r) \epsilon(X_1,X_2,X_3,...,X_r) }P( (x_1,x_2,x_3,...,x_r) | \lambda) * P((o_1,o_2,o_3,...,o_r)|(x_1,x_2,x_3,...,x_r))\\ &=\sum_{ (x_1,x_2,x_3,...,x_r) \epsilon(X_1,X_2,X_3,...,X_r) } P(x_r|(x_1,x_2,x_3,...,x_{r-1}),\lambda) * P(x_{r-1}| (x_1,x_2,x_3,...,x_{r-2}),\lambda) *...* P(x_1|\lambda) * P((o_1,o_2,o_3,...,o_r)|(x_1,x_2,x_3,...,x_r))\\ &=\sum_{ (x_1,x_2,x_3,...,x_r) \epsilon(X_1,X_2,X_3,...,X_r) } P(x_r|x_{r-1},\lambda) * P(x_{r-1}| x_{r-2},\lambda) *...* P(x_1|\lambda) * (x_1,x_2,x_3,...,x_r) | \lambda) * P((o_1,o_2,o_3,...,o_r)|(x_1,x_2,x_3,...,x_r))\\ \end{aligned} \end{equation}

考虑DP做法:

状态一定是按着产生了部分观察序列来的。考虑前缀。表示处理到了n,观察序列到n为止都是答案的概率。但是不好转移,转移的时候要枚举前后隐藏状态,考虑把隐藏状态也表示出来。表示处理到了n,并且第n个状态为j的概率。
范围:
结果:
初始化:
转移:

第二个问题:

知道和,求Q,状态序列,使得产生的可能性最大。

说白了这个估计问题,如果我们把O当做训练数据。对Q进行预测。这个其实就是一个预测问题。
求的是

定义:

这个函数的含义是:
模型在时刻t处于状态i,观察到的最佳状态转换序列的概率。
从而有了转移方程:

而就是
因此的转移过程构成了一个图,而Q就是上面的最优路径。

第三个问题:

利用观察数据进行对模型参数或者或者进行预测和修正,训练问题,又可以叫做预测问题。

并且这个问题其实是带有隐变量的最大似乎估计,也就是EM算法。
直接讲EM,用数学角度来引入 或者 用递归式来求解含有隐变量的参数估计 都是可以的,后者会比较清楚。
但是课上老师给出了另外一种比较好的解释:
考虑第三个问题,实际上应该分两种情况。
1:带指导的参数学习。
给出的数据是这样的:
状态/观察数据。
硬币中的例子就是
H/1 H/1 T/1 T/2 H/3 T/3 T/2 H/1 T/2 H/3 H/3 H/1
其实当拥有了数据 状态/观察数据 是可以直接对参数进行估计的。
假设是齐次的(一般也是齐次的,概率只和状态有关,和时间关系不大,放在词句中就是词语所在的句子的部位关系不是很大,而是上下文内容关系比较大。),

考虑aij 指的是在状态i和状态j的转移概率。
可以直接对上面2个2个统计进行参数估计。
考虑bi(o_j)也就是状态为i输出为o_j的。
一个一个枚举来即可。
考虑pi_i。也就是初始状态。
一个一个枚举状态即可。

带有指导的是有缺点的:
数据上不可行,状态这样的数据其实都是人工标注的。
数据量要求比较大。

但是在NLP中这个方法是很重要的。因为效果比较好。

2:不带指导的参数学习
数据上只给出了 观察序列,没有状态序列。

实际上1中就出了答案。没有状态序列,我们就枚举状态序列。
比如上述。如果观察出来了
1 2 2
那么我们就考虑以下
1 2 2
HHH
HHT
HTH
HTT
THH
THT
TTH
TTT
所有情况。
所以就产生了
H/1 H/2 H/2
H/1 H/2 T/2
....
然后分组进行统计参数估计即可。

但是这里有两个问题:
1:状态太多了。N^T。
2:给每个状态的权重是一样的。不是很科学。(实际上还行,如果使用熵最大原理。)
那么怎么办?解决2考虑给不同状态加权重,那么要有一个先验的的知识:
咱们先给出先验的 模型参数。
那么就可以计算P(Q|O,人)P(Q,O|人)这样的东西了。
明显可以用P(Q|O,人)作为一个路径序列的权重。
但是这样计算的时候,路径序列很长。并且转移路径还是N^T条。
不可行。

避开对路径的考虑。考虑参数abt最多只有涉及两个时间点的。
我们如果只关注两个时间点之间的状态。那么就可以变成二维的。
使Q不是一个路径的。而是只是两个时间点之间的状态。
q_t = i q_t+1 = j 。把这个概率计算出来的话。就能直接对aij这样的进行估计了。
(实际上只是换了一种计数方式,就减少了问题规模,因为咱们关注的也只是路径上两个点两个点之间的。)

由此引出Baum_Welch算法:

定义以下:

定义:前向变量

给定模型,时刻处在状态,观察到的概率。

定义:后向变量

给定模型,时刻处在状态,观察到的概率。

定义:

表示根据给定的,,在时刻t处状态为i,时刻t+1处状态为j的概率。

定义:
表示根据给定的,,在时刻t处状态为i概率。

这样就能对参数们进行评估了。有以下:




其中时候反之为0

这样只要挑一个满足条件的初始值,然后迭代求解即可。

你可能感兴趣的:(从马尔可夫模型到隐马尔可夫模型)