本篇文章9032字,读完约23分钟
雷锋。com [AI科技评论]出版社:中国人工智能学会第二届国际研讨会在北京中国科学院自动化研究所举行,主题是“机器学习的前沿”。学院院长为周志华教授,前来授课的嘉宾为国内机器学习领域的一流专家、高级研究人员和企业精英,包括庚欣、郭天佑、刘铁燕、王力伟、叶洁萍、于坚、杨宇、张长水、JUNG WOO、朱军
清华大学计算机科学与技术系副教授朱军开设了一个名为“贝叶斯学习前沿进展”的共享课程,该课程持续了两个小时,主要分为三个部分:贝叶斯基础理论、模型和算法;可扩展贝叶斯方法:深度生成模型。本文是雷锋主编的《三大内容》的第二、三部分。(公开号码:雷锋。人工智能科技评论。
门户:
清华大学计算机科学与技术系朱军教授:机器学习中的贝叶斯基础理论、模型和算法
朱军
清华大学计算机科学系副教授,智能技术与系统国家重点实验室副主任,深度学习技术与应用国家工程实验室副主任,国家万人计划优秀青年人才,中国自然科学基金杰出青年基金获得者,中国计算机学会青年科学家,入选ieee ai s 10观看。
以下是朱军副教授现场分享整理,雷锋同志编辑整理的书面报告。
第二部分是可扩展贝叶斯方法
让我们先来看看这个经典的贝叶斯定理。它具有良好的更新序列特性,非常适合处理流数据。例如,通过使用b1,…,bt来表示从第一次到第t次的数据集,我们可以得到一个递归公式:假设已经计算了第t-1次的后验分布,则下一次t的后验分布与第t-1次的后验分布乘以新数据集bt的似然函数成比例。在这个迭代过程中,前一时间的后验实际上被当作当前时间的先验分布。这是一个漂亮的递归公式,可以实时处理流数据。
但是它有一个前提,你可以计算每个时刻的后验分布。这对于简单模型是可行的,例如线性动态系统。然而,对于一般模型,很难计算每一步的精确后验分布,所以这个更新的公式不容易计算。需要一些好的算法。
在线变分贝叶斯
最近,我们在算法方面做了大量的工作。有一种算法叫做在线(流)变分贝叶斯,它利用前面提到的变分近似的思想来实现在线贝叶斯推理。假设有一个算法A,它的输入是一个数据集和一个先验,它的输出是一个近似的后验分布。在第一时刻,可以在更新之前将第一数据值相加,并且可以获得近似的后验值。在下一个新的数据集中,你可以使用时间t-1的近似后验作为新的先验。随着时间的推移,你会得到时间t+1,t+2的后验分布。这是流式计算的方法。
分布式贝叶斯更新(分布式贝叶斯更新)
贝叶斯公式还有一个很好的性质,它适用于多台机器的分布式计算。例如,假设有100台机器,每台机器有1%的数据。我们首先在每台机器上并行处理1%的数据,得到100个局部后验分布;然后,通过将它们整合在一起,我们可以得到我们想要的精确的后验分布。再说一遍,这是一个非常漂亮的房产。
然而,它有同样的挑战:对于一般的贝叶斯模型,我们不能得到局部后验分布的解析解。为了处理这个困难,我们将考虑用一个近似算法来做它,然后把它集合起来。
它有广泛的应用。这里有一套公式。我不会告诉你细节。如果你感兴趣,你可以研究它:如果这个算法的输出是一个指数族分布,如果你把它整合在一起,它仍然是一个指数族分布。你只需要改变参数,这是它最大的优点。
我们小组也在这些方面做了一些工作,包括在线/随机算法和分布式算法;你也可以阅读我在演讲开始时提到的总结文章,以供参考。
现在我将介绍一个在线学习的例子。我们考虑使用贝叶斯模型进行在线分类。这是一个有监督的学习任务,所以会有一个损失函数。
让我们先来看看在线学习的基本过程。假设有一个初始模型,我可以用它来预测新数据,并判断它属于哪一类。预测之后,会有两个结论,一个是预测准确,另一个是预测错误。
如果预测准确,我们就无能为力了。这个模型已经相当不错了。
如果预测是错误的,我们可以将当前模型发送给学习算法进行更新。
这是一个非常基本的在线学习框架。
在线被动-主动更新其中,有一个经典的具体算法叫做在线被动-主动学习,它是支持向量机的在线学习算法。由于支持向量机是一个特定的模型,假设当前的模型参数为wt,在新数据出现后将进行判断,结果可能是正确的,也可能是错误的。如果判断是正确的,也就是说,您的模型足够好,那么您可以采用被动更新策略。所谓否定的意思是:我会把这个模型直接复制到下一个时刻,不更新;在另一种情况下,如果判断是错误的,就采用一种激进的方法。例如,如果以前的模型不够好,我会做一个投影,把它投影到一个好模型的区域,得到一个新模型。这是两种操作,对每个数据进行判断,然后选择被动或主动策略,然后不断迭代。这种简单的策略实际上具有一些良好的性质,实际应用效果也相当好。
现在,我们可以做一个非常简单的类比,将上述更新过程扩展到贝叶斯模型,在线学习贝叶斯支持向量机,并随时学习所有模型的后验分布。事实上,这个想法与之前的更新过程基本相同,但是不同的是我们更新了后验分布。假设当前的后验分布是qt(w),则可以通过一个标准来判断新数据是对还是错,这也对应于两种情况。如果是正确的,它表明当前的后验分布是足够好的,所以我不需要更新它。如果在实际操作中有似然函数,我可以用贝叶斯定理更新一次,这不会影响这个结果。当我们犯了一个错误,我们可以做一个积极的更新,并获得一个新的分布。
出错时,我们可以设置硬约束或软约束,允许某些错误来优化错误率。我不会在这里详细阐述理论分析。
这种在线贝叶斯学习的最大优势在于,它可以处理隐藏变量(数据中未观察到的变量),并挖掘数据中的隐藏结构。在这种情况下,只需稍微扩展上述在线更新流程,基本流程保持不变。
这是一个主题模型的例子。例如:我明天要出差,现在我想预订一家酒店,所以我可以打开网站看看它的评论和分数;现在,这个领域有很多数据。假设我们得到了大量的评论文档数据,我们可以做两件事,一是找出每个人都关心的话题,二是看一个具体的评论是积极的还是消极的,这实际上是一种判断。这可以通过我刚才提到的在线贝叶斯学习来实现。
我不会谈论具体的过程。这是一个效果。横轴为时间,纵轴为分类精度(f1值)。这里列出了很多算法,可以清楚地看到,基于在线贝叶斯学习的算法比使用批处理的方法具有大约100倍的性能,同时分类精度没有降低(甚至提高)。
这里的真相是什么?事实上,大数据中通常有许多冗余,因此在更新模型时没有必要处理所有数据,尤其是当数据集非常大时。现在,深度学习训练也是如此。最常用的方法是随机梯度,思路是一样的。我们不需要扫描成千上万的图片,也不需要更新模型的权重,但是几张图片就足够了。因为每次计算的数据量很小,所以在整体时间上有很大的优势。
分布式后采样我们之前说过贝叶斯方法在分布式计算中有很好的特性,但是困难在于我们如何计算。我们在这方面做了一项工作,这项工作基于mcmc Monte Carlo采样,并发表在nips 2014上。其基本思想是将数据分成多台机器,首先用mcmc方法估计局部后验分布(一些统计量),然后用期望传播(ep)框架在多台机器之间传递信息,并将采样样本集合在一起解决近似后验分布问题。算法收敛后,每个局部分布实际上就是我们想要的全局分布。该算法支持同步更新、异步更新和分散更新,其配置非常灵活。
第三部分是深层生成模型。接下来,我将谈论一些大家可能会关心的深度学习。我主要介绍一些深层生成模型,包括无监督和半监督学习模型。
通常,当人们进行深度学习时,他们使用更多的所谓判别深度学习,例如深度卷积网络,其目的是学习从输入到输出的映射函数,并在测试时判断测试样本属于哪个类别。这种网络已经被应用于人脸识别、语音识别或自然语言处理的许多任务中。当然,在实践中,我们应该注意一些细节,包括一些保护模型和避免过度拟合的机制。
深度卷积网络得到了广泛的应用,包括一些发达的网络结构。最近,这种网络也被用来加强学习,比如alphago。我不会在这里详述,但我今天想和你分享。除了这种判别学习之外,深层学习中实际上还有许多问题值得我们关注。
简而言之,深度学习的当前应用场景有以下三点。大型模型;大数据;大型集群。
首先,目前的模型比较大,这主要体现在它的许多参数上。这是2012年的一个例子,它有大约10亿个参数。其次,有大量的训练数据,在当时的训练中使用了1000万张图片。最后,我需要大量的计算资源,我可以用cpu或gpu集群来计算,这几乎已经成为深度学习的标准。
在这种情况下,通常会有一个误解:如果有大数据,过度拟合就不再是问题。事实上,我们认为在大数据的情况下,过度调整可能会变得更加严重。
具体来说,对于机器学习算法,我们实际上并不关心数据的数量,100,000或100万;我们更关心的是这些数据包含了多少信息,以及它给我们的模型训练带来了多少统计信息。大量的数据将给我们带来巨大的处理负担。
有一个研究结果,它衡量数据中的相关信息如何随着数据大小的增加而增加。
该图显示了三种常见情况:
第一条是水平线:当数据增加时,信息不会增加。这个场景很容易理解。如果你的数据是周期性和重复的,当你知道一个周期的数据时,它基本上覆盖了所有的信息,所以增加更多的周期对训练模型没有帮助。
另一个是log n曲线:当数据生成过程可以用有限的参数描述时,信息量可能以log n的速度增加。
有一个更快的曲线,n0.5,它描述了一个更复杂的情况,数据不能用一个有限的解释模型来描述,所以在这种情况下会有更多的信息。
总的来说,这三种情况下的信息增长速度远远低于线性增长速度,这充分反映了数据中存在大量的冗余。因此,在这种大数据下,过度拟合是一个比较明显的问题。
此外,深度学习还有其他问题,比如不够健壮。对于一个经过训练的神经网络来说,在正常情况下识别的准确率是很高的,但是如果在输入图像中加入一点干扰(人们甚至无法识别),同一幅图像就可能被完全识别错。我们也可以随意用样本误导它,例如,通过添加噪声,我们可以诱导网络将特定图像识别到特定类别中。这一特性对关键领域的应用非常危险。
因此,对于深度学习来说,避免过度拟合和提高鲁棒性是关键问题。辍学是一个非常简单但有效的避免过度适应的策略。这是一种随机策略:当我们训练网络时,我们在每次迭代中会随机丢失一些节点(或权重)的更新。这种方法可以显著提高结果。
当辍学第一次被提出时,还不清楚如何解释。后来,每个人都在类似的框架下解释了辍学,包括我们自己在支持向量机方面的工作。最新的进展是gal和ghahramani去年的工作,他们将脱落理解为贝叶斯推理的近似,这也反映了贝叶斯方法在保护模型和避免过度拟合方面的有效性。
辍学只是一个例子。事实上,贝叶斯学习和深度学习之间仍然存在着许多关联甚至互补的关系。如果两者能够有机结合,人工智能的发展将会得到更好的促进。
这是贝叶斯的一个很好的最新发展。《科学》杂志2015年的一篇封面文章介绍了贝叶斯程序学习(Bayesian Program Learning,bpl),它本质上是一个具有层次结构的多层贝叶斯生成模型,因此它也可以被视为一个深度模型。与深度学习不同的是,每一层的随机过程都有一个清晰的定义,并且易于解释。例如,在描述手写文字的生成过程中,顶层是一些基本的笔画,然后通过随机抽样将一些部分组合起来,再按照一定的规则组合在一起,形成汉字的基本框架;最后,根据某一噪声模型,生成观测到的特定数据。
这是一个典型的主观贝叶斯模型。通过比较精细地描述手写字符的生成过程,构建了一个有意义的层次结构,该结构具有小样本学习的优势,弥补了主观先验知识的数据不足。
本文展示了一次性学习:只给模型一个标记的训练数据,并让它识别其他未识别的数据。实验结果非常好,bpl远远优于一般的深度学习网络和一次性学习改进的深度网络。同时,bpl的结果低于人们的错误率。
这是一个很好但极端的例子。它把主观贝叶斯的思想发挥到了极致,它的先验分布是基于对问题的深刻理解。虽然它在特定的任务上表现良好,但问题是它太强了,无法与特定的领域结合。如果您切换到另一个领域,整个bpl将不得不重新设计。
事实上,深度学习和贝叶斯可以被视为一个光谱的两个极端。数据驱动的深度学习需要大量的标注数据来训练网络;贝叶斯方法通过引入知识和小样本训练可以取得良好的效果。你可以想想,这两者的中间是什么?事实上,越来越多的人在想,我们能不能向中间靠拢?中间的模型应该有两个优点:
能够利用深度学习的优势,模拟和拟合复杂的特征,并以数据驱动的方式进行训练;
它可以融合贝叶斯方法的优点,描述数据中的不确定性,从小样本中学习。
我们称之为结合贝叶斯深度学习两种方法优点的方法。
事实上,许多工作已经将贝叶斯方法应用于深度学习。早在神经网络时代,麦凯、尼尔等人就开始使用贝叶斯来保护网络不被过度拟合。后来,有一些深入的分析。最近的研究成果很多,其中之一就是利用非参数贝叶斯学习深层神经网络的结构,并获得了2010年亚洲最佳论文奖。
接下来,让我们看看一个重要的贝叶斯深度学习模型——深度生成模型。
它们不同于判别模型,它们的主要目标是建立一个能够描述数据分布的模型,并通过逼近数据的真实分布来提取数据的结构。有了这个模型,我们可以对它进行采样并生成新的样本。例如,这是一个手写数据集,它是从真实分布中采样的。在我们学习了如何生成模型之后,我们可以得到一个接近真实分布的模型。在我再次对这个模型进行采样之后,我将得到一些新的样本(一些在训练数据中没有出现的样本)。
为什么我们应该使用生成的模型来生成模型有很多用途。首先,它是生成一个新的样本,即创造,它可以在学习之后“从别人那里得出推论”。其次,我们可以充分利用无监督数据来学习和挖掘数据中的结构规则。第三,我们可以进行半监督学习,将一小部分已标记数据与大部分未标记数据进行整合。最后,可以进行条件生成,例如从文本到语言的生成、从一种语言到另一种语言的生成、从图片到文本的生成等。
最近,有了许多发展,包括流行的甘、瓦等。,所有这些都在生成模型。
这是对生成模型的抽象描述。基本框架是一个随机抽样的概率模型。x是我们观察到的变量,在训练集中观察到一些特定的值。为了解释X,生成模型假设它是由一些隐藏变量产生的,其中Z代表隐藏变量并服从某种分布。从z生成x的过程可以是随机的,如p(x|z),或某种退化的确定性变换x=f(z)。由于z的随机性,两种定义都可以描述x和样本x的随机性。我们将在后面看到一些具体的例子。这里我们先关注前者。
生成模型除了用有向贝叶斯网络来描述外,还可以用无向图的随机场来定义,一个典型的例子是受限玻尔兹曼机(rbm)。
两个模型都定义了x和z的联合分布,给定数据x的具体值,我们希望推断出隐藏变量z的信息,即后验分布。这可以通过贝叶斯公式来实现。
这里有一些典型的例子,可能在机器学习或模式识别课程中提到过。顶部是一个简单的混合模型,底部是一个因子分析模型。这些基本模型是构建深度生成模型的基本单元。
事实上,深度生成模型的概念非常直接,即隐藏变量z可以有多个层,并且不同层之间存在联系,这比深度神经网络中的联系更广泛。我们支持确定性函数转换(如relu)和随机转换。一般来说,z是随机的,服从某种先验分布。
给定观察样本,我们希望反过来推导z的后验分布。这和一般的神经网络完全一样。希望Z有一定的语义,更高层次的Z有更高的语义,这样才能解释观察到的现象。
这里有一个简单的例子来说明深度生成模型的定义和灵活性。
这个z是一个非常简单的分布:标准高斯分布。通过随机抽样,我们得到一个特定的z值,然后通过一个非线性网络(例如,一个简单的mlp全连接网络)对其进行变换。我们将该网络的输出定义为描述x分布的参数。例如,我们假设x的两个维度是独立的,并且分布服从高斯分布,因此mlp的四个输出神经元分布对应于这两个高斯分布的均值和方差。
这是一个非常直观的定义,但是非常有效。众所周知,简单的分布随机变量经过函数变换后会得到复杂的分布随机变量。本文采用参数化的深层神经网络定义函数变换,其参数可以通过训练数据自动学习,因此比人工选择的特定函数具有更好的适应性。它充分利用了神经网络强大的函数拟合能力。
定义模型后,下一个问题是如何学习参数。根据前面的介绍,我们的主要目标是使模型分布尽可能接近数据分布。因此,需要一个合适的度量来度量两个分布之间的距离。目前,已经开发了许多特征良好的规则学习深度生成模型。
最直接和最常用的方法是最大似然估计(mle),它适用于定义了数据似然函数的模型。稍后我们将有一个典型的例子。
另一种方法是矩匹配,它实际上早于最大似然估计,并首次用于估计高斯分布。最近,它被用于学习深度生成模型,该模型适用于所有深度生成模型。只要我们能从模型中取样,我们就能通过一些矩匹配准则来优化模型。对于复杂的分布,需要核方法。
另一个是gan,它基于博弈论的思想,定义了一个极小极大对抗游戏。玩家之一是生成模型G,它可以生成一些数据;另一个玩家是判别模型D。G的目的是尽可能多地创建D检测不到的“真实”样本。D的目的是区分真实数据和虚假数据。在对抗过程中,他们不断学习,不断进步,最终达到“均衡”——G分布与真实分布相一致。近年来,人们越来越关注gan,出现了许多品种。
接下来,我们主要介绍最大似然估计的思想。对于gan和矩匹配,我们可以参考其他材料进行深入了解。
自动编码变分贝叶斯
变分推理是复杂模型后验推理的常用工具。为了处理深度生成模型,最近对算法进行了一些根本性的改变。这里有一个典型的例子叫做aevb。
深度生成模型的特征是隐藏变量的复杂函数变换(如神经网络描述的非线性变换)。因此,该模型的后验分布具有许多局部概率较高的点,用一般方法很难逼近。aevb的基本思想是用另一个神经网络定义一个深度生成模型Q来反向逼近目标。
这里有一个从x到z构造变分分布q的例子,我们从数据x开始,用神经网络对其进行变换,其输出作为z的后验分布参数,如高斯分布的均值和方差。同样,该定义充分利用了神经网络强大的函数拟合能力。这个网络叫做Q网络。因此,产生数据的网络被称为P2P网络。该网络的参数可以一起优化,例如,使用随机梯度方法。
将q-p网络放在一起,我们可以构建以下图表。它看起来像一个标准的自动编码器。不同的是,这里的变量是随机的,我们要处理的目标是概率分布。由于这种相似性,这种方法被称为自动编码变量贝叶斯。
以上是aevb的基本框架。当然,具体做的时候有一些细节,比如:如何计算随机梯度?如何控制随机梯度的方差?如何自适应调整步长等。在这里我就不一一介绍了。
还有一点时间来快速查看一些具体的例子。
首先,在aevb中,q-p网络一般是对称的,当P产生时,Q网络是反向的。然而,在实践中,不对称网络可能更合适。众所周知,识别网络Q的主要目的是从底层输入中逐层抽象,提取高层特征表示。但是,在提取的过程中,我们会丢失详细的信息。因此,当您到达顶部的Z,然后依次生成X时,实际上没有详细的信息,也没有办法恢复它。一个简单的解决方案是打破这种对称结构,让生产网络有一些机制来记录详细的信息,这些信息可以在生成新样本时使用。
在这里,我们已经做了一个初步的尝试,将一个可学习的存储单元引入到生成网络中,它记录详细的信息。当生成特定图像时,通过选择性模型获得稀疏权重向量,并且对存储器中的单元进行加权和求和,并且与高级表示相结合,可以生成底层所需的详细信息。基本结构如下图所示,可以通过叠加多个基本层来构建深度生成模型。
这个想法很简单,受到脑科学的启发,其实际效果是显著的。基本上,在不增加网络参数的情况下,通过记忆获得的恢复结果要比没有记忆获得的恢复结果好得多,并且生成质量会更好。
深度生成模型的主要任务是生成样本和从无标签数据中学习。最近,它也被用于半监督学习。它的主要目的是使用大量的未标记数据来学习更好的分类器。有两个问题需要回答。首先,深度生成模型的识别精度是多少?第二,如何很好地集成未标记和标记的数据?我们课题组进行了一些探索,发现深度生成模型在适当训练的情况下,其识别精度可以与判别神经网络的识别精度相当,并且生成新样本的能力不受影响,这在一些困难的情况下具有优势,如:当输入样本被污染或有缺失数据时,数据可以通过生成模型恢复,其识别性能往往不会受到很大影响;相反,判别神经网络不具备这些能力,其准确性往往严重下降。在识别任务中,深度生成模型还可以使用卷积运算和汇集运算来处理复杂图像。
关于第二个问题,最近有了很多进展,包括我们自己的工作。半监督深度生成模型在许多任务中取得了最好的识别精度。更有趣的是,在半监督任务下,我们可以区分类别信息和风格信息,并生成特定的变化样本。例如,在生成时,你可以先给一个类,然后通过改变样式得到同一个类的不同样式的图像(比如mnist字符);您还可以通过固定样式和更改类别来获得不同类别中相同样式的图像。因此,生成的样本可以从两个维度进行描述。
以上就是我想和大家分享的。我想说的主要一点是,即使在进行深度学习或大数据时,经典贝叶斯方法也非常有用,应该受到每个人的关注。现在这是一个积极的发展方向。历史上,人工智能的基本原理在很大程度上依赖于概率统计。深度学习也是一样的。我相信在这方面会有越来越多的工作去探索。
最后,我们做了一件事,值得与大家分享。众所周知,深层神经网络的快速发展离不开开源平台的贡献,如张量流、caffe、antao等。这些平台支持神经网络的训练和测试,但是仍然缺乏一个有效的平台来支持贝叶斯深度学习和深度模型生成。如果每个模型都是从底层实现的,那将是一件非常痛苦的事情。为了降低使用和开发深度生成模型的门槛,我们开发了Python库“朱”,该库已经在github上开放。欢迎您尝试(zhusuan.readthedocs.io)。Abacus基于张量流,它完全支持张量流中的各种运算,非常容易使用。实现深层生成模型和普通神经网络一样方便。
以上是朱军老师分享的“贝叶斯学习的前沿进展”,更多干货敬请关注雷。
雷锋原创文章。严禁擅自转载。详情请参考转载说明。
来源:搜狐微门户
标题:清华大学朱军博士:可扩展的贝叶斯方法与深度生成模型
地址:http://www.shwmhw.com/shxw/61687.html