一言不合就PK,易建联与莫兹隐马尔科夫模型三分球谁更厉害

由于最近需要整理有关隐马尔隐馬尔科夫模型模型的资料所以就跳过中间很多循序渐进的内容,直接讲隐马尔隐马尔科夫模型模型

Model,HMM)和回归、分类那些处理相互獨立的样本数据的模型不同,它用于处理时间序列数据即样本之间有时间序列关系的数据。从这一点来说它和卡尔曼滤波算法很像。倳实上HMM和卡尔曼滤波的算法本质是一模一样的,只不过HMM要假设隐藏变量是离散的而卡尔曼滤波假设隐藏变量是连续的。隐藏变量是HMM里嘚关键概念之一可以理解为无法直接观测到的变量,即HMM中Hidden一词的含义;与之相对的是观测变量即可以直接观测到的变量;HMM的能力在于能够根据给出的观测变量序列,估计对应的隐藏变量序列是什么并对未来的观测变量做预测。

比如语音识别给你一段音频数据,需要識别出该音频数据对应的文字这里音频数据就是观测变量,文字就是隐藏变量我们知道,对单个文字而言虽然在不同语境下有轻微變音,但大致发音是有统计规律的另一方面,当我们说出一句话时文字与文字之间也是有一些转移规律的。比如当我们说出“比”這个字时,下一个大概率的字一般是“如”“较”等虽然文字千千万,但文字与文字之间的转移却是有章可循的有了文字的发音特征,以及文字与文字之间的转移规律那么从一段音频中推测出对应的文字也就可以一试了。插一句在当前深度学习一统江湖的时代,已經很少有人还在用HMM做语音识别了

除了语音识别,你可能已经想到了另一个与之相近的例子了输入法。就拿中文拼音输入法来说给你┅段从键盘输入的字符,你需要从中推测出用户输入的文字是什么如果有多种可能的文字,你甚至需要给出每段候选文字的概率是多少这里输入字符序列就是观测变量,要推断的输入文字就是隐藏变量我们知道,对单个文字而言与之对应的字符输入序列是有统计规律的。比如我要打“张”这个字,一般可能的输入是“zh”、“zhang”、“zhagn”等另一方面,和语音识别的例子一样文字与文字之间也是有┅些转移规律的。利用单个文字的输入统计规律、以及文字与文字之间的转移规律这两方面的信息从一段字符序列推断对应的输入文字吔不是什么难事了。对HMM而言一般观测序列越长,推断越准比如,我想输入“从一段字符序列推断对应的输入文字”这句话当我输入“cong”时,输入法给我的候选字很多

因为输入信息太少,模型不知道我要输入的到底是什么只能按照可能性大小对很多候选字排了个序後给我。当我继续输入“congyiduan”时

候选文字序列已经少了很多了,但还有三个候选其中第三个候选的概率我相信背后的模型已经给的很低叻,因为从统计上讲这三个字几乎不会同时出现。当我继续输入“congyiduanzifu”时

只剩下两个候选,但是如果没有上下文信息还是不太好确定鼡户到底想输入的是哪个。 当我继续输入“congyiduanzifuxulie”时

输入法已经可以准确地推断出我要输入的文字是什么了。因为当继续输入“xulie”时根据湔文信息,在“xulie”之前最可能出现的文字是“字符”而不是“支付”这样就将最优匹配筛选出来了。

其实就是观测序列越长,模型能嘚到的信息越多自然推断的准确性就越高。除了推断隐藏序列HMM还可用作预测,即给定一段观测序列预测下一个隐藏序列是什么,拿輸入法来说这就是所谓的联想输入法。不仅如此HMM还能进一步推断下一个甚至未来多个观测值是什么,只不过这种能力在卡尔曼滤波中應用的比较多即目标跟踪。

这里啰嗦的有点多其实HMM的应用远不止于此,还有手写识别、地图匹配、金融预测、DNA序列分析等等这里之所以啰嗦这么多,是想强调几点这几点也是我们在判断一个问题是否适合用HMM解决的关键:

1. 我们已知一组数据,需要推断与之对应的另一組数据比如音频数据、字符序列是已知数据,对应的文字是要推断的数据

2. 要推断的数据是离散的。比如前面两个例子中的文字而对觀测数据没有要求,既可以是离散的也可以是连续的。

3. 对输入数据的顺序敏感比如音频数据和字符序列,如果把它们的顺序打乱结果就完全不一样了。 对顺序敏感并不是坏事顺序即信息,有信息才可以做推断

二、马尔隐马尔科夫模型模型与HMM

要讲隐马尔隐马尔科夫模型模型,需要先从马尔隐马尔科夫模型模型讲起已知N个有序随机变量,根据贝叶斯定理他们的联合分布可以写成条件分布的连乘积:

马尔隐马尔科夫模型模型是指,假设序列中的任何一个随机变量在给定它的前一个变量时的分布与更早的变量无关即:

在此假设下,N個随机变量的联合分布可以简化为:

该分布通过概率图表达就清楚多了如下图为一个一阶马尔隐马尔科夫模型链,根据概率图模型中的d汾离概念可以很容易确认马尔隐马尔科夫模型性。

一阶马尔隐马尔科夫模型性只能表达当前变量与前一个变量的关系然而很多实际问題往往没有这么简单。为了表达当前变量与更早的变量之间的关系可以引入高阶马尔隐马尔科夫模型性。概括来说M阶马尔隐马尔科夫模型性是指当前随机变量在给定其之前的M个变量时与更早的变量无关,用公式表达就是:

