打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
下雨天到底要不要打仗?极简图解入门隐马尔科夫模型

「加一个公式,少一个读者。」

——霍金

被封面骗进来的各位一定很好奇我们这次到底要讲什么?

相信我,如果你能够耐心看完这篇文章,一定会发现自己真是一个非常有毅力的人~~~呵呵。

言归正传,今天我们要给大家科普一下机器学习、量化投资里面热门的不得了的隐马尔科夫模型(Hidden Markov Model,HMM)到底是个什么鬼。

你知道据说马上就要取代人工翻译的机器翻译很多都是用隐马尔科夫模型做的吗?

你知道很多APP软件之所以能听懂你的话就是靠隐马尔科夫模型做的语音识别吗?

你知道身价长年位列全球对冲基金经理年度收益榜首位的吉姆·西蒙斯据说也是靠隐马尔可夫模型发家致富赚了17亿(注意,美元)的吗?

(什么?没听说过他?去看我们以前的文章!去,现在就去!)

吉姆·西蒙斯

不废话了,我们开始吧。

我们先来认识一下什么叫马尔科夫链

(以下例子一切从简,不要问我为什么假设的那么简单,因为假设的复杂一点不但你看不懂连我都看不懂。。。)

首先我要解释我为什么要放这张封面,原因是上周我去看了《血战钢锯岭》(这和隐马尔科夫有毛关系?继续看)。

然后我立刻对太平洋战争产生了浓厚的兴趣(注意注意,我是说热爱历史不是热爱战争,大家三观要正)。。。

于是我决定强行为硫磺岛战役刷一下存在感,接下来我们关于隐马尔可夫模型的例子就以硫磺岛为舞台展开上。

假设硫磺岛上一共只有三种天气情况:晴天阴天雨天

并且第二天的天气只和第一天的天气有关。不明白?看图:

这张图的意思是如果今天是晴天,那么明天会有10%的可能下雨,50%的可能是阴天,40%的可能还是晴天。

但是如果今天阴天,那么明天就有40%的可能会下雨,30%的可能是还是阴天,然后30%的可能是变成晴天。

同样,如果今天是雨天,那么明天的天气到底是什么又是另外一种概率变化了。

综上所述翻译成人话还是那句话,明天的天气由今天的天气决定

把这个天气之间互相转换的概率写成矩阵的样子就是这样。

我们把每天的天气情况认为是一种状态(晴天状态,阴天状态,雨天状态)的话,这个矩阵就称之为状态转移概率矩阵,表示天气之间的互相转换。

比如我想预测连续三天内的天气状态,就可以用这样的图表示:

这张图说明每一种状态都是由前一天三种状态转换的叠加。比如请看第二天出现晴天的可能就是由第一天的

晴天——晴天(橙线)

阴天——晴天(橙线)

雨天——晴天(橙线)

三种概率的总和(“——”表示状态的转换)。

像这种当前状态只和前一个状态相关的连续状态转换过程,就可以理解为一条马尔科夫链了。

好,知道了天气是如何变化的以后,我们继续硫磺岛上的故事。

战争时期么,所以岛上的美国大兵们每天只做两件事:打仗或者休息

至于他们到底是打仗还是休息不是看心情,而是看天气

(喂,不要吐槽我的设定!你去看看电视里的抗日剧比我的设定脑残多了。。。)

如果岛上的天气是晴天的话,太阳比较好,美军想晒晒太阳,所以他们有40%的可能会去打仗,而60%的可能会选择休息。

(再说一遍,不要和我辩论历史,这都是我编的例子好么。。。)

如果碰到阴天,难得没有太阳也没有下雨,这可是打仗的好机会啊,所以他们有70%的可能会去打仗,而30%会休息。

如果遇到雨天,大家都懂,雨天总是让人心情郁闷,干什么都无所谓,所以美军要么会去打打日本人消磨时间,要么因为雨太大而选择休息,两者都是50%的可能。

上面这个天气和行动之间的概率关系也可以写成一个矩阵,我们叫它观察矩阵

而“休息”、“打仗”这两个可以直接观察到的行为我们称之为现象。

到这里,我们先来总结一下我们到底知道了些什么。

  1. 岛上每天的天气变化(晴天,阴天,雨天)是一条马尔科夫链,天气状态之间的转换由转移概率矩阵决定。

  2. 每天的天气决定了美军的行动(打仗,休息),不同天气对行动的影响由观察矩阵决定。

