三胖导弹能否打偏,主要取决这个算法

2017 年 9 月 19 日 凡人机器学习

在遥远的东方,渤海湾往东再走一点,有这样一个民族,他们有一个伟大的领袖,他的名字叫“河蟹”。“河蟹”有一个爱好就是扔导弹,今天我们就来讨论下这个导弹发射准确性的问题,主要取决一个算法—马尔科夫链。关于马尔科夫链的八卦大家可以自行上网搜索,比如冷战的时候苏联的导弹如何牛逼之类的,都是因为马尔科夫。


今天我们摘取一部分《机器学习实践应用》中的关于隐马尔科夫的片段,给大家介绍下这个算法,算法有点绕,可能得认真跟着走一遍就了解了,可以脑子里模仿导弹的行驶路径。


隐马尔科夫(HMM)主要可以用来解3种基本问题:评估问题(Forward-backward算法)、解码问题(Viterbi算法)、学习问题(Baum-Welch算法)。这3种问题的区分主要是依赖于算法的输入,我们可以把HMM算法模型输入分为五元组.

  • InitStatus:初始状态集合。

  • StatusSet:状态值集合。

  • ObservedSet:观察值集合。

  • TransProbMatrix:转移概率矩阵。

  • EmitProbMatrix:发射概率矩阵。

解码问题的本质上是寻找最优的隐状态序列,通常是利用Viterbi算法来解,Viterbi算法是已知InitStatusObservedSetTransProbMatrixEmitProbMatrixsi,求解StatusSet的方法。Viterbi算法的理论是:下一步的状态会依赖前一步的状态和当前可观察的状态。下面看一下具体的Viterbi算法的推导过程。


为了更生动的表示算法的意义,我们采取一个生活中的场景进行具体的数值推导。假设有一个人B,他有3种状态分别是笑、无表情、哭,通过观察他的表情推测出他的隐含状态:高兴或者不高兴。这里假设我们的转移概率矩阵和发射概率矩阵等都是经过训练得到的最终结果(具体数值表示概率值),我们看下具体的推导过程是怎样实现的。

1 输入的5项式结果

  • 首先看下初始状态,InitStatus的两种状态:InitStatus={高兴:0.6,不高兴:0.4}

  • 隐含的心情状态,StatusSet={高兴、不高兴}

  • 观察到的状态,ObservedSet={笑,无表情,哭}

  • 转移概率矩阵,TransProbMatrix=

    ,具体的含义是高兴-》不高兴的概率P(不高兴|高兴)=0.4,高兴-》高兴的概率是P(高兴|高兴)=0.6,不高兴-》高兴的概率P(高兴|不高兴)=0.7,不高兴-》不高兴的概率P(不高兴|不高兴)=0.3

  • 在相应心情状况下的表情概率,EmitProbMatrix=

这个矩阵的具体含义是高兴心情下的状态概率:

{高兴:P()=0.6P(无表情)=0.3P()=0.1}

不高兴状态下的概率:

{不高兴:P()=0.2P(无表情)=0.2P()=0.6}


