GMIS 2017 朱军:贝叶斯深度学习的GPU 库-珠算
5 月 27 日,机器之心主办的为期两天的全球机器智能峰会(GMIS 2017)在北京 898 创新空间顺利开幕。中国科学院自动化研究所复杂系统管理与控制国家重点实验室主任王飞跃为本次大会做了开幕式致辞,他表示:「我个人的看法是再过几年,我们90%的工作是人工智能提供的,就像我们今天大部分工作是机器提供的一样。我们知道人工智能会给我们提供一个更美好的未来。」大会第一天重要嘉宾「LSTM 之父」Jürgen Schmidhuber、Citadel 首席人工智能官邓力、腾讯 AI Lab 副主任俞栋、英特尔 AIPG 数据科学部主任 Yinyin Liu、GE Transportation Digital Solutions CTO Wesly Mukai 等知名人工智能专家参与峰会,并在主题演讲、圆桌论坛等互动形式下,从科学家、企业家、技术专家的视角,解读人工智能的未来发展。
下午,清华大学智能技术与系统国家重点实验室朱军发表了主题为《珠算:贝叶斯深度学习的 GPU 库》的演讲,他探讨分享了贝叶斯深度学习模型的计算平台:珠算,以下是该演讲的主要内容:
朱军首先带我们分析了现在深度学习在各个领域里面的巨大优势。他表明虽然深度学习非常好,但还不足够好。因为深度学习存在两个最明显的缺点。
其一即模型不是很鲁棒,因为我们都知道存在一些对抗样本,比如说我们有一个训练很好的神经网络,如果我们给样本加一些人类检测不到的噪声,那么合成一个图片之后可以完全误导这个网络,甚至能够按照我们的意愿误导分到某一个类。这是非常不好的性质,尤其我们在关键领域用深度学习的时候。因为我们的系统一旦遇到这种情况发生,那么可能就会产生一些比较致命的错误。所以实际上想问一个问题就是说,机器学习或者深度学习本身能不能像人一样更少犯错?人可能更多的时候是更鲁棒的,虽然人也可能会犯错误,但是人犯错误相对都是比较直观、比较合理一点的。
其二即深度学习大部分情况下是一种黑箱。所以现在有很多的工作,都是试图去解释深度学习到底学到了什么、应该如何去解释。
在朱军看来,深度学习本身就是属于机器学习的一个极端,它用了大量的训练样本、大量的计算资源,而达到在特定任务下、特定环境下、特定数据集上得到非常优良的模型。
而另一极端为贝叶斯学习方法,其可以用少量的训练样本帮助我们学习道非常精确的模型。这也就从一个方面告诉我们,在构建学习模型的时候可以有不同的思路。
如果我们结合两个极端,就能得到一个非常强大的模型。所以朱军在今天就介绍了这两个极端的中间产物“Bayesian Deep Learning”,其既有贝叶斯本身的可解释性,可以从少量的数据里边来学习,另外又有有深度学习非常强大的拟合能力。
深度生成模型
深度生成模型是融合了深度学习和贝叶斯方法的模型。其可以首先做一个抽性,大概可以抽象出印象变量Z,中间会有一个深层的神经网络,可以根据我们的任务选择不同的神经网络、不同的深度、不同的结构。
图像生成:生成对抗网络
图像理解:变分子编码器
这些模型其实非常直观,但是它的难点其实在于我们所谓的推断过程,我们在推断过程中观察到一些X,然后我们用一些推导变量推导出我们观察到的Z到底是什么,这是在推断所需要要做的。而我们用的主要公式就是贝叶斯公式。
珠算:贝叶斯深度学习的 GPU 库
朱军表明,我们需要做的是一个珠算平台,这个珠算的平台可以支持我们做深度学习,也可以做这种贝叶斯推断,当然还可以进行两者之间有机的融合。
珠算可以区别于其他平台的一个很大的特点就是说,其利用了深度学习进行贝叶斯推断,因此也可以很有效地支持前面所说的深度生成模型。珠算平台上可以运行 GPU,同时也可以在上面进行概率建模。因此这样做的优点即,我们可以利用这种无监督数据完成小样本学习,也可以进行不确定性的推理和决策,还可以生成新的样本。
朱军团队做这个平台首先的前提就是说,我们要把这一类的模型能够抽象表达出来,实际上该平台使用了贝叶斯网络。贝叶斯网络在深度学习流行起来之前应该是非常主流的方法,它是一种非常好的形式化的方式,并能非常直观地帮助我们表示一个模型。我们在这里边要实现的是网络应该有随机节点和确定性节点,确定性的节点基本上对应了深度神经网络的非线性变换,随机节点对应着不确定性的描述,而珠算能完全支持这两大块。
生成模型的半监督学习
朱军随后给大家介绍了一个例子,以说明贝叶斯深度学习可以应用在什么地方。在朱军课题组里边主要强调用非常少的标注数据进行有效的学习,即半监督学习(Semi—supervised Learning),这个红色框里面是他们做出的结果,比如说在SVHN的数据集上,他们大概用1%的训练数据就可以达到5%的错误率。
小样本学习
下面一个例子是前面提到过的用贝叶斯方法做小样本学习。就是在训练的时候只给系统看一些基本的数据,而将来在使用的时候可能会预测一个新的类别。即让系统看一些样例,然后希望它能够从里边学出来一个贝叶斯例子,并在将来能生成同一类的数据。
更具鲁棒性的深度学习
最后一个例子也是前面所说的鲁棒性深度学习,深度学习有很多潜在攻击样本,那么我们该怎么让它变得更鲁棒?实际上最近有一些工作,即可以用贝叶斯的方法来使得深度学习变得更鲁棒。
朱军团队已经开源了珠算平台,也欢迎大家去尝试,我们在上面也开发了很多当前的模型。
目前支持的主要推理算法
变分推理和随机变分推理(VI & SVI)
支持多种变分后验:
平均场后验(Mean-field posterior):各因子完全独立的后验
结构化的后验(Structured posterior):隐变量间具有用户指定的依赖关系
支持的变分方法:
SGVB:随机梯度变分贝叶斯(Stochastic gradient variational Bayes)
IWAE:重要程度加权的目标(Importance weighted objectives)
NVIL:具有方差减缩的得分函数估计器(Score function estimator with variance reduction)
VIMCO:具有方差减缩的多样本得分函数估计器(Multi-sample score function estimator with variance reduction)
自适应重要程度采样
重新加权的唤醒-睡眠(RWS:Reweighted Wake-sleep):带有用户指定的自适应提议分布
马尔可夫链蒙特卡洛(MCMC)
哈密尔顿蒙特卡洛(HMC):自适应调整步长和质量(mass)