雷锋网[ai科技评论]按:3月3日,中国人工智能学会aidl第二期【人工智能前沿讲习班】在北京中科院自动化所举行,本期讲习班的主题为【机器学习前沿】。周志华教授担任学术主任,前来授课的嘉宾均为中国机器学习界一流专家、资深科研人员和企业精英,包括:耿新、郭天佑、刘铁岩、王立威、叶杰平、于剑、余扬、张长水、郑宇、朱军。
来自清华大学计算机科学与技术系的朱军副教授做了题为《贝叶斯学习前沿进展》的开场分享课。总共2个小时时长的课程,内容主要分为三大部分:贝叶斯基本理论、模型和算法;可扩展的贝叶斯方法;深度生成模型。本文乃三大内容中的第一部分:贝叶斯基本理论、模型和算法。
朱军
清华大学计算机系长聘副教授、智能技术与系统国家重点实验室副主任、深度学习技术与应用国家工程实验室副主任、国家万人计划青年拔尖人才、中国自然科学基金优秀青年基金获得者、中国计算机学会青年科学家、ieee ai’s 10 to watch入选者。
以下是根据朱军副教授现场分享整理的文字报告,雷锋网(公众号:雷锋网)[ai科技评论]做编辑整理。
学术主任周志华教授介绍词:朱军老师是我们国内机器学习非常优秀的一位年轻的学者,他特别在贝叶斯学习方面有一套非常有特色的东西,大家知道贝叶斯学习是机器学习里面非常主流的一个流派,朱军老师是把这两个东西做了非常有机的结合,今天请朱军老师将给大家做一个全面的贝叶斯学习前沿介绍,下面欢迎朱军老师。
朱军:非常感谢周老师给这个机会让我跟大家分享一下。我今天想和大家分享的是,在深度学习或者大数据环境下我们怎么去看待相对来说比较传统的一类方法,贝叶斯方法。它是在机器学习和人工智能里比较经典的方法。
类似的报告我之前在ccf adl讲过,包括去年暑假周老师做学术主任在广州有过一次报告,大家如果想看相关的工作,我们写了一个文章,正好我今天讲的大部分思想在这个文章里面有一个更系统的讲述,大家可以下去找这个文章读。
这次分享主要包括三个部分:
第一部分:基本理论、模型和算法
贝叶斯方法基础 正则化贝叶斯推理和案例
第二部分:可扩展的贝叶斯方法
在线学习 分布式mcmc
第三部分:深度生成模型
贝叶斯方法概念是比较简单的,一般情况下我们做贝叶斯推理,用了一个核心的工具叫贝叶斯定理或者贝叶斯准则,实际上写出来就是这么一个简单的公式,大家学概率基本上都学过这个。
公式里有几个基本的对象,我们用θ描述模型的参数,这个模型可以是神经网络、线性模型、或者svm,参数都用θ来描述;大d是我们的训练集;π(θ)是先验分布,是我们看到数据之前对模型本身分布的描述;p(d|θ)是似然函数,给定一个模型θ的情况下描述这个数据的似然;我们的目标是想获得这个后验分布,是看到数据之后我们再重新看模型本身的分布情况。这是1763年当时贝叶斯生前没有发表的文章里面,最早阐述了这个公式,最后正式发表了。
首先,预测问题。我们用大m来描述model
class,比如线性模型、非线性模型,model
class里面有多个具体的模型,我们还是用参数θ表示。对新来的样本做一个预测,比如算它的似然,这样可以用前边推出来的后验分布来做一个积分。这个是给定模型下样本的似然,这是所有可能模型的分布。本质上是做了一个平均,这个思想实际上跟周老师的集成学习的思想是比较相近的,我们也是对很多种模型做了一个加权的平均,只是说在这个地方模型可能有无限多个,我们是用概率分布来去描述它。
这个似然函数通常假设在给定模型参数的情况下,测试数据与训练数据是独立的,这就是我们通常说的独立同分布的假设。
除了做预测,我们还可以做不同模型的比较、模型的选择。比如说我们要做分类问题,到底是要选线性的模型还是深度学习的非线性模型,这是在做模型选择的问题。这个问题可以描述成这样:我们用m1表示一个model
class,可能是一个线性模型,我们用m2表示另外一个model
class,是非线性模型,我们在同样数据集d的情况下,我们可以去比较这两个量哪个大,这个量是描述的在m1下我们观察到训练集的一个似然,另外一个是在m2的情况下观察的数据集似然,可以通过这个比较看我应该选择哪一种模型,这是一个用贝叶斯方法做模型选择的一个基本的规则。
做贝叶斯的人会告诉你很多的理由,我们后边从例子里边也会看到一些答案。这里给大家简单讲一个,概率论的结果告诉我们实际上在很多情况下对数据的建模是存在这种贝叶斯的模型来刻画的。这有一个基本性质叫infinite
exchangeability,假如你数据有n个样本,如果将它们任意交换顺序,这些数据的联合分布不变化,也即是我们通常说的和序列无关,那么它的联合分布可以写成贝叶斯的形式---存在一个模型和对应的分布,你通过积分的形式可以刻画整个分布。如果用图示画一下,在给定这个模型的情况下,数据是完全独立的,我们叫条件独立性,这是概率图模型里的一个非常重要的概念。
稍微提一点,可交换性比前面讲的独立同分布更广泛一点,可交换的数据可以不是独立同分布的。另外,这个定理只告诉你存在,但是后面的问题是我们不知道具体的模型应该是什么样的,比如说是线性模型、非线性模型,用什么样的模型去刻画,这是统计建模要解决的问题。
在贝叶斯里有两个流派,一个是客观贝叶斯,另一个是主观贝叶斯。所谓客观贝叶斯,就是希望能够把先验的影响尽量弱化,所以会研究一些noninformative
priors,就是你用贝叶斯的结果像用统计的方法得到结果一样,有一些统计性质。而主观贝叶斯,实际上是更希望利用贝叶斯框架的灵活性,因为贝叶斯框架给了你一个先验的分布,你可以在先验上做文章,我们后边也会有些例子来讲怎么去利用先验提供的灵活性,来做具体的学习任务或者解决问题。用主观贝叶斯的好处之一是,当你的数据足够多的时候,可以通过先验引入一些知识来帮助你学习,这个尤其在交叉学科里,比如用贝叶斯方法做认知或者神经科学,是大家比较喜欢用的方法。
当然还有另外一些具体的技术,我可以相信这个prior,但是我尽量弱化prior里边参数的影响,这里面有一种技术叫“层次的prior”。有一个基本的假设,这个π里面的参数叫超参数,它离我这个产生数据的模型越远的话影响就越弱,实际上利用这种基本假设,就可以构建多层的prior。
从这里面可以看到,贝叶斯本身就是一个多层的,和深度学习的多层表示本质是一样的,只不过这里边完全用概率的方式来刻画。当然还有一些近似的方法,做一些empirical
prior,通过数据估计出来。好处是计算相对比较简单,不好的地方是多次用训练数据,会得到一些过拟合的问题。
我们前面已经看到,不管是在最基本的贝叶斯运算或者是在多层先验里面都会反复用到积分运算,这是在用贝叶斯方法时面临的最讨厌的事情,因为这里的积分不像我们学微积分时的那种一元或者二元简单的积分运算,这里的积分可能是非常高维的积分。假设我们用一个线性模型,当特征100维时,我这个就是100维的积分,如果更高维的,比如说上千、上万维,这个积分相应更高维。这里面有很重要的计算问题,我怎么用数值的方法来算这个积分。这是在这种不确定性或者概率推理里边要解决的主要目标。
我用一页ppt简单给大家介绍了一下。因为积分非常难算,所以通常情况下会用一些近似,尤其是在机器学习里面,大家用的贝叶斯方法通常是一个近似的贝叶斯推理。
这里面我列举了几个比较常用的经典近似贝叶斯推理的方法。
首先第一种,变分的方法。变分的基本原理是把一个要解的问题,通过引入一个变量变成一个优化的问题。这样做的好处是,你可以在优化问题中引入一些约束,让问题简化,以达到快速求解的过程;但是也会带来坏处,如果你的约束比较严格的话,近似的程度就会变差。
下面一种是非常通用而且理论上精确的方法,它是基于随机模拟的,我们叫mcmc的方法,它是通过构造一个随机过程来逐渐逼近你要的分布,通过这个随机过程不断的采样,达到刻画目标分布的结果。现在面临的挑战是:1)当数据比较多的时候,怎么去做这个计算;2)在高维空间里面怎么去做随机的模拟;3)当我们的模型变得复杂的时候,比如最后会给大家讲的深度产生式模型里边有多层的隐含变量,像深度学习一样,这种模型下我怎么还去做mcmc。这些挑战同样存在于变分近似方法里面,现在仍然是研究的热点。还有一些相关的,比如像ep或者拉普拉斯近似,基本上可以理解为变分的一种特殊类别。
其实我前面已经给大家简单讲了一些,这个是我们的一个总结,如果想去做贝叶斯机器学习的话,基本面临着几个方面的问题。
第一点,是基本理论上的问题。我前面讲的贝叶斯方法概念非常简单,它的核心是贝叶斯定理。贝叶斯定理已经250多年了,它存在一些自己的局限,我们怎么从基本信息处理准则的角度来重新理解它,去做更灵活的推理。
第二点,是关于计算方面的。有了模型、有了推理框架之后我怎么去做高效的计算、怎么做高精度的计算。
第三点,对不同场景怎么去做建模。将贝叶斯方法应用到不同场景时,你要去理解你的问题,找到合适的模型。
我后面基本上围绕这三个方面给大家讲。第一个方面,给大家提出一种比较新的观点来看经典的贝叶斯定理,告诉大家怎么去扩展它的灵活性。第二个是关于scalability,我怎么算比较快。最后一个,贝叶斯方法和深度学习怎么结合,既利用深度学习的好处又保持贝叶斯在概率建模和推理的能力。
我们先从最基本的概念开始,可能大家学过模式识别或者信号处理,都会接触过这个概念,叫kl散度,它描述两个概率分布之间的差异有多大。
首先,我们可以通过优化的方式重新审视贝叶斯推理。对任意一个分布我可以来做这件事情,这个是我们的目标p,我们可以找一个q分布,它是一个well defined的分布,我可以通过最小化它们之间的kl,取最小值的时候两个是相等的,这是非常简单的道理。
我们可以把这个基本过程用到贝叶斯定理里。贝叶斯推理的目标是找到这个后验分布,将它代入这个目标函数里,现在q是我假设的分布。这样,我们得到了一个优化的问题。这是我们原来的贝叶斯定理,如果这个目标函数等于0的话,实际上q等于我们想要的p(c/d)的后验分布。目标函数的第一项是限制我们的后验分布不能离先验分布太远,后面一项实际上是描述了对数据集的拟合程度。
这样的话,我们获得了一种新的角度来看贝叶斯推理在干吗。有了这种新的理解之后,我们可以做的事情有很多。
实际上,我们说贝叶斯定理或者贝叶斯推理是信息处理的一种准则。在信息论里,我们有一个通道,有输入和输出。在做贝叶斯推理时,我们的输入是一个先验分布和一个似然函数,输出是一个后验分布。有了这种观点之后,我们可以做很多扩展。大家可以想,我的输入、输出可以保持不变,但我可以替换信息处理的准则。我可以把这里边信息处理的准则拿掉,做的比经典贝叶斯更加普适。
这种基于优化的解释,实际上在上世纪80年代就有统计学家提出过,e.t.
jaynes是比较有名的统计学家,对我们前面讲的优化解释做了一些comments,它给经典的贝叶斯提供了一个新颖(fresh)的解释,可以让贝叶斯方法更广泛被应用,而且可以激发(stimulate)新的发展。我们在2010年左右重新审视了这个思路,并依此为基础又发展了一些更普适的贝叶斯推理准则,后面我会介绍。
上述优化的观点可以启发我们把贝叶斯方法和基于风险最小化(risk-minimization)的机器学习框架有机结合。机器学习深入研究过risk-minimization以及相关的优化工具,在我们的框架下可以融合贝叶斯推理,得到一个更灵活的信息处理准则。
在机器学习和模式识别里,大家比较熟悉的是这个损失函数优化问题。比如说,我要做分类,我要训练神经网络,第一项是一个损失函数,它度量了在训练集的错误率;第二项是我们想加的正则化项,目的是保护这个模型避免过拟合、避免发散,这是一个基本框架。这些东西在机器学习里基本上和贝叶斯是不搭边的,不会和贝叶斯放在一起来讨论。
还有一些,比如现在又引起大家很多关注的增强学习/在线学习,它的目标是优化regret/reward,也有一个目标函数来度量。那么,一个问题是这些传统的方法能不能与贝叶斯有机融合?
先给大家看一个简单的例子,是线性的svm,它的目的是想找一个线性平面把不同类别区分开。
我们说有一个叫贝叶斯的svm。
我们可以先简单的把贝叶斯的思路套到svm上来看发生了什么事。传统的svm是找一个决策面,按照一定的最优准则来找。贝叶斯的思想是:我们可以有无穷多个决策面,但是每个决策面有一定的概率。考虑这个简单例子,设有有限多个可能决策面,如果随机采样的话,比如你采样100次,这个蓝色的线可能会出现30次,这个绿色的线可能出现5次,这个线可能出现15次。这里边画的几条线,都可以把这几个样本分开。
假设这个分布是已经知道的,我们怎么做分类判别。根据不同的判别准则,得到损失函数是不一样的。比如:我现在来了这些打问号的测试样本,我想问,那这些测试样本到底属于哪个类别?
因为这里面决策面是不确定的,我们可以有两种策略来做判别。
一种是模型平均:先对这种模型做平均,在做判别。比如,我们可以取这个分布的均值,对应于这个红色的面(下图中颜色较深的线),我可以用这个红色平面来做判别,这是一种思路。它对应的损失函数就可以像经典的svm一样计算,因为取得平均之后就是一个决策面了,和我们传统的问题一样。
还有一种模型叫随机模型,它实际上是这么做的:新来了一个测试样本,我从后验分布里面随机采样一个模型,比如对这个测试样本我随机采样是这个红色的线(下图中颜色较深的线),然后用它来做判别。另外一个样本来了之后,我再随机采样一次,可能采集的是这个。
下边再来一个样本,我再采样一次,可能得到和第一次采样一样的决策面,然后用它来判别。
因为分类平面是随机的,所以我还要去度量它的一个损失函数。所以,我们可以先假设这个分类面是固定的,做一个判别;然后对损失函数求期望。
放在一起来看一下。我们第一种策略是平均模型,第二个是随机模型,这两个在理论上有一些关系,这里我不细说了。我们有了这个loss函数之后,就可以直接进行优化,这是从贝叶斯的角度做svm的方法。。
有了上述问题之后,怎么去求解?对于第一种平均模型,可以通过用凸优化的思路来求解。当模型是线性的,如果先验是高斯,你的后验分布还是一个高斯。这实际上退化到传统的svm。你还可以拓展,利用核方法来拓展非线性的模型,这都是可以的。
对于第二种,给定先验,可以求出一般解。这里有一个问题,这个后验分布通常没有一个解析形式,所以大家研究怎么去做推理。这有一个比较好的方法,大家感兴趣可以去看,用了统计里经常用的数据增广(data augmentation)。
它(数据增广)的基本过程:原来这个分布不太好做,引入一个额外变量过来。它的条件是说,保证边缘分布还是原来的分布。在这个联合分布下你可以做吉布斯采样,每一步都很简单,比如:第一步可能是高斯,第二步也是某种标准分布。这样可以不断迭代进行采样。具体细节,大家可以看polson&scott有一篇文章。
这种贝叶斯的观点可以带来一些额外的好处。跟深度学习中表示学习的思想一致,在贝叶斯svm里,我们可以考虑隐含变量,也可以加很多层的隐含变量,来学这些隐变量的分布。在神经网络里可能学具体的取值,在概率模型里学分布,这是它们的一个差别。这里有一个典型的例子,叫主题模型,在文本分析里面用的比较多。
这是一个主题模型描述文本生成的一个过程。
它的基本假设是文档是有若干主题刻画的。假设这里有2个主题,大家从keyword里能看出来相应的语义,比如:第一个是关于图像,另一个是关于电力相关的东西。在第一个文档里,我用颜色区分相应的主题,比如说这里面的单词以0.8的概率从第一个主题生成,相应的,
0.2的概率从另一个主题生成。对于第二个文档,混合分布是(0.3、0.7)。整个过程可以描述成一个非常经典的层次贝叶斯方法。
这是它的图模型,w是观察到的文本里面的单词,每个单词对应一个topic assignment。下面有一个混合概率,上面有一个先验,这边是我们要学的topic。它定义了这个联合分布。
lda非常经典,2003年的一篇论文可能引了近2万次,表明它在很多地方用。它有一个好处是可以代到很多复杂的模型里面。后期的工作基本上可以总结成有大概三个方面。一个是先验,比如我要考虑主题之间的相关性,可以用非共轭的logistic-normal先验分布。还可以做时间序列数据的分析,或者关系网络数据的分析等。
这里给大家简单看一个例子,如何将贝叶斯svm用于主题模型。我们可以用同样的原理,在主题模型上定义贝叶斯svm分类器,通过最优化目标函数,实现两种功能:1)学习隐含主题;2)学习分类器。在定义分类器时,我们采用如前所述的两种策略——平均模型和随机模型,分别会得到相应的模型。这是一些真实数据上的测试结果,能够体现这种方法的有效性。
下面有一些特定的分析,可能有人会问,做后验约束和在先验上加约束会有什么差别?我现在告诉大家,在先验上做的约束都可以在后验上做,是我们的一个特例。另外,我们在后验上做约束可以更灵活,也就是,有些后验分布在经典的方法得不到。
这是一个直观的解释。大家做贝叶斯方法,可以有各种的参数化、无参数化的贝叶斯模型,都是在这个平面里做的。我们做的事情实际上是增加了一个维度,它和之前的两个维度是独立的,因此,可以在这上面做很多事情。首先,可以把经典的模型做到最大间隔学习,得到新的模型。其次,我们也可以把知识信息引入贝叶斯推理中。因此,我们可以形成一个有机的框架,包括知识、学习/推理、以及最下边的统计建模。
这是第一部分,我想和大家分享的是:我们做贝叶斯方法,现在已经不局限在经典的贝叶斯框架,实际上有一些新的发展。
更多雷锋网文章:
<a href="http://www.leiphone.com/news/201703/4kfmurm5nxrsrwxf.html">国产阿尔法狗"绝艺"晋升十段,腾讯ai在下一盘大棋?</a>
<a href="http://www.leiphone.com/news/201703/lqppr0xnhnpv2trz.html">百度首席科学家吴恩达:大脑能在一秒内完成的任何工作,都会被ai取代</a>
本文作者:亚萌