(2 具体推导

假设我们观察到的B最近3天的表情分别是:笑、无表情、哭,我们来通过Viterbi算法推导下B3天的心情是怎样的。

  • 1天的心情:由初始状态InitStatus得到,P(高兴)=0.6P(不高兴)=0.4,这个是初始值。因为第一天的表情的观察状态是“笑”。所以第1天的心情:

P(高兴)=P(|高兴)*P(高兴|初始状态)=0.6*0.6=0.36

P(不高兴)=P(|不高兴)*P(不高兴|初始状态)=0.2*0.4=0.08

这里应用到了发射概率矩阵,第1天的P(高兴)> P(不高兴),所以第1天的心情是高兴的可能性比较大。

  • 现在来推算第2天的状况:第2天的表情是“无表情”,第2天的状态有4种可能:

P(前一天高兴,今天高兴)=P(前一天高兴)*P(高兴->高兴)*P(无表情|高兴)=0.36*0.6*0.3=0.0648

P(前一天高兴,今天不高兴)=P(前一天高兴)*P(高兴->不高兴)*P(无表情|不高兴)=0.36*0.4*0.2=0.0288

P(前一天不高兴,今天高兴)=P(前一天不高兴)*P(不高兴->高兴)*P(无表情|高兴)=0.08*0.7*0.3=0.0168

P(前一天不高兴,今天不高兴)=P(前一天高兴)*P(不高兴->不高兴)*P(无表情|不高兴)=0.08*0.3*0.2=0.0048

这里涉及到了TransProbMatrixEmitProbMatrix,计算的结论是第2B的心情是高兴的可能性最大,因为结果是今天高兴的两个概率值之和较大。

  • 下面来看下第3天的情况,第3天我们观测到B的表情是“哭”,跟上一天的推导类似,第3天的公式如下:

P(前一天高兴,今天高兴)=P(前一天高兴)*P(高兴->高兴)*P(|高兴)= (0.0648+0.0168)*0.6*0.1=0.004896

P(前一天高兴,今天不高兴)=P(前一天高兴)*P(高兴->不高兴)*P(|不高兴)= (0.0648+0.0168) *0.4*0.6=0.019584

P(前一天不高兴,今天高兴)=P(前一天不高兴)*P(不高兴->高兴)*P(|高兴)=( 0.0288+0.0048)*0.7*0.1=0.002352

P(前一天不高兴,今天不高兴)=P(前一天高兴)*P(不高兴->不高兴)*P(|不高兴)= ( 0.0288+0.0048)*0.3*0.6=0.006048

所以通过计算可以推断出,第三天B的心情是不高兴,因为推导出今天不高兴的两个概率的和较大。


最终,通过3天的表情:笑-》无表情-》哭,可以推出他的心情是高兴-》高兴-》不高兴。以上是通过一个日常生活中的案例来描述如何利用InitStatusStatusSetObservedSetTransProbMatrixEmitProbMatrix5个输入,通过Viterbi算法进行推导,对隐藏的状态实现概率层面的推理。






登录查看更多
0

相关内容

【经典书】概率统计导论第五版,730页pdf
专知会员服务
237+阅读 · 2020年7月28日
专知会员服务
139+阅读 · 2020年5月19日
麻省理工学院MIT-ICLR2020《神经网络能推断出什么?》
专知会员服务
50+阅读 · 2020年2月19日
【综述】自动驾驶领域中的强化学习,附18页论文下载
专知会员服务
172+阅读 · 2020年2月8日
深度强化学习策略梯度教程,53页ppt
专知会员服务
178+阅读 · 2020年2月1日
100行Python代码,轻松搞定神经网络
大数据文摘
4+阅读 · 2019年5月2日
【泡泡读者来稿】VINS 论文推导及代码解析(三)
泡泡机器人SLAM
30+阅读 · 2019年3月16日
万字长文 | 10种传统机器学习算法,阿里工程师总结 | 下
机器学习算法与Python学习
3+阅读 · 2019年1月14日
从动力学角度看优化算法:自适应学习率算法
PaperWeekly
8+阅读 · 2018年12月27日
干货|EM算法原理总结
全球人工智能
17+阅读 · 2018年1月10日
基于机器学习方法的POI品类推荐算法
全球人工智能
3+阅读 · 2017年11月22日
推荐|研究人脸识别技术必须知道的十个基本概念
全球人工智能
18+阅读 · 2017年9月26日
揭秘人脸识别的十大关键技术
全球创新论坛
6+阅读 · 2017年9月6日
机器学习(7)之感知机python实现
机器学习算法与Python学习
4+阅读 · 2017年7月23日
图像识别 | 道路识别的自动驾驶算法基本原理
沈浩老师
6+阅读 · 2017年5月12日
Arxiv
21+阅读 · 2019年8月21日
Arxiv
10+阅读 · 2018年3月23日
Arxiv
9+阅读 · 2016年10月27日
VIP会员
相关资讯
100行Python代码,轻松搞定神经网络
大数据文摘
4+阅读 · 2019年5月2日
【泡泡读者来稿】VINS 论文推导及代码解析(三)
泡泡机器人SLAM
30+阅读 · 2019年3月16日
万字长文 | 10种传统机器学习算法,阿里工程师总结 | 下
机器学习算法与Python学习
3+阅读 · 2019年1月14日
从动力学角度看优化算法:自适应学习率算法
PaperWeekly
8+阅读 · 2018年12月27日
干货|EM算法原理总结
全球人工智能
17+阅读 · 2018年1月10日
基于机器学习方法的POI品类推荐算法
全球人工智能
3+阅读 · 2017年11月22日
推荐|研究人脸识别技术必须知道的十个基本概念
全球人工智能
18+阅读 · 2017年9月26日
揭秘人脸识别的十大关键技术
全球创新论坛
6+阅读 · 2017年9月6日
机器学习(7)之感知机python实现
机器学习算法与Python学习
4+阅读 · 2017年7月23日
图像识别 | 道路识别的自动驾驶算法基本原理
沈浩老师
6+阅读 · 2017年5月12日
Top
微信扫码咨询专知VIP会员