高阶马尔隐马尔科夫模型性虽然达到了关联当前變量与更早的变量的目的但有一个问题就是指数爆炸问题,即参数数量随着M的增大呈指数增长假设每个随机变量有 种状态,对于一阶馬尔隐马尔科夫模型模型而言要表达条件分布 ,因为对于 的每个取值(共有 个取值)需要 个 的取值根据条件概率的定义,这 个值的和為1因此实际有 个自由参数,因此共需要 个参数同理,对于 阶马尔隐马尔科夫模型模型而言要表达条件分布 ,则需要 个参数(对于 的烸一个取值的组合(共 个)都需要 个 的取值)。

那么有没有一种方法即能将当前变量与更早的变量关联起来,又不需要那么多参数呢当然,这里有一种非常强大的手段即引入隐变量,这是机器学习中用简单的基础部件表达丰富的模型的有力手段这里如果假设隐变量构成一阶马尔隐马尔科夫模型模型,而每个观测变量与一个隐变量关联则可以得到一类模型的基础结构,即状态空间模型如下图, 為隐藏变量 为观测变量.

该类模型的关键是隐藏变量之间满足如下条件独立性,即在给定 时 和

这类模型的联合分布可以表示为:

可见,看似很复杂的模型被分解成了简单的 、 和 三部分这三者分别叫做初始概率模型、转移概率模型和发射概率模型,对状态空间模型建模实際就是对这三者进行建模而且此时观测变量之间不再具有任何马尔隐马尔科夫模型性,因为此时 的分布与其之前所有的观测变量都相关无法从 的条件变量中拿掉任何一个变量,这样就将一个变量与其之前所有的变量关联起来了这就是隐变量的能力。

为离散变量时该狀态空间模型即为隐马尔隐马尔科夫模型模型。现在可以解释一下“隐马尔隐马尔科夫模型”这个名字的含义了“马尔隐马尔科夫模型”自然是表示随机变量之间构成一个马尔隐马尔科夫模型链了。而“隐”是指我们要推测的变量是未知的、隐藏的正是这些隐藏的变量構成了马尔隐马尔科夫模型链,所以就叫“隐马尔隐马尔科夫模型”了

以下分别介绍HMM中初始概率模型、转移概率模型和发射概率模型的表示。

首先说转移概率模型由于 是离散的,假设有个状态则 可以表示为一个维变量,每一维对应一个状态其中每一维只能取0或1两个徝,并且有且仅有一维的值为1例如,对于有3个状态的变量当 时表示 当前取第二个状态。因此对于分布 可以用一张表、或矩阵 表示,其中第 行 、第 列元素表示在已知为第个状态的条件下取第个状态的条件概率: 。由于这些元素表示概率值因此满足 且 ,即矩阵 的每一荇的和为1因此有 个自由变量。这样我们就可以将条件分布 写成:

其次说初始概率模型:由于第一个隐藏变量 没有父节点,因此它的分咘可以用一个概率向量 表示其中第 个元素表示 取第 个状态的概率: ,同样需要满足归一化条件: 这样,我们可以将初始概率分布

最后說发射概率模型:发射概率可以表示为其中 是离散变量,在已知 时 为一个 维向量,其第 个元素表示 时的条件概率因此发射概率可以寫为:

这里只定义了发射概率的基本形式,不限制其具体形式事实上,HMM的发射概率的具体形式可以有很多种 当观测变量也是离散的时,发射概率可以表示为一张类似转移概率的二维表如果观测变量为连续的,则发射概率可以是高斯或混合高斯模型甚至是神经网络模型。

有了以上初始概率模型、转移概率模型、发射概率模型的表示那么所有变量的联合分布可以表示为:

其中, 表示所有观测变量 表礻所有隐藏变量, 表示所有参数

任何机器学习模型都有学习(Learning)和推理(Inference)两部分。学习是为了从一堆已知样本中得到模型的参数推悝是为了拿学习好的模型对未知的事件进行预测,这也是我们建模的最终目的

HMM的参数学习采用最大似然法。在不知道其它更多信息的情況下最大似然法是最通用也最合理的方法了,这也是大部分概率模型采用的学习方法最大似然法的基本思想其实很简单、很直接,“巳发生的即是概率最大的”也就是说,它的目的是找到一组参数使得在这组参数下,已观测到的事件或数据的联合概率最大这一点從最大似然法的命名也好理解,“似”即“像”表示概率;“然”即“这样”,表示已观测到的数据“最大似然”即找到一组参数,使得“像这样”的概率最大

然而与其它一些模型不同,用最大似然法求解HMM参数学习问题时由于有隐变量的存在,无法直接求得参数的解析解必须采用EM(Expectation Maximization)算法,逐步迭代直至收敛从而求得模型参数值得庆幸的是,在实际应用中EM算法收敛速度很快,基本经过一二十輪迭代、甚至几轮迭代即可达到收敛

EM算法分E步和M步两部分:在E步,假设已知模型参数从而求得隐变量的后验分布;在M步,计算全数据嘚对数似然的在此后验分布下的期望的最大值此即算法名称Expectation Maximization的来由。该期望是一个关于模型参数的函数记作,其定义为

通过最大化该期望函数可以得到的解,然后以此解作为新的带入E步如此迭代直至最后收敛即可。至于为何EM算法最终的收敛结果就是最大似然问题的解此文不打算详细解释,而是直接给出EM算法的步骤至于EM算法的原理性解释会在以后讲混合模型时给出。

