关于隐马尔可夫模型的学习

一、从预测天气说起

我们通常都习惯寻找一个事物在一段时间里的变化模式(规律)。这些模式

发生在很多领域,比如计算机中的指令序列,句子中的词语顺序和口语单词中的

音素序列等等,事实上任何领域中的一系列事件都有可能产生有用的模式。

考虑一个简单的例子,有人试图通过一片海藻推断天气:‘湿透的’海藻意味着潮湿阴雨,而‘干燥的’海藻则意味着阳光灿烂。如果它处于一个中间状态(‘有湿气’),我们就无法确定天气如何。然而,天气的状态并没有受限于海藻的状态,所以我们可以在观察的基础上预测天气是雨天或晴天的可能性。另一个有用的线索是前一天的天气状态(或者,至少是它的可能状态)——通过综合昨天的天气及相应观察到的海藻状态,我们有可能更好的预测今天的天气

这是本教程中我们将考虑的一个典型的系统类型。

首先,我们将介绍产生概率模式的系统,如晴天及雨天间的天气波动。

然后,我们将会看到这样一个系统,我们希望预测的状态并不是观察到的——其底层系统是隐藏的。在上面的例子中,观察到的序列将是海藻而隐藏的系统将是实际的天气。

最后,我们会利用已经建立的模型解决一些实际的问题。对于上述例子,我

们想知道:

1. 给出一个星期每天的海藻观察状态,之后的天气将会是什么?

2. 给定一个海藻的观察状态序列,预测一下此时是冬季还是夏季?

