贝叶斯机器学习

来源:互联网 发布:python零基础入门pdf 编辑:程序博客网 时间:2024/06/08 06:19

贝叶斯机器学习

作者Zygmunt Z.
2016-03-28发表于博文


你知道贝叶斯定理是如何涉及到机器学习的?对于难题如何组合在一起是非常难掌握的,我们知道这花了一段时间.本文是当时发展的介绍.

虽然我们对此事有一定掌握,但是我不是专家,因此下面可能会包含不准确甚至是错误的地方.请在评论或是私信随意指出.


贝叶斯学派和频率学派

在本质上,贝叶斯意味着概率.具体的术语存在是由于有两种方法获取概率.贝叶斯学派认为是信念(belief)的衡量.这样的概率是主观的,涉及未来的.
频率学派有不同的认识:他们使用概率指代过去的事件,在这种情况下,他是客观的,不取决于一个人的想法.这个名字源于方法,例如:我扔硬币100次,头出现53次,那么头出现的频率或者概率就是0.53.
关于这个话题更多的研究,参考Jake VanderPlas的频率学派和贝叶斯学派系列文章(在后面我会翻译).

先验,更新和后验

我们从一个信念开始,称为先验.然后我们获得了一些数据,并用其更新我们的信念.结果被称为后验.我们应该得到更多的数据,老的后验变成新的先验,并重复循环.
这个过程使用贝叶斯定理:

P( A | B )读为给定B时A的概率,表示条件概率:和如果B发生,那么A发生的概率多么像.

从数据推断模型参数

在贝叶斯机器学习中,我们使用贝叶斯定理从数据集推断模型参数:

所有成份都是概率分布.

一般我们无法计算,但由于它只是一个标准化常数,所以并不是非常重要.当比较模型时,我们主要关注包含的表达式,因为保持每个模型相同.
是一个先验,或者我们认为模型参数可能的先验.大多数情况下,我们在这个问题上的看法是相当模糊的,如果我们有足够多的数据,我们根本不在乎那么多.只要是非零的先验,推断应该收敛到可能的.一个指定的先验基于参数化分布,具体内容查阅先验从何而来.
称为给定模型参数数据的似然.似然公式是由模型指定的.人们通常使用似然评估模型:对真实数据有更高似然的模型是更好的.
最后,,后验概率,也就是我们想得到的.它是整个模型的参数的概率,包括从先验信念和数据获得的最优可能的点估计.

方法范围

有两个贝叶斯主要的方向.第一个称为统计建模,第二个称为概率机器学习.后者包括所谓的非参数方法.

统计模型

贝叶斯建模应用于数据稀少,珍贵并且很难获得的情况,例如在社会科学和其他很难进行大规模对照试验.想象一下,统计学家精心构造,并使用拥有的小数据集调整模型.在这种情况下,你不遗余力的让可用的输入物尽其用.
同时,使用小数据量化不确定性是非常重要的,这就是贝叶斯方法所擅长的.
最后,我们将在后面看到,贝叶斯模型通常计算成本昂贵.
若要体验,考虑Data Analysis Using Regression Analysis and Multilevel/Hierarchical Models book书的例子.整本书讲述线性模型.从没有预测变量的线性模型,到带有1个预测,2个预测,6个预测,11预测的线性模型.
这种劳动密集的模式违背了目前机器学习的趋势:使用数据自动从中吸取教训.

概率机器学习

让我们尝试用”概率”替换”贝叶斯”.从这个角度来看,和其他模型差不多.至于分类情况,大多数分类能够输出概率预测.即使是有点贝叶斯对立面的SVM.
顺便说一句,这些概率只能从分类的观点陈述.至于是否符合真正的概率完全是另一回事,这是所谓的校准.
还有一个问题是置信区间(误差条).你可以观察这个回归.大多数”正常”的模型只提供点估计.贝叶斯方法,如贝叶斯线性回归,或高斯过程还提供不确定性估计.

不幸的是,这不是结束.甚至如GP这样的复杂模型通常运行在同方差的假定,即均匀噪声水平.实际上,噪音可能是异方差.如下图:

LDA