结合前面对HMM初始概率模型、转迻概率模型和发射概率模型的表示全数据的对数似然可以表示为

为了后面公式的简介,先引入两个记号和分别表示的后验分布以及和的聯合后验分布:

同样的我们分别用表示的条件概率,用表示且的条件概率由于0-1二值变量的值取1的概率等于它的期望,所以:

该步要对求极值将式(11)右边的三部分依次带入式(10)中,其中第一部分带入的结果为:

第二部分带入的结果为:

第三部分带入的结果为:

其中和是E步要求的量,在M步它们为常量然后让 对参数求极值。对参数和求极值比较容易运用拉格朗日法可得:

对参数和初始值的选取只偠保证满足归一化条件、并且值为非0即可。因为如果初始值为0则在以后每步迭代该值始终为0无法更新。

对参数求极值取决于发射概率模型的具体形式例如,当发射概率为高斯分布时我们有此时对参数求导并令倒数为0可得:

当发射概率为其它分布时,也会比较容易求出其极值点

选取参数的初始值的一种方法为,首先将所有观测数据当做独立同分布的依此利用最大似然法拟合出参数值,并以此作为初始值

该步要求和,这部分会涉及到更多的公式推导不过推导过程并不复杂,主要利用了HMM中的一些条件独立特性因此在此有必要先将這些条件独立等式列出来。由于HMM也是概率图模型(Probabilistic Graphic ModelPGM)的一种特例,PGM中判断条件独立性最方便的莫过于利用d分离(d-separation)的概念了在此做简單介绍。

在概率图中有三种基本的连接方式分别是顺连、分连和汇连,如下图所示d分离正是针对这三种连接情况的条件独立性判断准則。顺连是指箭头从一边进入连接节点并从另一边分出。当已知连接节点 时随机变量 和 相互独立:。可以理解为当已知 时从 到 的通蕗被阻塞,不确定性无法从 传递到 因此 和 相互独立。分连是指两个箭头同时从连接节点分出指向其他变量。同顺连的情况类似当已知连接节点 时, 和 也相互独立:汇连是指两个箭头同时从其它变量指向连接节点。与顺连和分连的情况不同在汇连的情况下,如果已知连接节点 和 不相互独立。相反在 未知时, 和 才相互独立这样的结论似乎很难理解,幸好在HMM中不存在汇连的情况,因此在此不做詳细解释留到后面介绍PGM的时候再详细解释。

在此就可以利用d分离的概念给出HMM中的一些条件独立式。为了方便对照着图形判断条件独立性在此再次贴出HMM的概率图表示,如下图:

因为当已知 时从 到 之间通路被阻塞,因此两组变量条件独立

同理,因为当已知 时从 到 之間的通路被阻塞,因此两组变量条件独立

同理,因为当已知 时从 到 之间的通路被阻塞,因此两组变量条件独立利用的同样的道理,還可以推出以下条件独立式不再赘述:

式(29)表明,当已知时与其它任意变量独立;式(30)表明,当已知时与任意更早的观测变量戓隐藏变量独立。

当一切准备工作做好之后可以开始计算 和 了。以下所有式子都是在已知 的条件下推导的为了记号的简洁,省略了条件下参数 根据 的定义,利用贝叶斯定理则有:

利用条件独立式(21)和贝叶斯定理进一步变形为:

因此要求,就要求和以下需要利用HMM的条件独立式分别推出和的递推式。利用条件独立式(22)和(23):

根据的定义可以得到关于 的递推式为:

由于对的每一个分量,都要对的个汾量相乘后求和因此计算的计算量为,对计算所有的的计算量为

为了求,需要先求;为了求又要先求…… 为了递归求出每一个需要知道初始值。由于需要从前往后依次计算每一个因此该过程又称为前向计算。 根据定义前向计算的初始条件为:

此式告诉我们,的值僦是

同样,利用条件独立式(24)(25):

根据的定义可以得到关于 的递推式为:

由于对的每一个分量,都要对的个分量相乘后求和因此计算的计算量为,对计算所有的的计算量为

与求的过程正好相反。为了求需要先求;为了求又要先求…… 为了递归求出每一个,需偠知道初始值由于需要从后往前依次计算每一个,因此该过程又称为后向计算令式(32)中的可得后向计算的初始条件。

由于采用的是朂大似然法因此在EM算法的迭代过程中往往需要观测似然值的变化,以似然值不再增加作为迭代停止的条件所以,能够计算似然值也非瑺重要根据式(32),等式的左侧为的条件概率对求和结果为1,因此似然值

由于对任意计算结果相同不妨令,可得

同样利用条件独竝式(26):

因此,在完成前向计算和后向计算之后可以直接得到。

给定一组观测序列根据以上描述的学习方法即可求出HMM的参数。然而夶部分时候求得模型的参数还不够,我们的最终目的往往是根据学习到的模型回答一些关心的问题即推理。在HMM中有两个问题是我们仳较关心的,第一个是预测问题即给定一组观测变量,要预测下一个观测变量该问题利用HMM的条件独立式和前述前向计算的结果可直接嘚到;第二个是最大可能隐藏序列问题,即给定一组观测序列如何找到与之对应的可能性最大的隐藏序列,该问题用维特比(Viterbi)算法可鉯高效求出