好了,如果理解了这些基础知识,我们就可以进入正题了。

当时日本军队中有个司令,连续窝在山洞里睡了三天。他醒过来后开始检查士兵人数,结果发现少了很多人,于是他就问身边的秘书:这些人去哪里了?是不是逃走了啊?

秘书说:不是,这些士兵被美国人打死了。

第一天,美国人在睡大觉,于是我们也睡大觉。

但是没想到第二天,美国人竟然打过来了,而我们还在睡大觉,于是很多士兵就被打死了。

打完以后第三天,也许是打够了,美国人继续睡大觉。

司令听完后,并不相信秘书的话。

他想,秘书说士兵在第二天被美国人打死了,但是说不定这三天美国人都在睡大觉,而士兵其实是逃跑了。

于是学过马尔科夫模型又数学不错又碰巧知道那么多乱七八糟天气转移概率和美军行动的观察概率的司令觉得,我要亲自算一算,秘书说的事情是不是靠谱。

(不要问我这个司令为什么知道那么多和他为什么吃饱了撑着非要算这个模型。。。)

按照秘书的说法,这三天里,美军的行动是:休息,打仗,休息

司令记得他在睡觉前看了看窗外,所以他知道第一天的天气情况是晴天(100%的晴天,0%的阴天,0%的雨天),也就是说第一天的天气状态是[1,0,0]。

所以只要把天气状态乘以对应的休息的概率,

晴天——休息(1×0.6)

阴天——休息(0×0.3)

雨天——休息(0×0.5)

注意看图(从现在开始请仔细看图中的数字是如何计算的):

我们把这样计算的出来的概率叫做前向概率α,1表示第一天。

知道了第一天休息的概率后,我们开始计算第二天打仗的概率。

根据天气转换模型,我们知道第二天的天气是由第一天决定的,于是我们先计算第二天天气的变化。

如下图所示,因为我们已经计算出第一天休息的概率是 [0.6,0,0],所以通过状态转移矩阵,分别计算它们转换为晴天的概率,然后相加起来就是总的晴天的概率。

不理解的话仔细看图中的计算方法:晴天——晴天(0.6×0.4)+阴天——晴天(0×0.3)+雨天——晴天(0×0.2)=总的转换为晴天的概率(0.24)。

同理,我们可以计算它们分别转换成阴天和雨天的概率,这样我们就得到到了第二天天气转换后的概率:

[0.24,0.3,0.06]

然后根据第二天是打仗的行动,和第一天计算休息的时候一样,我们把上述概率到实现打仗这个行为的概率也分别计算:

最后就能得到第一天休息第二天打仗的概率:

★需要注意的是,这里,第二天打仗的概率(α2)不单单是指第二天打仗这一天一个行为,而是包含了第一天休息然后第二天打仗的一个连续行为的概率。

之后重复之前的一步,根据状态转移矩阵计算第三天的天气情况:

然后根据第三天是休息这个行为,继续计算每种天气情况下休息的概率得到α3:

再解释一下,α3中有3个概率,分别表示晴天——休息的概率(0.06444),阴天——休息的概率(0.0378),雨天——休息的概率(0.0513)。

最后把三种天气状态下计算出来的结果相加,就得到了最终概率,这个概率表示:美军第一天休息,第二天打仗,第三天休息的概率。

这样司令就可以根据之前的经验来判断这个概率是不是合理,秘书有没有骗他。

如果大家不容易理解的话可以这样想,假设这个概率计算出来很小很小只有0.0000000001,就说明美军第一天休息第二天打仗第三天休息的这个行为基本不可能发生,所以显然秘书在骗他。

总之我们举这个例子是为了说明:在已经知道了状态转移概率,和观察概率(也就是已知这个隐马尔可夫模型的所有参数),就可以计算得到出现某种观察现象的可能性。

比如你可以计算美军连续一个月打仗的可能性(打仗,打仗,打仗.....)。

这就是隐马尔可夫模型主要处理的三类问题中的第一类:预测出现某种结果的可能性。

刚才我们通过从初始状态(第一天是晴天)开始,计算第二天的状态,然后计算第三天的状态,得到了最终概率,这种从第一天开始逐步迭代的算法叫做前向算法

有前向算法,当然还有后向算法。

至于后向算法。。。只可意会不可言传,当初看了网上的各种科普我都没明白,然后有天突然就顿悟了。

好了,接下来的内容,请自行选择看不看。

