mirror of
https://github.com/cheetahlou/CategoryResourceRepost.git
synced 2025-11-17 14:43:42 +08:00
del
This commit is contained in:
94
极客时间专栏/geek/机器学习40讲/概率图模型/28 | 最简单的概率图:朴素贝叶斯.md
Normal file
94
极客时间专栏/geek/机器学习40讲/概率图模型/28 | 最简单的概率图:朴素贝叶斯.md
Normal file
@@ -0,0 +1,94 @@
|
||||
<audio id="audio" title="28 | 最简单的概率图:朴素贝叶斯" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/07/1d/078cc3188fd1e8c117687af2d1a46d1d.mp3"></audio>
|
||||
|
||||
从今天起,我们将进入概率图模型的模块,以贝叶斯的角度重新审视机器学习。
|
||||
|
||||
在机器学习任务中,输入和输出之间并不是简单的一对一的决定关系,两者之间通常存在着一些可见或不可见的中间变量。要计算输出变量的概率分布,就得把这些中间变量纳入到建模的框架之中。要简洁明快地表达多个变量之间的复杂的相关关系,**图模型**无疑是理想的选择。将图模型和概率模型结合起来,就是这个模块的主题——**概率图模型**(probabilistic graphical model)。
|
||||
|
||||
在“人工智能基础课”中,我曾用简短的篇幅粗略地介绍过概率图模型的概念和分类。这次我们从实例出发,看一看最简单的概率图模型——**朴素贝叶斯分类器**(naive Bayes classifier),并以它作为从统计机器学习到概率图模型的过渡。
|
||||
|
||||
还记得朴素贝叶斯的原理吗?回忆一下,朴素贝叶斯利用后验概率最大化来判定数据所属的类别,其“朴素”之处在于条件独立性的引入。条件独立性假设保证了所有属性相互独立,互不影响,每个属性独立地对分类结果发生作用,这样类条件概率就变成了属性条件概率的乘积。这在概率图中体现为**条件独立关系(conditioanl independence)**:如果将朴素贝叶斯模型画成有向图的话,它就是下图中的贝叶斯网络,**类别信息指向所有的属性,任何两个属性之间都没有箭头的指向**。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/28/18/28139c3d59da09084e2bff445327f818.png" alt="" />
|
||||
|
||||
朴素贝叶斯的概率图模型(图片来自Probabilistic Graphical Models: Principles and Techniques,图3.2)
|
||||
|
||||
朴素贝叶斯的好处在于可以将属性和类别的联合分布表示成一个关于类的先验分布(prior distribution)和一组与属性相关的条件概率分布(conditional probability distribution)的乘积,这个过程被称为**因子分解**(factorization)。如果数据共有$N$个属性变量$X_i$,其分类结果为另一个变量$Y$,那么朴素贝叶斯的因子分解就可以表示为
|
||||
|
||||
$$ p(Y, X) = p(Y) \cdot \prod\limits_{i = 1}^N p(X_i | Y) $$
|
||||
|
||||
这种条件独立关系用概率图模型的术语来描述的话就是
|
||||
|
||||
$$ \forall i,({X_i} \bot {{\bf X}_{ - i}}|Y) $$
|
||||
|
||||
它的含义是属性$X_i$和其他所有属性关于类别$Y$条件独立。将这个式子和前面的示意图结合起来,可以发现因子分解的**模块化特性**(modularity)。当一个新的属性出现时,整体上的联合分布肯定会发生变化。但利用因子分解,生成新的联合分布只需要添加新属性关于输出的条件分布,而无需对原始分布的其他参数做出调整。在概率图模型中,这种操作就是添加一条有向边及其对应的结点这么简单。
|
||||
|
||||
朴素贝叶斯通过因子分解来计算样本属于每个类别的后验概率。反过来,它也可以依赖因子分解来生成新的数据,因而属于**生成模型**的范畴。在生成样本时,朴素贝叶斯首先按照先验分布抽取出一个类别,再按照类别下的条件概率分布生成不同属性的取值。
|
||||
|
||||
**在解决分类问题时,朴素贝叶斯在判别模型上的对应是逻辑回归**,它体现出的是和朴素贝叶斯截然相反的思路。
|
||||
|
||||
逻辑回归的计算目标是分类边界,边界又是各个属性的线性组合,样本中每个属性的取值共同决定了样本。**从图模型的角度观察,逻辑回归就是朴素贝叶斯的反转**:朴素贝叶斯是类别变量$Y$中伸出若干个箭头指向每一个属性变量$X_i$;逻辑回归则是每个属性变量$X_i$都伸出一个箭头,共同指向类别变量$Y$。这意味着分类的输出依赖于属性的取值,根据这种依赖关系计算出来的是在不同的属性取值下,分类结果的可能性,也就是条件概率$p(Y | X)$。
|
||||
|
||||
朴素贝叶斯的运算流程在上一季中已经有过介绍,在这里简单地总结一下:先验分布就是训练数据集上不同类别的数据所占的比例;每一个条件概率分布可以利用最大似然估计来计算,其计算方式就是在同一个类别的所有数据中,统计属性为特定值的数据所占的比例。但这种方式有一个潜在的问题,当样本容量较小时,某些属性的取值可能压根儿没有出现过,导致计算出来的似然概率为0,从而与真实情况产生偏差。
|
||||
|
||||
要解决这个问题,传统的方法是在条件概率分布的计算中**引入拉普拉斯平滑**(Laplacian smoothing),而从纯贝叶斯方法的角度看,拉普拉斯平滑就是**对隐含的参数引入先验分布**。在贝叶斯方法中,参数的先验分布通常被设置为共轭先验。**共轭先验**(conjugate prior)是贝叶斯主义里的重要概念,指的是先验概率和后验概率具有相同的形式。
|
||||
|
||||
贝叶斯定理相当于用似然概率对先验概率进行加权得到后验概率,当先验概率和给定的似然概率共轭时,计算出的后验概率和先验概率将会服从同一分布,只是两者的参数有所不同。这就是引入共轭先验的好处:它将新概率分布的计算简化为新参数的计算,而无需重新确定分布的种类,从而降低了贝叶斯方法的运算复杂度。
|
||||
|
||||
看到这里,你是否想到了另一个相似的概念呢?**共轭先验类似于线性代数中的特征向量,进一步推广就是信号理论中的特征函数**。共轭先验相当于定义了一个函数空间,在这个空间上,作为泛函算子的似然概率作用在共轭先验上,定义了从先验到后验的演化过程,使输入和输出具有相同的形式。但这更大程度上是一种用于简化后验概率运算数学技巧,共轭先验本身并不能揭示关于数据机制任何潜在的规律。
|
||||
|
||||
既然共轭先验有这么容易计算,如何找到合适的共轭先验就成了下一个问题。可以证明,**任何服从指数族分布的似然函数都存在共轭先验**。在多分类问题中,每个样本都归属于多个类别中的一个,而属于每个类别的概率之和等于1,因此类的先验分布可以看成是二项分布的推广,叫作**多项分布**(multinomial distribution)或者**类别分布**(categorical distribution),其最典型的代表就是掷骰子得到的分布。**狄利克雷分布(Dirichlet distribution)就是类别分布的的共轭先验**,其表达式可以写成
|
||||
|
||||
$$ Dir({\boldsymbol \alpha}) = \dfrac{\Gamma(\sum_{i = 1}^k \alpha_i)}{\prod_{i = 1}^K \Gamma(\alpha_i)} \prod\limits_{i=1}^K x_i ^ {\alpha_i - 1}, \sum\limits_{i=1}^K x_i = 1 $$
|
||||
|
||||
其中${\boldsymbol \alpha}$是狄利克雷分布的参数,$\Gamma(\cdot)$表示伽马函数(gamma function)。利用因子分解后的似然概率对因子分解后的先验概率进行加权,其作用就是对先验分布的参数加以修正。狄利克雷分布的参数被修正为$N_i + \alpha_i$,其中$N_i$是每个类别中的样本数目。当$\alpha = 1$时,这些先验就等效为拉普拉斯平滑。
|
||||
|
||||
下面这个例子给出了关于贝叶斯朴素贝叶斯很好的说明,它来自大卫·巴伯(David Barber)的著作《贝叶斯推理与机器学习》(Bayesian Reasoning and Machine Learning)中的例10.3。这个例子是这样的:
|
||||
|
||||
“问题的任务是判断一个人到底是英格兰人还是苏格兰人,判断的依据是五个二元属性,从上到下分别是爱吃奶油酥饼、不喜欢拉格啤酒、喝威士忌、吃粥和不看英格兰的足球比赛。在训练数据中包括左侧6个英格兰人和右侧7个苏格兰人的属性列表。现在来了一个新的五元组${\bf x} = (1,0,1,1,0)^T$,那这个人是苏格兰人的可能性有多大呢?”
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/0f/4e/0fd6aaef84258e5651c4388283ceb84e.png" alt="" />
|
||||
|
||||
上例中的训练数据集(图片来自Bayesian Reasoning and Machine Learning)
|
||||
|
||||
直接用朴素贝叶斯方法来求解这个问题的方法比较简单,容易计算出类先验概率$p({\rm scottish}) = 7 / 13, p({\rm english}) = 6 / 13$。在每个类别上又可以计算出相互独立的属性条件概率,将所有这些概率代入贝叶斯定理中就可以得到,这个人是苏格兰人的概率是0.8076,你可以自己验算一下。
|
||||
|
||||
可是用纯贝叶斯方法来解决这个问题,那就没那么简单了。出于简化运算的目的,这个例子没有给类分布设定先验,而是令属性关于类别的所有条件概率都服从相互独立的狄利克雷先验分布。由于狄利克雷分布是多项分布的共轭先验,而属性关于类别的二项分布又可以看成是多项分布的特例,因此根据先验计算出来的后验概率也服从狄利克雷分布,只是参数会有所变化。
|
||||
|
||||
假定属性的条件概率$\theta_s^i © = p(x_i = s | c)$表示当数据的类别为$c$时,第$i$个属性的取值为$s$的条件概率。由于数据类别为2,属性数目为5,属性取值为2,条件概率的总数就是$2 \times 5 \times 2 = 20$,每个条件概率都对应一个无信息的均匀狄利克雷分布的超参数$u_s^i © = 1$。根据狄利克雷分布的性质,计算出的后验概率的超参数可以写成
|
||||
|
||||
$$ {\hat u}_s^i © = u_s^i © + \sum\limits_{n: c^n = c} \mathbb{I}[x_i^n = s] $$
|
||||
|
||||
这么一大堆让人眼花缭乱的符号表达的就是一个意思:在每个类别$c$中计算每个属性$i$等于每个值$s$出现的次数,再将计算结果加在三元组$c, i, s$所对应的原始参数$u_s^i ©$上。比方说,在$c=0$的英格兰人中,所有样里本$i=1$的第一个属性中,$s=0$的样本有3个,相应的$u_0^1(0)$就被更新为$3 + 1 = 4$了。
|
||||
|
||||
更新之后的参数就可以用来计算后验概率,计算出的后验概率将进一步被用于新样本的分类,其数学推导比较复杂,感兴趣的话你可以参考原书。利用狄利克雷分布的数学性质可以求出,新样本${\bf x} = (1,0,1,1,0)^T$是苏格兰人的概率是0.764,这略低于非贝叶斯方法求出的结果。
|
||||
|
||||
在Scikit-learn中,实现朴素贝叶斯分类器的是naive_Bayes模块。由于前面例子中的属性都是二值属性,因此需要调用模块中的BernoulliNB类。在使用这个类时需要注意的是其中的参数$\alpha$,这个参数的默认取值为1.0,表示对数据进行拉普拉斯平滑,将它设定为0则是直接利用数据进行计算。
|
||||
|
||||
利用这个类去处理上面的例子你会发现,$\alpha =0$得到的是一般朴素贝叶斯的结果,$\alpha=1$得到的则是贝叶斯朴素贝叶斯的结果。这也验证了拉普拉斯平滑的作用实际上就是给类别设定均匀分布的共轭的先验。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/77/c9/7716bda3d1a89f875e69966caad75ec9.png" alt="" />
|
||||
|
||||
使用BernoulliNB类对文中例子的计算结果
|
||||
|
||||
今天我和你分享了朴素贝叶斯方法的概率图表示,以及贝叶斯方法中共轭先验的概念,包含以下四个要点:
|
||||
|
||||
<li>
|
||||
朴素贝叶斯是最简单的概率图模型,具有发散的星型结构;
|
||||
</li>
|
||||
<li>
|
||||
朴素贝叶斯能够计算属性和类别的联合分布,因而属于生成模型;
|
||||
</li>
|
||||
<li>
|
||||
共轭先验可以保证先验分布和后验分布具有相同的形式和不同的参数;
|
||||
</li>
|
||||
<li>
|
||||
拉普拉斯平滑的作用是给类别设定均匀分布的共轭先验。
|
||||
</li>
|
||||
|
||||
朴素贝叶斯是最简单的贝叶斯分类器,如果将属性之间相互独立的强限制放宽,得到的就是树增强朴素贝叶斯(tree augmented naive Bayes),它可以看成是朴素贝叶斯到通用的贝叶斯网络的过渡。
|
||||
|
||||
你可以查阅资料,了解树增强朴素贝叶斯的原理,并在这里发表你的见解。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/6f/65/6f08c36a1d6346b4b409fe2c3d036065.jpg" alt="" />
|
||||
|
||||
|
||||
91
极客时间专栏/geek/机器学习40讲/概率图模型/29 | 有向图模型:贝叶斯网络.md
Normal file
91
极客时间专栏/geek/机器学习40讲/概率图模型/29 | 有向图模型:贝叶斯网络.md
Normal file
@@ -0,0 +1,91 @@
|
||||
<audio id="audio" title="29 | 有向图模型:贝叶斯网络" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/65/a9/65fcf66d92649a49ef5f35e08322e3a9.mp3"></audio>
|
||||
|
||||
在上一篇文章中,我和你分享了最简单的概率图模型——朴素贝叶斯分类器。由于朴素贝叶斯假定不同的属性相互独立,因而它的概率图具有发散的星型结构。但在实际当中,这样的条件独立性几乎是不可能满足的,属性之间总会有些概率性的关联,如果将属性之间的关联体现在概率图模型中,就相当于把朴素贝叶斯中互相独立的结点联结起来,得到的正是贝叶斯网络。
|
||||
|
||||
**贝叶斯网络**(Bayesian network)也叫**信念网络**(belief network),由一些顶点和连接某些顶点的边构成,每个顶点代表一个随机变量,带箭头的有向边则表示随机变量之间的因果关系。
|
||||
|
||||
**从拓扑结构看,贝叶斯网络是有向无环图**,“有向”指的是连接不同顶点的边是有方向的,起点和终点不能调换,这说明由因到果的逻辑关系不能颠倒;“无环”指的是从任意顶点出发都无法经过若干条边回到该点,在图中找不到任何环路,这说明任何变量都不能自己决定自己。
|
||||
|
||||
贝叶斯网络是对随机变量以及存在于它们之间的不确定性的一种表示(representation),它以因子分解的方式定义了联合概率分布的数据结构,还给出了这个分布中的一系列条件独立性假设。
|
||||
|
||||
下面这个例子出自发表于《AI季刊》(AI Magazine)第12卷第4期的论文《傻瓜贝叶斯网络》(Bayesian networks without tears),它说明当事件之间的因果关系不能完全确定时,基于概率的贝叶斯网络是如何发挥作用的。
|
||||
|
||||
“假设有一天我回家晚了,还碰巧没带钥匙,所以在敲门之前我想先看看家里有没有人。我太太的习惯是不在家时把廊外灯打开,但如果有客人约定来访的话,即使她在家时也会开灯。另外,我还养了一条狗,家里没人的时候会把狗锁在院子里。但狗在院子里也不能确定地说明家里没人,因为如果狗狗犯错的话也会被不让进屋。反正不管怎样,只有狗狗在外面,听到门口有人它就会叫,但我又分辨不出到底是不是我家的狗在叫。那么问题来了,如何判断我家里到底有没有人呢?”
|
||||
|
||||
在这个例子中,所有的因果联系都不是绝对的,灯开不意味着家里肯定没人,狗在院子里也一样。如果灯是开着的但没有听到狗叫,或者听到狗叫但是灯没开,这些情况下就只能对家里有没有人做出概率性的推断。**贝叶斯网络就是概率推断的有力工具,它的条件独立性可以在已知的概率值较少时依然做出准确的推断**。下图就是利用已知的因果联系构造出的贝叶斯网络。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/61/96/61b3056f2d0535a332ac3e33a2c3fe96.png" alt="" />
|
||||
|
||||
从结构上看,条件独立性在一定程度上简化了随机变量的关系,在给定父结点的条件下,每个结点都和它的所有非后代结点条件独立。这意味着每个结点的概率既取决于它的父结点,也取决于它的子结点。从结构上看,父结点、子结点以及子结点的后代结点共同形成一条逻辑关系上的通路,概率的变化就是在这条通路上传导。如果其他结点不在这条通路上,就大概率不会受到处在通路上的结点的影响。
|
||||
|
||||
在上面的例子中,“听到狗叫”是“狗在外面”的子结点,而它本身又没有后代结点。所以只要“狗在外面”这个事件确定了,那么能不能听到狗叫就不会被任何其他变量提供的信息所影响。但对于狗是不是在外面这个问题,事情就没有那么简单了,它既会受到“家人外出”和“狗犯错”这两个父结点的影响,也会受“听到狗叫”这个子结点的影响,其中每一个的变化都会改变对于“狗在外面”这个论述的判断。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/10/8c/102b461742461283f716dc04dcba4b8c.png" alt="" />
|
||||
|
||||
要对贝叶斯网络进行定量计算,就需要给每个根结点所表示的随机变量赋予概率值,同时给表示不同结点之间依赖关系的每条有向边所代表的所有条件概率赋值。上图给出了确定条件概率取值之后的贝叶斯网络。根据这些概率就可以计算一种情况——当灯是开着的但没有听到狗叫时,家里有人的概率。具体的求解方法今天先不讨论,留到后面再做解释,本篇先把重点放在贝叶斯网络的结构特性上。
|
||||
|
||||
结构上的条件独立性降低了贝叶斯网络所需要求解的概率的数目,从而在根本上降低推断的计算成本。在上面的例子中,随机变量的数目,也就是结点的数目是5个,每个随机变量又都只有2种可能的取值。在不考虑条件独立性时,要定义这5个随机变量的联合分布的话,就得计算$2^5 - 1 = 31$个联合概率的值。从数学上看,所有变量的联合分布可以写成
|
||||
|
||||
$$ p(fo, bp, lo, do, hb) = p(fo)p(bp | fo)p(lo | bp, fo)p(do | lo, bp, fo)p(hb | do, lo, bp, fo) $$
|
||||
|
||||
但是在条件独立性下,每个结点上只需要计算$2 ^ m$个条件概率,其中$m$是指向这个结点的有向边数目。这样计算下来,在上面的例子中只需要定义10个条件概率就可以解出任何一种可能性,这就是条件独立性带来的运算便利。相应地,联合分布的表达式也会简化为
|
||||
|
||||
$$ p(fo, bp, lo, do, hb) = p(fo)p(bp)p(lo | fo)p(do | bp, fo)p(hb | do) $$
|
||||
|
||||
这样的简化在这个特例里看起来并不起眼,可一旦贝叶斯网络的规模增加到具有成百上千个结点,这种简化的重要性就会凸显出来。
|
||||
|
||||
**贝叶斯网络可以视为一个条件独立性的大集合**。在这个集合中,除了显式存在的条件独立关系之外,还能不能根据它的因子分解读出隐藏的条件独立关系呢?答案是肯定的。
|
||||
|
||||
在“人工智能基础课”中,我介绍了近邻结点之间顺连(linear)、分连(diverging)、汇连(converging)等基本的连接方式。这三种基本结构都隐含着各自的条件独立性,它们的组合又可以形成更加复杂的连接方式,构成新的条件独立关系。这是贝叶斯网络中的核心概念,值得多花一些笔墨来介绍。
|
||||
|
||||
在复杂的网络中,两个结点就像公交线路的起点和终点,中间还间隔着若干个站点,这些站点之间的线路都是单行线,但方向又可能有所不同。这时要判断起点和终点之间的线路到底能不能承载信息的传输,就需要使用特定的准则。不严谨地说,在给定一些证据(evidence),也就是某些结点的取值固定时,如果一个结点的变化会影响到另一个结点的变化,那它们就是$d$连通的($d$-connected),它们之间存在着$d$连接路径($d$-connecting path)。反过来,不存在$d$连接路径的两个结点就是$d$分离的($d$-separation)。
|
||||
|
||||
和全称命题$d$分离相比,存在性的$d$连通概念更容易理解。那么如何判定在给定证据集时,两个结点是否是$d$连通的呢?这需要让两结点之间的所有结点都满足以下两个条件中的任意一个:
|
||||
|
||||
<li>
|
||||
以顺连或者分连的形式连接,且不属于证据集
|
||||
</li>
|
||||
<li>
|
||||
以汇连形式连接,且结点本身或者其子结点属于证据集
|
||||
</li>
|
||||
|
||||
第一个条件容易理解:它相当于在两个结点之间直接构造出一条有向的通道,通道中每个结点的取值都不是固定的,这保证了信息流动的畅通无阻。第二个条件则相当于用证据生成两个结点的关联。就像在上面的例子中,在不知道狗是否在外面时,“家人外出”和“狗犯错”两者是相互独立、互不影响的。可一旦狗在外面作为证据出现,同时又知道家人没有外出,就立刻可以确定是狗犯错了。这就是通过汇连结构间接实现信息通路的实例。
|
||||
|
||||
$d$分离性是条件独立性的充分必要条件,它既具备可靠性(soundness)也具备完备性(completeness)。如果两个结点是$d$分离的,那它们就肯定满足条件独立;反过来如果两个结点条件独立,两者之间也必定不会存在$d$连接路径。所以用$d$分离的概念可以**通过简单地检测网络的连通性来推断因子分解分布的独立性**,这是验证条件独立性的具体方法,对于简化大规模的复杂网络非常重要。
|
||||
|
||||
由$d$分离性可以引出**马尔可夫毯**(Markov blanket)的概念。将所有结点分成互斥的若干个子集,如果在给定集合$X$的条件下,集合$A$中的任何变量都和集合$B$条件独立,那么满足这一条件的最小集合$X$就是集合$A$的马尔可夫毯。这里的$A$和$B$就像两个不同的交际圈,两者你走你的阳关道,我过我的独木桥,只有在$X$的牵线搭桥之下才会有所来往。
|
||||
|
||||
马尔可夫毯的意义在于划定了描述集合$A$所需要的数据范围,一个结点的马尔可夫毯包括它的父结点、子结点和共父结点,也就是子结点的其他父结点。马尔可夫毯包含了所有关于集合中变量的信息,非马尔可夫毯中的变量在描述$A$时都是冗余的。如果要计算$A$中变量的概率,就不需要惊动所有变量,只需要对马尔可夫毯进行处理就可以了。
|
||||
|
||||
从图结构的角度分析贝叶斯网络的话,还可以定义出独立图的概念。**独立图**(Independency map, I-map)是对概率分布进行拆解的产物。如果概率分布$P$中所有的条件独立性都能够在有向无环的图结构$\mathscr G$中表示出来,那么$\mathscr G$就是$P$的独立图。
|
||||
|
||||
有了独立图的概念之后,就可以从概率模型和图结构两个角度来定义贝叶斯网络。所谓贝叶斯网络其实就是由$({\mathscr G}, P)$构成的偶对,其中概率分布$P$可以根据图$\mathscr G$进行因子分解,图$\mathscr G$是分布$P$分解得到的独立图。这两种解释共同构成了对贝叶斯网络,以及所有概率图模型的综合阐释。
|
||||
|
||||
要在Python语言中实现概率图模型的话,可以使用第三方库pgmpy,这是由《利用Python掌握概率图模型》(Mastering Probabilistic Graphical Models using Python)的作者安库尔·安坎(Ankur Ankan)所开发并维护的。
|
||||
|
||||
利用这个库可以实现前文的例子中给出的模型。在使用中,建模贝叶斯网络需要用到models模块的BayesianModel类,定义离散的条件概率需要用到factors.discrete模块的TabularCPD类,具体的构造方式你可以查看代码。
|
||||
|
||||
在构造完成之后,不妨做个小实验,测试一下当门外灯亮却没有听到狗叫时,家中有人的概率。这里将所有的二元随机变量为真的情况设为取0值,为假的情况设为取1值,因此“门外灯亮却没有听到狗叫”就可以记作“light_on = 0, hear_bark = 1”。将这两个变量的取值代入到网络中进行推断,可以计算出家里有人和没人的可能性几乎是一半一半。
|
||||
|
||||
今天我和你分享了贝叶斯网络的基本原理,包含以下四个要点:
|
||||
|
||||
<li>
|
||||
贝叶斯网络是有向无环图,可以用于因果推断;
|
||||
</li>
|
||||
<li>
|
||||
贝叶斯网络既是具有条件独立性的随机变量的联合分布,也是联合概率分布的因子分解结果;
|
||||
</li>
|
||||
<li>
|
||||
贝叶斯网络中的条件独立性可以通过$d$连通路径和$d$隔离性描述;
|
||||
</li>
|
||||
<li>
|
||||
贝叶斯网络的概率分布描述和独立图描述可以相互转换。
|
||||
</li>
|
||||
|
||||
目前,贝叶斯网络及其推断在医疗诊断中已经得到了广泛的应用。那么你是如何看待概率推断在医疗领域中的使用,自动化推断和人类医生相比又有哪些优势劣势呢?
|
||||
|
||||
欢迎分享你的观点。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/35/97/3564564b098ebb08de7e71869dcd5a97.jpg" alt="" />
|
||||
|
||||
|
||||
110
极客时间专栏/geek/机器学习40讲/概率图模型/30 | 无向图模型:马尔可夫随机场.md
Normal file
110
极客时间专栏/geek/机器学习40讲/概率图模型/30 | 无向图模型:马尔可夫随机场.md
Normal file
@@ -0,0 +1,110 @@
|
||||
<audio id="audio" title="30 | 无向图模型:马尔可夫随机场" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/f0/be/f09593005e158b38ba2a3983f0a07abe.mp3"></audio>
|
||||
|
||||
作为有向图模型的代表,贝叶斯网络将随机变量之间的条件独立性与依赖关系嵌入到图结构之中,既有助于直观表示,又能简化计算。但这是不是意味着贝叶斯网络可以通吃所有概率关系呢?并非如此。
|
||||
|
||||
下面这个例子就说明了贝叶斯网络的局限之处,它取自达芙妮·科勒(Daphne Koller)的经典教材《概率图模型》(Probabilistic Graphical Models)的例3.8。
|
||||
|
||||
“四个学生Alice、Bob、Charles和Debbie在一个学习小组中,但由于A和C、B和D两两之间因为感情的纠葛导致没有交流,因此每个人可以交流的对象都只有2个。这样的关系应该如何表示呢?”
|
||||
|
||||
这四个学生可以建模成概率图中的四个结点,也就是四个随机变量。用贝叶斯网络构造这组关系时,由于A和C之间不存在交流,两者之间也就没有信息的流动,所以在给定B和D的前提下,A和C是条件独立的;同样的道理,在给定A和C的前提下,B和D也是条件独立的。这就要求构造出来的贝叶斯网络能够同时表示这两组条件独立性。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/df/ee/df851b84879214d57c0f0e654e7c89ee.png" alt="" />
|
||||
|
||||
贝叶斯网络的局限性(图片来自Probabilistic Graphical Models,图3.10)
|
||||
|
||||
上图表示的是两种可能的贝叶斯网络结构,但两者都没法同时表示两个条件独立性。在左侧的子图中,从A到C的两条通路都是顺连结构,中间的结点分别是B和D。固定的B和D堵塞了信息流动的通道,从而保证了A和C的条件独立性。
|
||||
|
||||
但反过来,B和D是不是独立的呢?这两个结点与A共同构成了分连结构,因此它们关于A是条件独立的。可同时它们又和C构成了汇连结构,这意味着C的确定会同时导致B和D的变化,条件独立性也就无从谈起了。
|
||||
|
||||
右侧的子图同样存在缺陷。从上向下看,这是两个分连结构的拼凑,保证了A和C的条件独立;可如果换个角度,从下往上看的话,这又是两个汇连结构的拼凑,无论是A还是C都搭建了从B到D的通路,这样的结构也不能同时形成两组条件独立性。
|
||||
|
||||
说到底,这个例子中的结构就像咬住自己尾巴的贪食蛇,是一个典型的环状结构:每一个结点只与和它相邻的两个结点相关,和其他结点全部条件独立。这其实是将顺连结构的首尾扣在了一起,可就是这么简单的操作就足以让作为无环图的贝叶斯网络无计可施了。环状结构中其实不存在方向的概念,不管是顺时针还是逆时针的流动都能够回到原点,就像环路公交车不管是正向出发还是反向出发最终都要回到始发站。如果在这样的循环依赖结构上强加方向的限制,反而会起到适得其反的效果。
|
||||
|
||||
将贝叶斯网络中边的方向去掉,得到的就是马尔可夫随机场。**马尔可夫随机场**(Markov random field)又叫**马尔可夫网络**(Markov network),也是一种用来表示随机变量之间关系的概率图模型,但它的特点和贝叶斯网络恰恰相反:**连接顶点的边没有方向,图中也可以存在环路结构**。
|
||||
|
||||
和贝叶斯网络相比,马尔可夫随机场侧重于表示随机变量之间的相互作用:虽然它不能进行因果的推理,却可以对循环依赖关系建模。如果用马尔可夫随机场来表示前文中的例子,得到的就是下图的结果。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/4f/f8/4f6d3751b538cfffc4757863d91963f8.png" alt="" />
|
||||
|
||||
马尔可夫随机场(图片来自Probabilistic Graphical Models,图3.10)
|
||||
|
||||
马尔可夫随机场的结构确定之后,接下来就要对它进行参数化(parameterization),以完成定量的计算。由于马尔可夫随机场中的变量之间的相互作用不再是明确的条件依赖关系,贝叶斯网络中的条件概率分布也就不再适用了。在参数化的过程中,马尔可夫随机场着重刻画变量之间的连接关系,并由此引入了**因子**(factor)的概念。
|
||||
|
||||
因子也叫**势函数**(potential function),是定义在结点所表示的变量子集上的非负函数,随机变量每一组可能的取值都对应着一个因子值。如果两个随机变量在某个特定取值上的因子越大,说明这两个随机变量在这一组取值上的兼容性越好,也就意味着这一组取值同时出现的可能性比较大。
|
||||
|
||||
利用因子概念就可以对前文的马尔可夫随机场加以参数化。假定ABCD四个随机变量都是二元变量,取值非0即1,下图给出了对每两个相互关联的变量之间的因子定义。在第一个因子$\phi_1(A, B)$中,$(a^0, b^0)$的因子值最大,意味着两个变量最可能同时取0;$\phi_1(a^0, b^1) > \phi_1(a^1, b^0)$则说明当Alice和Bob意见相左时,Bob更加容易占据上风。同理可以得到,Bob和Charles、Alice和Debbie都容易达成共识,而Charles和Debbie在一起就吵架。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/ad/3a/ade5ec6369b5737d2b830ebd5483383a.png" alt="" />
|
||||
|
||||
上例的因子图(图片来自Probabilistic Graphical Models,图4.2)
|
||||
|
||||
定义的所有因子都有相同的作用,那就是定量描述直接关联的随机变量的关联性。将所有局部上的因子组合起来,得到的就是马尔可夫随机场整体的分布。和贝叶斯网络一样,局部因子也是通过相乘的方式加以结合,形成所有随机变量的联合概率分布。但由于对因子直接计算的结果不等于1,所以还需要额外的归一化过程。从因子函数到概率分布的数学表达式可以写成
|
||||
|
||||
$$ p(a, b, c, d) = \dfrac{\phi_1(a, b) \cdot \phi_2(b, c) \cdot \phi_3(c, d) \cdot \phi_4(d, a)}{\sum\limits_{a, b, c, d}\phi_1(a, b) \cdot \phi_2(b, c) \cdot \phi_3(c, d) \cdot \phi_4(d, a)} $$
|
||||
|
||||
上式中分母上的归一化常数被称为划分函数(partition function),它的取值等于所有因子的和。可以看出,无向的马尔可夫随机场实际上建模了所有变量的联合分布,这就和贝叶斯网络对条件分布的建模形成了对比。在上面的例子中,如果要计算四个随机变量分别等于$a^0, b^0, c^1, d^1$的概率,就需要先将反映它们之间的依赖关系的因子相乘
|
||||
|
||||
$$ \phi_1(a^0, b^0) \cdot \phi_2(b^0, c^1) \cdot \phi_3(c^1, d^1) \cdot \phi_4(d^1, a^0) = 30 \times 1 \times 1 \times 1 = 30 $$
|
||||
|
||||
在计算中需要注意的是,在两个因子相乘时,将这两个因子联系起来的中间变量的取值必须是匹配的。
|
||||
|
||||
上面求出的只是一种可能出现的取值。对于4个二值变量来说,所有取值的组合共有16种。计算出所有16个值后再进行归一化,就可以得出$a^0, b^0, c^1, d^1$的概率$p(a^0, b^0, c^1, d^1) = 4.1 \cdot 10 ^ {-6}$。
|
||||
|
||||
上面的这个表达式其实还蕴含着另外一层含义,那就是因子的概念不仅适用于单个随机变量,也适用于随机变量的集合。如果不做归一化的话,按照上面的方法所计算出的$\phi_1(a, b) \cdot \phi_2(b, c) \cdot \phi_3(c, d) \cdot \phi_4(d, a)$实际上就是ABCD这四个变量整体的因子。
|
||||
|
||||
需要说明的是,虽然因子在形式上看起来和条件概率很像,但两者的意义是不同的,这种不同也会体现在数值上。**每个因子都是联合分布的一部分,因子之间也会产生相互作用,只有对因子之间的相互作用进行边际化处理之后,得到的才是真正的条件概率**。
|
||||
|
||||
如果把单个因子视为概率,那么前文中因子的归一化所形成的概率分布就是**吉布斯分布**(Gibbs distribution);如果把吉布斯分布中的所有因子都改写成指数函数的形式,它就又变成了**玻尔兹曼分布**(Boltzmann distribution)。在统计力学中,玻尔兹曼分布可以用于描述系统的能量分布,相关的内容属于物理学的范畴,在这儿就不多说了。
|
||||
|
||||
马尔可夫随机场和吉布斯分布是等价的,其等价性由**哈默斯利-克利福德定理**(Hammersley-Clifford theorem)所保证。这个定理的内容比较复杂,其中最主要的一点是**只有当非负的概率分布可以进行因子分解时,它才能和无向的图结构等价**。可以进行因子分解的概率分布是吉布斯分布,其等价的图结构就是马尔可夫随机场。
|
||||
|
||||
对马尔可夫随机场进行因子分解,其目标是将原始的图结构整合成若干个团。团(clique)是由结点的组合形成的全连接结构,团中的任意两个结点之间都存在互相连接的边。如果在已有的团中加入任何一个多余的结点都不能成团的话,这样的团就是**极大团**(maximal clique),极大团和吉布斯分布的关系可以类比为贝叶斯网络中的独立图和概率分布的关系。下图给出了划分极大团的一个实例。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/d2/ca/d24cbc32041add852855a351fc3b91ca.png" alt="" />
|
||||
|
||||
和贝叶斯网络一样,马尔可夫随机场也需要体现条件独立关系。如果两组结点$X$和$Y$通过第三组结点$Z$相连接,$X$中的任意一个结点到$Y$中的任意一个结点的路径都要经过$Z$中的结点,而不存在绕过点集$Z$的通路的话,那就可以说$X$和$Y$被$Z$所分离,$Z$是$X$和$Y$的分离集(separation set)。如果把概率的变化想象成水的流动,那么$Z$就是上游$X$和下游$Y$之间的一道大闸。一旦$Z$中的随机变量不再变化,这道大闸就会堵住信息流动的通道,从而让$X$和$Y$条件独立。
|
||||
|
||||
**马尔可夫随机场中的条件独立性就是马尔可夫性**。根据分离集在图结构上的不同特点,马尔可夫性也被分为以下三种形式。
|
||||
|
||||
<li>
|
||||
**全局马尔可夫性**(global Markovianity):给定两个变量子集的分离集,则这两个变量子集条件独立。
|
||||
</li>
|
||||
<li>
|
||||
**局部马尔可夫性**(local Markovianity):给定一个变量子集的邻接变量,则这个变量和其他所有变量条件独立,也就是邻接变量构成了此变量和其他变量的分离集。
|
||||
</li>
|
||||
<li>
|
||||
**成对马尔可夫性**(pairwise Markovianity):给定其他所有变量,则剩下的两个非邻接变量条件独立,也就是其他所有变量共同构成非邻接变量的分离集。
|
||||
</li>
|
||||
|
||||
要用Python建模马尔可夫随机场可以使用pgmpy,这里以前文中四人小组的例子为例。马尔可夫随机场的核心是因子,建模马尔可夫随机场需要用到models模块的MarkovModel类,因子的定义则需要通过调用factors.discrete模块的DiscreteFactor类来实现。构造出模型后可以计算划分函数,进而计算所有随机变量的联合分布。
|
||||
|
||||
作为两种最主要的概率图模型,贝叶斯网络和马尔可夫随机场虽然结构不同,但都是对概率分布的参数化和对条件独立性的表示,因而可以相互转化。将贝叶斯网络变成马尔可夫随机场较为简单,只需要将所有边的方向全部去掉,同时在汇连结构的两个共父结点结点之间添加无向边,这个过程被称为**端正化**(moralization),得到的结果就是**端正图**(moral graph)。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/a4/41/a4760ca70e5f1f2b5a3418188d8cbf41.png" alt="" />
|
||||
|
||||
贝叶斯网络的端正化(图片来自维基百科)
|
||||
|
||||
相比之下,将马尔可夫随机场转化成贝叶斯网络就没那么容易了。这其中最关键的问题在于因果关系的确定,也就是有向边到底由谁指向谁,不同的指向会导致不同的条件独立性。这时就不光要给已有的边添加方向,还要给原始马尔可夫随机场中的环结构添加额外的边来形成弦图(chordal graph),这个过程被称为**三角化**(triangulation)。构造出的弦图可以进一步表示为贝叶斯网络,其具体细节在这里就不介绍了。
|
||||
|
||||
今天我和你分享了马尔可夫随机场的基本原理,包含以下四个要点:
|
||||
|
||||
<li>
|
||||
马尔可夫随机场是无向图,可以用于建模变量之间的相互作用;
|
||||
</li>
|
||||
<li>
|
||||
马尔可夫随机场与可以进行因子分解的吉布斯分布等价;
|
||||
</li>
|
||||
<li>
|
||||
马尔可夫随机场中的条件独立性可以分为全局性、局部性和成对性;
|
||||
</li>
|
||||
<li>
|
||||
马尔可夫随机场和贝叶斯网络可以相互转化。
|
||||
</li>
|
||||
|
||||
虽然不能用于因果推断,但马尔可夫随机场在图像处理中有着非常广泛的应用,图像分割、去噪、目标识别等计算机视觉任务中都能见到马尔可夫随机场的身影。
|
||||
|
||||
你可以查阅资料,了解马尔可夫随机场在不同图像处理任务中的应用方式,并在这里分享你的见解。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/0c/ea/0c527066de7be802447e224989a28eea.jpg" alt="" />
|
||||
|
||||
|
||||
96
极客时间专栏/geek/机器学习40讲/概率图模型/31 | 建模连续分布:高斯网络.md
Normal file
96
极客时间专栏/geek/机器学习40讲/概率图模型/31 | 建模连续分布:高斯网络.md
Normal file
@@ -0,0 +1,96 @@
|
||||
<audio id="audio" title="31 | 建模连续分布:高斯网络" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/08/ae/08d6bf6b80583987bd1082d12c3379ae.mp3"></audio>
|
||||
|
||||
无论是贝叶斯网络还是马尔可夫随机场,定义的变量都服从取值有限的离散分布,变量之间的关联则可以用有限维度的矩阵来表示。如果将随机变量的范围从离散型扩展到连续型,变量的可能取值就有无穷多个,这时变量之间的依赖关系就不能再用表格的形式来表示了,需要重新定义概率图模型中的相互作用与条件独立性。
|
||||
|
||||
考虑最简单的情形,也就是结点所表示的随机变量都服从高斯分布,**由高斯型连续随机变量构成的概率图模型统称为高斯网络**(Gaussian network)。
|
||||
|
||||
如果多个服从一维高斯分布的随机变量构成一个整体,那它们的联合分布就是**多元高斯分布**(multivariate Gaussian distribution),其数学表达式可以写成
|
||||
|
||||
$$ p({\bf x}) = \dfrac{1}{(2\pi)^{n / 2} | \Sigma |^{1/2}} \exp [-\dfrac{1}{2} ({\bf x} - \boldsymbol \mu)^ T \Sigma^{-1} ({\bf x} - \boldsymbol \mu)] $$
|
||||
|
||||
其中$\boldsymbol \mu$是这组随机变量的均值向量(mean vector),$\Sigma$是这组随机变量的协方差矩阵(covariance matrix),$| \Sigma |$是它的行列式值。
|
||||
|
||||
协方差矩阵是对称的正定(positive definite)矩阵,表示了不同变量之间的关联:如果两个变量线性无关,那么其协方差矩阵中对应的元素就等于0,这意味着两个变量满足边际独立性(marginal independency);如果所有变量都线性无关的话,协方差矩阵就退化为对角矩阵。
|
||||
|
||||
协方差矩阵的逆矩阵$J = \Sigma ^ {-1}$被称为**信息矩阵**(information matrix),信息矩阵和均值向量的乘积则被称为**势向量**(potential vector)。
|
||||
|
||||
引入信息矩阵意在定义条件独立性(conditional independency):和边际独立性不同,条件独立性不能直接在协方差矩阵中体现出来,必须通过信息矩阵加以观察。信息矩阵的元素等于0说明对应的两个变量在给定其他变量的前提下条件独立,比如$J_{1,3} = 0$就意味着着在其他变量固定时,$x_1$和$x_3$条件独立。
|
||||
|
||||
在高斯分布的基础上可以进一步定义高斯线性模型。**高斯线性模型**(linear Gaussian model)指的是一个随机变量可以表示为一组随机变量的线性组合,这个随机变量本身的不确定性则可以用高斯分布来建模,这种关系写成数学表达式就是
|
||||
|
||||
$$ y = \beta_0 + \beta_1 x_1 + \cdots + \beta_k x_k + \epsilon, \epsilon ~{} {\mathscr N}(0, \sigma ^ 2) $$
|
||||
|
||||
这其实和原始线性回归的假设是完全一致的。把这种关系放到概率图模型中,那么所有的$x_i$都可以看成结点$y$的父结点,它们一起构成了汇连结构。从概率角度看,给定这些父结点后,子结点$y$的条件概率就服从高斯分布,其均值是$x_i$的线性组合,方差则是噪声$\epsilon$的方差。
|
||||
|
||||
上面的表达式中假设所有自变量$x_i$都有固定的取值,如果这些自变量都是随机变量,共同服从均值为$\boldsymbol \mu$,协方差矩阵为$\Sigma$的多维高斯分布的话,那么可以证明随机变量$y$也是高斯随机变量,它的均值等于$\beta_0 + \boldsymbol \beta^T \boldsymbol \mu$,方差等于$\sigma ^ 2 + \boldsymbol \beta^T \Sigma \boldsymbol \beta$,和变量$X_i$的协方差则等于$\sum_{j = 1}^k \beta_j\Sigma_{i,j}$。
|
||||
|
||||
这样的结论告诉我们,**高斯线性模型实际上定义了一个高斯贝叶斯网络**(Gaussian Bayesian network),**整个概率图所表示的联合分布就是一个大的多维高斯分布**。
|
||||
|
||||
高斯贝叶斯网络的表示可以用下面这个例子来直观地解释,这个例子来自《概率图模型》(Probabilistic Graphical Models)的例7.3。
|
||||
|
||||
“如果一个线性高斯网络具有顺连结构$X_1 \rightarrow X_2 \rightarrow X_3$,其中$X_1$的概率密度${\mathscr N}(1, 4)$,已知$X_1$时$X_2$的条件概率密度为${\mathscr N}(0.5X_1 - 3.5, 4)$,已知$X_2$时$X_3$的条件概率密度为${\mathscr N}(-X_2 + 1, 3)$,试求解整个网络所表示的联合分布。“
|
||||
|
||||
在高斯形式已经确定的前提下,求解联合分布实际上就是求解所有变量的均值向量和协方差矩阵。由于$X_2$等于$0.5X_1 - 3.5$,将$X_1$的均值为1代入这个线性关系,就可以求出$X_2$的均值等于$0.5 \times 1 - 3.5 = -3$,同理可以求出$X_2$的均值等于$-(-3) + 1 = 4$。
|
||||
|
||||
求完了均值再来看协方差,协方差矩阵的对称性决定了对于3维变量来说,计算协方差矩阵需要确定6个元素。$X_1$的方差$\Sigma_{11} = 4$是已知的,这部分方差将会以线性系数为比例体现在$X_2$中,和$X_2$自身的不确定度共同构成随机变量完整的方差,也就是$\Sigma_{22} = 0.5^2 \times 4 + 4 = 5$。将$X_2$的方差代入$X_3$的线性关系,又可以计算出$\Sigma_{33} = (-1)^2 \times 5 + 3 = 8$。这三个方差定义了变量自身的不确定性,是协方差矩阵中的对角线元素。
|
||||
|
||||
确定了对角线元素后,下一步就是确定非对角线上的元素,也就是不同变量之间的相关性。由于$X_2$这个变量只取决于$X_1$,其关联的强度由线性系数确定,因而两者之间的协方差就等于线性系数和$X_1$方差的乘积$\Sigma_{12} = 0.5 \times \Sigma_{11} = 2$。这个数字的含义在于用$X_1$的变化对$X_2$的变化的影响。同理可以求出,$X_2$和$X_3$之间的协方差为$\Sigma_{23} = -1 \times \Sigma_{22} = -5$。
|
||||
|
||||
在这个顺连结构中,$X_1$和$X_3$之间并不存在直接的作用,而是以$X_2$作为媒介和中转。$X_1$对$X_3$的作用实际上可以分成两个阶段,第一个阶段是$X_1$的变化首先影响$X_2$,第二个阶段是$X_2$的变化继续影响$X_3$。在协方差的计算中,第一个阶段体现为$X_1$和$X_2$之间的协方差,第二个阶段则体现为$X_2$和$X_3$之间的线性系数的加权作用。两者相乘形成了一个整体,也就是$\Sigma_{13} = \Sigma_{12} \cdot (-1) = -2$。由此,就可以写出联合分布的均值向量和协方差矩阵
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/ff/31/ff89b192b5c48b1ce727c06ad3462a31.png" alt="" />
|
||||
|
||||
关于这个例子需要说明的一点是,由于协方差矩阵中所有的元素都不为0,说明这些变量两两之间都不是边际独立的。但顺连结构告诉我们,当$X_2$确定时,$X_1$和$X_3$条件独立,所以它的信息矩阵中会有两个零元素。这说明在图结构中,表示同一个联合分布只需要更少的参数。
|
||||
|
||||
但淮南为橘淮北为枳,图结构的优势也可能变成劣势。想象一下汇连结构$X_1 \rightarrow X_2 \leftarrow X_3$,由于汇连结构中不存在条件独立的结点,因此联合分布的信息矩阵中所有元素都是非零的。但由于$X_1$和$X_3$互不影响,因此协方差矩阵中反倒存在着零元素。
|
||||
|
||||
在此基础上,如果再给结点$X_1$和$X_3$赋予一个共同的父结点$X_4$,让这三者形成分连结构的话,那整个网络中就既没有条件独立性,也没有边际独立性,无论是协方差矩阵还是信息矩阵中就都不会出现非零元素了。
|
||||
|
||||
**将多元高斯分布嵌入到无向的马尔可夫随机场中,得到的就是高斯马尔可夫随机场**(Gaussian Markov random field)。在处理高斯随机场时,先要对多元高斯分布的概率密度做些处理,将指数项中的协方差逆矩阵$\Sigma ^ {-1}$替换为信息矩阵$J$并展开。由于均值向量和信息矩阵都是常量,将它们去掉就可以得到概率密度的正比关系
|
||||
|
||||
$$ p({\bf s}) \propto \exp [-\dfrac{1}{2} {\bf x}^T J {\bf x} + (J \boldsymbol \mu)^T {\bf x}] $$
|
||||
|
||||
这个式子被称为**高斯分布的信息形式**(information form)。由于式子中的$\bf x$是向量,因此展开后的结果中会包含两种多项式成分:一种成分是单个变量$X_i$的函数,其表达式可以写成$-J_{i, i}x_i^2 / 2 + h_ix_i$,其中$h_i$是势向量的第$i$个分量;另一种成分是两个变量$X_i$和$X_j$乘积的函数,其表达式可以写成$-J_{i, j}x_ix_j$。
|
||||
|
||||
在高斯随机场中,这两个不同的成分具有不同的意义。只与单个变量相关的成分可以看成每个结点的势函数(node potential),同时涉及两个变量的成分则可以看成连接这两个结点的边的势函数(edge potential)。如果信息矩阵的元素$J_{i, j} = 0$,其对应的边势也等于0,就说明这两个结点之间并没有连接的边。
|
||||
|
||||
需要说明的是,在前一篇对马尔可夫随机场的介绍中我提到了边势,但并没有涉及结点势的概念。其原因在于结点势并不是通用的概念,它只存在于具有成对马尔可夫性的网络之中。下图是一个典型的成对马尔可夫随机场,每个结点都和它所有的非邻接结点条件独立,在信息矩阵$J$中,这些条件独立的结点组合所对应的元素就等于0。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/00/92/00fb127ba9b5f370c67d7f91a5862392.png" alt="" />
|
||||
|
||||
成对马尔可夫随机场(图片来自Probabilistic Graphical Models,图4.A.1)
|
||||
|
||||
多元高斯分布定义的是成对的马尔可夫随机场,其中的每个势函数都具有二次型的形式。反过来,由于任何合法的高斯分布都具有正定的信息矩阵,所以如果一个成对随机场能够改写成多元高斯分布,那它的势函数的系数所形成的矩阵也必须得满足正定的条件。
|
||||
|
||||
对连续分布的建模能够大大拓展概率图模型的应用范围,毕竟现实中大量的观测结果都是连续变化的。**虽然高斯分布并不适用于所有的连续变量,但良好的数学性质和便于计算的特点让它成为了理想条件下近似建模的首选**。
|
||||
|
||||
如果一个概率图模型中的随机变量既有离散型也有连续型,这样的网络就是**混合网络**(hybrid network)。混合网络让人头疼的一个问题是同一个结点的父结点可能存在不同的类型,其中既有连续分布的结点,也有离散分布的结点。而在处理这些父结点不同的子结点时,需要根据情况分类讨论。
|
||||
|
||||
如果子结点是连续分布的结点,那么问题就简单了。由于离散分布的父结点取值的组合是有限的,就可以对每一种可能的取值都为子结点定义一组线性系数,将离散结点的信息编码到这组线性系数当中。
|
||||
|
||||
这样一来,子结点就可以表示成连续父结点的线性组合,其中的线性系数则由离散父结点来决定。这种模型被称为**条件线性模型**(conditional linear model),它本质上是一组不同参数的高斯分布所形成的混合模型(mixture model),每个分布的权重取决于这一组参数出现的概率。
|
||||
|
||||
当一个离散的子结点具有连续的父结点时,解决的方法也不复杂。最简单的办法是采用**阈值模型**(threshold model),当连续变量的取值大于阈值时输出1,小于阈值时输出0。更加精细的一种方式是用借鉴逻辑回归或者softmax回归的思想,计算离散的子结点关于连续的父结点的条件概率,并输出条件概率最大的结果。
|
||||
|
||||
今天我和你分享了概率图模型中对连续型随机变量的建模与表示,其要点如下:
|
||||
|
||||
<li>
|
||||
高斯网络采用高斯线性模型建模连续变量,其数字特征为均值向量和协方差矩阵;
|
||||
</li>
|
||||
<li>
|
||||
高斯贝叶斯网络利用多元高斯分布生成独立图,利用信息矩阵计算网络中的条件概率;
|
||||
</li>
|
||||
<li>
|
||||
高斯马尔可夫随机场具有成对马尔可夫性,通过高斯分布可以确定结点势和边势;
|
||||
</li>
|
||||
<li>
|
||||
混合网络是同时具有离散型结点和连续型结点的概率图模型。
|
||||
</li>
|
||||
|
||||
在现实生活中,自然界客观存在的属性通常是连续分布的,而人为定义出来的属性则通常是离散的,那么你能想象出有哪些离散变量和连续变量共存的应用场景呢?
|
||||
|
||||
欢迎分享你的观点。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/e6/83/e65b416c4f6b52d0cac868901a312683.jpg" alt="" />
|
||||
|
||||
|
||||
82
极客时间专栏/geek/机器学习40讲/概率图模型/32 | 从有限到无限:高斯过程.md
Normal file
82
极客时间专栏/geek/机器学习40讲/概率图模型/32 | 从有限到无限:高斯过程.md
Normal file
@@ -0,0 +1,82 @@
|
||||
<audio id="audio" title="32 | 从有限到无限:高斯过程" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/ef/c1/ef43087714c05e383c3f27db6badeac1.mp3"></audio>
|
||||
|
||||
上一讲中我基于高斯分布介绍了建模连续型分布的高斯网络,其中所用到的多元高斯分布是一元高斯分布的扩展与推广。但在多元高斯分布中,变量的数目依然是有限的。如果像傅里叶变换(Fourier transform)那样,将无数个服从高斯概率的随机变量叠加到一起,这个在向量空间上形成的高斯分布就变成了函数空间上的高斯过程。
|
||||
|
||||
在概率论和统计学中,**高斯过程**(Gaussian process)是由出现在连续域上的无穷多个随机变量所组成的随机过程,不管连续域是时间还是空间,在上面定义的无穷维向量都可以看成是个函数(function)。高斯过程的**高斯性**(Gaussianity)指的是这无穷多个随机变量联合起来共同服从无穷维高斯分布,如果从中取出一部分变量,这些变量的边际分布也是高斯形式的。
|
||||
|
||||
不妨假设$y({\bf x})$是个高斯过程。从空间尺度上看,如果在定义域中任取出一些点${\bf x}_1, {\bf x}_2, \cdots, {\bf x}_N$,那么这些点的联合分布就是多元的高斯分布。更重要的是,这样的性质对于定义域上的任何子集都成立,也就是不管如何取点、取多少点,这些随机变量的高斯性都能够一致地保持。从时间尺度上看,即使每次都抽取相同的点,随机过程的特性依然决定了样本每次独立的实现都会有所差异,但是在统计意义上,同一个自变量在多次抽取中得到的结果也是满足高斯分布的。
|
||||
|
||||
从数据生成的角度看,高斯过程还可以通过线性回归更加直观地理解。给定线性关系$y = {\bf w}^T {\bf x}$之后,对于每一个可能出现的权值向量$\bf w$,都会有一条直线和它对应。所有$\bf w$所对应的直线就会布满整个二维空间,而线性回归的任务就是找到那条和训练数据匹配度最高的那条直线。找到最优的直线意味着确定后验意义下最优的线性系数$\bf w$,因此这个过程归根结底还是个参数化的过程。
|
||||
|
||||
如果要将上面的参数化过程过渡为完全的非参数化过程,就要摆脱对于参数$\bf w$的依赖,最直接的方法是不定义$\bf w$的先验,而是直接定义在函数空间上的输出$y({\bf x})$的先验,也就是给出$y({\bf x})$取不同形式的概率。这样一来,直接对函数建模的非参数模型就摆脱了参数模型的局限性,从而具备了更强大的拟合能力。而函数建模最简单的模型就是给连续的$y({\bf x})$赋予高斯型的先验分布,得到的就是**高斯过程**。
|
||||
|
||||
在高斯过程中,每个可能的$y({\bf x})$都是从高斯过程中抽取的一个样本。有限维度的高斯分布可以用均值向量和协方差矩阵这两个数字特征完全地刻画。而在无穷维的高斯过程中,这两者都变成了函数的形式。均值函数取决于训练数据$\bf X$,它体现了样本出现的整体位置,而这个整体位置通常被设置为0。这样处理的原因在于和均值代表的绝对位置相比,表示不同数据点之间关系的协方差矩阵才是高斯过程的关键所在。
|
||||
|
||||
要理解协方差函数在高斯过程中的作用,首先要明确高斯过程的一个主要特点,那就是它**建模的对象**不是自变量$\bf x$和因变量$y$之间的关系,而是不同的因变量$y$和$y’$之间的关系,正是这种思想决定了高斯过程的非参数特性。因变量之间的关系正是通过协方差函数体现,假定训练数据集是$({\bf X}, {\bf y})$,线性关系中的权重系数为$\bf w$,那么输出的协方差函数就可以表示成
|
||||
|
||||
$$ {\rm Cov}({\bf y}) = {\rm E}[{\bf y}{\bf y}^T] = {\bf X}{\rm E}[{\bf w}{\bf w}^T]{\bf X}^T = \dfrac{\bf K}{\alpha} $$
|
||||
|
||||
其中$\bf K$被称为**格拉姆矩阵**(Gram matrix),其元素为$K_{ij} = K({\bf x}_i, {\bf x}_j) = ({\bf x}_i)^T {\bf x}_j$,这里的$\alpha$是参数$\bf w$所服从的高斯分布方差的倒数。这表示未知函数$f(\cdot)$在${\bf x}_i$和${\bf x}_j$两点上的函数值服从二元高斯分布,其均值可以不失通用性地视为0,协方差矩阵则是上面求出的${\rm Cov}({\bf y})$中对应行列所形成的$2 \times 2$方阵。
|
||||
|
||||
在这个表达式中,如果引入基函数的扩展来定义函数的先验,用函数$\phi (\cdot)$对输入的自变量做一个特征映射,那协方差函数的元素就变成了
|
||||
|
||||
$$ K_{ij} = \phi({\bf x}_i)^T \phi({\bf x}_j) $$
|
||||
|
||||
显然,这时的协方差函数已经具有了核函数的形式。如果你一时没有想起核函数为何物,那就复习一下前面支持向量机的内容。当$K_{ij}$取作径向基函数的形式$\exp (-| {\bf x}_i - {\bf x}_j | ^ 2 / 2)$时,它就有了一个新的名字——**平方指数**(squared exponential)。
|
||||
|
||||
**高斯过程其实就是核技巧在概率模型中的扩展,它将输出的协方差表示成输入的函数,再通过协方差来描述数据点之间的关系**。在预测新样本时,高斯过程给出的不是对预测结果的点估计,而是完整的概率分布,这是一般的频率主义方法不能比的。
|
||||
|
||||
前面对高斯过程的理解都是从**函数空间**(function space)的角度出发的,换个方向的话,高斯过程也可以从**参数空间**(weight space)的角度来认识,这种理解方式是将高斯过程应用到线性回归的拟合之中,也被称为**高斯过程回归**(Gaussian process regression)。这部分内容实际上就是将上面的分析调转方向,通过定义特征映射将数据在高维空间中表示出来,再**在高维空间上应用贝叶斯的回归分析**。
|
||||
|
||||
高斯过程回归的数学细节较为繁冗,在这里就不做展开了,感兴趣的话你可以参考卡尔·拉斯姆森(Carl Edward Rasmussen)和克里斯托弗·威廉姆斯(Christopher KI Wiliams)的著作《机器学习中的高斯过程》(Gaussian Process for Machine Learning)。
|
||||
|
||||
其结论是用高斯过程计算出的预测分布(predictive distribution)也是一个高斯分布,它的均值是后验意义下的最优估计,方差则表示了估计结果的可信范围。这两个参数都和高斯过程的协方差函数,也就是核函数有关。使用不同的核函数,得到的估计结果也不会相同。
|
||||
|
||||
高斯过程之所以选择高斯分布做先验,是因为它符合之前介绍过的最大熵原理。当随机变量的协方差矩阵给定时,高斯分布的不确定性是最大的,这符合机器学习不做出多余假设的思想。另一方面,高斯分布良好的数学特性也让它适用于贝叶斯主义的方法。**对高斯分布进行边际化处理,得到的结果依然是高斯分布,这对于涉及大量积分计算的贝叶斯方法无疑是个福音**。
|
||||
|
||||
作为一类非参数的局部化模型,**高斯过程和其他局部化的模型有什么区别和联系呢**?不妨在这里对它们做个比较。
|
||||
|
||||
**核回归**(kernel regression)就是一种局部化回归模型,它利用的是核函数的平滑作用,用核函数对未知数据点附近的已知数据点的输出结果进行加权,再将加权的结果作为未知数据点的输出。这相当于将输入空间划分成不同的局部区域,在每个局部上拟合一个常数$\theta_0$作为输出。
|
||||
|
||||
在核回归的基础上深入一步就是局部加权回归。**局部加权回归**(locally weighted regression)在每个局部上拟合的目标不是常数,而是一阶的线性模型$\theta_0 + \theta_1 x$。
|
||||
|
||||
本质上讲,这些局部化的回归模型就是套上了核函数外衣的$k$近邻方法,其中的核函数并没有统计特性上的意义,只是作为加权系数出现,所以被称为**平滑核**(smoothing kernel)。平滑核必须满足的是归一化的条件,也就是所有权重系数的积分等于1。相比之下,来源于协方差矩阵的核函数完全满足正定的条件,是根红苗正的**Mercer核**。当然,根据高斯过程的核函数可以计算出对应的平滑系数,计算出来的结果被称为**等价核**(equivalent kernel)。
|
||||
|
||||
既然说到核函数,就不能不提它最经典的应用——**支持向量机**。利用数学推导可以得出,**在处理二分类问题时,支持向量机和高斯过程的损失函数具有相似的形式,其区别在于前者使用的是合页损失函数,后者使用的是似然概率的负对数**。如果能够将合页损失等价为某种形式的似然概率,那么这两种方法就是等效的。可遗憾的是,这样的似然概率并不存在。
|
||||
|
||||
需要说明的是,将高斯过程应用于二分类问题时,高斯分布的特性反倒成为了运算中的掣肘。常用的处理方法是对高斯过程进行拉普拉斯近似(Laplace approximation),具体做法是将求解出来的预测分布的对数进行泰勒展开(Taylor expansion),将二阶项以上的高阶项全部去掉。由于后验概率的方差通常较小,其形状是狭窄的尖峰形式,因此这种近似并不会造成太大的误差。
|
||||
|
||||
最后一个用来和高斯过程进行比较的模型是大名鼎鼎的神经网络。通用逼近定理证明了具有单个隐藏层的神经网络可以拟合任何非线性的函数,拉德福德·尼尔(Radford Neal)则在他的著作《神经网络的贝叶斯学习》(Bayesian Learning for Neural Networks)中进一步证明了**单隐层的神经网络会收敛于所有参数都服从高斯先验的高斯过程**,换言之,两者可以相互取代。
|
||||
|
||||
但并不是所有人都认同这种观点,《信息论、推理与学习算法》(Information Theory, Inference and Learning Algorithm)的作者大卫·麦凯(David JC MacKay)就表示,神经网络的作用在于发现数据中潜在的特征与模式,而高斯过程只是简单的函数平滑。如果两者真的等效,那岂不是意味着我们都高估了神经网络吗?这种现象被麦凯称为“连孩子带洗澡水一起倒丢了”。
|
||||
|
||||
可是在十多年后的今天再回首,麦凯所言似乎一点儿毛病都没有。
|
||||
|
||||
在Scikit-learn中,高斯过程被定义在gaussian_process模块,模块中的类一部分用来实现回归或者分类功能,另一部分则定义了常用的核函数。将高斯过程应用在回归数据集和线性不可分的分类数据集上,结果如下图所示,这里使用的核函数是最常见的高斯核。
|
||||
|
||||
在回归问题中,高斯过程回归器GaussianProcessRegressor拟合出的结果就是利用高斯函数对原函数进行插值拟合,其中红色曲线是结果分布的均值,灰色阴影表示95%置信区间;在分类问题中,高斯过程分类器GaussianProcessClassifier计算出的则既可以直接输出类别,体现为图中的决策边界,也可以输出样本归属于类别的概率。当然,如果调整核函数的形式和参数,得到的结果也会不同。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/ba/8f/ba9dd63d15b62721b5f431582a77968f.png" alt="" />
|
||||
|
||||
今天我和你分享了高斯过程的基本原理,包含以下四个要点:
|
||||
|
||||
<li>
|
||||
高斯过程由无穷多个随机变量组成,定义的是函数的先验分布;
|
||||
</li>
|
||||
<li>
|
||||
函数空间上的高斯过程是核技巧在概率模型中的应用,通过定义因变量之间的相关性计算输出;
|
||||
</li>
|
||||
<li>
|
||||
参数空间上的高斯过程是在高维空间中进行贝叶斯的回归分析;
|
||||
</li>
|
||||
<li>
|
||||
高斯过程可以通过等价核、似然概率和高斯先验与其他模型联系起来。
|
||||
</li>
|
||||
|
||||
在高斯过程中,一般的惯例是将均值函数设置为0。那么如果均值函数是非零的函数,它对高斯过程的结果又会产生什么影响呢?
|
||||
|
||||
你可以查阅相关资料,并在这里分享你的见解。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/b6/6c/b6d9c1c4a38a786fd658d2dc5b094e6c.jpg" alt="" />
|
||||
|
||||
|
||||
90
极客时间专栏/geek/机器学习40讲/概率图模型/33 | 序列化建模:隐马尔可夫模型.md
Normal file
90
极客时间专栏/geek/机器学习40讲/概率图模型/33 | 序列化建模:隐马尔可夫模型.md
Normal file
@@ -0,0 +1,90 @@
|
||||
<audio id="audio" title="33 | 序列化建模:隐马尔可夫模型" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/b3/76/b36f517336604cf184f5f365013cc276.mp3"></audio>
|
||||
|
||||
前几讲中介绍概率图模型都没有涉及“时间”尺度,模型所表示的都是同一时刻下的状态,因而不能建模随机变量的动态特性。如果要定义系统在时间尺度上的演化,就需要引入**系统状态**(system state)的概念,每一时刻的系统状态都是表示系统属性的随机变量。
|
||||
|
||||
将图模型中的结点用表示时间流动的有向边连接起来,得到的是**动态贝叶斯网络**(dynamic Bayesian nework),**其最简单的实现是隐马尔可夫模型**(hidden Markov model)。
|
||||
|
||||
隐马尔可夫模型实现的是序列化的建模,它打破了对数据独立同分布的固有假设,侧重于时序上的依赖关系。在自然语言和金融市场数据这类时间序列(time series)中,某个数据往往会受到之前数据的影响,这种情况下还要强行套用独立同分布假设的话,肯定不会符合实际情况。隐马尔可夫模型正是将过去对现在的影响纳入模型中,以此来实现更加准确的预测。
|
||||
|
||||
**隐马尔可夫模型则是通过隐藏状态生成观测序列的马尔可夫过程**。在更简单的马尔可夫链(Markov chain)里,所有状态是都直接可见的,因此状态转移概率是唯一的参数。而在隐马尔可夫模型中,状态本身不是直接可见的,可见的是取决于状态的输出。由于每个状态都有和输出相关的概率分布,因而隐马尔可夫模型的输出就能够提供关于隐藏状态的信息。
|
||||
|
||||
隐马尔可夫模型可以通过下面这个例子来直观地描述,这个例子来自维基百科,是匈牙利数学家乔治·波利亚(George Polya)所提出的罐子问题(urn problem)的变种。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/0f/51/0f4c47cfcddb28cfd888891bdddc4d51.png" alt="" />
|
||||
|
||||
罐子问题表示的隐马尔可夫模型(图片来自维基百科)
|
||||
|
||||
上图给出了这个例子的图示:一个观察者不能靠近的房间里有3个罐子$X_1, X_2, X_3$,每个罐子里都有同样标签的4个球$y_1, y_2, y_3, y_4$。一个具有上帝视角的控制者按一定概率首先选定一个罐子,再从罐子里随机抽取出一个球,放到和房间外面连接的传送带上,同时再补充一个同样的球到罐子里。这样观察者能看到的就是每次抽出的球,而不是每次抽球的罐子。
|
||||
|
||||
在隐马尔可夫模型中,罐子表示的是由概率模型生成的不可观测的随机序列,每个罐子都代表了系统的一种状态,所以这个隐藏的序列叫作**状态序列**(state sequence),也就是上图中圆圈的部分。从罐子中抽出的球表示的是由每个状态所生成的观测所组成的随机序列,这个可见的序列叫作**观测序列**(observation sequence),也就是上图中方形的部分。序列中的每个位置都代表了一个时刻,从而体现出对时序的建模。
|
||||
|
||||
回到前面的例子,在选取罐子时,控制者的策略并不是完全随机的,他在某一时刻的选择只取决于前一时刻的选择,而与之前所有时刻的选择都没有关系,这个状态变化的过程就是**齐次马尔可夫过程**(homogeneous Markov process)。
|
||||
|
||||
有一种“浪漫”的说法说鱼的记忆只有7秒,这么看来齐次马尔可夫过程的记忆就只有1轮。在前面的例子里,如果某个时刻的状态是$X_3$,那就说明上一时刻的状态一定是$X_2$,因为从状态$X_1$是没法直接跳转到$X_3$的。
|
||||
|
||||
在观测时,任意时刻的观测只取决于当时的状态,而与其他的状态和观测无关,这样的隐马尔可夫模型就满足**观测独立性**(observation independence)。
|
||||
|
||||
假设所有可能的状态$q_i$总共有$N$个,所有可能的观测结果$v_j$总共有$M$个,所有抽取出的状态结果$i_t$构成长度为$T$的状态序列,所有状态生成的观测结果$o_t$则构成长度为$T$的观测序列。基于齐次马尔可夫性和观测独立性这两个假设,就可以给出隐马尔可夫过程的定量表示。
|
||||
|
||||
在第一个时刻的状态选择中,每个状态会被赋予一个初始概率(initial probability)$\pi_i = P(i_1 = q_i)$,这些初始概率共同组成了初始状态概率向量(initial state distribution)$\boldsymbol \pi$。
|
||||
|
||||
随着时序的推移,系统的状态也会不断变化,从上一个状态$q_i$跳转到下一个状态$q_j$的概率$a_{ij} = P(i_{t + 1} = q_j | i_t = q_i)$叫做转移概率(transition probability),所有状态转移概率组成一个维度和状态数目相同的$N$维对称方阵$\bf A$,这个矩阵就是状态转移概率矩阵(transition probability matrix)。
|
||||
|
||||
对于观察者来说,状态是不可见的,可见的是由状态生成的观测。但状态和观测不是一一对应的关系,一个状态会按照概率分布产生不同的观测。在某一时刻,状态$q_j$生成观测$v_k$的概率$b_j(k) = P(o_t = v_k | i_t = q_j)$叫作发射概率,或者观测概率(emission probability)。
|
||||
|
||||
由于可能的状态数目是$N$个,每个状态又有$M$种可能的观测,这么多观测的概率共同形成了$N \times M$维的观测概率矩阵$\bf B$(emission probaility matrix)。
|
||||
|
||||
**初始状态概率向量、状态转移概率矩阵和观测概率矩阵共同构成了隐马尔可夫模型的三要素**。初始状态概率向量确定了隐马尔可夫模型的结构,状态转移概率矩阵生成了隐藏的状态序列,观测概率矩阵则确定了如何从状态生成观测。三者一起定义出完整的隐马尔可夫模型。下图就给出隐马尔可夫模型的概率图表示。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/ce/db/cea8105d25c0cc39235eda14f6b618db.png" alt="" />
|
||||
|
||||
隐马尔可夫的概率图表示,其中$\bf x$表示状态,$\bf y$表示观测(图片来自维基百科)
|
||||
|
||||
在隐马尔可夫模型中,表示隐藏的状态的变量也叫隐变量(latent variable)。一般来说,马尔可夫链假设当前的输出只和之前的有限个输出有关,这有限个输出的数目就是阶数。
|
||||
|
||||
马尔可夫链的阶数越高,它需要确定的参数也就越多。而隐马尔可夫模型通过引入隐变量将输出,也就是观测之间的马尔可夫性转移成隐变量之间的马尔可夫性,虽然没有明显地增加参数的数目,却能表示输出之间更复杂的依赖关系。这种结构也被称为状态空间模型(state space model),广泛应用在信号分析和控制论等其他领域中。
|
||||
|
||||
从时序上看,上面的模型有马尔可夫的特性;从数据生成的角度看,隐马尔可夫模型又可以看成是一种推广的混合模型。从上面的图中可以看出,同样的观测结果可能来自于不同的状态,因此可以看成是不同状态的混合,每一个状态都对应着混合结果中的一个成分。只不过其中不同的成分不是相互独立的,它们由马尔可夫链所定义的依赖关系联系起来。
|
||||
|
||||
推而广之,**混合模型**(mixture model)是由若干个成分构成的概率模型,每个成分都来自一个独立的概率分布。在总体中采出来的每个样本都是多个成分的混合。虽然不能准确地确定单个样本来自于哪个成分,但通过多个样本的统计特性可以推断出每个混合成分的特征。最常见的混合模型是高斯混合模型(Gaussian mixture model),其中的每个成分都是高斯分布。这部分内容暂且按下,稍后再做详解。
|
||||
|
||||
**隐马尔可夫模型属于生成模型**,可以从贝叶斯的角度加以审视。隐马尔可夫的三要素共同定义了状态和观测的联合分布,其中转移概率相当于隐藏状态的先验分布,而观测概率相当于已知状态时观测的似然分布。
|
||||
|
||||
但对于隐藏状态本身的变化而言,我们默认了它们的先验分布是不包含信息的均匀分布。但由于转移概率本身是多取值的分类分布,因此自然的思路是将转移概率的先验设置为狄利克雷分布,也就是分类分布的共轭先验。
|
||||
|
||||
狄利克雷分布中有一系列的参数$\alpha_i$,如果所有参数的取值都相等,这样的分布就是对称狄利克雷分布(symmetric Dirichlet distribution)。这种分布也可以看成是无先验的分布,并不能反映出哪些状态比其他状态更可能出现。
|
||||
|
||||
这唯一的参数被称为浓度参数(concentration parameter),能够决定转移矩阵的稀疏程度。小于1的浓度参数对应的转移矩阵是稀疏矩阵,其中对于每个给定的源状态,只有少数目标状态具有不可忽略的转移概率。
|
||||
|
||||
如果一个狄利克雷分布还不够,那还可以使用层次化的狄利克雷分布。在两级先验中,上层分布(the upper distribution)控制着下层分布(the lower distribution)的参数,下层分布再来继续控制转移概率。这里的上层分布起到的就是前面无信息先验的作用,可以决定哪些状态更容易出现,它的浓度参数决定了状态的密度。
|
||||
|
||||
**虽然标准的隐马尔可夫模型是生成模型,其在判别模型中的对应是条件随机场**(conditional random field)。条件随机场融合了马尔可夫随机场的无向图特性和隐马尔可夫模型的条件特性,如果将上图中隐马尔可夫模型中的有向边都改成无向边,就形成了线性链(linear chain)条件随机场。
|
||||
|
||||
线性链条件场将状态定义为可见的输入,发射概率和转移概率也被重新定义为特征函数(feature function)。特征函数可以用来计算输出关于输入的条件概率,进而实现判别,其数学细节在这里就不赘述了。
|
||||
|
||||
在Python中有一个专门实现隐马尔可夫模型的库hmmlearn,这个库原本是Scikit-learn中的一个模块,但在新的版本中自立门户。这里使用的例子是根据英超近15个赛季曼市德比的结果构造出的隐马尔可夫模型,其中状态变量被设定为主客场,有2个取值;观测变量则被设定为曼城方的比赛结果,有胜平负3个取值;模型的三要素可以根据30场比赛的结果统计出来。
|
||||
|
||||
在未知2018-19赛季英超日程安排,也就是不知道主客场这个隐变量的条件下,利用隐马尔可夫模型也能估计两场曼市德比的胜负。估计结果表明:两队每场都要拼个你死我活,单场比赛平分秋色不太可能出现。
|
||||
|
||||
今天我和你分享了隐马尔可夫模型的基本原理,包含以下四个要点:
|
||||
|
||||
<li>
|
||||
隐马尔可夫模型由隐藏的状态序列和可见的观测序列构成,能够对时序依赖关系建模;
|
||||
</li>
|
||||
<li>
|
||||
隐马尔可夫模型的定量描述包括初始状态向量、状态转移矩阵和观测矩阵三部分;
|
||||
</li>
|
||||
<li>
|
||||
作为生成模型,隐马尔可夫可以视为混合模型的推广;
|
||||
</li>
|
||||
<li>
|
||||
隐马尔可夫模型的判别方法对应是条件随机场。
|
||||
</li>
|
||||
|
||||
隐马尔可夫模型最主要的用武之地非自然语言处理莫属,语音和文字之间天然的时序关联让隐马尔可夫模型如鱼得水。
|
||||
|
||||
你可以查阅资料,了解隐马尔可夫模型在自然语言处理中的应用,并在这里分享你的见解。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/d6/5f/d6a7bbe8213c2292b072cd5157d9e45f.jpg" alt="" />
|
||||
|
||||
|
||||
104
极客时间专栏/geek/机器学习40讲/概率图模型/34 | 连续序列化模型:线性动态系统.md
Normal file
104
极客时间专栏/geek/机器学习40讲/概率图模型/34 | 连续序列化模型:线性动态系统.md
Normal file
@@ -0,0 +1,104 @@
|
||||
<audio id="audio" title="34 | 连续序列化模型:线性动态系统" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/36/12/36e003a82f822724c8654a63e4b28c12.mp3"></audio>
|
||||
|
||||
在隐马尔可夫模型中,一般的假设是状态和观测都是离散的随机变量。如果假定隐藏的状态变量满足连续分布,那么得到的就是线性动态系统。虽然这个概念更多地出现在信号处理与控制论中,看起来和机器学习风马牛不相及,但是从马尔可夫性和贝叶斯概率的角度观察,**线性系统也是一类重要的处理序列化数据的模型**。
|
||||
|
||||
**线性动态系统**(linear dynamical system)的作用可以通过下面这个例子来说明。假设一个传感器被用于测量未知的物理量$z$,但测量结果$x$会受到零均值高斯噪声的影响。在单次测量中,根据最大似然可以得到,对未知的$z$最优的估计值就是测量结果本身,也就是令$z = x$。可是如果可以对$z$进行多次重复测量的话,就可以通过求解这些结果的平均来平滑掉随机噪声的影响,从而计算出更加精确的估计。
|
||||
|
||||
可一旦多次测量结果是在不同的时间点上测出的,也就是时间序列$x_1, x_2, \cdots, x_N$时,问题就没有那么简单了,因为这种情况下需要将未知变量$z$的**时变特性**考虑进去,前一时刻的$z$和后一时刻的$z$就不一样了。如果还是像上面那样直接对不同时刻的测量结果求均值的话,虽然随机噪声的影响可以被平滑掉,但变量本身的时变特性又会作为另一种噪声出现在结果中。
|
||||
|
||||
这种按倒葫芦起了瓢的结果显然不是我们想要的。要想获得更精确的估计,可以根据$z$的具体变化特性采用不同的策略。如果变量$z$具有慢变的特性,也就是它的波动周期远远大于测量周期,那么不同时刻的测量结果中的差别几乎全部来源于随机噪声,变量本身并不会出现多少波动。这时就可以将平滑窗口的长度,也就是用于求平均的测量结果的数目取得大一些,以取得更好的抑制随机噪声的效果。
|
||||
|
||||
反过来,如果变量本身是快速变化的,这时就要适当地调小平滑窗口,同时给相距较近的测量结果赋予更大的平滑权重。如果变量变化的时间尺度比相邻测量之间的时间间隔还要小,两次测量之间都能变量都能经历多次波动,就只能以测量结果作为最优的估计了。
|
||||
|
||||
上面的描述只是定性的说明,如果要在此基础上对最优的平滑参数进行定量计算的话,就需要对系统的时间演化和测量过程进行概率式的建模,其模型就是线性动态系统。
|
||||
|
||||
**线性动态系统也是一种动态贝叶斯网络,其中的显式变量和隐藏变量都是连续变量,它们之间的依赖关系则是线性高斯的条件分布**。最典型的线性动态系统是用于描述一个或一组高斯噪声影响下的实值变量随时间变化的过程,可以用以下的条件概率表示:
|
||||
|
||||
$$ P({\bf X}^{(n)} | {\bf X}^{(n - 1)}) = \mathscr{N} ({\bf A}{\bf X}^{(n - 1)}, {\bf Q}), P({\bf O}^{(n)} | {\bf X}^{(n)}) = \mathscr{N} ({\bf H}{\bf X}^{(n)}, {\bf R}) $$
|
||||
|
||||
其中$\bf X$是$n$维的隐藏状态变量,$\bf O$是$m$维的观测变量,$\bf A$是定义了模型的线性转化规则的$n$维方阵,$\bf Q$是定义了状态随时间演化过程中的高斯噪声的$n$维方阵,$\bf H$是定义了从状态到观测的线性转化规则的$n \times m$维矩阵,$\bf R$是定义了观测结果中高斯噪声的$m$维方阵。隐藏状态变量初始的取值${\bf X}^{(0)}$也满足高斯分布,其概率密度可以写成
|
||||
|
||||
$$ P({\bf X}^{(0)}) = \mathscr{N} ({\bf X}^{(0)}| \boldsymbol \mu_0, V_0) $$
|
||||
|
||||
如果将线性动态系统放在状态空间表象(state space representation)下观察,上面的条件概率就可以改写成状态方程的形式
|
||||
|
||||
$$ {\bf X}^{(n)} = {\bf A}{\bf X}^{(n - 1)} + {\bf w} $$
|
||||
|
||||
$$ {\bf O}^{(n)} = {\bf H}{\bf X}^{(n)} + {\bf v} $$
|
||||
|
||||
$$ {\bf X}^{(0)} = {\bf t}^{(0)} + {\bf u} $$
|
||||
|
||||
其中${\bf w}, {\bf v}, {\bf u}$都是均值为0的高斯分布。
|
||||
|
||||
对原始的线性动态系统模型的一种扩展方式是将系统中的初始状态${\bf X}^{(0)}$从单个的高斯分布改写为高斯混合模型。如果高斯混合模型中包含$K$个成分,那么后面所有状态也会是多个高斯分布的混合,通过求解边界概率依然可以对模型进行概率推断。
|
||||
|
||||
除了状态本身的概率分布外,从状态到观测的观测概率也可以写成高斯混合模型的形式。如果观测概率是$K$个高斯分布的混合,那么初始状态${\bf X}^{(0)}$的后验概率同样是$K$个高斯分布的混合。随着时序的推进,后验概率的表示会变的越来越复杂。在时刻$n$,状态${\bf X}^{(n)}$的后验概率数目可以达到$K ^ n$个,这时参数的指数式增长就会削弱模型的实用性。
|
||||
|
||||
从隐马尔可夫模型和线性系统出发,可以定义出一些非传统机器学习意义上的概念。如果要根据截至目前的观测结果来估计隐藏变量,这样的问题就是滤波问题(filtering);如果要根据一串完整的观测序列来估计隐藏变量,这样的问题就是平滑问题(smoothing)。滤波和平滑对隐变量的估计都属于概率图模型推断任务的范畴,在离散的隐马尔可夫模型和连续的线性动态系统中都可以实现。
|
||||
|
||||
另一个只适用于离散模型的运算是译码(decoding),其任务是根据观测序列找到后验概率最大的隐变量序列。这些术语被更广泛地应用在通信和信息处理之中,但是站在更宏观的角度看,它们也可以归结到广义的机器学习范畴之中。
|
||||
|
||||
如果要在离散的时间序列上分析连续分布的状态和观测结果的话,需要使用线性卡尔曼滤波器这个数学工具。**线性卡尔曼滤波器**(linear Kalman filter)的作用是根据一串包含统计噪声和干扰的观测结果来计算出单一的、但是更加精确的观测估计。在某个时间点上,给定截止目前所获得的所有证据,可以计算出关于系统的当前状态的置信状态(belief state),其中包含了最大的信息量。在离散的时序上,时刻$n$的置信状态可以定义为
|
||||
|
||||
$$ \sigma^{(n)}({\bf X}^{(n)}) = P({\bf X}^{(n)} | o^{(0: n)}) $$
|
||||
|
||||
其中${\bf X}^{(n)}$表示当前的状态,$o^{(0: n-1)}$表示之前所有的观测。在线性高斯的依赖关系下,置信状态服从高斯分布,因而可以用参数有限的均值向量和协方差矩阵来表示,具有紧凑的形式。**卡尔曼滤波器的作用就是对置信状态的均值和协方差进行更新**,更新的过程可以分成两个步骤:首先根据目前所有可用的观测计算出隐藏状态变量的置信,这个置信叫作**先验置信状态**(prior belief state),其表达式可以写成
|
||||
|
||||
$$ \sigma^{(\cdot n+1)}({\bf X}^{(n+1)}) = P({\bf X}^{(n+1)} | o^{(0: n)}) = \sum\limits_{{\bf X}^{(n)}} P({\bf X}^{(n+1)} | {\bf X}^{(n)}) \sigma^{(n)}({\bf X}^{(n)}) $$
|
||||
|
||||
式子中上标的$\cdot$是先验置信状态的标志。接下来,在这个先验置信状态的条件下要考虑最近的观测结果,根据推测出的先验置信状态和当前的观测结果共同确定当前的置信状态,其表达式可以写成
|
||||
|
||||
$$ \sigma^{(n+1)}({\bf X}^{(n+1)}) = P({\bf X}^{(n+1)} | o^{(0: n)}, o^{(n+1)}) = \dfrac{P(o^{(n+1)} | {\bf X}^{(n+1)})\sigma^{(\cdot n+1)}({\bf X}^{(n+1)})}{P(o^{(n+1)} | o^{(0: n)})} $$
|
||||
|
||||
这个递归过滤的过程对随时间变化的置信状态进行动态更新,可以看成是递归贝叶斯估计在多元高斯分布中的应用。**递归贝叶斯估计**(recursive Bayesian estimation)通过对不同时间观测值的递归使用来估计未知的概率分布,**是隐马尔可夫模型中常用的推理方法。线性卡尔曼滤波器就是递归贝叶斯估计在连续分布的状态变量上的推广**。
|
||||
|
||||
在卡尔曼滤波过程中,先验置信状态的更新由状态转移更新(state transition update)来表示。以上面的线性系统为例,直观上看,先验置信状态的新均值$\mu^{\cdot t+1}$是将状态转移的线性变换$\bf A$应用在上个时间点的均值$\mu^{\cdot t}$上,新的协方差矩阵$\Sigma^{\cdot t+1}$也是将状态转移的线性变换$\bf A$应用在上个时间点的协方差$\Sigma^{\cdot t}$上,再加上噪声的协方差$\bf Q$。总而言之,一个变换就可以将状态更新全部概括。
|
||||
|
||||
和状态转移更新相比,确定当前置信状态的**观测更新**(observation update)要复杂一些。置信状态的均值可以表示为先验置信的均值加上来源于观测结果的修正项,这个修正项是观测残差(observation residual),也就是期望观测值和实际观测值之间区别的加权,加权系数是被称为卡尔曼增益(Kalman gain)的系数矩阵$\bf K$。
|
||||
|
||||
置信状态的协方差也是对先验置信的协方差进行修正,修正的方式是减去卡尔曼增益加权后的期望协方差。在数学推导中,置信状态的参数表达式可以写成
|
||||
|
||||
$$ {\bf K}^{(n+1)} = \Sigma^{(\cdot n+1)}{\bf H}^T ({\bf H} \Sigma^{(\cdot n+1)}{\bf H}^T + {\bf R})^{-1} $$
|
||||
|
||||
$$ \mu^{(n+1)} = \mu^{(\cdot n+1)} + {\bf K}^{(n+1)}({\bf o}^{(n+1)} - {\bf H} \Sigma^{(\cdot n+1)}) $$
|
||||
|
||||
$$ \Sigma^{(n+1)} = ({\bf I} - {\bf K}^{(n+1)}{\bf H})\Sigma^{(\cdot n+1)} $$
|
||||
|
||||
**卡尔曼增益是卡尔曼滤波器中的核心参数,它体现的是观测的重要性**。当表示测量误差的协方差矩阵$\bf R$趋近于0时,卡尔曼增益会收敛到状态-观测矩阵的逆${\bf H}^{-1}$,这意味着真实的观测结果在置信状态的更新中扮演着越发重要的角色,预测的观测结果的地位则会不断下降。在此基础上进一步可以得到,置信状态在更新后,其协方差趋近于0,表示当前的状态几乎是确定的。
|
||||
|
||||
反过来,当先验置信的协方差矩阵$\Sigma^{(\cdot n+1)}$趋近于0时,计算出的卡尔曼增益也会趋近于0。这种情况下,在置信更新中占据主导地位的就变成了对分布的预测结果,后验置信和先验置信的统计特性几乎完全一致,观测结果反而变得无足轻重。随着时序的推移,置信状态最终会收敛到某个分布上,系统的不确定性也会呈现出稳定的状态。
|
||||
|
||||
上面介绍的是最原始的卡尔曼滤波器,其原理可以推广到更加复杂的情况中。如果将状态转移和状态到观测的关系建模为非线性关系,并用泰勒展开中的一阶导数和二阶导数进行局部的线性化处理,这样的卡尔曼滤波器就是**扩展卡尔曼滤波器**(extended Kalman filter)。
|
||||
|
||||
另一种用于非线性动态的改进是**无迹卡尔曼滤波器**(unscented Kalman filter),它是通过无迹变换来对非线性动态进行线性化。两者的具体细节在此就不介绍了,感兴趣的话你可以自行查阅资料了解。
|
||||
|
||||
无论是扩展卡尔曼还是无迹卡尔曼,都是对非线性特性的确定性近似(deterministic approximation)。它们放弃了精确计算的追求,转而以确定的方式求解近似的结果。这里的确定性指的是只要用相同的方式进行近似,每次得到的结果都是一样的。如果用随机的方式来对非线性特性做出近似,对应的方法就是**粒子滤波**(particle filter)。
|
||||
|
||||
粒子滤波的任务也是根据观测结果估计隐藏的状态。它并不通过复杂的积分计算出准确的结果,而是对总体的分布进行采样,用样本的经验分布来代替总体的真实分布,用样本的均值来代替总体的积分运算。
|
||||
|
||||
由于这种方法和蒙特卡洛采样的思路近似,因而也被称为序贯蒙特卡洛(sequential Monte Carlo)。作为一种非参数方法,粒子滤波可以用来建模任意形式的概率分布,虽然效果未必有多好,很多情况下却是唯一可行的方法。
|
||||
|
||||
粒子滤波用样本的平均值来代替总体分布的数学期望,但这里的平均值不是一般的平均,每个样本点都被赋予一个权值,样本及其权重共同构成了粒子滤波中的“粒子”。整个粒子滤波的过程就是动态调整样本的权重,使经验分布不断接近真实分布的过程,具体的数学细节在这里就不讨论了。
|
||||
|
||||
今天我和你分享了线性动态系统和一些滤波算法的基本原理,包含以下四个要点:
|
||||
|
||||
<li>
|
||||
线性动态系统是具有连续状态变量的隐马尔可夫模型,所有条件概率都是线性高斯分布;
|
||||
</li>
|
||||
<li>
|
||||
线性动态系统的求解是根据先验置信状态和观测结果来更新系统的置信状态;
|
||||
</li>
|
||||
<li>
|
||||
卡尔曼滤波器可以对线性动态系统进行精确求解;
|
||||
</li>
|
||||
<li>
|
||||
当系统具有非线性和非高斯特性时,可以通过扩展卡尔曼滤波器、无迹卡尔曼滤波器和粒子滤波等方法求解。
|
||||
</li>
|
||||
|
||||
卡尔曼滤波器及其变种在动态的运动目标跟踪中有广泛的应用,是机器人感知、定位与导航的一种重要方法。
|
||||
|
||||
你可以查阅资料,了解卡尔曼滤波器具体的应用方式,并在这里分享你的见解。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/93/40/93feb627e6f15344f030eb48a635b240.jpg" alt="" />
|
||||
|
||||
|
||||
100
极客时间专栏/geek/机器学习40讲/概率图模型/35 | 精确推断:变量消除及其拓展.md
Normal file
100
极客时间专栏/geek/机器学习40讲/概率图模型/35 | 精确推断:变量消除及其拓展.md
Normal file
@@ -0,0 +1,100 @@
|
||||
<audio id="audio" title="35 | 精确推断:变量消除及其拓展" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/96/24/9603fc9b7beb9864f70933b8dd3cf924.mp3"></audio>
|
||||
|
||||
在前面的几讲中,我和你分享了概率图模型中的一些代表性模型,它们都属于表示(representation)的范畴,将关系通过结点和有向边精确地表示出来。接下来,我们将对概率图模型的推断任务加以介绍。
|
||||
|
||||
**推断**(inference)是利用图结构表示的联合分布来计算某个变量的概率,得到关于目标问题的数字化结论。在概率图模型中,因子分解与条件独立性这两大法宝可以大量节约概率运算,给推断问题带来简洁高效的解法。
|
||||
|
||||
概率图中的推断可以分为两类:**精确推断和近似推断**。精确推断(exact inference)是精确计算变量的概率分布,可以在结构比较简单的模型中实现;近似推断(approximate inference)则是在不影响推理正确性的前提下,通过适当降低精度来提高计算效率,适用于结点数目多、网络结构复杂的模型。在这一讲中,我们先来分析精确推断。
|
||||
|
||||
**精确推断最基本的方法是变量消除**(variable elimination),这种方法对“与待求解的条件概率无关的变量”进行边际化处理,也就是将中间变量约掉,从而计算出目标概率。变量消除的基本思想可以通过贝叶斯网络中所举的例子来解释,问题对应的贝叶斯网络如下图所示,所有的先验概率与条件概率都在图中给出。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/10/8c/102b461742461283f716dc04dcba4b8c.png" alt="" />
|
||||
|
||||
如果要用变量消除法计算变量$hb$的分布,就得把除$hb$之外的所有变量挨个消除。由于变量$bp$只和另一个变量$do$相关,所以以它作为突破口是个不错的选择。将所有和变量$bp$相关的因子相乘,再对变量$bp$求和,就可以算出一个新因子
|
||||
|
||||
$$ \psi_1 (fo, do) = \sum\limits_{bp} p(bp) p(do | fo, bp) $$
|
||||
|
||||
除了$bp$之外,另一个根结点是$fo$。它会同时直接影响$lo$和$do$,所以在计算因子时需要将这两个变量都考虑进来。$fo$与$do$的关系已经由上面计算出的新因子所定义,与$lo$的关系则是纯粹的条件概率,两者结合可以表示为另一个新因子
|
||||
|
||||
$$ \psi_2 (do, lo) = \sum\limits_{fo} \psi_1 (fo, do) p(fo) p(lo | fo) $$
|
||||
|
||||
变量$lo$只出现在新因子$\psi_2$中,消除这个变量的结果就是只和变量$do$有关的因子$\psi_3(do) = \sum_{lo} \psi_2 (do, lo)$求和。最后,根据$do$与$hb$之间的关系可以将变量$do$消除掉,获得最终的结果
|
||||
|
||||
$$ p(hb) = \sum\limits_{do} \psi_3(do) p(hb | do) = \sum\limits_{do} p(hb | do) \sum\limits_{lo} \sum\limits_{fo} p(fo) p(lo | fo) \sum\limits_{bp} p(bp) p(do | fo, bp) $$
|
||||
|
||||
从上面的过程可以看出,变量消除的过程就是不断对中间变量穷举并求和(variable summation),整个过程通过对因子的操作实现。因子(factor)的概念在马尔可夫随机场一讲中有过介绍,在这里就不重复了。如果在目标变量$\bf X$和单个中间变量$Y$上共同定义出因子函数$\phi ({\bf X}, Y)$,那么对$Y$的穷举求和就可以表示为$\psi ({\bf X}) = \sum_Y \phi ({\bf X}, Y)$,也就是对因子函数的边际化(factor marginalization)。
|
||||
|
||||
如果随机变量$Y$在多个因子$\phi_1 ({\bf X}, Y), \phi_2 ({\bf Z}, Y), \cdots$中都出现的话,就需要综合考虑这个变量的整体作用,也就是将所有包含这个公共变量的不同因子相乘(factor multiplication)。这样做相当于将单个变量“孤立”出来,它产生的所有影响都体现在因子函数的乘积之中,对所有因子函数的乘积统一进行边际化就可以彻底消除变量$Y$的所有影响。
|
||||
|
||||
将上面两个步骤结合起来,就可以得到变量消除的完整过程。变量的消除根据变量之间的依赖关系,按照从简单到复杂的顺序完成。
|
||||
|
||||
在选定一个待消除的变量后,首先要找到和这个变量有关的所有因子函数,将它们相乘以得到对变量影响方式的完整描述,再对这个变量在不同取值下的联合概率求和,以计算将它消除之后的边缘概率。按照这样的顺序将所有中间变量消除后,就可以计算出想要的边际概率了。
|
||||
|
||||
不难看出,这样的的求解方法建立在“因子乘积-变量求和”的步骤上,因而被称为**和积变量消除**(sum-product variable elimination)。
|
||||
|
||||
前面介绍的都是利用变量消除来进行因果推断,也就是解决解释问题。那么这套方法能不能用来由果推因呢?当然可以!还是以上面的贝叶斯网络为例,在前面我曾直接给出结论,在灯亮但狗没叫时,家里有人和没人的概率是一半一半。那么这个概率究竟是怎么计算出来的呢?
|
||||
|
||||
这个问题实际上求解的是后验概率$p(fo = 0 | lo = 0, hb = 1)$。由于两个观察变量lo和hb并不存在子结点,它们所定义的因子$\phi (fo, lo)$和$\phi (do, hb)$就只包含和自身相关的条件概率。而贝叶斯网络中的其他3个变量共同构成了汇连结构,要将它们和观察变量区分开来,不妨用这三者共同定义出另一个因子$\phi (fo, bp, do)$。由于两个观察变量具有确定的结果,因此在计算因子的关系时,只需要考虑$lo = 0, hb = 1$的情形。这样就可以将所有因子以列表形式表示出来。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/de/31/de3a44cbd21695ed0d9f5c13fd331c31.png" alt="" />
|
||||
|
||||
可以看出,上面的因子表格中的左侧3列涵盖了3个未知变量所有可能的取值,第4列则给出了对应的因子函数值。在执行变量消除时,首先要进行因子相乘,也就是计算每一行里所有概率的乘积,这相当于求解在这个贝叶斯网络中出现$lo=0, hb=1$的所有可能性。由于问题问的是查询变量$fo$的分布,在求和时就需要对中间变量$bp$和$do$进行求和,也就是边际化处理。
|
||||
|
||||
具体做法是将所有$fo = 0$所在行的因子乘积求和,得到联合概率$p(fo = 0, lo = 0, hb = 1)$;再将所有$fo = 1$所在行的因子乘积求和,得到联合概率$p(fo = 1, lo = 0, hb = 1)$。利用贝叶斯定理进行归一化后就可以求出,后验概率$p(fo = 0 | lo = 0, hb = 1) = 0.5006$,这和贝叶斯网络一讲中计算出的结果是完全一致的。
|
||||
|
||||
在预测问题中,已知的$lo=0$和$hb=1$被称为证据(evidence)。基于证据的推断本质上是计算非归一化的联合分布$p(fo, lo = 0, hb = 1)$,利用贝叶斯网络的性质可以证明,这个分布其实是个吉布斯分布,起到归一化作用的常数$p(lo = 0, hb = 1)$则可以看成是约化因子(reduced factor)。
|
||||
|
||||
基于和积的变量消去算法实际是利用了乘法对加法的分配律,将对多个变量的积的求和分解为对部分变量交替进行的求积与求和。如果图模型的规模较小,结点的数目较少,直接利用全概率公式进行求和或求积分,就可以计算出每个结点的边缘概率。但当结点数目增加时,和积变量消去的计算量会以指数形式增长。从运算效率的角度对变量消去加以改进,得到的就是置信传播算法。
|
||||
|
||||
**置信传播**(belief propagation)也是精确推断的算法,它将图模型中每个节点的概率分布传递给相邻的节点,以此影响相邻节点的概率分布状态,经过一定次数的迭代,每个节点的概率分布将收敛到一个平稳分布。这种算法适用于包括贝叶斯网络和马尔可夫随机场在内的所有概率图模型,但今天我将以一种新的模型——因子图为例来说明它的原理。
|
||||
|
||||
因子图(factor graph)是一类二分图,用来表示对函数的因子分解,其中的结点分为变量结点(variable node)和因子结点(factor node)两种,相关的结点之间则由无向边连接。假定一个因子图表示的是函数$g(x_1, x_2, x_3) = f_1(x_1)f_2(x_1, x_2)f_3(x_1, x_2)f_4(x_2, x_3)$,那它的结构就如下图所示。因子图能够更加直观地刻画函数的可分解性,贝叶斯网络和马尔可夫随机场也都可以表示成因子图。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/86/e4/869056c26cf34604bf56765630c816e4.jpg" alt="" />
|
||||
|
||||
置信传播算法的核心概念是消息(message),它是结点之间信息流动的载体。在因子图中,从变量$v$到因子$a$的消息是来自除$a$之外所有与$v$相邻因子的消息乘积,如果$v$没有除$a$之外其他的邻接因子,其消息就被设置为均匀分布。
|
||||
|
||||
反过来,从因子$a$到变量$v$的消息就复杂一些,它先要对除来自$v$外,进入$a$的所有变量消息相乘,再对乘积边际化掉所有除$v$之外和$a$邻接的所有变量,这在本质上和变量消除的和积算法是一致的。每个变量的置信度就是根据这样的准则在图结构中往返流动,不断更新。
|
||||
|
||||
如果经过多轮迭代后,图模型的因子收敛到稳态,这时就可以计算单个结点的边际概率。每个结点的边际概率都正比于和它相邻的所有因子传递给它的消息的乘积,归一化处理后就可以得到真正的概率。一个因子所包含的所有变量的联合边际分布则正比于因子函数本身和来自这些变量的消息的乘积,和单个结点一样,这个值也需要归一化处理。
|
||||
|
||||
置信传播算法在理论上并不保证对所有图结构都能收敛,但当图模型具有树结构时,计算出的概率分布一定会收敛到真实值,从而实现精确推断。无环图天然地具有树的特性,可即使原始的图中存在有向或者无向的环路结构,也可以通过让变量聚集成不同的团来生成类似树的结构,这种结构就是团树。
|
||||
|
||||
团树(clique tree)也叫联结树(junction tree),是一种通过变量连接的结构。其特点是**如果一个变量出现在树结构的两个团中,那它就一定会出现在连接这两个团的路径上的所有团中**。
|
||||
|
||||
这样看来,每个相连的团都像是古时候的驿站,它们的公共变量则是信使。在传递消息时,首先要在团树中选出一个根结点,从这个根结点出发构造出一棵树。根节点通常是包含待查询的目标变量的团,以此作为消息传递的枢纽,生成的树则是传递消息的道路网。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/7c/aa/7ca666e94b1eacc63026d037561a1faa.png" alt="" />
|
||||
|
||||
马尔可夫随机场及其团树示例(图片来自维基百科)
|
||||
|
||||
消息的传递需要经过两个步骤:第一个步骤是收集(collection),指的是所有叶结点向根结点传递消息,直到根结点收到所有邻接结点的消息,这是消息汇总的过程;第二个步骤是分发(distribution),指的是根结点向叶结点传递消息,直到所有叶结点均收到消息,这是消息更新的过程。这样的一来一回之后,团树的每条边上都有不同方向的两条消息,基于这些消息就能计算出所有变量的边际概率。
|
||||
|
||||
**和变量消除相比,置信传播的优势在于提升了计算效率**。变量消去算法的缺点在于一次变量消去只能求出本次查询变量的条件分布,不同的查询将带来大量的重复计算。在团树中流动的每个消息都相当于对一组关联因子的封装,查询不同变量时只需调用相关的封装就可以了,从而避免了复杂的重复运算。
|
||||
|
||||
在pgmpy中,团树被定义为models模块中的JunctionTree。利用BayesianModel类中的to_junction_tree函数可以将现有的贝叶斯网络转换成团树,转换出的团树就可以使用inference模块中的BeliefPropagation类来求解。用团树和置信传播求解上面的例子,可以得到与对贝叶斯网络进行变量消除一致的结果。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/9d/1d/9df4bad90a25c11db110ce8366172f1d.png" alt="" />
|
||||
|
||||
今天我和你分享了对概率图模型的精确推断,包含以下四个要点:
|
||||
|
||||
<li>
|
||||
推断是利用图结构表示的概率分布计算查询变量的概率,可以分为精确推断和近似推断;
|
||||
</li>
|
||||
<li>
|
||||
变量消除通过对非查询变量的边际化处理实现精确推断,具体步骤包括因子乘积和变量求和;
|
||||
</li>
|
||||
<li>
|
||||
置信传播通过消息传递实现精确推断,具有较高的计算效率;
|
||||
</li>
|
||||
<li>
|
||||
将图模型改造成团树结构可以保证置信传播算法的收敛性。
|
||||
</li>
|
||||
|
||||
在变量消除中,选取消除变量的顺序是个重要的问题,顺序选得好可以很大程度上简化运算。在文中的例子里,确定消除顺序的原则是最小邻居,也就是选择依赖变量最少的变量。那么除此之外,还有哪些确定消除顺序的原则呢?
|
||||
|
||||
你可以查阅相关资料,并在这里留下你的看法。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/d3/09/d37a7f5323c6c6df5ff39973a9a3f409.jpg" alt="" />
|
||||
|
||||
|
||||
106
极客时间专栏/geek/机器学习40讲/概率图模型/36 | 确定近似推断:变分贝叶斯.md
Normal file
106
极客时间专栏/geek/机器学习40讲/概率图模型/36 | 确定近似推断:变分贝叶斯.md
Normal file
@@ -0,0 +1,106 @@
|
||||
<audio id="audio" title="36 | 确定近似推断:变分贝叶斯" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/d6/af/d615da8c2c3e7e89ac114bf9b7dfbbaf.mp3"></audio>
|
||||
|
||||
虽然精确推断能够准确计算结果,但它的应用范围却严重受限。当网络的规模较大、结点较多时,大量复杂的因子会严重削弱精确推断的可操作性,虽然这类方法在原则上依然可行,却难以解决实际问题。
|
||||
|
||||
另一方面,如果模型中同时存在隐变量等非观测变量和未知的参数时,复杂的隐藏状态空间也会让精确的数值计算变得难以实现。要在这样的模型上实现推断,就不得不借助近似推断。
|
||||
|
||||
**近似推断是在精确性和计算资源两者之间的折中**。如果具有无限的计算资源,精确推断也不是不能实现,但近似推断可以在有限时间内解决问题,而不是画一张水月镜花的大饼。从实现方式上看,近似推断可以分为**确定性近似**和**随机性近似**两类,今天我先和你聊聊确定性近似。
|
||||
|
||||
**确定性近似**(deterministic approximation)属于**解析近似**(analytical approximation)的范畴。**绝大多数贝叶斯推断任务最终都可以归结到后验概率的计算,算出来的后验概率在理想情况下应该以解析式的形式出现**。
|
||||
|
||||
当这个函数复杂到没法用解析式表达时,一个直观的思路是找到另一个形式更简洁的函数按照一定规则来尽可能地逼近这个复杂函数,这种方法就是确定性近似。我们再熟悉不过的四舍五入其实就是最简单的确定性近似。
|
||||
|
||||
**确定性近似的典型代表是变分贝叶斯推断**(variational Bayesian inference),它解决的问题是对隐变量$\bf y$关于已知输入$\bf x$的后验概率$p({\bf y} | {\bf x})$的近似,近似的方式是利用最优的近似概率分布$q({\bf y})$来逼近$p({\bf y} | {\bf x})$。
|
||||
|
||||
这里的$q({\bf y})$表示的是$\bf y$在$\bf x$这一组特定的输入数据之上的分布,它并不会将$\bf x$视为可变的参量。
|
||||
|
||||
从数学上看,如果假定模型的参数$\boldsymbol \alpha$是固定不变的,那么隐变量$\bf y$关于输入$\bf x$的后验概率可以写成
|
||||
|
||||
$$ p({\bf y} | {\bf x}, \boldsymbol \alpha) = \dfrac{p({\bf y}, {\bf x} | \boldsymbol \alpha)}{\int\limits_y p({\bf y}, {\bf x} | \boldsymbol \alpha)} $$
|
||||
|
||||
虽然后验概率将数据和模型联系起来,但隐变量的不可观察性使分母上的积分式变得无法计算。期望最大化算法(EM)虽然能够用于求解隐变量,但它是使输出结果最大的那个隐变量取值来代替原本的求和运算,简化求解的同时也失去了贝叶斯推断的边际化这一精髓。要在保留边际化操作的基础上做出近似,就得借助于变分法。
|
||||
|
||||
变分法的出发点是观测的概率分布$p({\bf x})$,它的对数可以利用条件概率的性质来加以改写
|
||||
|
||||
$$ \log[p({\bf x})] = \log \int\limits_{\bf y} p({\bf x}, {\bf y}) = \log \int\limits_{\bf y} p({\bf x}, {\bf y}) \dfrac{q({\bf y})}{q({\bf y})} = \log \mathbb{E}_q \dfrac{p({\bf x}, {\bf Y})}{q({\bf y})} $$
|
||||
|
||||
上面的表达式中涉及对求和项的对数运算,这时利用**简森不等式**(Jensen’s inequality)可以将它简化为对对数项的求和,也就是
|
||||
|
||||
$$ \log[p({\bf x})] \ge \mathbb{E}_q \log\dfrac{p({\bf x}, {\bf Y})}{q({\bf y})} = \mathbb{E}_q \log p({\bf x}, {\bf Y}) - \mathbb{E}_q \log q({\bf y}) $$
|
||||
|
||||
等式右侧的结果被称为**变分下界**(variational lower bound),也叫**证据下界**(evidence lower bound),它小于或者等于等式左侧的$\log[p({\bf x})]$,用对数概率减去变分下界就可以得到$q({\bf y})$和$p({\bf y} | {\bf x})$的KL散度。
|
||||
|
||||
这说明变分下界可以用来表示隐变量的预测分布$q({\bf y})$和根据观测结果推导出的真实分布$p({\bf y} | {\bf x})$到底相差多少,也就是近似的接近程度。两个分布之间的变分下界越大,它们之间的KL散度就会越小,分布特性也就越接近。
|
||||
|
||||
提升变分下界要两手抓:一方面要尽可能地增加$p({\bf x})$,因为等式左侧不小于等式右侧,变分下界的增加意味着$\log[p({\bf x})]$得增加得更多,这一过程被称为**近似学习**(approximate learning);另一方面,在$p({\bf x})$确定之后,就需要找到在这个确定的$p({\bf x})$上,让变分下界最大的隐变量分布,也就是$q({\bf y})$,这一过程被称为**近似推断**(approximate inference)。
|
||||
|
||||
要对变分下界做出优化,需要引入平均场理论的方法。**平均场理论**(mean field theory)与其说是方法,不如说是思想:它将复杂的整体模型简化为若干个相互独立的局部模型的组合。
|
||||
|
||||
在变分贝叶斯中,平均场理论将复杂的多变量$\bf y$分解成一系列独立的因子$y_i$,多变量的分布$q({\bf y})$则被因子化成所有因子分布的乘积
|
||||
|
||||
$$ q({\bf y}) = \prod\limits_{i=1}^N q_i(y_i) $$
|
||||
|
||||
不难看出,这和前面介绍过的朴素贝叶斯的思想不谋而合,只不过朴素贝叶斯拆分的是属性,平均场拆分的是因子。将平均场的因子化结果回过头代入到变分下界的表达式中,可以将高维的$q({\bf y})$拆解成低维概率分布乘积的形式,并给出每个低维概率分布的最优解表达式
|
||||
|
||||
$$ q^*_j(y_j) = \dfrac{1}{Z} \exp[\mathbb{E}_{i \ne j} (\log p({\bf y}, {\bf x}))] $$
|
||||
|
||||
其中$Z$是归一化的常数。当然,实际情况是隐变量之间是存在着依赖关系的,因而平均场理论在简化运算的同时,也会付出精确性的代价。
|
||||
|
||||
从宏观层面看,变分法将推断问题改造成了泛函(functional)的优化问题,这也是“变分”一词的来源。优化的目的是用简单的、容易计算的分布$q({\bf y})$来拟合复杂的、不容易计算的后验分布$p({\bf y} | {\bf x})$,优化的对象是变分下界。
|
||||
|
||||
将变分推断应用在贝叶斯网络中可以实现自动化的推理,对应的方法被称为**变分消息传播**(variational message passing)。
|
||||
|
||||
对贝叶斯网络中的结点应用变分贝叶斯推断时,只需要关注这个节点的**马尔可夫毯**,也就是它的父结点(parent)、子节点(child)以及共父结点(co-parent)。在计算结点$H_j$对应的低维概率分布$Q^*_j$时,这些结点和$H_j$之间的条件概率都会作为变量出现,而不在马尔可夫毯中的其他结点的作用就体现为常数。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/ef/24/ef83135d5af068c55e3216fefcb66224.png" alt="">
|
||||
|
||||
马尔可夫毯示意图(图片来自维基百科)
|
||||
|
||||
出于简化计算的考虑,变分消息传播算法假设待计算节点$H_j$关于其父结点的条件概率分布属于**指数分布族**,并且是父结点分布的共轭先验,这样的模型叫作**共轭指数模型**(conjugate-exponential model)。
|
||||
|
||||
指数分布族具有计算上的便利:它的对数形式是可计算的,状态也完全可以由自然参数表示;先验分布的共轭特性同样有助于简化运算,它保证了后验分布和先验分布具有相同的形式,区别只在于参数的不同。
|
||||
|
||||
有马尔可夫毯和共轭指数模型作为基础,就可以对贝叶斯网络进行消息传播了。虽然变分消息传播的具体机制比较复杂,但其基本原则无外乎两条:**父结点向子结点传播自身分布的充分统计量的数学期望,而子结点向父结点传播自身分布的自然参数**。
|
||||
|
||||
在子结点向父结点传播消息之前,首先要接收来自共父结点的消息,这是由汇连结构中变量之间的依赖性所决定的。接收到所有来自父结点和子结点的消息后,目标结点用这些消息来更新自己的自然参数,进而更新后验分布,在一轮一轮的迭代过程中,变分分布就会逐渐接近最优值——这与置信传播的思路不谋而合。
|
||||
|
||||
同为处理未知参数和隐变量的方法,变分贝叶斯和后面要介绍的EM算法之间有着千丝万缕的联系。下面的表格来自约翰霍普金斯大学的自然语言处理专家杰森·艾斯纳教授(Jason Eisner)的讲义《变分推断的高层次解释》(High-Level Explanation of Variational Inference),它将变分法和EM算法纳入到了统一的框架下。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/08/cc/08824581a5144f94cc7bb9ce9577a1cc.png" alt="">
|
||||
|
||||
表格的第一行给出了最简单的情形:当问题超参数和参数全部给定时,相当于用确定的模型来估计隐变量,这种对隐变量的预测就是典型的推断问题。具体的实现方式是前向-后向算法(forward-backward algorithm),如果对前向-后向算法进行近似处理,就可以得到变分推断(variational inference)。
|
||||
|
||||
如果放弃对隐变量分布的求解,而是直接给出最可能的状态,推断问题就被简化成为解码问题(decoding),最典型的方法非基于最大后验的维特比译码(Viterbi decoding)莫属。
|
||||
|
||||
在此基础上把问题复杂化一些,将参数设定为未知的话,推断问题就变成了估计模型参数的学习问题(learning),这在后面会有详细的阐述。出于运算复杂性的考虑,处理未知参数时可以直接找到让输出后验概率最大化的那一组参数,这就是EM算法。
|
||||
|
||||
将EM算法中参数的最大化替换成标准贝叶斯推断中的边际化操作,其结果就是本讲的主题——变分贝叶斯。这也体现出变分贝叶斯和EM的区别:**EM中应用了隐变量的概率分布,但对待估计的参数只是做出点估计;变分贝叶斯则一视同仁,对两类非观测变量都使用分布来描述**。
|
||||
|
||||
最复杂的情形发生在连超参数都无法确定时,解决这类问题需要借助**经验贝叶斯方法**(empirical Bayes method)。
|
||||
|
||||
经验贝叶斯方法其实就是在统计学习模块中介绍的贝叶斯方法,也就是引入超先验构造层次模型的做法。经验贝叶斯会计算出级别最高的超先验分布的参数最可能的取值,而不是对它的分布进行积分,这让它有别于全贝叶斯的途径。这种方法在计算隐变量的后验分布时使用变分推断来估计,所以被称为**变分EM**(variational EM)。
|
||||
|
||||
在专门用于贝叶斯机器学习的库PyMC3中,变分推断可以通过ADVI类实现。ADVI的全称是自动微分变分推断(Automatic Differentiation Variational Inference),是一种基于平均场理论的高效算法,它将变分后验分布初始化为球面高斯分布,不同参数的后验彼此无关,再通过训练数据拟合到真实的后验上。
|
||||
|
||||
将变分推断运用到前面介绍过的简单线性回归中,可以模拟出线性系数和偏置的分布。受计算机性能的限制,代码中的$n$设定得较小,但实际上$n$越大,推断结果才会越精确。
|
||||
|
||||
今天我和你分享了变分贝叶斯推断的基本原理,以及它和EM算法之间的关联,包含以下四个要点:
|
||||
|
||||
<li>
|
||||
变分贝叶斯推断是基于确定性近似的推断方法;
|
||||
</li>
|
||||
<li>
|
||||
变分贝叶斯用简单的近似分布来拟合真实的后验分布,并利用平均场分解简化对变分下界的优化;
|
||||
</li>
|
||||
<li>
|
||||
变分消息传播可以在贝叶斯网络上实现变分推断;
|
||||
</li>
|
||||
<li>
|
||||
变分贝叶斯和EM算法都是对隐变量的处理,可以从统一的角度分析。
|
||||
</li>
|
||||
|
||||
发表于《美国统计联合会会刊》(Journal of American Statistical Association)第12卷第518期上的《从统计学看变分推断》(Variational Inference: A Review for Statisticians)是一篇很好的综述,文中以贝叶斯高斯混合模型为例介绍了变分推断的具体应用。
|
||||
|
||||
你可以研究一下这个实例,来加深对变分推断的理解。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/79/73/79c512a3b14fce75cad59d515f396d73.jpg" alt="">
|
||||
92
极客时间专栏/geek/机器学习40讲/概率图模型/37 | 随机近似推断:MCMC.md
Normal file
92
极客时间专栏/geek/机器学习40讲/概率图模型/37 | 随机近似推断:MCMC.md
Normal file
@@ -0,0 +1,92 @@
|
||||
<audio id="audio" title="37 | 随机近似推断:MCMC" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/97/9c/978d1588fa63a3786b8c4aa6e4b1569c.mp3"></audio>
|
||||
|
||||
本质上说,确定性近似是遵循着一定的原则,使用一个分布来近似另一个分布,近似结果取决于确定的规则。可是在很多预测任务中,完整的后验分布并不是必需的,我们关注的对象只是某个因变量在后验分布下的期望,或者具有最大后验概率的那个取值。这时再使用确定性近似来计算预测结果,尤其是连续函数在连续分布下的预测结果又是个在计算上颇为棘手的问题。
|
||||
|
||||
有些时候,即使目标分布的形式是已知的,对它的求解也存在着困难。就拿常见的Beta分布来说,其概率密度可以表示为$p(x) = Cx^{\alpha - 1}(1 - x)^{\beta - 1}$,其中常数$\alpha, \beta$都是分布参数,常数$C$是归一化因子。可问题在于如果不能计算出这个复杂的参数$C$,即使能够确定分布的形状,也没法对分布进行直接的采样。这种情况下也要借助随机性近似。
|
||||
|
||||
既然求解解析解既复杂繁冗又无甚必要,那就不妨用统计学的核心概念——抽样来解决问题。**用样本分布来代替难以求解的后验分布,这就是随机性近似的思想**。
|
||||
|
||||
随机性近似(stochastic approximation)属于**数值近似**(numerical approximation)的范畴,它对数据的生成机制进行建模,通过模型生成符合真实分布的抽样结果,再利用这些抽样结果表示未知的概率分布。
|
||||
|
||||
**随机性近似的典型方法是马尔可夫链蒙特卡洛方法**(Markov Chain Monte Carlo method),简称 **MCMC**。其作用是在概率空间中构造合适的马尔科夫链,再应用蒙特卡洛方法进行随机采样来拟合目标的分布。
|
||||
|
||||
**MCMC体现的是真正的概率密度的思想**,它虽然不能计算分布的表达式,却可以将概率等比例地放大。频率意义下的概率就是数据出现的频度,归一化的作用只是让它变成公理化的概率,而不会对频率解释产生任何影响。
|
||||
|
||||
MCMC的出发点就在于消除掉那个不影响分布趋势却又没它不行的归一化常数$C$对概率求解的影响,通过对简单分布(比如均匀分布)进行抽样来拟合出更加复杂,甚至于压根儿不存在解析式的分布形式。
|
||||
|
||||
虽然都可以缩写成MC,但马尔可夫链和蒙特卡洛方法却是两个完全不同的概念。
|
||||
|
||||
蒙特卡洛方法诞生于曼哈顿计划中,其缔造者是数学家斯坦尼斯拉夫·乌拉姆(Stanislaw Ulam)和不世出的天才约翰·冯诺伊曼(John von Neumann)。蒙特卡洛本身是袖珍王国摩纳哥的一块国土,以其大名鼎鼎的蒙特卡洛赌场闻名于世,这样的名字或多或少地说明了这个方法和作为概率论不竭灵感源泉的赌博娱乐之间的深厚渊源。
|
||||
|
||||
这个号称20世纪最伟大的算法其实不难理解。通俗地说,它就是**通过多次独立重复的随机实验来模拟确定性的概率分布,或者求解难以计算的求和问题,其精确性由大数定律所保证**。
|
||||
|
||||
蒙特卡洛方法最广为人知的应用可能就是对圆周率$\pi$的估算:在一个单位面积的正方形里随机且均匀地抛洒若干个点,然后统计这些点中和某个选取出的顶点之间距离小于1的点的数目。
|
||||
|
||||
如果将这个选出来的参考顶点视为圆心,那么和它的距离小于1的这些点就都在四分之一圆内,四分之一圆内的点数和所有点数的比例就是$\pi / 4$的估计值。当随机生成的点数达到30000时,$\pi$的估计误差可以下降到0.07%以下。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/eb/7a/eb0945aa2185df958f4568e58300e77a.gif" alt="" />
|
||||
|
||||
用蒙特卡洛法估计$\pi$值(图片来自维基百科)
|
||||
|
||||
使用蒙特卡洛方法估计未知的目标分布$p(x)$时,可以先引入另一个概率分布$q(x)$作为参考分布,这个参考分布被称为**建议分布**(proposal distribution),具有简单的形式和易于采样的特性。与建议分布配套的还有个常数$M$,两者共同满足$Mq(x) \ge {\tilde p}(x)$,这里的${\tilde p}(x)$是未归一化的概率,是目标分布$p(x)$与另一个常数$Z$的乘积。
|
||||
|
||||
如果将上面的两个准概率分布画在同一个坐标系里,$Mq(x)$对应的曲线会将${\tilde p}(x) = Zp(x)$对应的曲线完全包住,两者之间会存在一段间隔。在执行采样时,首先按照概率分布$q(x)$生成一个随机数$x_0$,接着在$[0, Mq(x_0)]$的区间上通过均匀采样采出来一个新数$u_0$。如果得到的$u_0$大于${\tilde p}(x_0)$,那它就落在两条曲线之间的区域,这样的样本会被直接抛弃;如果$u_0$小于${\tilde p}(x_0)$,那它就落在${\tilde p}(x)$曲线的下方,这样的样本才会保留。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/34/bd/34ccdb2c4ff5b1cd36db6c53cee6d3bd.png" alt="" />
|
||||
|
||||
图片来自《机器学习》(Machine Learning)第50卷第1期5-43,《用于机器学习的MCMC介绍》(An introduction to MCMC for machine learning)。
|
||||
|
||||
由于需要根据样本的特性决定接受或是拒绝,因而以上的采样机制被称为**拒绝采样**(rejection sampling)。可以证明,拒绝采样等效于对目标分布$p(x)$进行多次独立的采样。一般说来,即使对系数$Z$进行优化处理,拒绝采样也会有较高的拒绝率,其运算效率通常较低。
|
||||
|
||||
蒙特卡洛方法只是随机采样的过程,而要确保采出来的样本服从我们想要的分布,需要借助第一个MC:**马尔可夫链**。马尔可夫链假定每一时刻的状态只依赖于前一时刻的状态,每一个状态又会以一定的概率变化为另一个状态,状态之间所有的转化概率共同构成了这个马尔可夫链的状态转移矩阵(transition matrix)。
|
||||
|
||||
**转移矩阵可以将任意的初始概率分布变成马尔可夫链的稳态分布**(equilibrium distribution)。稳态分布由转移矩阵决定,而与初始的概率分布无关,不管每个状态的初始概率如何,经过若干轮次的转换之后,都可以得到符合稳态分布的样本。这意味着如果能够计算出某个稳态分布所对应的马尔科夫链的状态转移矩阵,服从这个稳态分布的数据样本就唾手可得。
|
||||
|
||||
引入了马尔可夫性后,MCMC最原始的实现——**Metropolis算法**便呼之欲出。Metropolis算法可以看成是结合了马尔可夫链的拒绝采样,它将原始的数据点初始化为$x^{0}$,将转移概率初始化为$q(x | x^{0})$。需要注意的是,Metropolis算法中的转移概率必须具备对称的特性,也就是$q(x | y) = q(y | x)$对任意的$x$和$y$都成立。
|
||||
|
||||
在每一轮数据的生成中,Metropolis算法会根据上一轮的结果$x^{t}$和以建议分布形式出现的转移概率$q(x | x^{t})$生成$x’$,这个新生成的样本将以$\alpha = {\tilde p}(x’) / {\tilde p}(x^{(t)})$的概率被接受。在实现中,接受的策略体现为生成一个在[0, 1]上均匀分布的随机数$u$,如果$u < \alpha$就接收新样本,反之则继续使用上一轮次的旧样本。如果新样本的出现引起了${\tilde p}(\cdot)$的增加,也就是$\alpha > 1$的话,这样的新样本就是必然被保留的。
|
||||
|
||||
直观理解,在模拟分布时,Metropolis就像一只在山头上游弋,标记自己领地的老虎。它会在概率密度大,也就是数据出现频度高的位置多转几圈,多留下自己的气味;而在概率密度小,数据出现频度低的位置,示意性地巡逻一下,留一点味道就可以了。数据的概率密度正是通过气味的浓度,也就是采样的样本出现的次数所定义的。
|
||||
|
||||
但这样的行为又带来了一个问题,那就是Metropolis在生成新样本时更倾向于接收那些来自分布集中区域的样本。如果新样本导致准概率密度的增加,那它就100%会被接受。可如果导致准概率下降,新样本就存在被丢弃的可能,下降的程度越大,被接受的概率就越低,这将会导致生成的样本更容易抱团在一起。如果将Metropolis算法中对称的建议分布设定为以上一轮的结果为中心的高斯分布,生成的序列就会变成围着一个小区域转圈圈的随机游动(random walk)。
|
||||
|
||||
将原始Metropolis算法的中建议分布的对称特性去掉,得到的就是广泛应用的**Metropolis-Hastings算法**,简称**MH算法**。
|
||||
|
||||
马尔可夫链的特性决定了根据给定的状态矩阵确定对应的稳态分布是小菜一碟,可根据给定的稳态分布找到对应状态矩阵的难度却有如大海捞针。为了简化寻找转移矩阵的难度,MH算法利用了稳态分布的一个充分非必要条件,那就是**细致平稳性**(detailed balance)。细致平稳性的数学表达式可以写成
|
||||
|
||||
$$ \pi(i) {\bf Q}_{ij} = \pi(j) {\bf Q}_{ji} $$
|
||||
|
||||
其中$\pi$是马尔可夫链的稳态分布,$\bf Q$是马尔可夫链的转移矩阵。这个式子的含义在于从状态$i$转移到状态$j$的概率质量恰好等于从$j$转移回$i$的概率质量,转入和转出之间存在动态平衡,分布$\pi$就是稳态分布。但在具体问题中,任意选择的目标分布$p(x)$和起到转移矩阵作用的建议分布$q(x)$很难满足细致平稳性,这时就需要对它们做一些人为的修正,修正方式是引入参数$\alpha$,令它满足
|
||||
|
||||
$$ p(i)Q(i, j)\alpha(i, j) = p(j)Q(j, i)\alpha(j, i) $$
|
||||
|
||||
不难看出,参数的引入使转移矩阵被修正为${\bf Q}(\cdot)\alpha(\cdot)$,这可以避免Metropolis算法对小概率样本的一刀切。在MH算法中,参数$\alpha$就是接受率,可以理解为执行这次从$i$到$j$的转移的概率。要让接受率满足上面的条件,最简单的方式是设定两者之中较大的一个为1,再利用等式关系计算出另外一个,这样生成的样本分布$p(z)$就是马尔可夫链的稳态分布。
|
||||
|
||||
MH算法的一个特例是针对高维分布的**吉布斯采样**(Gibbs sampling)。在一个$N$元分布中计算每个变量关于其他所有变量的条件分布,可以得到$N$个一元条件分布。吉布斯采样就是对这些条件分布进行采样:在给定初始值后,吉布斯采样按照每个一元条件分布依次产生新的样本并全部接受,作为下一轮更新的基础。
|
||||
|
||||
追根溯源,吉布斯采样来源于对吉布斯随机场(Gibbs random field)的研究,它相当于将一个高维的马尔可夫链庖丁解牛,拆解成多个一维的马尔可夫链,高维马尔可夫链整体的状态转移也相应地被拆解成不同一维链轮流的状态转移。这样的拆解并不会影响到细致平稳条件,因而得到的分布依然是目标的稳态分布。另外,**吉布斯采样并不会拒绝产生的样本,这使它和MH算法相比具有效率上的优势,从而成为应用最广泛的MCMC算法**。
|
||||
|
||||
利用PyMC库可以实现MCMC采样。出于便于对比的考虑,本讲以估计硬币正反面的概率为例。硬币出现正面的概率$p$可以用二项分布建模,其先验和后验则用共轭的贝塔分布建模,因而可以给出后验概率精确的解析结果。利用投掷50次硬币出现20次正面的数据,就可以用Metropolis算法来估计二项分布的参数$p$了。结果表明,MCMC的结果和解析结果基本吻合。
|
||||
|
||||
今天我和你分享了MCMC方法的基本原理,以及MH算法和吉布斯采样等具体的实现方式,包含以下四个要点:
|
||||
|
||||
<li>
|
||||
MCMC是基于随机性近似的推断方法;
|
||||
</li>
|
||||
<li>
|
||||
MCMC利用基于蒙特卡洛方法的随机采样将任意的初始分布转化为马尔可夫链的稳态分布;
|
||||
</li>
|
||||
<li>
|
||||
MCMC的关键问题是找到和目标稳态分布匹配的转移矩阵;
|
||||
</li>
|
||||
<li>
|
||||
MCMC的典型方法包括一维的MH算法和多维的吉布斯采样。
|
||||
</li>
|
||||
|
||||
在MCMC中,转移概率或者建议分布$q(x, y)$的选择是关键因素,其设计的优劣会直接影响到算法的性能。
|
||||
|
||||
你可以查阅相关文献,了解转移概率常见的设计思想,并在这里留下你的见解。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/b6/95/b6a23dde9947f887513575d2a35c4795.jpg" alt="" />
|
||||
|
||||
|
||||
92
极客时间专栏/geek/机器学习40讲/概率图模型/38 | 完备数据下的参数学习:有向图与无向图.md
Normal file
92
极客时间专栏/geek/机器学习40讲/概率图模型/38 | 完备数据下的参数学习:有向图与无向图.md
Normal file
@@ -0,0 +1,92 @@
|
||||
<audio id="audio" title="38 | 完备数据下的参数学习:有向图与无向图" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/51/52/51e24b1023de2adedaf1d160e85e9352.mp3"></audio>
|
||||
|
||||
介绍完表示和推断之后,我们将进入概率图模型的最后一个任务,也就是学习问题。
|
||||
|
||||
在推断任务中,我们会根据已知的模型来确定实例的特性,模型的结构和参数都作为输入的一部分出现。**学习任务**(model learning)则是将推断任务的过程颠倒过来,根据数据来构造出能够反映数据潜在规律的模型,也就是对概率图模型的训练。
|
||||
|
||||
概率图模型的学习和其他的机器学习一样,都属于**自动化的建模方式**。构造概率图模型的依据是变量之间的依赖关系,这些依赖关系的建立则需要仰赖垂直领域的先验知识。如果用纯人工的方式来构建概率图模型,那么在网络的节点数目较多、规模较大时,其工作量将是惊人的。将学习任务引入概率图模型之中,就可以基于结构化的数据高效地计算出网络的结构与参数,从而大大简化训练的流程。
|
||||
|
||||
根据学习对象的不同,学习任务可以大体分为**参数学习**和**结构学习**两类。
|
||||
|
||||
**参数学习**(parameter learning)是在已知图模型结构的前提下估计其参数,也就是节点之间的条件概率,这可以看成是个数值优化问题。
|
||||
|
||||
**结构学习**(structure learning)是在图模型完全未知的情况下先确定其结构,再根据结构来计算参数。结构学习可以看成是针对结构和参数的联合优化,可以存在单一的全局最优解。
|
||||
|
||||
今天这一讲中,我们先来看看参数学习,这个任务还可以进一步地分类。根据模型结构的不同,参数学习可以分为**对贝叶斯网络的学习**和**对马尔可夫随机场的学习**。
|
||||
|
||||
有向和无向的差异给两种结构的学习带来了截然不同的解决方案:在贝叶斯网络中,每一对节点之间都定义了归一化的条件概率分布,因此学习任务针对的是每个单独的局部;而在马尔可夫随机场中,归一化操作是通过全局化的划分函数来完成的,参数的全局耦合性使得这个复杂的任务不能被分解成若干简单任务的组合,造成了更大的学习难度。
|
||||
|
||||
**最简单的参数学习问题是利用完全观测的数据估计贝叶斯网络的参数,网络结构中并不存在隐变量**。从频率主义出发,可以基于似然概率最大化来实现参数的估计。最大似然估计的目标是找到让现有数据出现的概率、也就是似然函数最大化的那一组参数。根据贝叶斯网络的局部特性,全局似然函数可以被拆解成一些独立的局部似然函数的乘积,每个独立项都对应着网络中的一个条件概率分布,这就是**似然函数的全局分解**(global decomposition)。
|
||||
|
||||
似然概率的全局分解有什么作用呢?那就是**简化参数估计的运算**。基于全局分解可以单独对每个局部似然函数进行最大化,而无需考虑其他局部结构的影响,将每个局部似然函数的最优参数合并在一起,得到的就是全局似然函数的最优解。
|
||||
|
||||
这一技巧最简单而又最具代表性的应用就是**朴素贝叶斯分类器**。将类似然函数改写成属性似然函数的乘积就是基于朴素贝叶斯图结构的全局分解,在此基础上计算属性的似然概率,就是统计当每个属性取得不同的取值时,归属于某个类别的样本在这个类别所有样本中所占的比例。如果你对朴素贝叶斯还有些陌生,可以参考专栏的第28讲,以及“人工智能基础课”中的内容。
|
||||
|
||||
前面介绍的最大似然估计出自频率主义的视角,如果要从贝叶斯主义出发,就得先给每个参数设定先验分布,以实现最大后验估计。表示先验分布的变量一般来说会与现有贝叶斯网络的数据和结构独立,与原始的贝叶斯网络共同形成新的元网(meta-network)。可以证明,如果不同参数的先验分布是相互独立的,那么它们的后验分布也会继承这种独立性,所以对最大后验估计的求解也可以遵循从局部到整体的方式,这和最大似然估计是一致的。
|
||||
|
||||
不难看出,对完整观测的贝叶斯网络进行参数估计,就是将传统的最大似然估计和最大后验估计应用到有向图模型这个特定的场景中。图模型中的条件独立性还可以进一步将全局优化分解为相互独立的局部优化,从而实现一定的简化。
|
||||
|
||||
可是在马尔可夫随机场中,问题就没有这么简单了。考虑一个最简单的马尔可夫随机场$A – B – C$,这个图模型中的势函数有两个,分别是$\phi_1(A, B)$和$\phi_2(B, C)$,它的划分函数$Z$等于所有两个势函数的乘积对变量$A, B, C$所有可能的取值进行求和。在给定一组数据$a, b, c$时,这个实例的似然概率可以写成
|
||||
|
||||
$$ p(a, b, c) = \dfrac{\phi_1(a, b) \cdot \phi_2(b,c)}{Z} = \dfrac{\phi_1(a, b) \cdot \phi_2(b,c)}{\sum\limits_{a,b,c} \phi_1(a, b) \cdot \phi_2(b,c)} $$
|
||||
|
||||
在对这个式子进行最大化时,就不能对$\phi_1(a, b)$和$\phi_2(b, c)$分开处理,各自求解最大值了。因为划分函数$Z$是由所有的参数共同决定的,无论是$\phi_1(a, b)$还是$\phi_2(b, c)$发生变化,都会导致$Z$发生变化。划分函数就像一条履带,将这两个因子像两个齿轮一样扣在一起,并将一个的变化传导给另一个,让两者必须作为一个整体来加以优化。
|
||||
|
||||
在马尔可夫随机场的参数学习中,上面乘积式中的每个因子都会被改写为对数线性的形式,也就是变量集特征函数的指数加权求和。这样一来,模型的参数就变成了对数线性模型中的权重,并通过对权重似然函数的最优化来实现参数学习。
|
||||
|
||||
利用划分函数是关于待估计参数的凸函数这一条件,可以证明对数似然函数是单峰函数,只有全局最优而没有局部最优。求解这个全局最优值就等价于找到让对数似然函数梯度为0的那一组参数,此时得到的最优解将和真实模型完全匹配。但问题是单凭这个准则不能给出问题的解析解,要计算出最优参数必须借助梯度法等最优化的方法。
|
||||
|
||||
虽然马尔可夫随机场不能像贝叶斯网络那样将整体化为局部之积,但它在结构上也是可以被分解的。如果马尔可夫随机场的图结构是**弦图**(chordal graph),那它就是可分解的(decomposable)。
|
||||
|
||||
什么是弦图?是指无向图中任意长度大于3的环路中都至少存在一条弦,也就是连接环路中不相交的顶点的无向边。下图就是一个弦图的实例,连接结点$X_2$和$X_3$的那条边就是弦。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/76/2d/769c34491c5f8650258b8db337d4182d.png" alt="" />
|
||||
|
||||
可分解的马尔可夫随机场可以被划分成不同的团,每个团的势函数都可以被初始化为**经验边际函数**(empirical marginal)。如果这个团和其他团之间存在公共节点,那么它的势函数还要除以公共结点的经验边际函数。利用这种经验方式计算出每个团的势函数后,将得到的结果相乘,其结果就是最大似然估计的结果了。
|
||||
|
||||
还是以上面的弦图为例,结点$X_1, X_2, X_3$构成了一个团,其势函数可以表示为经验边际
|
||||
|
||||
$$ \psi^{ML}_{1,2,3} = {\tilde p}(x_1, x_2, x_3) $$
|
||||
|
||||
按同样的方式可以写出团$X_2, X_3, X_4$的经验势函数,但由于它和上面的团共享了公共结点$X_2$和$X_3$,就需要用这两个公共节点的经验势加以约化,其结果为
|
||||
|
||||
$$ \psi^{ML}_{2,3,4} = \dfrac{{\tilde p}(x_2, x_3, x_4)}{{\tilde p}(x_2, x_3)} $$
|
||||
|
||||
同理可以求出团$X_2, X_4, X_5$的势函数
|
||||
|
||||
$$ \psi^{ML}_{2,4,5} = \dfrac{{\tilde p}(x_2, x_4, x_5)}{{\tilde p}(x_2, x_4)} $$
|
||||
|
||||
三者相乘就是整个模型的似然函数,基于这一函数可以实现参数的最大似然估计。
|
||||
|
||||
可分解马尔可夫随机场的最大似然估计问题可以通过上面的方式简化,可如果图结构本身是不可分解的,模型的学习就要借助于更一般的方法,迭代比例拟合就是这样的一种方法。
|
||||
|
||||
**迭代比例拟合**(iterative proportional fitting)可以在给定经验边际的条件下求解未知的势函数,具体的方法是一个一个地去满足经验边际的约束,但满足下一个约束可能破坏上一个约束,所以需要通过迭代来逼近所有的边际条件。
|
||||
|
||||
**马尔可夫随机场的运算成本较高,要简化运算的话,既可以使用近似推理过程计算梯度,也可以使用其他目标函数来代替似然函数**。
|
||||
|
||||
近似推理是将学习问题当成推断问题来解决,包括传播近似推理和抽样近似推理两种技术,传播近似推理是将信念传播算法应用在马尔可夫随机场的学习中,抽样近似推理则通常借助MCMC,用平稳分布作为参数后验分布的估计。
|
||||
|
||||
用来代替似然函数的目标函数则包括伪似然函数、对比散度和最大间隔函数等,其中的对比散度已经被用于受限玻尔兹曼机的训练中。
|
||||
|
||||
今天我和你分享了概率图模型中的参数学习任务,包含以下四个要点:
|
||||
|
||||
<li>
|
||||
参数学习的任务是在已知模型结构的前提下估计其参数,可以看成是模型的训练;
|
||||
</li>
|
||||
<li>
|
||||
贝叶斯网络的参数学习可以由整体分解为局部,在局部上应用最大似然估计或者最大后验估计;
|
||||
</li>
|
||||
<li>
|
||||
马尔可夫随机场的参数学习不能分解,也不存在解析解,可以使用通用的迭代比例拟合方法找到全局最优解;
|
||||
</li>
|
||||
<li>
|
||||
马尔可夫随机场的参数学习可以通过近似推理和目标函数替换加以简化。
|
||||
</li>
|
||||
|
||||
今天介绍的内容关注的是完备数据基础上的参数学习,如果数据集是不完备的,就可能会缺失某些变量的观测样本,或者存在不能被观测的隐变量。后一种情况可以通过EM算法来解决,那么前一种情况如何处理呢?
|
||||
|
||||
你可以查阅资料了解相关内容,并在这里分享你的见解。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/12/f3/122872bef232adc10f56c97c84818df3.jpg" alt="" />
|
||||
|
||||
|
||||
118
极客时间专栏/geek/机器学习40讲/概率图模型/39 | 隐变量下的参数学习:EM方法与混合模型.md
Normal file
118
极客时间专栏/geek/机器学习40讲/概率图模型/39 | 隐变量下的参数学习:EM方法与混合模型.md
Normal file
@@ -0,0 +1,118 @@
|
||||
<audio id="audio" title="39 | 隐变量下的参数学习:EM方法与混合模型" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/3d/dd/3d1517e4337da4cfe4d9e30d5343e2dd.mp3"></audio>
|
||||
|
||||
前面我曾介绍过隐马尔可夫和线性动态系统这类隐变量模型。所谓的隐变量表示的其实是数据的不完整性,也就是训练数据并不能给出关于模型结果的全部信息,因此只能对模型中未知的状态做出概率性的推测。
|
||||
|
||||
在今天这一讲中,我将和你分享一种在隐变量模型的参数学习中发挥重要作用的方法:期望最大化算法。
|
||||
|
||||
**期望最大化算法**(expectation-maximization algorithm, EM)是用于计算最大似然估计的迭代方法,其中的期望步骤(expectation step)利用当前的参数来生成关于隐变量概率的期望函数,最大化步骤(maximization step)则寻找让期望函数最大的一组参数,并将这组参数应用到下一轮的期望步骤中。如此循环往复,算法就可以估计出隐变量的概率分布。
|
||||
|
||||
**EM算法虽然可以在不能直接求解方程时找到统计模型的最大似然参数,但它并不能保证收敛到全局最优**。一般来说,似然函数的最大化会涉及对所有未知参量求导,这在隐变量模型中是无法实现的。
|
||||
|
||||
EM算法的解决方法是将求解过程转化为一组互锁的方程,它们就像联动的齿轮一样,通过待求解参数和未知状态变量的不断迭代、交叉使用来求解最大似然。
|
||||
|
||||
具体的做法是给两组未知数中的一组选择任意值,使用它们来估计另一组,然后使用这些更新的取值来找到前一组的更好估计,然后在两者之间交互更新,直到得到的值都收敛到固定点。
|
||||
|
||||
EM算法的实现方法可以通过一个通俗易懂的实例加以阐释,这个例子来源于期刊《自然 $\cdot$ 生物技术》(Nature Biotechnology)第26卷第8期上的论文《何为期望最大化算法?》(What is the expectation maximization algorithm?)。考虑到之前关于贝叶斯统计的教程也是来源于这个期刊,概率推断与机器学习在生命科学中的重要性便不言而喻。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/f8/03/f8e635ac2e6ac3b0076b0df4e638f303.png" alt="" />
|
||||
|
||||
隐变量已知时,利用最大似然法求解参数(图片来自What is the expectation maximization algorithm?)
|
||||
|
||||
上图就是用来解释EM算法的问题。假定有两枚不同的硬币$A$和$B$,它们的重量分布$\theta_A$和$\theta_B$是未知的,其数值可以通过抛掷后计算正反面各自出现的次数来估计。具体的估计方法是在每一轮中随机抽出一枚硬币抛掷10次,同样的过程执行5轮,根据这50次投币的结果来计算$\theta_A$和$\theta_B$的最大似然估计。
|
||||
|
||||
在上图的单次实验中,硬币$A$被抽到3次,30次投掷中出现了24次正面;硬币$B$被抽到2次,20次投掷中出现了9次正面。用最大似然估计可以计算出$\hat \theta_A = 24 / (24 + 6) = 0.8, \hat \theta_B = 9 / (9 + 11) = 0.45$。
|
||||
|
||||
这样的问题显然没有什么挑战性,可如果作为观测者的我们只能知道每一轮中出现的正反面结果,却不能得知到底选取的硬币到底是$A$还是$B$,问题可就没那么简单了。
|
||||
|
||||
这里的硬币选择就是不能直接观测的隐变量。如果把这个隐变量扔到一边不管,就没有办法估计未知的参数;可要确定这一组隐变量,又得基于未知的硬币重量分布进行最大似然估计。这样一来,问题就进入了“鸡生蛋,蛋生鸡”的死胡同了。
|
||||
|
||||
毛主席曾教导我们:“自己动手,丰衣足食”。既然数据中的信息是不完整的,那就人为地给它补充完整。在这个问题中,隐藏的硬币选择和待估计的重量分布,两者确定一个就可以确定另一个。
|
||||
|
||||
由于观测结果,也就是正反面出现的次数直接给出了关于重量分布的信息,那就不妨人为设定一组初始化的参数$\hat \theta^{(t)} = (\hat \theta_A^{(t)}, \hat \theta_B^{(t)})$,用这组猜测的重量分布去倒推到底每一轮使用的是哪个硬币。
|
||||
|
||||
计算出的硬币选择会被用来对原来随机产生的初始化参数进行更新。如果硬币选择的结果是正确的,就可以利用最大似然估计计算出新的参数$hat \theta^{(t+1)}$。而更新后的参数又可以应用在观测结果上,对硬币选择的结果进行修正,从而形成了“批评-自我批评”的循环过程。这个过程会持续到隐藏变量和未知参数的取值都不再发生变化,其结果就是最终的输出。
|
||||
|
||||
将上面的思路应用的下图的投掷结果中,就是EM算法的雏形。两个初始的参数被随机设定为$\hat \theta_A^{(0)} = 0.6, \hat \theta_B^{(0)} = 0.5$,在这两个参数下出现第一轮结果,也就是5正5反的概率就可以表示成
|
||||
|
||||
$$ P(H^5T^5 | A) = 0.6^5 \times 0.4^5, P(H^5T^5 | B) = 0.5 ^ {10} $$
|
||||
|
||||
对上面的两个似然概率进行归一化可以得出后验概率,两者分别是0.45和0.55,也就是下图中的结果。这说明如果初始的随机参数是准确的,那第一轮结果更可能由硬币$B$生成。同理也可以计算出其他4轮的结果来自不同硬币的后验概率,结果已经在下图中显示。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/a8/64/a8ea0301d93363b8a0954016d92b0f64.png" alt="" />
|
||||
|
||||
隐变量未知时,利用EM算法求解参数(图片来自What is the expectation maximization algorithm?)
|
||||
|
||||
在已知硬币的选择时,所有正反面的结果都有明确的归属:要么来自$A$要么来自$B$。利用后验概率可以直接对硬币的选择做出判断:1/4两轮使用的是硬币$B$,2/3/5三轮使用的是硬币$A$。
|
||||
|
||||
既然硬币的选择已经确定,这时就可以使用最大似然估计,其结果和前文中的最大似然估计结果是相同的,也就是$\hat\theta_A^{(1)} = 0.8, \hat\theta_B^{(1)} = 0.45$。利用这组更新的参数又可以重新计算每一轮次抽取不同硬币的后验概率,你可以自己计算一下。
|
||||
|
||||
虽然这种方法能够实现隐变量和参数的动态更新,但它还不是真正的EM算法,而是硬输出的$k$均值聚类。真正的EM算法并不会将后验概率最大的值赋给隐变量,而是考虑其所有可能的取值,在概率分布的框架下进行分析。
|
||||
|
||||
在前面的例子中,由于第一轮投掷硬币$A$的可能性是0.45,那么硬币$A$对正反面出现次数的贡献就是45%,在5次正面的结果中,来源于硬币$A$的就是$5 \times 0.45 =2.25$次,来源于硬币$B$的则是2.75次。同理可以计算出其他轮次中$A$和$B$各自的贡献,贡献的比例都和计算出的后验概率相对应。
|
||||
|
||||
计算出$A$和$B$在不同轮次中的贡献,就可以对未知参数做出更加精确的估计。在50次投掷中,硬币$A$贡献了21.3次正面和8.6次反面,其参数估计值$\hat\theta_A^{(1)} = 0.71$;硬币$B$贡献了11.7次正面和8.4次反面,其参数估计值$\hat\theta_B^{(1)} = 0.58$。利用这组参数继续迭代更新,就可以计算出最终的估计值。
|
||||
|
||||
上面的实例给出了对EM算法直观的理解。**在数学上,EM算法通过不断地局部逼近来解决似然概率最大化的问题**。
|
||||
|
||||
假定模型中未知的参数为$\theta$,隐藏的状态变量为$Z$,输出的因变量为$Y$,那么三者就构成了一个马尔可夫链$\theta \rightarrow Z \rightarrow Y$。EM算法相当于是通过$p(z|\theta)$的最大化来简化$p(y|\theta)$的最大化,下面我将以算法在高斯混合模型中的应用来说明这个过程。
|
||||
|
||||
顾名思义,高斯混合模型(Gaussian mixture model)是由$K$个高斯分布混合而成的模型。这个模型在前面的第20讲中曾经有所提及,你可以回顾一下。在高斯混合模型中,每个高斯分布的系数$\pi_k$可以看成是它出现的概率。模型生成的每个样本都只能来自混合模型中的唯一一个成分,就像每一轮投掷只能使用一枚硬币一样。
|
||||
|
||||
作为一个生成模型,高斯混合先按照概率$\pi_k$选择第$k$个高斯分布,再按照这个分布的概率密度采出一个样本,因此高斯分布的选择和样本的取值共同构成了混合模型的完备数据(complete data)。但从观察者的角度看,分布的选择是在生成数据的黑箱里完成的,所以需要用隐变量$\bf z$来定义,单独的观测数据$\bf x$就只能构成不完备数据(incomplete data)。
|
||||
|
||||
对高斯混合模型的学习就是在给定不完备数据$\bf X$时,估计模型中所有的$\pi_k$、$\mu_k$和$\sigma_k$,这些未知的参数可以统称为$\boldsymbol \theta$。最优的参数$\boldsymbol \theta$应该让对数似然函数$\log p({\bf X} | \boldsymbol \theta)$最大化,其数学表达式可以写成
|
||||
|
||||
$$ L(\boldsymbol \theta | {\bf X}) = \log p({\bf X} | \boldsymbol \theta) = \log \prod\limits_{n=1}^N p({\bf x}_n | \boldsymbol \theta) = \sum\limits_{n=1}^N \log (\sum\limits_{k=1}^K \pi_k \mathscr{N}({\bf x}_n | \boldsymbol \mu_k, \boldsymbol \Sigma_k)) $$
|
||||
|
||||
可以看到,上面的表达式涉及对求和项计算对数,这对于求解极值来说颇为棘手。好在我们还有隐变量,虽说混合模型中存在若干个成分,但落实到单个样本上,每个样本只由其中的一个高斯分布产生。
|
||||
|
||||
引入隐变量能够确定这个唯一的分布,也就是去掉上面表达式中对成分$k$的求和,从而避免对求和项的复杂对数运算。如果已知每个样本${\bf x}_n$所对应的隐变量$z_{nk} = 1$,那就意味着第$n$个样本由第$k$个混合成分产生,上面的表达式就可以简化为
|
||||
|
||||
$$ L(\boldsymbol \theta | {\bf X}, {\bf Z}) = \sum\limits_{n=1}^N \log \pi_k \mathscr{N}({\bf x}_n | \boldsymbol \mu_k, \boldsymbol \Sigma_k) $$
|
||||
|
||||
但隐变量本身也是随机变量,只能用概率描述。如果将参数当前的估计值$\boldsymbol \theta^{(t)}$看作真实值,它就可以和不完备数据结合起来,用于估计隐变量的分布。隐变量的分布可以利用贝叶斯定理计算,将混合参数$\pi_k$看作先验概率,单个的高斯分布$\mathscr{N}(\boldsymbol \mu_k, \boldsymbol \Sigma_k)$看作似然概率,就不难计算出隐变量$z_{nk}$关于$k$的后验概率
|
||||
|
||||
$$ p(z_{nk} | {\bf x}_n, \boldsymbol \theta^{(t)}) = \dfrac{\pi_k \mathscr{N}({\bf x_n} | \boldsymbol \theta^{(t)})}{\sum\limits_{j = 1}^K \pi_j \mathscr{N} ({\bf x_n} | \boldsymbol \theta^{(t)})} $$
|
||||
|
||||
如果你对第20讲的内容还有印象,就会发现这个后验概率就是其中提到的"责任$\gamma_{nk}$",其意义是第$k$个高斯分布对样本的响应度(responsibility)。由于这里计算出的后验是随机变量$z_{nk} = 1$的概率,它实际上代表的就是$z_{nk}$的数学期望。
|
||||
|
||||
有了隐变量的后验概率,就可以将它代入到基于完备信息的对数似然概率中,通过求和对隐变量进行边际化的处理。求出的目标对数似然$L(\boldsymbol \theta | {\bf X}, {\bf Z})$关于隐变量$\bf Z$的数学期望也叫作$Q$函数,其数学表达式为
|
||||
|
||||
$$ Q(\boldsymbol \theta, \boldsymbol \theta^{(t)}) = \sum\limits_{\bf Z} p({\bf Z} | {\bf X}, \boldsymbol \theta^{(t)}) L(\boldsymbol \theta | {\bf X}, {\bf Z}) $$
|
||||
|
||||
其中$p({\bf Z} | {\bf X}, \boldsymbol \theta^{(t)}) = \prod_{n=1}^N p(z_{nk} | {\bf x}_n, \boldsymbol \theta^{(t)})$。
|
||||
|
||||
将对隐变量求解数学期望和对每个样本对数似然求和的顺序调转,也就是先针对每个样本求出期望,再将所有期望值求和,就可以得到完备数据下对数似然的数学期望
|
||||
|
||||
$$ Q(\boldsymbol \theta, \boldsymbol \theta^{(t)}) = \sum\limits_{n=1}^N \sum\limits_{k=1}^K \gamma_{nk} [\log \pi_k + \log \mathscr{N}({\bf x}_n | \boldsymbol \mu_k, \boldsymbol \Sigma_k)] $$
|
||||
|
||||
这是期望步骤的最终结果。接下来的最大化步骤需要找到让上面的表达式最大化的新参数$\boldsymbol \theta^{(t+1)}$,这只需要对$\pi_k$、$\boldsymbol \mu_k$和$\boldsymbol \Sigma_k$分别求偏导数就可以了。
|
||||
|
||||
在Scikit-learn中,EM算法被内嵌在mixture模块中的GaussianMixture类中,调用这个类就调用了EM算法。用GaussianMixture类对20支英超球队的聚类数据进行分类,得到的结果如下图所示,其中不同的高斯分布用不同颜色的椭圆表示。可以看出,每个高斯分布都由相距较近的点组成。
|
||||
|
||||
你可以将高斯混合模型的结果和20讲中$k$均值的结果作一比较,观察硬聚类和软聚类的区别。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/97/80/975b1667a60e51714aeb4ebbbcead380.png" alt="" />
|
||||
|
||||
今天我和你分享了期望最大化算法的基本原理,及其在高斯混合模型中的应用,包含以下四个要点:
|
||||
|
||||
<li>
|
||||
期望最大化算法通过迭代来求解令观测结果似然概率最大化的未知参数;
|
||||
</li>
|
||||
<li>
|
||||
期望步骤计算完备数据的似然概率关于隐变量的数学期望;
|
||||
</li>
|
||||
<li>
|
||||
最大化步骤通过最大化期望步骤的结果来计算新的参数估计值;
|
||||
</li>
|
||||
<li>
|
||||
期望最大化算法主要用于高斯混合模型等含有隐变量的概率图模型的学习。
|
||||
</li>
|
||||
|
||||
除了高斯混合模型之外,对隐马尔可夫网络的学习也需要使用EM算法。在隐马尔可夫的文献中,EM算法通常被称为Baum-Welch算法(Baum-Welch algorithm)。两者虽然名称不同,但原理是一样的。
|
||||
|
||||
你可以参考维基百科等资料,了解Baum-Welch算法的特点,并在这里分享你的见解。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/b1/e2/b1c002cc83fd3b40f609ea95b11ef9e2.jpg" alt="" />
|
||||
|
||||
|
||||
82
极客时间专栏/geek/机器学习40讲/概率图模型/40 | 结构学习:基于约束与基于评分.md
Normal file
82
极客时间专栏/geek/机器学习40讲/概率图模型/40 | 结构学习:基于约束与基于评分.md
Normal file
@@ -0,0 +1,82 @@
|
||||
<audio id="audio" title="40 | 结构学习:基于约束与基于评分" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/bc/a7/bc112a761c3e07409ed0a765ff6dd6a7.mp3"></audio>
|
||||
|
||||
看完了参数学习,我们再来看看结构学习。
|
||||
|
||||
**结构学习**(structure learning)的任务是找到与数据匹配度最高的网络结构,需要同时学习未知图模型的结构和参数。这也很容易理解:模型的结构都不知道,参数自然也是不知道的,所以需要一并来学习。**结构学习的任务是根据训练数据集找到结构最恰当的模型**,这无疑比参数学习要复杂得多,也有更多的不确定性。
|
||||
|
||||
对图模型进行结构学习的目的有两个。一方面在于**知识发现**(knowledge discovery),根据因变量的结果来判定自变量之间的依赖关系;另一方面则在于**密度估计**(density estimation),估计出数据分布的特性,据此对新样本进行推断。
|
||||
|
||||
对图模型进行结构学习有哪些方法呢?主要有三种,分别是**基于约束的学习**、**基于评分的学习**和**基于回归的学习**,这三种方法都可以应用在有向的贝叶斯网络和无向的马尔可夫随机场中,但在下面的介绍中我将以较为简单的贝叶斯网络为例。
|
||||
|
||||
**基于约束的结构学习**(constraint-based structure learning)将贝叶斯网络视为条件独立性的表示,与贝叶斯网络的语义非常贴近。这种方法首先从数据中识别出一组条件独立性作为约束,然后尝试找到最符合这些约束的网络结构。基于约束的学习与贝叶斯网络的结构特征密切相关,但它缺乏类似于似然函数的显式目标函数,因而不能直接找到全局的最优结构,也就不适用于概率框架。
|
||||
|
||||
**基于约束的典型算法是SGS算法**,这个名字来源于三位设计者的首字母缩写。SGS采用遍历式的方法来判定结点之间是否应该有边存在,它首先在结点集合上构造出全连接的无向图,再对图中多余的边做出删减。具体的做法是判断选出的两个节点$i, j$在给定其他所有结点的条件下是否条件独立,如果存在让$i$和$j$满足$d$分离性的结点子集,那就把$i$和$j$之间的边去掉。对所有的结点对都进行上述操作,就可以删除冗余边,得到新的简化无向图。
|
||||
|
||||
上面的步骤只能确定边的存在性,要形成贝叶斯网络还得给通过审核的每条边确定方向。定向的方法是找到所有具有$i - j - k$形式,也就是两端的结点互不相连、但都与中间结点相连接的**结点三元组**,并判断$i$和$k$之间的条件独立性。当且仅当$i$和$k$无论如何都不满足$d$分离性时,将这个三元组定义成汇连结构$i \rightarrow j \leftarrow k$。
|
||||
|
||||
对所有的三元组都进行完上面的检测之后,接下来要重复以下步骤:如果三元组具有$i \rightarrow j - k$的形式,同时$j$又没有指向其他结点的有向边,那就直接添加一条从$j$到$k$的有向边$j \rightarrow k$;如果$i$和$j$之间存在未确定方向的边,同时还有从$i$出发经过其他结点到$j$的有向路径,那么两者之间的无向边就被定向为$i \rightarrow j$。当以上步骤重复到没有新边需要定向时,图模型的结构就确定了。
|
||||
|
||||
SGS算法最大的问题在于**运算复杂度**,其运算量会随着结点数目的增加以超指数的方式增长,因而不具备可扩展性。除了计算问题之外,SGS算法在**可靠性上也有缺陷**,其确定高阶条件独立关系的可靠性远不如低阶独立关系。在SGS算法的基础上还衍生出了PC算法和针对大规模网络的增长-收缩算法(grow-shrinkage algorithm),在此就不赘述了。
|
||||
|
||||
与基于约束的学习不同,**基于评分的结构学习**(score-based structure learning)**把结构学习问题处理为模型选择问题**。这种学习方法将图模型与数据的匹配程度定义为评分函数(score function),再在所有可能的结构中搜索出评分最高的那个作为结果。
|
||||
|
||||
基于评分的学习的首要任务是**选择合适的评分函数**。评分函数决定了数据和结构之间的拟合程度,必须要满足评分等价性和可分解性两个条件。评分等价性指的是独立性关系相同的等价网络所获得的分数应该相同,可分解性指的则是评分函数能够被分解为多个子函数的累加,每个子函数对应一个局部结构,一个结构的变化不会影响其他结构部分的分数。
|
||||
|
||||
**定义评分函数的常见出发点是信息论**,如果将学习问题看作最优编码问题,就可以定义出最小描述长度作为评分函数。
|
||||
|
||||
**最小描述长度**(minimal description length)借鉴了信息熵的概念,其目标是找到一个能以最短编码长度描述训练数据的模型。
|
||||
|
||||
计算出的模型长度包括两部分,一部分用来描述贝叶斯网络本身,其字节数取决于参数个数;另一部分用于描述用这个网络表示的数据,其字节数取决于数据在模型下的似然概率。
|
||||
|
||||
网络中的参数越多,似然概率的表示就越精确,但过拟合的风险也会越大。两者的折中就是模型复杂性与模型表示样本的准确性之间的平衡这个老生常谈的问题。
|
||||
|
||||
除了最小描述长度之外,**赤池信息量准则**(Akaike information criterion)和**贝叶斯信息量准则**(Bayesian information criterion)也是基于信息论的评分函数,它们都将评分表示成“模型+数据”的组合,其形式可以看成是给模型下的对数似然概率$\ln L$添加了和模型参数数目有关的正则化项。
|
||||
|
||||
赤池信息量准则的正则化项是参数数目$k$乘以常数系数,而贝叶斯信息量准则的正则化项则是参数数目$k$乘以样本容量$n$的对数,两者的数学表达式为
|
||||
|
||||
$$ {\rm AIC} = 2k - 2\ln L, {\rm BIC} = k\ln n - 2\ln L $$
|
||||
|
||||
和最小描述长度一样,这两个指标也是越小越好。
|
||||
|
||||
在设计评分函数时,如果将数据和模型融合在一起,得到的评分函数就是**贝叶斯狄利克雷评分**(Bayesian Dirichelet),这个函数可以写成对狄利克雷分布的求和。
|
||||
|
||||
贝叶斯狄利克雷评分是在已知结构时通过计算样本数据的边际似然函数作为评分的依据,计算时假定贝叶斯网络的参数服从狄利克雷形式的先验分布。利用似然等价性约束,也就是等价结构获得的分数相同可以对贝叶斯狄利克雷评分做出改进,这一改进就相当于计算模型关于样本集的后验概率。
|
||||
|
||||
选定了合适的评分函数后,接下来就要在假设空间中搜索这个评分函数上的最优解。由于评估所有备选结构的分数难以实现,因此在搜索时,通常使用启发式算法来查找次优结构。贪婪搜索、遗传算法、进化规划、模拟退火算法和蚁群算法等启发式算法都可以应用在最优结构的搜索中。
|
||||
|
||||
将贪婪搜索应用在结构学习中时,需要先初始化一个网络结构,以它为蓝本每次对一条边进行增加、删除或者改变方向,直到新结构的评分函数值不再降低为止。要进一步简化运算量,还可以对图结构施加额外的约束以削减假设空间,这相当于又引入了一重先验。
|
||||
|
||||
和前面两位老大哥相比,**基于回归的结构学习**(regression-based structure learning)至少从资历上说还是个小弟。这类算法的出发点是将目标函数表示为图模型参数的线性组合,再对线性模型进行$L_1$或$L_2$正则化处理来控制模型的复杂度。其**优势在于可以确保目标函数最优解的存在性,明确了学习问题的意义,同时还具有良好的可扩展性**。
|
||||
|
||||
基于回归的不同方法之间的区别在于目标函数的不同。最直接的方式是将图结构关于数据的对数似然定义为目标函数,并使用拉普拉斯先验来简化模型。结点之间的独立性也可以用LASSO回归来估计,这通常被应用于建模连续变量的高斯图模型(Gaussian graphical model)中,其任务是确定给定结点的马尔可夫毯,线性系数不为0的其他结点和目标结点之间都存在依赖关系。
|
||||
|
||||
将回归模型与评分函数相结合,还可以把最小描述长度表示为参数的线性组合,对其进行优化以确定模型结构。关于这些方法的具体细节在此就不作介绍了。
|
||||
|
||||
上面所介绍的方法都是建立在完全观测数据的基础上的。如果模型中存在隐变量,结构学习的难度也会大大增加。将专门处理隐变量的EM算法引入到结构学习之中,得到的就是**结构EM(Structural EM)算法**。
|
||||
|
||||
结构EM算法在具有结构和参数两个维度的假设空间内进行搜索,在每一轮次的搜索中,原始的EM算法是为固定的模型更新参数,结构EM算法则同时更新参数和模型,更新的方式是让模型的评分函数最大化,评分函数的选择是参数关于模型后验概率的信息熵,当然也可以使用贝叶斯信息量准则或者最小描述长度这类指标。
|
||||
|
||||
今天我以贝叶斯网络为例,和你分享了概率图模型中的结构学习任务,包含以下四个要点:
|
||||
|
||||
<li>
|
||||
结构学习的任务是找到与数据匹配度最高的网络结构,需要同时确定图模型的结构和参数;
|
||||
</li>
|
||||
<li>
|
||||
基于约束的结构学习通过条件独立性的约束确定贝叶斯网络的结构,需要先后确定边的存在性和方向;
|
||||
</li>
|
||||
<li>
|
||||
基于评分的结构学习通过数据和结构的匹配度确定贝叶斯网络的结构,包括选择评分函数和搜索最优结构两个步骤;
|
||||
</li>
|
||||
<li>
|
||||
对不完备数据实施结构学习可以使用结构EM算法。
|
||||
</li>
|
||||
|
||||
本讲中介绍的方法都是频率主义下的方法。要使用贝叶斯来进行结构学习,就得先给所有备选模型和所有参数设定先验,再用训练数据去调整先验。显然,这类方法要在所有可能的模型中进行搜索比较,其实用性非常差。
|
||||
|
||||
简化贝叶斯结构学习的方式有两种,一种叫**贝叶斯模型选择**(Bayesian model selection),直接选择最像的模型当作真实模型来使用;另一种叫**选择性贝叶斯模型平均**(selective Bayesian model averaging),将搜索的范围限制在人为选定的一组模型之中。
|
||||
|
||||
关于贝叶斯结构学习更多的细节,你可以查阅资料,了解它的思想与方法,并在这里分享你的见解。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/38/7e/38b916fe9148ecf31dbdc2e877d8507e.jpg" alt="" />
|
||||
|
||||
|
||||
56
极客时间专栏/geek/机器学习40讲/概率图模型/总结课 | 贝叶斯学习的模型体系.md
Normal file
56
极客时间专栏/geek/机器学习40讲/概率图模型/总结课 | 贝叶斯学习的模型体系.md
Normal file
@@ -0,0 +1,56 @@
|
||||
<audio id="audio" title="总结课 | 贝叶斯学习的模型体系" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/08/ab/08a4dc18bc0fdba4b32032527a89caab.mp3"></audio>
|
||||
|
||||
在今天这篇总结中,我将对贝叶斯机器学习中涉及的模型做一个系统的梳理。虽然这个模块的主题是概率图模型,内容也围绕着概率图的三大问题——表示、推断和学习展开,但概率图归根结底是手段,其目的是**将概率分布用图结构表示出来,进而从贝叶斯定理出发,从概率角度解决机器学习的问题**。因此从宏观的角度来对概率模型加以整理是很有必要的。
|
||||
|
||||
**概率模型基本上都属于生成模型,它们可以建模数据的生成机制,这和统计机器学习以判别模型为主的特色形成鲜明的对比**。在统计学习中,几乎所有模型都可以追溯到线性回归的演化,在贝叶斯学习里,起到万物之源作用的是具有最大不确定性的**高斯分布**,对高斯分布的不同处理方式决定了不同的数据生成方式。
|
||||
|
||||
在观察高斯分布的演化时,不妨先从外部入手。最简单的外部拓展方法就是混合,将多个不同数字特征的高斯分布混杂在一起,先按一定概率抽取成分,再根据选定的成分分布生成数据,这种生成模型就是**高斯混合模型**。在高斯混合模型里,决定每个时刻的观察结果到底来自哪个成分的变量不能被直接观测,因而是隐变量。
|
||||
|
||||
除了横向意义上的混合之外,纵向意义上的时序也是外部演化的常见手段,这相当于在数据序列中引入马尔可夫性。如果给高斯混合模型中的隐变量添加时序关系,让下一时刻的状态依赖于这一时刻的状态,就形成了**隐马尔可夫模型**。如果隐马尔可夫模型的状态数目从有限扩展到无穷多,又形成了**线性动态系统**。
|
||||
|
||||
看完了外部拓展,再来看看内部拓展。**贝叶斯模型的内部改进与统计模型类似,无外乎非线性化、局部化和稀疏化三种方式**。非线性化改造容易理解,它是将状态转移和状态到观测的关系建模为非线性关系,可以得到非线性动态系统。但这类非线性系统难以求出解析解,也得进行线性的近似。
|
||||
|
||||
在概率模型中,稀疏化,也就是降维的最典型方法是**因子分析**(factor analysis)。因子分析的任务是构造因子模型,将去均值后的观测结果表示成一组公因子(common factor)的线性组合。比如在分析学生的成绩时,物理/化学/生物这几门课程之间会存在较强的相关性,政治/历史/地理这几门课程也会存在较强的相关性,物理/政治、化学/历史之间的相关性就会较弱,这样的相关关系就可以用理科和文科两个互不相关的公因子来刻画。
|
||||
|
||||
不难看出,公因子的作用类似高斯混合模型中的隐变量,但它可以起到降维的作用,前面介绍过的**主成分分析**就可以看成是因子分析的一种实现方式。如果对线性的因子分析做非线性处理,得到的就是**独立成分分析**。独立成分分析并不强制要求所有源信号以线性方式混合,因而可以作为非线性模型出现。
|
||||
|
||||
概率模型的局部化并非将整个定义域上的概率分布打散成若干局部的组合,而是直接一步到位地进化到分布式表示,其直接的结果是**矢量量化**(vector quantization)。矢量量化和统计学习中的聚类类似,将它添加一个隐藏层就是**自编码器**。如果将矢量量化的编码结果进行层次化的堆叠,那就形成了**玻尔兹曼机**——深度学习的早期模型之一。
|
||||
|
||||
高斯分布演化出来的模型可以作为基础模型应用到外部的组合中。比如对独立成分分析的结果进行层次化组合,可以得到非线性的高斯网络;对多个隐马尔可夫模型进行混合,可以得到混合隐马尔可夫模型;给矢量量化过程引入时序,实现的又是因子化的隐马尔可夫模型。正所谓一生二、二生三、三生万物,**有了基础模型和基本方法,各种复杂的模型就都可以被串联起来**。
|
||||
|
||||
关于这些具体模型的推断与学习方法推荐阅读发表在《神经计算》(Neural Computation)第11卷第2期上的文章《线性高斯模型的大一统综述》(A Unifying Review of Linear Gaussian Models),这是一篇非常好的综述文章。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/b7/58/b7ca408ee79402b8174dec9aa1fbdf58.png" alt="" />
|
||||
|
||||
从概率图模型和贝叶斯机器学习的体系出发,我向你推荐以下的参考书。
|
||||
|
||||
<li>
|
||||
《贝叶斯方法》(Bayesian Methods for Hackers),卡梅隆·戴维森-皮隆(Cameron Davidson-Pilon)
|
||||
</li>
|
||||
<li>
|
||||
《贝叶斯思维》(Think Bayes),艾伦·唐尼(Allen B. Downey)
|
||||
</li>
|
||||
|
||||
这两本书是贝叶斯概率理论的入门读物,它们不像学院派的教材那样用冗长的公式和复杂的符号让人望而却步,而是通过更加贴近生活的实例来传递贝叶斯理论的核心要义,读起来比较轻松。这两本书能带给你关于贝叶斯直观而感性的认识,让艰深的理论看起来没那么晦涩。
|
||||
|
||||
<li>
|
||||
《贝叶斯统计方法》(Doing Bayesian Data Analysis),约翰·克鲁斯克(John K. Kruschke)
|
||||
</li>
|
||||
<li>
|
||||
《贝叶斯数据分析》(Bayesian Data Analysis),安德鲁·格尔曼等(Andrew Gelman, et. al.)
|
||||
</li>
|
||||
|
||||
这两本书是将贝叶斯的思想用于统计学和数据分析的进阶读物,其中前者侧重于贝叶斯的统计学,后者侧重于贝叶斯的数据分析,与机器学习结合得更加紧密。和前面两本小书相比,这两本称得上是大部头,两者结合形成了对贝叶斯概率应用的全面图景。
|
||||
|
||||
<li>
|
||||
《概率图模型》(Probabilistic Graphical Models),达芙妮·科勒 & 尼尔·弗里德曼(Daphne Koller, Nir Friedman)
|
||||
</li>
|
||||
<li>
|
||||
《贝叶斯推理与机器学习》(Bayesian Reasoning and Machine Learning),大卫·巴伯(David Barber)
|
||||
</li>
|
||||
|
||||
如果说上面两本书是大部头,那《概率图模型》就称得上皇皇巨著了。和《机器学习:概率视角》一样,它也是适用于有问题时查阅的百科全书式教材,当作教材的体验并不理想。后面这一部虽然篇幅小了很多,难度却不遑多让。但这两本大书都是干货满满,如果能花时间深入学习,定能带你从量变走向质变。
|
||||
|
||||
行文至此,机器学习这个专栏已经走到尾声。这40篇文章是否带给你些许收获,你又对机器学习产生了哪些新的认识呢?欢迎你留言和我讨论。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user