贝叶斯深度学习:桥接PyMC3和Lasagne构建层次神经网络

2017 年 8 月 5 日 量化投资与机器学习 Thomas Wiecki


编辑部

微信公众号

关键字全网搜索最新排名

『量化投资』:排名第一

『量       化』:排名第一

『机器学习』:排名第三


我们会再接再厉

成为全网优质的金融、技术类公众号

编辑部翻译组  

编译:西西、wally

作者:Thomas Wiecki


今天,我们将使用Lasagne构建一个更有趣的模型,这是一个灵活的Theano图书馆,用于构建各种类型的神经网络。你可能知道,PyMC3还使用了Theano,因此在Lasagne中建立了人工神经网络(ANN),将贝叶斯先验放在参数上,然后在PyMC3中使用变分推理(ADVI)来估计模型。


由于Lasagne的优秀表现,我们可以轻松地建立一个具有最大汇集层的分层贝叶斯卷积ANN,在MNIST上实现98%的准确性。


数据集:MNIST

我们将使用手写数字的经典MNIST数据集。 与之前的博客文章相反,MNIST是具有合理数量的维度和数据点的有实际挑战性的ML任务(当然不如像ImageNet那样有挑战性)。

Loading data...



模型说明

我想像应该可以把Lasagne和PyMC3搭在一起,因为他们都依赖于Theano。 然而,目前还不清楚它将会是多么困难。 幸运的是,第一个实验做得很好,但有一些潜在的方法可以使这更容易。 我开设了一个GitHub issue在Lasagne's的报告里,在这几天后,PR695被合并,允许他们更好的整合。



首先,Lasagne创建一个具有2个完全连接的隐藏层(每个具有800个神经元)的ANN,这几乎是从教程中直接采用的Lasagne代码。 当使用lasagne.layers.DenseLayer创建图层时,我们可以传递一个函数init,该函数必须返回一个用作权重和偏差矩阵的Theano表达式。 


接下来,为ANN创建权重函数。 因为PyMC3要求每个随机变量具有不同的名称,我们创建一个类并且是唯一命名的先验。


在这里,priors充当了调节者的角色,试图保持ANN small的权重。它在数学上等价于一个L2的损失项,作为通常的做法是将大的权重惩罚到目标函数中。


下面是一些设置小批量ADVI的函数。


放在一起

让我们用小批量的ADVI来运行ANN:


确保一切聚合:


Accuracy on test data = 89.81%


分层神经网络:学习数据的正则化

上面我们只是固定了所有层的sd = 0.1,但是可能第一层应该有不同于第二层的值。也许开始时是0.1,要么太小或太大。在贝叶斯建模中,很常见的是在这种情况下放置hyperprior,并学习最佳正则化应用到数据中去。这节省了我们在超参数优化中对参数进行调优的时间。

Accuracy on test data = 92.25999999999999%


我们得到一个很小但很好的boost在准确性上。 我们来看看超参数后面的部分:

有趣的是,它们都是不同的,这表明改变正规化数量在网络的每一层是有意义的。


卷积神经网络

但到目前为止,在PyMC3中实现也很简单。有趣的是,我们现在可以构建更复杂的ANNs,像卷积神经网络:

Accuracy on test data = 98.03%


更高的精度。我也尝试了这个层次模型,但它实现了较低的精度(95%),我认为是由于过度拟合。


让我们更多地利用我们在贝叶斯框架中的产出,并在我们的预测中探索不确定性。正如我们的预测是分类的,我们不能简单地计算预测标准差。相反,我们计算的是卡方统计量,它告诉我们样本的均匀程度。越均匀,我们的不确定性越高。我不确定这是否是最好的方法。

正如我们所看到的,当模型出错时,答案会更加不确定(即提供的答案更加均匀)。你可能会说,你从一个普通的ANN那里得到了同样的效果,但事实并非如此。

这篇文章在后续会翻译


结论

通过桥接Lasagne和PyMC3,并通过使用小批量的ADVI来训练贝叶斯神经网络,在一个合适的和复杂的数据集上(MNIST),我们在实际的贝叶斯深度学习问题上迈出了一大步。