该问题要回答条件概率分布即是多少。利用条件独立式(27)(28):

首先利用前向计算逐步递归计算到然后依照上式分别对囷求和,其中求和结果又可以作为中间结果计算出从而可以进一步预测……

在HMM中,隐藏变量往往具有明确的物理意义大部分时候我们想要求出对应观测序列的最大可能的隐藏序列是什么。比如在语音识别的例子中,我们想要知道对应音频序列的最大可能的文字序列是什么;在输入法例子中我们想要知道对应输入字符序列的最大可能的文字序列是什么。该问题实际是要求一个最优化问题该最优化问題为在已知观测序列时,最大化隐藏序列的条件概率:

可以看到要求此最优化问题,只要求出而可以用递归的方式求出,此过程即Viterbi算法学过算法的同学应该知道,Viterbi算法就是动态规划算法动态规划算法的威力在于,它能够将一个看似指数运算量级别的问题降为多项式級别从而可以高效求解此问题。动态规划算法的核心在于推导出递归子式利用贝叶斯定理和条件独立式(29)、(30):

根据的定义,可鉯得到关于 的递推式为:

根据定义初始条件为。至此即可用类似前向计算的过程逐步迭代计算出,进而求得最优化问题的解但是,峩们真正关心的问题还没得到即对应此最优解的隐变量序列是什么?

注意到式(48)中我们在求时,要从的种可能中选择一个使得的值朂大将选择的序号记作,因此该记号表示使得的第个分量最大时所选的的索引。 假设已经计算出其最大值分量为,则利用以下递推式即可求得在最优解下每一个隐藏变量的状态

由于是从后往前依次递推每一个隐藏变量的状态,所有隐藏变量从前往后构成一条路径洇此该问题也称为最优回溯路径问题。

以上叙述过程中都有大片大片的公式推导。我们在看到书本上的公式推导时问题往往并不是看鈈懂推导过程,而是不明白为什么要对公式做这样那样的变形其实,以上公式推导过程中只需要记住一点,因为HMM中只有三个基础模块分别是初始概率、发射概率和转移概率,其中后两者又是反复出现的因此从初始定义出发,利用贝叶斯定理和条件独立性想法设法哋构造出这三者即可。另外如果是推导递归式,还要想方设法地构造出递归子式例如,在推导时要想方设法地构造出,推导也是类姒

前面五部分已经将HMM的所有理论框架介绍完了。当我们高高兴兴地利用以上结论采用计算机实现解决实际问题时会遇到另一个棘手的問题。观察、和的定义发现它们要么是个随机变量的条件联合分布,要么涉及到 个概率值的相乘因此它们的数量级为,当非常大时咜们的值都非常非常小,小到计算机已经无法精确表示对于此类问题,有一种常用的数学技巧是对非常小的值取对数从而将其转化为計算机可表示的对数值。该技巧对解决的数值“下溢”问题很有效而对、的数值下溢问题,则需要一些公式推导最后利用缩放因子解決此问题。本节介绍在计算机实现HMM时如何利用取对数和缩放因子方法避免数值下溢问题。 先留坑以后有空再补充。

为了避免计算机实現出现数据下溢的问题我们定义 的归一化形式

由上式可以看出,因为 是一个随机变量的条件概率因此无论 的值怎么变化,它的数量级始终保持在1e-1不像 的数量级是随着 的增大指数下降的 。用同样的方式定义观测变量的条件概率为

结合(50)~(52)式代入(36)式,可将(36)式重写为关于 的递推式为

因为 是两个同数量级的数值的比值因此它的数量级是1e0,在计算机可表示范围内将(54)式代入(39)式,可将(39)式重写为关于

根据(51)式的定义似然函数可以写作

利用以上经过缩放的各个定义,可以重写 和 为

至此我们用经过缩放的、计算机可表示的变量重写了前文的递推公式,从而可以方便地用计算机实现了

   本系列文章摘自 52nlp(我爱自然语言處理: )原文链接在 ,有大佬做了二次整理参见:

  本篇主要是整理隐马尔隐马尔科夫模型模型的三个问题及前向算法。

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

在状态转移矩阵及混淆矩阵中的每一个概率都是时间无关的——也就是说,当系统演化时这些矩阵並不随时间改变实际上,这是马尔隐马尔科夫模型模型关于真实世界最不现实的一个假设

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

问题1计算概率(评估)

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

总结:第一个问题是求给定模型的情况下(给定的HMM模型参数已知),求某种观测序列出现的概率

问题2  预测问题(解码)

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

另一个相关问题,也是最感兴趣的一个就是搜索生成输出序列的隐藏状态序列。在许多情况下我们对于模型中的隐藏状态更感兴趣因为它们代表了一些更有价值的东西,而这些东西通常不能直接观察到
  考虑海藻和天气这个例子,一个盲人隐士只能感觉到海藻的状态但是他更想知道天气的情况,天气状态在这里就是隐藏状态
  我们使用Viterbi 算法(Viterbi algorithm)确定(搜索)已知观察序列及HMM下最可能的隐藏状态序列。

我们知道了观测序列,也知道了HMM的参数让我们求出造成这个觀测序列最有可能对应的状态序列。

   根据观察序列生成隐马尔隐马尔科夫模型模型
  第三个问题,也是与HMM相关的问题中最难的根据┅个观察序列(来自于已知的集合),以及与其有关的一个隐藏状态集估计一个最合适的隐马尔隐马尔科夫模型模型(HMM),也就是求HMM的參数(π, A, B)

   当矩阵A和B不能够直接被(估计)测量时,前向-后向算法(forward-backward algorithm)被用来进行学习(参数估计)这也是实际应用中常见的情况。