二、生成模式(Generating Patterns

1、确定性模式(Deterministic Patterns

考虑一套交通信号灯,灯的颜色变化序列依次是红色-红色/黄色-绿色-黄色红色,注意每一个状态都是唯一的依赖于前一个状态,所以,如果交通灯为绿色,那么下一个颜色状态将始终是黄色——也就是说,该系统是确定性的。

2、非确定性模式(Non-deterministic patterns

为了使天气那个例子更符合实际,加入第三个状态——多云。我们并不期望这三个天气状态之间的变化是确定性的,但是我们依然希望对这个系统建模以便生成一个天气变化模式(规律)。一种做法是假设模型的当前状态仅仅依赖于前面的几个状态,这被称为马尔科夫假设,它极大地简化了问题。

一个马尔科夫过程是状态间的转移仅依赖于前n 个状态的过程。这个过程被称之为n 阶马尔科夫模型,其中n 是影响下一个状态选择的(前)n 个状态。最简单的马尔科夫过程是一阶模型,它的状态选择仅与前一个状态有关。这里要注意它与确定性系统并不相同,因为下一个状态的选择由相应的概率决定,并不是确定性的。每一个状态转移都有一个概率值,称为状态转移概率——这是从一个状态转移到另一个状态的概率。所有的 个概率可以用一个状态转移矩阵表示。注意这些概率并不随时间变化而不同——这是一个非常重要(但常常不符合实际)的假设。

1状态转移矩阵显示的是天气例子中可能的状态转移概率

要初始化这样一个系统,我们需要确定起始日天气的(或可能的)情况,定义其为一个初始概率向量,称为π向量。例如天气例子中(100),即初始是晴天。

现在我们定义一个一阶马尔科夫过程如下:

状态:三个状态——晴天,多云,雨天。

向量:定义系统初始化时每一个状态的概率。

状态转移矩阵:给定前一天天气情况下的当前天气概率。

三、隐藏模式(Hidden Patterns

1、马尔科夫过程的局限性

回顾一下天气那个例子,一个隐士也许不能够直接获取到天气的观察情况,但是他有一些水藻。一个更实际的问题是语音识别,一些语音识别装置工作的原理是将内部的语音产出看作是隐藏的状态,而将声音结果作为一系列观察的状态,这些由语音过程生成并且最好的近似了实际(隐藏)的状态。在这两个例子中,需要着重指出的是,隐藏状态的数目与观察状态的数目可以是不同的。一个包含三个状态的天气系统(晴天、多云、雨天)中,可以观察到4 个等级的海藻湿润情况(干、稍干、潮湿、湿润);纯粹的语音可以由80 个音素描述,而身体的发音系统会产生出不同数目的声音,或者比80 多,或者比80 少。

2、隐马尔科夫模型(Hidden Markov Models

除了定义了马尔科夫过程的概率关系,我们还有另一个矩阵,定义为混淆矩阵(confusion matrix),它包含了给定一个隐藏状态后得到的观察状态的概率。对于天气例子,混淆矩阵是:

         3、总结

我们已经看到在一些过程中一个观察序列与一个底层马尔科夫过程是概率相关的。在这些例子中,观察状态的数目可以和隐藏状态的数码不同。

我们使用一个隐马尔科夫模型(HMM)对这些例子建模。这个模型包含两组状态集合和三组概率集合:

Ø  隐藏状态:一个系统的(真实)状态,可以由一个马尔科夫过程进行描述(例如,天气)。

Ø  观察状态:在这个过程中‘可视’的状态(例如,海藻的湿度)。

Ø  向量:包含了(隐)模型在时间t=1 时一个特殊的隐藏状态的概率(初始概率)。

Ø  状态转移矩阵:包含了一个隐藏状态到另一个隐藏状态的概率

Ø  混淆矩阵:包含了给定隐马尔科夫模型的某一个特殊的隐藏状态,观察到的某个观察状态的概率。

因此一个隐马尔科夫模型是在一个标准的马尔科夫过程中引入一组观察状态,以及其与隐藏状态间的一些概率关系。

四、隐马尔科夫模型(Hidden Markov Models

1、定义(Definition of a hidden Markov model

一个隐马尔科夫模型是一个三元组(π, A, B)。

Ø  π = {πi}:初始化概率向量;

Ø  A = {aij}:状态转移矩阵;

Ø  B = {bjk}:混淆矩阵;

在状态转移矩阵及混淆矩阵中的每一个概率都是时间无关的,这是现实中不存在的模型。

2、应用(Uses associated with HMMs

一旦一个系统可以作为HMM 被描述,就可以用来解决三个基本问题。其中前两个是模式识别问题:给定HMM 求一个观察序列的概率(评估);搜索最有可能生成一个观察序列的隐藏状态训练(解码)。第三个问题是给定观察序列生成一个HMM学习)。

a) 评估(Evaluation

考虑这样的问题,我们有一些描述不同系统的隐马尔科夫模型(也就是一些(π,A,B)三元组的集合)及一个观察序列。我们想知道哪一个HMM 最有可能产生了这个给定的观察序列。例如,对于海藻来说,我们也许会有一个“夏季”模型和一个“冬季”模型,因为不同季节之间的情况是不同的——我们也许想根据海藻湿度的观察序列来确定当前的季节。

我们使用前向算法(forward algorithm)来计算给定隐马尔科夫模型(HMM)后的一个观察序列的概率,并因此选择最合适的隐马尔科夫模型(HMM)

b) 解码(Decoding

给定观察序列搜索最可能的隐藏状态序列。

另一个相关问题,也是最感兴趣的一个,就是搜索生成输出序列的隐藏状态序列。在许多情况下我们对于模型中的隐藏状态更感兴趣,因为它们代表了一些更有价值的东西,而这些东西通常不能直接观察到。

考虑海藻和天气这个例子,一个盲人隐士只能感觉到海藻的状态,但是他更想知道天气的情况,天气状态在这里就是隐藏状态。

我们使用Viterbi 算法(Viterbi algorithm)确定(搜索)已知观察序列及HMM下最可能的隐藏状态序列。

c学习(Learning

根据观察序列生成隐马尔科夫模型。

第三个问题,也是与HMM 相关的问题中最难的,根据一个观察序列(来自于已知的集合),以及与其有关的一个隐藏状态集,估计一个最合适的隐马尔科夫模型(HMM),也就是确定对已知序列描述的最合适的(π,A,B)三元组。当矩阵AB不能够直接被(估计)测量时,前向-后向算法(forward-backward algorithm)被用来进行学习(参数估计),这也是实际应用中常见的情况。

五、前向算法(Forward Algorithm

1.穷举搜索( Exhaustive search for solution

给定隐马尔科夫模型,也就是在模型参数(π , A, B)已知的情况下,我们想找到观察序列的概率。

还是考虑天气这个例子,我们有一个用来描述天气及与它密切相关的海藻湿度状态的隐马尔科夫模型(HMM) 另外我们还有一个海藻的湿度状态观察序列。假设连续3 天海藻湿度的观察结果是(干燥、湿润、湿透)。

一种计算观察序列概率的方法是找到每一个可能的隐藏状态,并且将这些隐藏状态下的观察序列概率相加。对于上面那个(天气)例子,将有3^3 = 27 种不同的天气序列可能性,因此,观察序列的概率是:

Pr(dry,damp,soggy | HMM) = Pr(dry,damp,soggy | sunny,sunny,sunny) +Pr(dry,damp,soggy | sunny,sunny ,cloudy) + Pr(dry,damp,soggy | sunny,sunny ,rainy)+ . . . . Pr(dry,damp,soggy | rainy,rainy ,rainy)

用这种方式计算观察序列概率极为昂贵,特别对于大的模型或较长的序列,因此我们可以利用这些概率的时间不变性来减少问题的复杂度。

2、使用递归降低问题复杂度

我们首先通过计算局部概率降低计算整个概率的复杂度,局部概率表示的是t 时刻到达某个状态s 的概率。

t =1 时,可以利用初始概率(来自于P 向量)和观察概率Pr (observation | state)(来自于混淆矩阵)计算局部概率;

t >1 时的局部概率可以利用t-1 时的局部概率计算。

因此,这个问题是递归定义的,观察序列的概率就是通过依次计算t =1, 2, , T 时的局部概率,并且对于t = T 时所有局部概率’s 相加得到的。

穷举搜索的时间复杂度是2TNT,前向算法的时间复杂度是N2T,其中T 指的是观察序列长度,N 指的是隐藏状态数目。

六、维特比算法(Viterbi Algorithm

         1、穷举搜索

         我们可以通过列出所有可能的隐藏状态序列并且计算对于每个组合相应的观察序列的概率来找到最可能的隐藏状态序列。最可能的隐藏状态序列是使下面这个概率最大的组合:

Pr(观察序列|隐藏状态的组合)

和解决评估的穷举搜索一样,这种方法是可行的,但是通过穷举计算每一个组合的概率找到最可能的序列是极为昂贵的。与前向算法类似,我们可以利用这些概率的时间不变性来降低计算复杂度。

2、使用递归降低复杂度

维特比算法提供了一种有效的计算方法来分析隐马尔科夫模型的观察序列,并捕获最可能的隐藏状态序列。它利用递归减少计算量,并使用整个序列的上下文来做判断,从而对包含“噪音”的序列也能进行良好的分析。

在使用时,维特比算法对于网格中的每一个单元(cell)都计算一个局部概率,同时包括一个反向指针用来指示最可能的到达该单元的路径。当完成整个计算过程后,首先在终止时刻找到最可能的状态,然后通过反向指针回溯到t =1 时刻,这样回溯路径上的状态序列就是最可能的隐藏状态序列了。

七、前向-后向算法(Forward-backward algorithm)

HMM 模型相关的“有用”的问题是评估(前向算法)和解码(维特比算法)——它们一个被用来测量一个模型的相对适用性,另一个被用来推测模型隐藏的部分在做什么(“到底发生了”什么)。可以看出它们都依赖于隐马尔科夫模型(HMM)参数这一先验知识——状态转移矩阵,混淆(观察)矩阵,以及 向量(初始化概率向量)。

然而,在许多实际问题的情况下这些参数都不能直接计算的,而要需要进行估计——这就是隐马尔科夫模型中的学习问题。前向-后向算法就可以以一个观察序列为基础来进行这样的估计,而这个观察序列来自于一个给定的集合,它所代表的是一个隐马尔科夫模型中的一个已知的隐藏集合。

隐马尔科夫模型(HMM)的三个基本问题中,HMM 参数学习问题是最难的,因为对于给定的观察序列O,没有任何一种方法可以精确地找到一组最优的隐马尔科夫模型参数(AB、)使P(O| )最大。因而,学者们退而求其次,不能使P(O| )全局最优,就寻求使其局部最优(最大化)的解决方法,而前向-后向算法(又称之为Baum-Welch 算法)就成了隐马尔科夫模型学习问题的一种替代(近似)解决方法。

八、总结(Summary)

通常,模式并不是单独的出现,而是作为时间序列中的一个部分——这个过程有时候可以被辅助用来对它们进行识别。在基于时间的进程中,通常都会使用一些假设——一个最常用的假设是进程的状态只依赖于前面N 个状态——这样我们就有了一个N 阶马尔科夫模型。最简单的例子是N = 1

存在很多例子,在这些例子中进程的状态(模式)是不能够被直接观察的,但是可以非直接地,或者概率地被观察为模式的另外一种集合,这样我们就可以定义一类隐马尔科夫模型,这些模型已被证明在当前许多研究领域,尤其是语音识别领域具有非常大的价值。

隐马尔科夫模型(HMM)在分析实际系统中已被证明有很大的价值;它们通常的缺点是过于简化的假设,这与马尔可夫假设相关,即一个状态只依赖于前一个状态,并且这种依赖关系是独立于时间之外的(与时间无关)。

九、个人感悟

鉴于本人没有数学或计算机的学科背景,仅仅致力于用数学工具借助计算机来解决生物学问题,此次学习笔记仅是对隐马尔科夫模型(HMM)的粗浅了解,具体的算法优化及整个前向-后向算法对我来说是一个巨大的挑战,此次笔记基本不涉及。总的来说,本文还处于科普的水平。

 

原文地址:http://www.comp.leeds.ac.uk/roger/HiddenMarkovModels/html_dev/main.html

 

译文来源:http://www.52nlp.cn/

关于隐马尔可夫模型的学习

一、从预测天气说起

我们通常都习惯寻找一个事物在一段时间里的变化模式(规律)。这些模式

发生在很多领域,比如计算机中的指令序列,句子中的词语顺序和口语单词中的

音素序列等等,事实上任何领域中的一系列事件都有可能产生有用的模式。

考虑一个简单的例子,有人试图通过一片海藻推断天气:‘湿透的’海藻意味着潮湿阴雨,而‘干燥的’海藻则意味着阳光灿烂。如果它处于一个中间状态(‘有湿气’),我们就无法确定天气如何。然而,天气的状态并没有受限于海藻的状态,所以我们可以在观察的基础上预测天气是雨天或晴天的可能性。另一个有用的线索是前一天的天气状态(或者,至少是它的可能状态)——通过综合昨天的天气及相应观察到的海藻状态,我们有可能更好的预测今天的天气

这是本教程中我们将考虑的一个典型的系统类型。

首先,我们将介绍产生概率模式的系统,如晴天及雨天间的天气波动。

然后,我们将会看到这样一个系统,我们希望预测的状态并不是观察到的——其底层系统是隐藏的。在上面的例子中,观察到的序列将是海藻而隐藏的系统将是实际的天气。

最后,我们会利用已经建立的模型解决一些实际的问题。对于上述例子,我

们想知道:

1. 给出一个星期每天的海藻观察状态,之后的天气将会是什么?

2. 给定一个海藻的观察状态序列,预测一下此时是冬季还是夏季?

二、生成模式(Generating Patterns

1、确定性模式(Deterministic Patterns

考虑一套交通信号灯,灯的颜色变化序列依次是红色-红色/黄色-绿色-黄色红色,注意每一个状态都是唯一的依赖于前一个状态,所以,如果交通灯为绿色,那么下一个颜色状态将始终是黄色——也就是说,该系统是确定性的。

2、非确定性模式(Non-deterministic patterns

为了使天气那个例子更符合实际,加入第三个状态——多云。我们并不期望这三个天气状态之间的变化是确定性的,但是我们依然希望对这个系统建模以便生成一个天气变化模式(规律)。一种做法是假设模型的当前状态仅仅依赖于前面的几个状态,这被称为马尔科夫假设,它极大地简化了问题。

一个马尔科夫过程是状态间的转移仅依赖于前n 个状态的过程。这个过程被称之为n 阶马尔科夫模型,其中n 是影响下一个状态选择的(前)n 个状态。最简单的马尔科夫过程是一阶模型,它的状态选择仅与前一个状态有关。这里要注意它与确定性系统并不相同,因为下一个状态的选择由相应的概率决定,并不是确定性的。每一个状态转移都有一个概率值,称为状态转移概率——这是从一个状态转移到另一个状态的概率。所有的 个概率可以用一个状态转移矩阵表示。注意这些概率并不随时间变化而不同——这是一个非常重要(但常常不符合实际)的假设。

1状态转移矩阵显示的是天气例子中可能的状态转移概率

要初始化这样一个系统,我们需要确定起始日天气的(或可能的)情况,定义其为一个初始概率向量,称为π向量。例如天气例子中(100),即初始是晴天。

现在我们定义一个一阶马尔科夫过程如下:

状态:三个状态——晴天,多云,雨天。

向量:定义系统初始化时每一个状态的概率。

状态转移矩阵:给定前一天天气情况下的当前天气概率。

三、隐藏模式(Hidden Patterns

1、马尔科夫过程的局限性

回顾一下天气那个例子,一个隐士也许不能够直接获取到天气的观察情况,但是他有一些水藻。一个更实际的问题是语音识别,一些语音识别装置工作的原理是将内部的语音产出看作是隐藏的状态,而将声音结果作为一系列观察的状态,这些由语音过程生成并且最好的近似了实际(隐藏)的状态。在这两个例子中,需要着重指出的是,隐藏状态的数目与观察状态的数目可以是不同的。一个包含三个状态的天气系统(晴天、多云、雨天)中,可以观察到4 个等级的海藻湿润情况(干、稍干、潮湿、湿润);纯粹的语音可以由80 个音素描述,而身体的发音系统会产生出不同数目的声音,或者比80 多,或者比80 少。

2、隐马尔科夫模型(Hidden Markov Models

除了定义了马尔科夫过程的概率关系,我们还有另一个矩阵,定义为混淆矩阵(confusion matrix),它包含了给定一个隐藏状态后得到的观察状态的概率。对于天气例子,混淆矩阵是:

         3、总结

我们已经看到在一些过程中一个观察序列与一个底层马尔科夫过程是概率相关的。在这些例子中,观察状态的数目可以和隐藏状态的数码不同。

我们使用一个隐马尔科夫模型(HMM)对这些例子建模。这个模型包含两组状态集合和三组概率集合:

Ø  隐藏状态:一个系统的(真实)状态,可以由一个马尔科夫过程进行描述(例如,天气)。

Ø  观察状态:在这个过程中‘可视’的状态(例如,海藻的湿度)。

Ø  向量:包含了(隐)模型在时间t=1 时一个特殊的隐藏状态的概率(初始概率)。

Ø  状态转移矩阵:包含了一个隐藏状态到另一个隐藏状态的概率

Ø  混淆矩阵:包含了给定隐马尔科夫模型的某一个特殊的隐藏状态,观察到的某个观察状态的概率。

因此一个隐马尔科夫模型是在一个标准的马尔科夫过程中引入一组观察状态,以及其与隐藏状态间的一些概率关系。

四、隐马尔科夫模型(Hidden Markov Models

1、定义(Definition of a hidden Markov model

一个隐马尔科夫模型是一个三元组(π, A, B)。

Ø  π = {πi}:初始化概率向量;

Ø  A = {aij}:状态转移矩阵;

Ø  B = {bjk}:混淆矩阵;

在状态转移矩阵及混淆矩阵中的每一个概率都是时间无关的,这是现实中不存在的模型。

2、应用(Uses associated with HMMs

一旦一个系统可以作为HMM 被描述,就可以用来解决三个基本问题。其中前两个是模式识别问题:给定HMM 求一个观察序列的概率(评估);搜索最有可能生成一个观察序列的隐藏状态训练(解码)。第三个问题是给定观察序列生成一个HMM学习)。

a) 评估(Evaluation

考虑这样的问题,我们有一些描述不同系统的隐马尔科夫模型(也就是一些(π,A,B)三元组的集合)及一个观察序列。我们想知道哪一个HMM 最有可能产生了这个给定的观察序列。例如,对于海藻来说,我们也许会有一个“夏季”模型和一个“冬季”模型,因为不同季节之间的情况是不同的——我们也许想根据海藻湿度的观察序列来确定当前的季节。

我们使用前向算法(forward algorithm)来计算给定隐马尔科夫模型(HMM)后的一个观察序列的概率,并因此选择最合适的隐马尔科夫模型(HMM)

b) 解码(Decoding

给定观察序列搜索最可能的隐藏状态序列。

另一个相关问题,也是最感兴趣的一个,就是搜索生成输出序列的隐藏状态序列。在许多情况下我们对于模型中的隐藏状态更感兴趣,因为它们代表了一些更有价值的东西,而这些东西通常不能直接观察到。

考虑海藻和天气这个例子,一个盲人隐士只能感觉到海藻的状态,但是他更想知道天气的情况,天气状态在这里就是隐藏状态。

我们使用Viterbi 算法(Viterbi algorithm)确定(搜索)已知观察序列及HMM下最可能的隐藏状态序列。

c学习(Learning

根据观察序列生成隐马尔科夫模型。

第三个问题,也是与HMM 相关的问题中最难的,根据一个观察序列(来自于已知的集合),以及与其有关的一个隐藏状态集,估计一个最合适的隐马尔科夫模型(HMM),也就是确定对已知序列描述的最合适的(π,A,B)三元组。当矩阵AB不能够直接被(估计)测量时,前向-后向算法(forward-backward algorithm)被用来进行学习(参数估计),这也是实际应用中常见的情况。

五、前向算法(Forward Algorithm

1.穷举搜索( Exhaustive search for solution

给定隐马尔科夫模型,也就是在模型参数(π , A, B)已知的情况下,我们想找到观察序列的概率。

还是考虑天气这个例子,我们有一个用来描述天气及与它密切相关的海藻湿度状态的隐马尔科夫模型(HMM) 另外我们还有一个海藻的湿度状态观察序列。假设连续3 天海藻湿度的观察结果是(干燥、湿润、湿透)。

一种计算观察序列概率的方法是找到每一个可能的隐藏状态,并且将这些隐藏状态下的观察序列概率相加。对于上面那个(天气)例子,将有3^3 = 27 种不同的天气序列可能性,因此,观察序列的概率是:

Pr(dry,damp,soggy | HMM) = Pr(dry,damp,soggy | sunny,sunny,sunny) +Pr(dry,damp,soggy | sunny,sunny ,cloudy) + Pr(dry,damp,soggy | sunny,sunny ,rainy)+ . . . . Pr(dry,damp,soggy | rainy,rainy ,rainy)

用这种方式计算观察序列概率极为昂贵,特别对于大的模型或较长的序列,因此我们可以利用这些概率的时间不变性来减少问题的复杂度。

2、使用递归降低问题复杂度

我们首先通过计算局部概率降低计算整个概率的复杂度,局部概率表示的是t 时刻到达某个状态s 的概率。

t =1 时,可以利用初始概率(来自于P 向量)和观察概率Pr (observation | state)(来自于混淆矩阵)计算局部概率;

t >1 时的局部概率可以利用t-1 时的局部概率计算。

因此,这个问题是递归定义的,观察序列的概率就是通过依次计算t =1, 2, , T 时的局部概率,并且对于t = T 时所有局部概率’s 相加得到的。

穷举搜索的时间复杂度是2TNT,前向算法的时间复杂度是N2T,其中T 指的是观察序列长度,N 指的是隐藏状态数目。

六、维特比算法(Viterbi Algorithm

         1、穷举搜索

         我们可以通过列出所有可能的隐藏状态序列并且计算对于每个组合相应的观察序列的概率来找到最可能的隐藏状态序列。最可能的隐藏状态序列是使下面这个概率最大的组合:

Pr(观察序列|隐藏状态的组合)

和解决评估的穷举搜索一样,这种方法是可行的,但是通过穷举计算每一个组合的概率找到最可能的序列是极为昂贵的。与前向算法类似,我们可以利用这些概率的时间不变性来降低计算复杂度。

2、使用递归降低复杂度

维特比算法提供了一种有效的计算方法来分析隐马尔科夫模型的观察序列,并捕获最可能的隐藏状态序列。它利用递归减少计算量,并使用整个序列的上下文来做判断,从而对包含“噪音”的序列也能进行良好的分析。

在使用时,维特比算法对于网格中的每一个单元(cell)都计算一个局部概率,同时包括一个反向指针用来指示最可能的到达该单元的路径。当完成整个计算过程后,首先在终止时刻找到最可能的状态,然后通过反向指针回溯到t =1 时刻,这样回溯路径上的状态序列就是最可能的隐藏状态序列了。

七、前向-后向算法(Forward-backward algorithm)

HMM 模型相关的“有用”的问题是评估(前向算法)和解码(维特比算法)——它们一个被用来测量一个模型的相对适用性,另一个被用来推测模型隐藏的部分在做什么(“到底发生了”什么)。可以看出它们都依赖于隐马尔科夫模型(HMM)参数这一先验知识——状态转移矩阵,混淆(观察)矩阵,以及 向量(初始化概率向量)。

然而,在许多实际问题的情况下这些参数都不能直接计算的,而要需要进行估计——这就是隐马尔科夫模型中的学习问题。前向-后向算法就可以以一个观察序列为基础来进行这样的估计,而这个观察序列来自于一个给定的集合,它所代表的是一个隐马尔科夫模型中的一个已知的隐藏集合。

隐马尔科夫模型(HMM)的三个基本问题中,HMM 参数学习问题是最难的,因为对于给定的观察序列O,没有任何一种方法可以精确地找到一组最优的隐马尔科夫模型参数(AB、)使P(O| )最大。因而,学者们退而求其次,不能使P(O| )全局最优,就寻求使其局部最优(最大化)的解决方法,而前向-后向算法(又称之为Baum-Welch 算法)就成了隐马尔科夫模型学习问题的一种替代(近似)解决方法。

八、总结(Summary)

通常,模式并不是单独的出现,而是作为时间序列中的一个部分——这个过程有时候可以被辅助用来对它们进行识别。在基于时间的进程中,通常都会使用一些假设——一个最常用的假设是进程的状态只依赖于前面N 个状态——这样我们就有了一个N 阶马尔科夫模型。最简单的例子是N = 1

存在很多例子,在这些例子中进程的状态(模式)是不能够被直接观察的,但是可以非直接地,或者概率地被观察为模式的另外一种集合,这样我们就可以定义一类隐马尔科夫模型,这些模型已被证明在当前许多研究领域,尤其是语音识别领域具有非常大的价值。

隐马尔科夫模型(HMM)在分析实际系统中已被证明有很大的价值;它们通常的缺点是过于简化的假设,这与马尔可夫假设相关,即一个状态只依赖于前一个状态,并且这种依赖关系是独立于时间之外的(与时间无关)。

九、个人感悟

鉴于本人没有数学或计算机的学科背景,仅仅致力于用数学工具借助计算机来解决生物学问题,此次学习笔记仅是对隐马尔科夫模型(HMM)的粗浅了解,具体的算法优化及整个前向-后向算法对我来说是一个巨大的挑战,此次笔记基本不涉及。总的来说,本文还处于科普的水平。

 

原文地址:http://www.comp.leeds.ac.uk/roger/HiddenMarkovModels/html_dev/main.html

译文来源:http://www.52nlp.cn/

posted @ 2017-06-20 05:50  LeleLiu  阅读(342)  评论(0编辑  收藏  举报