详解珠算:清华大学开源的贝叶斯深度学习库(论文公布)
选自arXiv
机器之心编译
2017 年 5 月,清华大学朱军教授在机器之心 GMIS 2017 大会现场详解了他们开发的贝叶斯深度学习 GPU 库珠算。近日,清华大学公开了珠算相关论文,机器之心对此此论文进行了摘要介绍。
近年来,深度学习领域出现了重大进展(LeCun et al., 2015)及诸多成功应用,比如语音识别(Hinton et al., 2012),计算机视觉(Krizhevsky et al., 2012),语言处理(Sutskever et al., 2014),计算机游戏(Silver et al., 2016)。我们从实践中获得了一条很好的经验:一个深度构建的模型可通过高级优化算法(比如随机梯度下降)、大型训练集(比如 ImageNet)和强大的算力(比如 GPU)被很好地训练。尽管深度神经网络的强大表现使其成为了解决诸多复杂拟合问题的首要选择(尤其是在涉及从输入空间到输出空间的映射问题上,比如分类与回归),其给出的结果通常是点估计(point estimates)。由于物理世界的随机性、不完整性信息以及测量噪声,这种确定性的方法无法解释不确定性,而不确定性正是一个学习性机器(比如数据、估计、推断、预测和决策)全部的核心。确定性的神经网络已被证明在对抗性攻击面前非常脆弱(Szegedy et al., 2013; Nguyen et al., 2015)(部分原因是由于缺乏不确定性建模),这也就限制了在表征不确定性异常重要的场景中的应用,比如自动驾驶(Bojarski et al., 2016)和医疗健康(Miotto et al., 2017)。另一方面,从概率的视角切入机器学习可以带来一个有强大数学理论基础的不确定性处理方法,即贝叶斯方法(Ghahramani, 2015)。贝叶斯方法同样也给出了一个看似很理论的方法从而把结构化偏差(Lake et al., 2015)和领域知识整合为先验或后验约束(Mei et al., 2014),进而通过小数据训练样本达成有效的学习。因此深度学习和贝叶斯的结合非常有优势,事实上近年来它已获得极大关注(Gal, 2016)。
此外,大多数成功的深度学习研究都是基于需要大量带标注数据的监督学习任务,这个领域的研究员正在把注意力逐渐转向无监督学习,这将是人工智能的长期目标。我们通常使用概率模型和贝叶斯方法对完全无监督学习或半监督学习中的无标注数据建模。最近,深度生成模型的受欢迎程度再次证明了组合深度神经网络和概率模型的潜在价值,这个组合已经在图像生成 (Kingma and Welling, 2013; Goodfellow et al., 2014; Radford et al., 2015),半监督分类问题 (Kingma et al., 2014; Salimans et al., 2016) 和单一例子学习中取得了令人瞩目的成果 (Rezende et al., 2016)。
我们把这种结合贝叶斯方法和深度学习各自优势的新研究方向称为贝叶斯深度学习(Bayesian Deep Learning /BDL)。BDL 的组成包括了传统的贝叶斯方法,以概率推断(probabilistic inference)为主的深度学习方法,以及它们的交叉。BDL 的一个独有的特性是,随机变量间的确定性变换可以利用典型的深度神经网络表达的参数化公式从数据中自动学习 (Johnson et al., 2016),而在传统的贝叶斯方法中,变换通常是一个简单的解析形式,比如指数函数或者内积。贝叶斯深度学习的一个关键挑战是后验推断(posterior inference),通常对于这样的模型来说是很难处理的,需要复杂的近似方法。虽然利用变分推断和蒙特卡罗方法已经取得了很多进展 (Zhu et al., 2017),对于开发者来说还是很难上手。此外,虽然变分推断和蒙特卡罗方法有其一般形式,对于一个有经验的研究员来说,为一个特定的模型寻找方程并实现所有的细节仍然是很困难的,过程中很容易出现错误,并需要花费大量时间调试。
在这篇论文中,我们提出了珠算平台:一个贝叶斯深度学习的概率编程库。我们在 TensorFlow 上建立了珠算平台 (Abadi et al., 2016),利用它的计算图能使建模过程变得灵活。研究者可以利用珠算强大的拟合能力和多 GPU 训练进行深度学习,同时可以用概率模型为复杂世界建模,开发无标注数据,根据贝叶斯推断的原则处理不确定性。我们将提供一些运行中的案例展示用珠算编程的直观性,包括贝叶斯 logistic 回归、变分自编码器、深度 Sigmoid 信度网络以及贝叶斯循环网络。你可以从我们的代码库中找到更多的例子 https://github.com/thu-ml/zhusuan。珠算和其它概率编程库最大的不同在于其灵活性,这得益于其是建立在深度学习范式的软件库,以及关键的模型重用的处理方式。论文中还给出了珠算和两个相关度很高的研究 Edward (Tran et al., 2016) 和 PyMC3 (Salvatier et al., 2016) 的更多的细节对比。
论文:ZhuSuan: A Library for Bayesian Deep Learning
论文链接:https://arxiv.org/abs/1709.05870
本论文介绍了珠算,一种用于贝叶斯深度学习的 Python 概率编程库,它结合了贝叶斯方法和深度学习的优势。珠算构建在 TensorFlow 之上,与目前主要面向神经网络和监督任务的深度学习库不同,珠算的特点是深入到贝叶斯推断中,从而支持各类概率模型,包括传统分层贝叶斯模型以及最近的深度生成模型。我们运行了一些示例来介绍珠算的概率编程能力,其中包括 logistic 回归、变分自编码器、深度 sigmoid 信念网络和贝叶斯循环神经网络。
图 1. 贝叶斯网络
图 2. BLR:(a)概率图展示;(b)珠算编程
图 3. VAE:(a)概率图展示;(b)珠算编程
图 4.DSBN:(a)概率图展示;(b)珠算编程
图 5. 贝叶斯 RNN
表 1. 珠算的变分推断。相关参考文献是 SGVB(Kingma & Welling,2013),REINFORCE(Williams,1992,Mnih & Gregor,2014),IWAE(Burda 等人,2015),VIMCO(Mnih & Rezende,2016)以及 RWS(Bornschein & Bengio,2014)
图 6. VAE 的变分后验:(a)概率图展示;(b)珠算编程
图 7. DSBN 的变分后验:(a)概率图展示;(b)珠算编程
图 8. 珠算 HMC 与 TensorFlow 优化器对比
表 2. 珠算与其他 Python 概率编程库的比较
结论
珠算是一个基于 TensorFlow 的贝叶斯深度学习 Python 概率编程库。它通过深度学习风格的基元和算法为贝叶斯理论和深度学习之间架起了桥梁,让构建概率模型和应用贝叶斯推断方法成为可能。在论文中,有很多示例都说明了珠算的实用性。目前,珠算已经在 GitHub 上开源,我们希望以此为加快贝叶斯深度学习的发展贡献一份力量。