我就按照个人理解来给你们说说后向算法和前向算法到底是个什么不可描述的关系。

首先请复习一下,我们之前是如何通过一步步迭代计算出α1,α2,α3的。

提示:1. 初始状态×观察矩阵;2. 把1的结果×转移概率矩阵×观察矩阵;3. 重复2

所以如果我们假设对于连续出现i个观察现象(在上面的例子中,i=3,因为是3天的行为:休息,打仗,休息)的概率是A,那么最后一个状态的 αi(就像我们之前计算的α3)就是我们要计算的最终概率A,我们把 αi称为前向概率

好了,我们现在开始定义后向概率(注意这两个字:定义!!!)βiβi表示如果我知道了当前状态 αi,那么总概率A就等于两者的乘积。

我承认这句话不是人话,我们还是用前面的例子说明。

我们已经计算出 α3 就是第一天休息,第二天打仗,第三天休息的概率了是吧,但是如果我只计算到 α2,也就是说我刚计算完第二天打仗的概率还来不及计算第三天,但是如果此时我已经知道了对应的 β2,我不用继续计算 α2 就可以知道最终结果。

A=α2×β2

也就是说,β定义为α的互补概率,对于一个长度为 i 的观察现象序列,两者的乘积就等于出现这个现象序列的概率。

所以:

也就是说之前例子中计算得到的 α1,α2,α3都有对应的 β1,β2,β3,

使得:

所以一般用后向算法计算的时候,都会设定初始 β=1。

很多人解释说是因为后面没有现象了所以当然等于1。

当年我死活听不懂这句话,什么叫后面没有了,这是什么鬼话?

(好吧,估计有更多的人觉得我写的才是鬼话。。。)

总之我是这样理解的,还是举之前的三种观察现象的例子(休息,打仗,休息),因为最后一刻的总概率就是α3,所以β3当然等于1。

(注意β的计算是从末尾的β3,β2,β1逆向开始的,β3是初始值。)

再次回顾,还记得我们是怎么计算 αi 的吗?

我们先计算根据初始状态计算 α1,然后把 α1×天气的转移概率×观察概率得到新的α2,然后再把 α2×天气的转移概率×观察概率得到 α3。

所以 α2 和 α3 之间其实只差了×天气的转移概率×观察概率。

根据这个分析,我们发现:

最终我们就得到了 β的迭代计算公式。

不理解的话我们还是直接用计算说明吧。

根据之前的解释,大家应该可以理解初始的 β3=[1,1,1]。由于是后向算法,所以想当然是逆向计算,第三天休息——第二天打仗——第一天休息(是逆的,逆的!)

用转移概率矩阵的每一行乘以观察概率中对应现象的列,最后乘以前一状态的β:转移概率× 观察概率 ×β3,得到新的β2。

请仔细看图上的计算方法!

同理,得到 β2以后,我们用相同的方法计算β1。

得到 β1以后,根据初始条件(你会发现其实就是我们之前计算的α1),就可以得到最终结果了。

显然和第一次计算出来是一样的(废话,当然是一样的,不然就是错了)。

如果你高兴,你可以试试看用之前计算的α2 去计算α2×β2的结果,你会发现还是0.15354这个概率,再一次说明:

讲了那么多你肯定要问,有了简单明了的前向算法,我干嘛还要什么后向算法?

因为目前这个例子,我们只是在已知模型参数(转移概率,观察概率)的情况下,预测观察现象序列出现的可能性。

我说过,这是隐马尔科夫模型处理的第一类问题。

而隐马尔科夫模型一共可以处理三类问题,第二类是寻找最佳概率,其实和预测概率差不多,你等下就可以看到。

第三类问题其实才是隐马尔科夫模型的精髓,就是你在不知道转移概率,不知道观察概率,只能看到观察现象的条件下,反过来推测转移概率和观察概率。

这就是隐马尔科夫模型在机器学习的精华。

然而要解决这个问题。。。

你就要用到前向概率和后向概率了

这个问题比较复杂我们下次再讲,我们还是先解决直观的问题。

现在我们来看一下隐马尔科夫模型的第二类应用,寻找最优概率状态。

还是用之前的例子,如果你看懂了计算过程你就应该发现我们计算得到的最终概率0.15354是各种天气状态混合下,休息打仗休息的概率。

(请看计算最后一步的α3是把三种天气——休息的概率相加的结果。)

