隐马尔可夫模型--更加接近真相。
隐马尔可夫模型 (Hidden Markov Model,HMM) 最初由 L. E. Baum 和其它一些学者发表在一系列的统计学论文中,随后在语言识别,自然语言处理以及生物信息等领域体现了很大的价值。上篇我们已经了解了马尔可夫模型,不过在实际应用中,隐马尔可夫模型使用的频率会更加高,为了更好的理解模型,我们生活中的场景来理解它。
考虑交通灯的变化规律,一种变化序列可能是红-绿-橙-红。这个序列可以画成一个状态机,不同的状态按照这个状态机互相交替,每一个状态都只依赖于前一个状态,如果当前的是绿灯,那么接下来就是橙灯:
这是一个确定性系统,因此更容易理解和分析,只要这些状态转移都是已知的。但是在实际当中还存在许多不确定性系统。
在日常生活当中,我们总是希望根据当前天气的情况来预测未来天气情况,和上面的交通灯的例子不同,我们不能依靠现有知识确定天气情况的转移,但是我们还是希望能得到一个天气的模式。一种办法就是假设这个模型的每个状态都只依赖于前一个的状态,这个假设被称为马尔科夫假设,这个假设可以极大简化这个问题。显然,这个假设也是一个非常糟糕的假设,导致很多重要的信息都丢失了。
当涉及到天气的时候,马尔科夫假设描述为,假设如果我们知道之前一些天的天气信息,那么我们就能预测今天的天气。当然,这个例子也是有些不合实际的。但是,这样一个简化的系统可以有利于我们的分析,所以我们通常接受这样的假设,因为我们知道这样的系统能让我们获得一些有用的信息,尽管不是十分准确的。
下面是天气所有可能的一阶转移:
注意一个含有 N 个状态的一阶过程有 N^{2} 个状态转移。每一个转移的概率叫做状态转移概率 (state transition probability),就是从一个状态转移到另一个状态的概率。这所有的 N^{2} 个概率可以用一个状态转移矩阵来表示,其表示形式如下:
其中:
a_{ij}=P(q_{t}=j|q_{t-1}=i) 1\leq i,j\leq N
对于该矩阵有如下约束条件:
a_{ij}\geq 0,\forall i,j
\sum_{j=1}^{N}{a_{ij}}=1,\forall i
昨天和今天天气变化的一个状态转移矩阵为:
这个矩阵表示,如果昨天是晴天,那么今天有50%的可能是晴天,37.5%的概率是阴天,12.5%的概率会下雨,很明显,矩阵中每一行的和都是1。
为了初始化这样一个系统,我们需要一个初始的概率向量:
这个向量表示第一天是晴天。
到这里,我们就为上面的一阶马尔科夫过程定义了以下三个部分:
状态:晴天、阴天和下雨
初始向量:定义系统在时间为0的时候的状态的概率
状态转移矩阵:每种天气转换的概率
所有的能被这样描述的系统都是一个马尔科夫过程。
然而,当马尔科夫过程不够强大的时候,我们又该怎么办呢?在某些情况下,马尔科夫过程不足以描述我们希望发现的模式。例如,一个隐居的人可能不能直观的观察到天气的情况,但是民间传说告诉我们海藻的状态在某种概率上是和天气的情况相关的。在这种情况下我们有两个状态集合,一个可以观察到的状态集合(海藻的状态)和一个隐藏的状态(天气状况)。我们希望能找到一个算法可以根据海藻的状况和马尔科夫假设来预测天气的状况,这个过程中我们需要知道一个细节,隐藏状态的数目和可以观察到的状态的数目可能是不一样的,也就是说,在一个有3种状态的天气系统(sunny、cloudy、rainy)中,也许可以观察到4种潮湿程度的海藻(dry、dryish、damp、soggy)。
不过有一点我们是可以确定的,就是可以观察到的状态序列和隐藏的状态序列是概率相关的。于是我们可以将这种类型的过程建模为有一个隐藏的马尔科夫过程和一个与这个隐藏马尔科夫过程概率相关的并且可以观察到的状态集合。这就是传说中的隐马尔可夫模型。
隐马尔可夫模型 (Hidden Markov Model) 是一种统计模型,用来描述一个含有隐含未知参数的马尔可夫过程。其难点是从可观察的参数中确定该过程的隐含参数,然后利用这些参数来作进一步的分析。下图是一个三个状态的隐马尔可夫模型状态转移图,其中x 表示隐含状态,y 表示可观察的输出,a 表示状态转换概率,b 表示输出概率。
下图显示了天气的例子中隐藏的状态和可以观察到的状态之间的关系。我们假设隐藏的状态是一个简单的一阶马尔科夫过程,并且他们两两之间都可以相互转换。
对 HMM 来说,有如下三个重要假设,尽管这些假设是不现实的。
假设1:马尔可夫假设(状态构成一阶马尔可夫链)
P(X_{i}|X_{i-1}...X_{i-1})=P(X_{i}|X_{i-1})
假设2:不动性假设(状态转换矩阵与具体时间无关)
P(X_{i+1}|X_{i})=P(X_{j+1}|X_{j}),\forall i,j
假设3:输出独立性假设(输出仅与当前状态有关)
P(O_{1},....O_{T}|X_{i},......X_{T})=\prod_{}^{}P(O_{t}|X_{t})
隐藏的状态和可观察到的状态之间有一种概率上的关系,也就是说某种隐藏状态 H 被认为是某个可以观察的状态 O1 是有概率的,假设为 P(O1 | H)。如果可以观察的状态有3种,那么很显然 P(O_{1} | H)+P(O_{2 }| H)+ P(O_{3} | H) = 1 。
这样,我们也可以得到一个另一个矩阵,称为混淆矩阵 (confusion matrix)。这个矩阵的内容是某个隐藏的状态被分别观察成几种不同的可以观察的状态的概率,在天气的例子中,这个矩阵如下图:
上边的图示都强调了 HMM 的状态变迁我们来用图表示出模型的演化过程:
其中绿色的圆圈表示隐藏状态,紫色圆圈表示可观察到状态,箭头表示状态之间的依存概率。
现在我们可以知道,需要用一个5元组 \left\{ N,M,\pi,A,B \right\} 来表示一个HMM模型,其中 N 表示隐藏状态的数量,我们要么知道确切的值,要么猜测该值;M 表示可观测状态的数量,可以通过训练集获得; π={πi} 为初始状态概率; A=\left\{ a_{ij} \right\} 为隐藏状态的转移矩阵 P(X_t| X_{t-1}) ;B={bik} 表示某个时刻隐藏状态到可观察状态的概率,即混淆矩阵, Pr(Ot| Xt) 。在状态转移矩阵和混淆矩阵中的每个概率都是时间无关的,即当系统演化时,这些矩阵并不随时间改变。
所以,对于一个 N 和 M 固定的 HMM 来说,用 λ={ π, A, B } 表示 HMM 参数。
在正常的马尔可夫模型中,状态对于观察者来说是直接可见的。这样状态的转换概率便是全部的参数。而在隐马尔可夫模型中,状态并不是直接可见的,但受状态影响的某些变量则是可见的。每一个状态在可能输出的符号上都有一概率分布。因此输出符号的序列能够透露出状态序列的一些信息。
今天就到这里先,晚安。