隐含狄利克雷分布(Latent Dirichlet Allocation)是另一个例子。它类似于矩阵分解模型,尤其是非负MF。开始于矩阵,其中行是documents,列是words并且每一个元素是给定文档中的给定词的计数。 LDA“因子分解”大小为n×d的矩阵为两个矩阵, documents/topics为(N×d)和topics/words(K x d)。
所不同的是,这两个矩阵相乘无法获得原始矩阵,但是由于相应的行/列总和为一,你可以对documents抽样.对于第一个words,一个样本一个topic,然后这个主题中的一个words(第二矩阵).重复直到你想要的words数量.注意这是一个bag-of-words表达,而不是正确的顺序.
这是一个生成模型的例子,这意味着可以从该模型中抽样,或者生成实例.通常,分类为判别:建模,直接基于x区分类别.一个生成模型关系的是Y和X的联合分布和.估计该分布非常困难,但是可以从中抽样得到一个.

贝叶斯非参数

虽然没有确切的定义,命名意味着模型中参数的数量随着更多的数据变得可用而增长.这类似于SVM,例如,该算法从训练点钟选取支持向量.非参数的例子是高斯分布,和Hierarchical Dirichlet Process版本的LDA,自动选择topics的数量.

高斯过程

高斯函数有些类似SVM,都使用核函数,并且具有类似的扩展性(这些年通过使用近似大大提高).GP一个自然的提法就是回归,分类是事后的想法.对于SVM正好相反.另一个区别是GP概率,而SVM不是.
大多数的GP研究看起来发生在欧洲.英语让GP的使用更简便.其中一个项目是Zoubin Ghahramani领导团队的自动化统计员.
高斯过程一个相对流行的应用是机器学习算法的超参数优化.数据很小,维度和examples数量也是如此,并且通常只有几个参数去调整.每个examples代表目标算法的一次运行,可能会花费几小时或几天.因为我们希望在examples尽可能少的情况下获得更好的结果.

模型 VS 推断

推断是指你的模型如何学习参数.一个模型和你怎么训练是分开的,尤其在贝叶斯世界.
考虑深度学习:你可以使用Adam,RMSprop或者其他优化训练一个网络.然而,它们往往是相对相似的,都称为随机梯度下降的辩题.相比之下,贝叶斯模型的推断之间差异很大.
两个最重要的方法是蒙特卡洛抽样和变分推断.抽样是公认标准,但是很慢.excerpt from The Master Algorithm 有更多MCMC的信息. 变分推断明确设计为交换一些精度为速度的模型.缺点是model-specific.

软件

这些天最显眼的贝叶斯软件可能是Stan.Stan是一个概率变成语言,意味着他允许你指定,训练任何你想要的贝叶斯模型.运行在Python ,R和其他语言中.Stan有一个现代采样器称为NUTS:

大部分的计算[Stan]的使用Hamiltonian 蒙特卡洛进行。 HMC需要一些调整,所以 Matt Hoffman 写了一个新的算法NUTS(“No-U-Turn取样器”)的自适应优化HMC。在许多情况下,NUTS实际上比最佳静态HMC计算效率高!

关于Stan一个特别有趣的是能够自动变分推论:

变分推断是一个近似的贝叶斯推断的扩展技术。推导变推理算法需要繁琐的具体模型计算;这使得难以实现自动化。我们提出了一种自动变分推断算法,自动微分变分推断(ADVISE)。用户只需要提供一个贝叶斯模型和数据集,没有其他的。

这一技术为小型模型扩展至少中等规模的数据铺平道路。
Python中,最流行的包是P有MC.这不是最先进最好的(开发商好像追赶Stan),但仍然很好.P有MC有NUTS和ADVI,这里有一些小批量ADVI例子.软件使用Theano作为后端,所以他比纯Python快的多.
Infer.NET是微软的概率编程库。这主要是从如C#和F#语言,但显然也可以从.NET的IronPython的调用. .Infer.net默认使用expectation propagation。
除了这些, 还有各种实现贝叶斯计算的包,从其他概率编程语言到专门的LDA 实现.一个有趣的例子是CrossCat:

CrossCat是贝叶斯方法分析高维数据表的普遍领域。 CrossCat通过在层级近似推断,非参数贝叶斯模型估计数据表中的变量的全部联合分布,并为每一个条件分布提供了有效取样。CrossCat结合非参数混合模型和贝叶斯网络结构学习的优势:它可以在数据足够邒情况下通过假定隐含变量建模任何联合分布,而且还可以发现可观测变量之间独立性。

0 0