按照未来互联网的发展趋势以及日趋激烈的人才竞争中,产品经理也须掌握基础的技术算法。因此,本文以相亲为例,介绍了什么是马尔科夫模型。
大家好,我是白白,第一时刻来讲讲算法系列。
产品经理是否需要懂技术,对于这个问题互联网圈看法各不相同。
白白看来,随着未来互联网的发展,按照正常的产品经理职业发展路径,还是需要了解一些技术的内容。产品经理需要了解技术的基本框架,但不一定需要了解所有技术细节。人工智能领域,产品经理需要了解算法的基本原理,以及如何将实际问题转化为算法问题。
白白作为一名AI产品经理,准备持续写一写算法的内容,争取用最简单的语言告诉大家每种算法的逻辑。
一、马尔科夫模型
有一天白白去相亲,见了2个人,上午一个下午一个。
两个小姐姐都不错,这下白白突然不知道应该选哪个(其实两个妹子都没看上我),后来有个算法的同事过来支招,毕竟是结婚过日子么,那还是要考虑充分。
有一种算法的含义是每种状态,只与之前的一个或多个状态有关,也就是说我们可以根据小姐姐之前的状态再综合评价。
白白思考了10秒,觉得好像挺有道理,毕竟现在看着还不错,万一隐藏了什么呢?
所以还是要看看小姐姐的上一个状态。从人生的角度来讲,女孩的上一个状态,也就是她妈妈了。这种每个状态由之前的1个或多个状态决定的模型,我们称为马尔科夫模型。
马尔科夫模型中很多关系使用概率描述的,比如女孩的妈妈很白,那么女儿也很白的概率是90%,女孩妈妈是性格好,女儿也性格好的概率为70%。下图展示了母亲和女儿性格之间的概率关系。
由上图可列出表格:
马尔科夫模型有三个要素:
状态:性格好、性格差
初始向量:在系统定义时间为0时,状态出现的概率。比如从女儿妈妈出现的时间算起认为是系统的0时,那么她妈妈性格好或性格差的的概率就是初始向量。
状态转移矩阵:上图列出的表格就是状态转移概率,用于描述状态之间的转换。
在实际问题中,有关序列的问题很多都可以用马尔科夫模型来求解,例如股票的量化分析、新闻摘要提取、用户行为预测等。
二、隐马尔可夫链
我们即使知道马尔科夫模型的3个要素,还是无法做出良好判定。因为我们观察到的状态中,很可能还包含有隐藏状态。比如我们看到小姐姐和她妈妈确实都不错,但是或许隐藏着小姐姐没准已经有男朋友了,她现在是在找备胎。
来换个阳光的例子,假如小姐姐打了你一巴掌,打人只是表象,真实的隐藏状态是她的心情。打人不一定表示她不开心,打人这个现象对于她是否开心,也有相应的概率。所以对于模型而言,必须要考虑多种情况才能对状态有完整的描述。
针对以上的情况,还有一种与马尔科夫模型很像的模型,称为隐马尔科夫链。
在隐马尔可夫模型中有两条链,一条称为可见状态链,一条称为隐藏状态链。每个状态之间依然是一种序列的关系。
如下图中,X表示女孩的实际的某个状态,但是我们看不到,这就是隐藏状态链。O表示女孩的性格情况,我们只能观察的O这个状态,这就是可见状态链。
1. 隐马尔可夫模型主要解决的问题
隐马尔可夫主要围绕以下三类问题:
给定一个模型,求某个观察序列O的概率
给定模型和观察序列O,求可能性最大的X序列
对于给定的观察序列O,调整隐马尔可夫模型的参数,使得观测序列O出现的概率最大
其中第二类问题是我们最常见的,在语音识别、文本分析等领域有着广泛应用。简单来讲,就是通过我们看到的可见状态链来求解隐藏状态链的相关活动。
当和姑娘相处了一段时间之后,会摸清楚她大概的品性,这就是初始概率。比如大部分时间是开心的,或者开心与不开心各占一半。
隐马尔科夫链模型有四个要素:状态、初始向量、状态转移矩阵、输出矩阵。
前三个与马尔科夫模型几乎没有区别,输出矩阵指的是由隐藏状态到可见状态的输出概率。
例如小姐姐心情不好,可能打人的概率,可能购物的概率等,这些都是输出概率。我们可以建立隐马尔可夫模型,通过小姐姐的表现计算她是否开心。
建立隐马尔可夫模型:心情有2个状态(不开心、开心),但是我们无法直接观察到心情(心情状态对我们是隐藏的),我们只能观察到小姐姐的行为(撒娇、购物、打人),我们认为小姐姐的心情与上一时刻的心情有关,即这个系统构成隐马尔可夫链。
我们已知妹子的长期的一个心情分布概率(初始情况):P={开心:0.6,不开心:0.4}
转换概率分布为:
在相应的心情下,妹子进行的活动的输出概率分布为:
计算第一时刻的心情情况:
P(第一时刻开心)=P(撒娇|开心)*P(开心|初始情况)=0.5*0.6=0.30
P(第一时刻不开心)=P(撒娇|不开心)*P(不开心|初始情况)=0.1*0.4=0.04
P(第一时刻不开心,第二时刻不开心)=P(不开心|第一时刻)*P(不开心->不开心)*P(购物|不开心)=0.04*0.6*0.3=0.0072
P(第一时刻不开心,第二时刻开心)=P(不开心|第一时刻)*P(不开心->开心)*P(购物|开心)=0.04*0.4*0.4=0.0064
P(第一时刻开心,第二时刻开心)=P(开心|第一时刻)*P(开心->开心)*P(购物|开心)=0.30*0.7*0.4=0.084
P(第一时刻开心,第二时刻不开心)=P(开心|第一时刻)*P(开心->不开心)*P(购物|不开心)=0.30*0.3*0.3=0.027
假设知道第三时刻妹子把你给打了,我们来算算各种情况的概率:
P(第二时刻不开心,第三时刻不开心)=P(不开心|第二时刻)*P(不开心->不开心)*P(打人|不开心) =0.027*0.6*0.6=0.00972
P(第二时刻不开心,第三时刻开心)=P(不开心|第二时刻)*P(不开心->开心)*P(打人|开心) =0.027*0.4*0.1=0.00108
P(第二时刻开心,第三时刻开心)=P(开心|第二时刻)*P(开心->开心)*P(打人|开心) =0.084*0.7*0.1=0.00588
P(第二时刻开心,第三时刻不开心)=P(开心|第二时刻)*P(开心->不开心)*P(打人|不开心) =0.084*0.3*0.6=0.01512
通过上面三个时刻的计算,我们可以得出隐藏状态的序列:开心->开心->不开心。
这就是隐马尔可夫链模型的简单介绍。