假设之前那位日本司令除了负责打仗以外还要负责记录每天的天气,但是他连续睡了三天,这三天的天气根本不知道怎么办?

不要问我他为什么还要记录天气!

不要问我他为什么不去问别人天气到底是怎么样的!

因为作者我规定:他的角色设定就是要记录天气但是又不能问别人!

总之就是司令连睡了三天,完全不知道这三天的天气,但是他从秘书那里知道这三天里美军的行动(这次他相信秘书),而且他依然知道那堆岛上的天气转移概率和天气影响行动的观察概率,于是他就可以计算出产生“休息打仗休息”这一行为所对应的最可能的天气状态。

用人话说,总有一个连续三天的天气状态(也许是下雨下雨下雨,也许是晴天阴天下雨。。。)能够让“休息打仗休息”这些行为发生的可能性最大。

所以处理这类问题也叫做“解码”,一般使用维特比算法(viterbi)处理。

什么什么算法听起来是不是很烦?

没关系,我给你看几张图你就立刻懂了。

首先,大家还记得这张图吗?

我要再唠叨一遍,这张图的意思就是说当前状态中的每一个分量都是由前一个状态的三个分量贡献的叠加而来。

继续说人话,就是比如第二天的晴天出现的概率是第一天的晴天——晴天,阴天——晴天,雨天——晴天的概率总和。

维特比算法就是一种动态规划寻找最短路径的过程,比如我们刚才说的第二天的晴天是由前一天的三种天气转换而来的,那么其中一定有一条转换路径是概率最大的。

我们来回顾下这张图,看到吗?晴天的概率是三条路径的总和。

我们继续用计算说明问题,这次我们把初始状态变一变,不再是明确是晴天,而是一个初始的天气概率,就是说我们也不知道第一天天气到底是什么,如图 ,初始状态是[0.3,0.4,0.3]。

然后老方法计算第一天休息的概率得到[0.18,0.12,0.15]。

第二天天气状态要进行转换了,这次我不做叠加了,我们分别计算第一天的不同天气状态转换到第二天的晴天、阴天、雨天,然后用其中最大的作为转换后的天气状态,然后记住这些最大概率是从哪个天气转换来的。

也许我说的话太绕,所以还是直接看图:

再次解释上图,比如我们可以发现从前一天的晴天——第二天的晴天的概率最大,而雨天是从第一天的阴天——第二天的雨天的概率最大。

然后用这些最大概率值,计算第二天打仗的概率,方法和之前一样。

注意!下图中括号内的晴天晴天阴天并不是笔误,而是说明第二天的晴天是由前一天的晴天转换而来,第二天的阴天也是由第一天的晴天转换而来,而第三天的雨天是由第一天的阴天转换而来。(因为是要最大概率!)

之后再进行第三天的天气转换,同样是分别计算第二天的三种天气转换成第三天的天气,然后在其中选取概率最大的作为当天的天气情况。

你可以看到第三的晴天、阴天,雨天都是由第二天的阴天转换过来的概率最大。

最后我们根据天气状态计算第三天休息的概率:

结果发现第三天是阴天的话,整体的概率,也就是我们要求的概率是最大的,结果是0.0126。

于是我们就从这个雨天这个最大概率

还是不理解的话,我们来看一张总的路径转移图:

我们看第三天,如果整体概率最大的话,那么第三天的天气就是雨天,这个雨天是从第二天的阴天转换过来的,而第二天的阴天是由第一天的晴天转换过来的。

所以“第一天晴天,第二天阴天,第三天雨天”是最可能让美国大兵们实现“休息打仗休息”行为的天气组合。

至此,日本司令就可以估计在他睡觉的这三天里,天气分别是:晴天,阴天,雨天。

这就是用维特比算法寻找最优路径,换句话说,就是在计算过程中,选择状态转换后概率最大的那条路径。

这就是隐马尔科夫模型能处理的第二类问题。

今天我们就讲到这里。能看到最后的小伙伴们都是真爱,请给自己点赞。

能力有限很多细节什么的表达不清楚,不过还是希望大家可以稍微学到点东西,了解个大概吧。

每天学点知识,离梦想更近一步!

加油!

END


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
隐马尔科夫模型(Hidden Markov Models) 系列之一
隐马尔科夫模型HMM自学 (2)
养生保健看天气 晴天补钙雨天净肺
第6期 | 一道有意思的数列不等式证明
什么是马尔可夫链(Markov Chains)?
各种晴天雨天阴天用英语怎样说呢?
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服