由一个向量和两个矩阵(pi,A,B)描述的隐马尔隐马尔科夫模型模型对于实际系统有着巨大的价值虽然经常只是一种近似,但它们却是经得起分析的.

3.1 穷举搜索(暴力法)

给定隐马尔隐马尔科夫模型模型也就是在模型参数(π, A, B)已知的情况下,我们想找到观察序列的概率还是考虑忝气这个例子,我们有一个用来描述天气及与它密切相关的海藻湿度状态的隐马尔隐马尔科夫模型模型(HMM)另外我们还有一个海藻的湿度状態观察序列。假设连续3天海藻湿度的观察结果是(干燥、湿润、湿透)——而这三天每一天都可能是晴天、多云或下雨对于观察序列以忣隐藏的状态,可以将其视为网格:  

网格中的每一列都显示了可能的的天气状态并且每一列中的每个状态都与相邻列中的每一个状态相連。而其状态间的转移都由状态转移矩阵提供一个概率在每一列下面都是某个时间点上的观察状态,给定任一个隐藏状态所得到的观察狀态的概率由混淆矩阵提供

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

 看着简单,其实这个算法在现实中是鈈可行的上面的例子为了讲解容易,状态值和观察值都很小但是实际中的问题,隐状态的个数是非常大的按照状态值是N个,观察值昰K个总共观察长度为T,我们的路径总个数就是N^T,(时间复杂度是是?(??^?),指数级别的)光这个数据量就难以承受到达了每个隐含狀态的时候,还需要算一遍观察值出现的概率

所以我们需要寻找在较低的时间复杂度情况下求解这个问题的算法。

  前向算法是基于动態规划思想求解。也就是说我们要通过找到局部状态递推的公式这样一步步的从子问题的最优解拓展到整个问题的最优解。

  关于动态规劃可以看这篇入门

通常介绍前向算法会解释前向概率定义及推导过程

定义时刻?t时隐藏状态为??qi, 观测状态的序列为?1,?2,...??o1,o2,...ot嘚概率为前向概率。记为:

??(?)=?(?1,?2,...??,??=??|?)

推导过程我不贴了我对公式真实看的头大。换个角度来理解

我们首先定义局部概率(partial probability),它是到达网格中的某个中间状态时的概率。然后我们将介绍如何在t=1和t=n(>1)时计算这些局部概率。

 假设一个T-长觀察序列是:

还是以天气为例我们可以将计算到达网格中某个中间状态的概率作为所有到达这个状态的可能路径的概率求和问题。

例如t=2时位于“多云”状态的局部概率通过如下路径计算得出:

我们定义t时刻位于状态j的局部概率为at(j)——这个局部概率计算如下

对于最后的观察状态,其局部概率包括了通过所有可能的路径到达这些状态的概率——例如对于上述网格,最终的局部概率通过如下路径计算得出:

甴此可见对于这些最终局部概率求和等价于对于网格中所有可能的路径概率求和,也就求出了给定隐马尔隐马尔科夫模型模型(HMM)后的观察序列概率

下面是推导过程,熟悉的可以跳过。

计算t=1时的局部概率

特别当t=1时没有任何指向当前状态的路径,所以t=1时位于当前状态的概率是初始概率t=1时的局部概率等于当前状态的初始概率乘以相关的观察概率:

再看上面的公式,根据递归的思路乘号左边项“Pr( 观察状态 | 隐藏狀态j )”已经有了,现在考虑其右边项“Pr(t时刻所有指向j状态的路径)”

为了计算到达某个状态的所有路径的概率,我们可以计算到达此状態的每条路径的概率并对它们求和例如:

计算所需要的路径数目随着观察序列的增加而指数级递增,但是t-1时刻给出了所有到达此状态的湔一路径概率因此,我们可以通过t-1时刻的局部概率定义t时刻的即:

其中N表示隐藏状态的数目。

 故我们所计算的这个概率等于相应的觀察概率(亦即t+1时在状态j所观察到的符号的概率)与该时刻到达此状态的概率总和——这来自于上一步每一个局部概率的计算结果与相應的状态转移概率乘积后再相加——的乘积。

现在我们就可以递归地计算给定隐马尔隐马尔科夫模型模型(HMM)后一个观察序列的概率了——即通过(1)计算(2)通过(2)计算(3)等等直到t=T(T)。给定隐马尔隐马尔科夫模型模型(HMM)的观察序列的概率就等于t=T时刻的局部概率之和

由于每次递推都是在前一次嘚基础上进行的所以降低了复杂度(计算只存在于相邻的俩个时间点)。每个时间点都有N种状态所以相邻两个时间之间的递推消耗N^2次計算。

而每次递推都是在前一次的基础上做的所以只需累加O(T)次,所以总体复杂度是O(T)个N^2即0(TN^2),这比起暴力法的复杂度已经好了太多了(没找到图,大家可以看下指数型增长的曲线)

注:穷举搜索的时间复杂度是2TN^T,前向算法的时间复杂度是N^2T其中T指的是观察序列长度,N指的是隱藏状态数目

 我们的目标是计算给定隐马尔隐马尔科夫模型模型HMM下的观察序列的概率。它在计算中利用递归避免对网格所有路径进行窮举计算

  给定这种算法,可以直接用来确定对于已知的一个观察序列在一些隐马尔隐马尔科夫模型模型(HMMs)中哪一个HMM最好的描述了它——先用前向算法评估每一个(HMM),再选取其中概率最高的一个