我还认为这说明了PyMC3的好处。通过使用一种常用的语言(Python)和抽象计算后端(Theano),我们能够很容易地利用该生态系统的强大功能,并以一种从未考虑过的方式使用PyMC3。我期待着将它扩展到新的领域。



关注者


110000+


我们每天都在进步


登录查看更多
3

相关内容

贝叶斯方法可以用于学习神经网络权重的概率分布。将神经网络中的wi 和 b 由确定的值变成分布(distributions)。具体而言,为弥补反向传播的不足,通过在模型参数或模型输出上放置概率分布来估计。在权重上放置一个先验分布,然后尝试捕获这些权重在给定数据的情况下变化多少来模拟认知不确定性。该方法不是训练单个网络,而是训练网络集合,其中每个网络的权重来自共享的、已学习的概率分布。
[ICML2020]层次间消息传递的分子图学习
专知会员服务
33+阅读 · 2020年6月27日
【新书册】贝叶斯神经网络,41页pdf
专知会员服务
177+阅读 · 2020年6月3日
【CMU】深度学习模型中集成优化、约束和控制,33页ppt
专知会员服务
45+阅读 · 2020年5月23日
吴恩达团队:神经网络如何正确初始化?
AI100
11+阅读 · 2019年5月15日
你的算法可靠吗? 神经网络不确定性度量
专知
40+阅读 · 2019年4月27日
贝叶斯神经网络(系列)第一篇
AI研习社
14+阅读 · 2019年3月1日
入门 | 深度学习模型的简单优化技巧
机器之心
9+阅读 · 2018年6月10日
卷积神经网络的最佳解释!
专知
12+阅读 · 2018年5月1日
手把手教你构建ResNet残差网络
专知
38+阅读 · 2018年4月27日
从零开始:教你如何训练神经网络
机器之心
5+阅读 · 2017年12月11日
TensorFlow神经网络教程
Python程序员
4+阅读 · 2017年12月4日
A Survey of Deep Learning for Scientific Discovery
Arxiv
29+阅读 · 2020年3月26日
Deep Learning in Video Multi-Object Tracking: A Survey
Arxiv
57+阅读 · 2019年7月31日
Arxiv
9+阅读 · 2019年4月19日
A Multi-Objective Deep Reinforcement Learning Framework
Arxiv
16+阅读 · 2018年2月7日
Arxiv
3+阅读 · 2017年11月20日
VIP会员
相关VIP内容
[ICML2020]层次间消息传递的分子图学习
专知会员服务
33+阅读 · 2020年6月27日
【新书册】贝叶斯神经网络,41页pdf
专知会员服务
177+阅读 · 2020年6月3日
【CMU】深度学习模型中集成优化、约束和控制,33页ppt
专知会员服务
45+阅读 · 2020年5月23日
相关资讯
吴恩达团队:神经网络如何正确初始化?
AI100
11+阅读 · 2019年5月15日
你的算法可靠吗? 神经网络不确定性度量
专知
40+阅读 · 2019年4月27日
贝叶斯神经网络(系列)第一篇
AI研习社
14+阅读 · 2019年3月1日
入门 | 深度学习模型的简单优化技巧
机器之心
9+阅读 · 2018年6月10日
卷积神经网络的最佳解释!
专知
12+阅读 · 2018年5月1日
手把手教你构建ResNet残差网络
专知
38+阅读 · 2018年4月27日
从零开始:教你如何训练神经网络
机器之心
5+阅读 · 2017年12月11日
TensorFlow神经网络教程
Python程序员
4+阅读 · 2017年12月4日
相关论文
A Survey of Deep Learning for Scientific Discovery
Arxiv
29+阅读 · 2020年3月26日
Deep Learning in Video Multi-Object Tracking: A Survey
Arxiv
57+阅读 · 2019年7月31日
Arxiv
9+阅读 · 2019年4月19日
A Multi-Objective Deep Reinforcement Learning Framework
Arxiv
16+阅读 · 2018年2月7日
Arxiv
3+阅读 · 2017年11月20日
Top
微信扫码咨询专知VIP会员