隐马尔科夫模型HMM
隐马尔科夫模型(HMM 作者:作者:leivo leivo 来源:来源:博客园发布时间:发布时间:2010-10-29 00:59 2010-10-29 00:59 阅读:阅读:497 497 次次 原文链接[ [收藏] ] 介绍介绍 我们通常都习惯寻找一个事物在一段时间里的变化规律。在很多领域我们都希望找到这个规 律,比如计算机中的指令顺序,句子中的词顺序和语音中的词顺序等等。一个最适用的例子就 是天气的预测。 首先,本文会介绍声称概率模式的系统,用来预测天气的变化 然后,我们会分析这样一个系统,我们希望预测的状态是隐藏在表象之后的,并不是我们观察 到的现象。比如,我们会根据观察到的植物海藻的表象来预测天气的状态变化。 最后,我们会利用已经建立的模型解决一些实际的问题,比如根据一些列海藻的观察记录,分 析出这几天的天气状态。 Generating PatternsGenerating Patterns 有两种生成模式:确定性的和非确定性的。 确定性的生成模式确定性的生成模式 :就好比日常生活中的红绿灯,我们知道每个灯的变化规律是固定的。我 们可以轻松的根据当前的灯的状态,判断出下一状态。 非确定性的生成模式:非确定性的生成模式: 比如说天气晴、多云、和雨。与红绿灯不同,我们不能确定下一时刻 的天气状态,但是我们希望能够生成一个模式来得出天气的变化规律。我们可以简单的假设当 前的天气只与以前的天气情况有关,这被称为马尔科夫假设。虽然这是一个大概的估计,会丢 失一些信息。但是这个方法非常适于分析。 马尔科夫过程就是当前的状态只与前n 个状态有关。这被称作n 阶马尔科夫模型。最简单的 模型就当 n=1 时的一阶模型。就当前的状态只与前一状态有关。(这里要注意它和确定性生 成模式的区别,这里我们得到的是一个概率模型)。下图是所有可能的天气转变情况: 对于有 M 个状态的一阶马尔科夫模型,共有M*M 个状态转移。每一个状态转移都有其一定 的概率,我们叫做转移概率,所有的转移概率可以用一个矩阵表示。在整个建模的过程中,我 们假设这个转移矩阵是不变的。 该矩阵的意义是:如果昨天是晴,那么今天是晴的概率为0.5,多云的概率是 0.25,雨的概 率是 0.25。注意每一行和每一列的概率之和为1。 另外,在一个系统开始的时候,我们需要知道一个初始概率,称为向量。 到现在,我们定义了一个一阶马尔科夫模型,包括如下概念: 状态:晴、多云、雨 状态转移概率 初始概率 马尔科夫模型也需要改进! 当一个隐士不能通过直接观察天气状态来预测天气时,但他有一些水藻。民间的传说 告诉我们水藻的状态与天气有一定的概率关系。也就是说,水藻的状态与天气时紧密 相关的。此时,我们就有两组状态:观察状态(水藻的状态)和隐含状态(天气状 态)。因此,我们希望得到一个算法可以为隐士通过水藻和马尔科夫过程,在没有直 接观察天气的情况下得到天气的变化情况。 更容易理解的一个应用就是语音识别,我们的问题定义就是如何通过给出的语音信号 预测出原来的文字信息。在这里,语音信号就是观察状态,识别出的文字就是隐含状 态。 这里需要注意的是,在任何一种应用中,观察状态的个数与隐含状态的个数有可能不 一样的。下面我们就用隐马尔科夫模型HMM 来解决这类问题。 HMM 下图是天气例子中两类状态的转移图,我们假设隐状态是由一阶马尔科夫过程描述, 因此他们相互连接。 隐状态和观察状态之间的连线表示:在给定的马尔科夫过程中,一个特定的隐状态对应的观察 状态的概率。我们同样可以得到一个矩阵: 注意每一行(隐状态对应的所有观察状态)之和为1。 到此,我们可以得到 HMM 的所有要素:两类状态和三组概率 两类状态:观察状态和隐状态; 三组概率:初始概率、状态转移概率和两态对应概率(confusion matrix) HMMHMM 定义定义 HMM 是一个三元组 ( ,A,B. the vector of the initial state probabilities; the state transition matrix; the confusion matrix; 这其中,所有的状态转移概率和混淆概率在整个系统中都是一成不变的。这也是 HMM 中最不切实际的假设。 HMMHMM 的应用的应用 有三个主要的应用:前两个是模式识别后一个作为参数估计 (1 评估 根据已知的 HMMHMM 找出一个观察序列的概率。 这类问题是假设我们有一系列的HMM 模型,来描述不同的系统(比如夏天的天气变 化规律和冬天的天气变化规律),我们想知道哪个系统生成观察状态序列的概率最 大。反过来说,把不同季节的天气系统应用到一个给定的观察状态序列上,得到概率 最大的哪个系统所对应的季节就是最有可能出现的季节。(也就是根据观察状态序 列,如何判断季节)。在语音识别中也有同样的应用。 我们会用 forward algorithmforward algorithm 算法来得到观察状态序列对应于一个HMM 的概 率。 (2 解码 根据观察序列找到最有可能出现的隐状态序列 回想水藻和天气的例子,一个盲人隐士只能通过感受水藻的状态来判断天气状况,这 就显得尤为重要。我们使用viterbi algorithmviterbi algorithm 来解决这类问题。 viterbi 算法也被广泛的应用在自然语言处理领域。比如词性标注。字面上的文字信息 就是观察状态,而词性就是隐状态。通过HMM 我们就可以找到一句话上下文中最有 可能出现的句法结构。 (3 学习 从观察序列中得出 HMMHMM 这是最难的 HMM 应用。也就是根据观察序列和其代表的隐状态,生成一个三元组 HMM (,A,B。使这个三元组能够最好的描述我们所见的一个现象规律。 我们用 forward-backward algorithmforward-backward algorithm 来解决在现实中经常出现的问题--转移 矩阵和混淆矩阵不能直接得到的情况。 总结 HMM HMM 可以解决的三类问题 1. Matching the most likely system to a sequence of observations - uation, solved using the forward algorithm; 2. determining the hidden sequence most likely to have generated a sequence of observations - decoding, solved using the Viterbi algorithm; 3. determining the model parameters most likely to have generated a sequence of observations - learning, solved using the forward-backward algorithm. 找到观察序列的概率 Finding the probability of an observed sequence 1、穷举搜索方法、穷举搜索方法 对于水