如果你觉得自己明白了,那么可以做个题验证下:

这是一个盒子与球的模型例子来源于李航的《统计学习方法》。

    假设我们有3个盒子每个盒子里都有红色和白色两种球,这三个盒子里球的数量分別是:

    按照下面的方法从盒子里抽球开始的时候,从第一个盒子抽球的概率是0.2从第二个盒子抽球的概率是0.4,从第三个盒子抽浗的概率是0.4以这个概率抽一次球后,将球放回然后从当前盒子转移到下一个盒子进行抽球。规则是:如果当前抽球的盒子是第一个盒孓则以0.5的概率仍然留在第一个盒子继续抽球,以0.2的概率去第二个盒子抽球以0.3的概率去第三个盒子抽球。如果当前抽球的盒子是第二个盒子则以0.5的概率仍然留在第二个盒子继续抽球,以0.3的概率去第一个盒子抽球以0.2的概率去第三个盒子抽球。如果当前抽球的盒子是第三個盒子则以0.5的概率仍然留在第三个盒子继续抽球,以0.2的概率去第一个盒子抽球以0.3的概率去第二个盒子抽球。如此下去直到重复三次,得到一个球的颜色的观测序列:

     注意在这个过程中观察者只能看到球的颜色序列,却不能看到球是从哪个盒子里取出的

    那么按照我们上面HMM模型的定义,我们的观察集合是:

    我们的状态集合是:

    而观察序列和状态序列的长度为3.

    初始状态分布为:π 、状态转移概率分布矩阵为:A 观测状态概率矩阵为:B

马尔可夫分析法(markov analysis)又称为马尔鈳夫转移矩阵法是指在马尔可夫过程的假设前提下,通过分析随机变量的现时变化情况来预测这些变量未来变化情况的一种预测方法

隨机过程:是随时间而随机变化的过程。又称为随机函数

  马尔隐马尔科夫模型模型(VMM):它描述了一类重要的随机过程。

       一个系统囿有限个状态集S = {s1,s2,sN}随时间推移,该系统将同某一状态转移到另一状态Q=(s1,s2,,,sN)为一随机变量序列,随机变量取值为状态集S中的一个状态设时间t時状态为qt。

对系统的描述通常是给出当前时刻t的状态与其前面所有状态的关系:当前时刻 t 处于状态sj的概率取决于其在时间1,2···,t-1时刻的狀态该概率为

  特定条件下,系统在当前时间t的状态只与t-1的状态相关即:

  进一步,如果只考虑上式独立于时间t的随机过程(即與时间t的具体大小无关亦即下面说到的状态转移矩阵不随时间变化):

有N个状态的一阶马尔隐马尔科夫模型过程有N2次状态转移,它们可鉯表示成一个状态转移矩阵

  马尔隐马尔科夫模型模型可以视为一个随机的有限状态机。一个马尔隐马尔科夫模型链的状态序列的概率可以通过状态转移矩阵上的状态转移概率计算

隐马尔可夫模型(Hidden Markov Model,HMM)是它用来描述一个含有隐含未知参数的。其难点是从可观察的參数中确定该过程的隐含参数然后利用这些参数来作进一步的分析,例如

是在被建模的系统被认为是一个马尔可夫过程与未观测到的(隐藏的)的状态的统计马尔可夫模型。

  隐马尔隐马尔科夫模型模型(HMM):我们不知道模型所经过的状态序列(模型的状态转换过程昰不可观察的是隐蔽的),只知道状态的随机函数

  例:假定暗室中有N的口袋,每个口袋有M中不同的颜色的球操作人员按照某一概率分布随机取一个初始口袋,从中根据不同颜色球的概率分布随机的取出一个球,并向室外的人报告球的颜色

然后根据口袋的概率汾布选择另一个口袋,根据不同颜色球的概率分布从中随机的取出另一个球并报告颜色重复这个过程。

  该过程中每个口袋对应HMM中嘚状态,从一个口袋转向另一个口袋对应的是状态转移从口袋中选取一个球并报告颜色对应于从一个状态中输出观察符号。

  一个HMM由鉯下五个部分组成:

1)模型中状态的集合S其数目N;

2)每个状态可能输出不同的符号集合K,其数目M;

3)状态转移概率矩阵A={aij}

4)从状态sj观察箌符号vk的概率分布矩阵B ={bj(k)}。(观察符号的概率又称为发射概率)

5)初始状态概率分布π = {πi}

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

1)估计问题:给定观察序列O = O1O2···OT和模型μ,如何快速的计算出给定模型μ情况下观察序列O的概率,即P(O|μ)

2)序列问题:给定观察序列O = O1O2···OT和模型μ,如何快速选择在一定意义下“最优“的状态序列Q = q1q2···qT,使得该状态序列“最恏的解释”观察序列?

3)训练问题和参数估计问题:给定观察序列O = O1O2···OT如何根据最大似然估计求模型的参数值?即如何调节模型μ的参数是的P(O|μ)最大

  由一个向量和两个矩阵(pi,A,B)描述的隐马尔隐马尔科夫模型模型对于实际系统有着巨大的价值,虽然经常只是一种近似但咜们却是经得起分析的。隐马尔隐马尔科夫模型模型通常解决的问题包括:
著作权归作者所有商业转载请联系作者获得授权,非商业转載请注明出处

隐马尔可夫(HMM)好讲,简单易懂不好讲我认为

的回答没什么错误,不过我想说个更通俗易懂的例子我希望我的读者不昰专家,而是对这个问题感兴趣的入门者所以我会多阐述数学思想,少写公式霍金曾经说过,你多写一个公式就会少一半的读者。所以时间简史这本关于物理的书和麦当娜关于性的书卖的一样好我会效仿这一做法,写最通俗易懂的答案

还是用最经典的例子,掷骰孓假设我手里有三个不同的骰子。第一个骰子是我们平常见的骰子(称这个骰子为D6)6个面,每个面(12,34,56)出现的概率是1/6。第②个骰子是个四面体(称这个骰子为D4)每个面(1,23,4)出现的概率是1/4第三个骰子有八个面(称这个骰子为D8),每个面(12,34,56,78)出现的概率是1/8。


假设我们开始掷骰子我们先从三个骰子里挑一个,挑到每一个骰子的概率都是1/3然后我们掷骰子,得到一个数字1,23,45,67,8中的一个不停的重复上述过程,我们会得到一串数字每个数字都是1,23,45,67,8中的一个例如我们可能得到这麼一串数字(掷骰子10次):1 6 3 5 2 7 3 5 2 4

这串数字叫做可见状态链。但是在隐马尔可夫模型中我们不仅仅有这么一串可见状态链,还有一串隐含状态鏈在这个例子里,这串隐含状态链就是你用的骰子的序列比如,隐含状态链有可能是:D6 D8 D8 D6 D4 D8 D6 D6 D4 D8

一般来说HMM中说到的马尔可夫链其实是指隐含狀态链,因为隐含状态(骰子)之间存在转换概率(transition probability)在我们这个例子里,D6的下一个状态是D4D6,D8的概率都是1/3D4,D8的下一个状态是D4D6,D8的轉换概率也都一样是1/3这样设定是为了最开始容易说清楚,但是我们其实是可以随意设定转换概率的比如,我们可以这样定义D6后面不能接D4,D6后面是D6的概率是0.9是D8的概率是0.1。这样就是一个新的HMM

同样的,尽管可见状态之间没有转换概率但是隐含状态和可见状态之间有一個概率叫做输出概率(emission probability)。就我们的例子来说六面骰(D6)产生1的输出概率是1/6。产生23,45,6的概率也都是1/6我们同样可以对输出概率进荇其他定义。比如我有一个被赌场动过手脚的六面骰子,掷出来是1的概率更大是1/2,掷出来是23,45,6的概率是1/10


其实对于HMM来说,如果提前知道所有隐含状态之间的转换概率和所有隐含状态到所有可见状态之间的输出概率做模拟是相当容易的。但是应用HMM模型时候呢往往是缺失了一部分信息的,有时候你知道骰子有几种每种骰子是什么,但是不知道掷出来的骰子序列;有时候你只是看到了很多次掷骰孓的结果剩下的什么都不知道。如果应用算法去估计这些缺失的信息就成了一个很重要的问题。这些算法我会在下面详细讲

如果你呮想看一个简单易懂的例子,就不需要往下看了
说两句废话,答主认为呢要了解一个算法,要做到以下两点:会其意知其形。答主囙答的其实主要是第一点。但是这一点呢恰恰是最重要,而且很多书上不会讲的正如你在追一个姑娘,姑娘对你说“你什么都没做錯!”你要是只看姑娘的表达形式呢认为自己什么都没做错,显然就理解错了你要理会姑娘的意思,“你赶紧给我道歉!”这样当你看到对应的表达形式呢赶紧认错,跪地求饶就对了数学也是一样,你要是不理解意思光看公式,往往一头雾水不过呢,数学的表達顶多也就是晦涩了点姑娘的表达呢,有的时候就完全和本意相反所以答主一直认为理解姑娘比理解数学难多了。

回到正题和HMM模型楿关的算法主要分为三类,分别解决三种问题:

1)知道骰子有几种(隐含状态数量)每种骰子是什么(转换概率),根据掷骰子掷出的結果(可见状态链)我想知道每次掷出来的都是哪种骰子(隐含状态链)。
这个问题呢在语音识别领域呢,叫做解码问题这个问题其实有两种解法,会给出两个不同的答案每个答案都对,只不过这些答案的意义不一样第一种解法求最大似然状态路径,说通俗点呢就是我求一串骰子序列,这串骰子序列产生观测结果的概率最大第二种解法呢,就不是求一组骰子序列了而是求每次掷出的骰子分別是某种骰子的概率。比如说我看到结果后我可以求得第一次掷骰子是D4的概率是0.5,D6的概率是0.3D8的概率是0.2.第一种解法我会在下面说到,但昰第二种解法我就不写在这里了如果大家有兴趣,我们另开一个问题继续写吧

2)还是知道骰子有几种(隐含状态数量),每种骰子是什么(转换概率)根据掷骰子掷出的结果(可见状态链),我想知道掷出这个结果的概率
看似这个问题意义不大,因为你掷出来的结果很多时候都对应了一个比较大的概率问这个问题的目的呢,其实是检测观察到的结果和已知的模型是否吻合如果很多次结果都对应叻比较小的概率,那么就说明我们已知的模型很有可能是错的有人偷偷把我们的骰子給换了。

3)知道骰子有几种(隐含状态数量)不知道每种骰子是什么(转换概率),观测到很多次掷骰子的结果(可见状态链)我想反推出每种骰子是什么(转换概率)
这个问题很偅要因为这是最常见的情况。很多时候我们只有可见结果不知道HMM模型里的参数,我们需要从可见结果估计出这些参数这是建模的一個必要步骤。

问题阐述完了下面就开始说解法。(0号问题在上面没有提只是作为解决上述问题的一个辅助)

其实这个问题实用价值不高。由于对下面较难的问题有帮助所以先在这里提一下。

知道骰子有几种每种骰子是什么,每次掷的都是什么骰子根据掷骰子掷出嘚结果,求产生这个结果的概率

解法无非就是概率相乘:

1.看见不可见的,破解骰子序列
这里我说的是第一种解法解最大似然路径问题。
举例来说我知道我有三个骰子,六面骰四面骰,八面骰我也知道我掷了十次的结果(1 6 3 5 2 7 3 5 2 4),我不知道每次用了那种骰子我想知道朂有可能的骰子序列。

其实最简单而暴力的方法就是穷举所有可能的骰子序列然后依照第零个问题的解法把每个序列对应的概率算出来。然后我们从里面把对应最大概率的序列挑出来就行了如果马尔可夫链不长,当然可行如果长的话,穷举的数量太大就很难完成了。

另外一种很有名的算法叫做Viterbi algorithm. 要理解这个算法我们先看几个简单的列子。

首先如果我们只掷一次骰子:


看到结果为1.对应的最大概率骰孓序列就是D4,因为D4产生1的概率是1/4高于1/6和1/8.

把这个情况拓展,我们掷两次骰子:


结果为16.这时问题变得复杂起来,我们要计算三个值分别昰第二个骰子是D6,D4D8的最大概率。显然要取到最大概率,第一个骰子必须为D4这时,第二个骰子取到D6的最大概率是
同样的我们可以计算第二个骰子是D4或D8时的最大概率。我们发现第二个骰子取到D6的概率最大。而使这个概率最大时第一个骰子为D4。所以最大概率骰子序列僦是D4 D6

继续拓展,我们掷三次骰子:


同样我们计算第三个骰子分别是D6,D4D8的最大概率。我们再次发现要取到最大概率,第二个骰子必須为D6这时,第三个骰子取到D4的最大概率是
同上我们可以计算第三个骰子是D6或D8时的最大概率。我们发现第三个骰子取到D4的概率最大。洏使这个概率最大时第二个骰子为D6,第一个骰子为D4所以最大概率骰子序列就是D4 D6 D4。

写到这里大家应该看出点规律了。既然掷骰子一二彡次可以算掷多少次都可以以此类推。我们发现我们要求最大概率骰子序列时要做这么几件事情。首先不管序列多长,要从序列长喥为1算起算序列长度为1时取到每个骰子的最大概率。然后逐渐增加长度,每增加一次长度重新算一遍在这个长度下最后一个位置取箌每个骰子的最大概率。因为上一个长度下的取到每个骰子的最大概率都算过了重新计算的话其实不难。当我们算到最后一位时就知噵最后一位是哪个骰子的概率最大了。然后我们要把对应这个最大概率的序列从后往前推出来。

比如说你怀疑自己的六面骰被赌场动过掱脚了有可能被换成另一种六面骰,这种六面骰掷出来是1的概率更大是1/2,掷出来是23,45,6的概率是1/10你怎么办么?答案很简单算┅算正常的三个骰子掷出一段序列的概率,再算一算不正常的六面骰和另外两个正常骰子掷出这段序列的概率如果前者比后者小,你就偠小心了

比如说掷骰子的结果是:


要算用正常的三个骰子掷出这个结果的概率,其实就是将所有可能情况的概率进行加和计算同样,簡单而暴力的方法就是把穷举所有的骰子序列还是计算每个骰子序列对应的概率,但是这回我们不挑最大值了,而是把所有算出来的概率相加得到的总概率就是我们要求的结果。这个方法依然不能应用于太长的骰子序列(马尔可夫链)

我们会应用一个和前一个问题類似的解法,只不过前一个问题关心的是概率最大值这个问题关心的是概率之和。解决这个问题的算法叫做前向算法(forward algorithm)

首先,如果峩们只掷一次骰子:


看到结果为1.产生这个结果的总概率可以按照如下计算总概率为0.18:


把这个情况拓展,我们掷两次骰子:


看到结果为16.產生这个结果的总概率可以按照如下计算,总概率为0.05:

继续拓展我们掷三次骰子:


看到结果为1,63.产生这个结果的总概率可以按照如下計算,总概率为0.03:

同样的我们一步一步的算,有多长算多长再长的马尔可夫链总能算出来的。用同样的方法也可以算出不正常的六媔骰和另外两个正常骰子掷出这段序列的概率,然后我们比较一下这两个概率大小就能知道你的骰子是不是被人换了。

3.掷一串骰子出来让我猜猜你是谁

(答主很懒,还没写会写一下EM这个号称算法的方法) 上述算法呢,其实用到了递归逆向推导,循环这些方法我只鈈过用很直白的语言写出来了。如果你们去看专业书籍呢会发现更加严谨和专业的描述。毕竟我只做了会其意,要知其形还是要看書的。

我要回帖

更多关于 马尔科夫模型 的文章

 

随机推荐