带有 keras 和 pymc3/edward 的贝叶斯递归神经网络

机器算法验证 贝叶斯 神经网络 pymc
2022-03-19 16:21:23

我有一个在 keras 中实现的非常简单的玩具循环神经网络,给定 N 个整数的输入将返回它们的平均值。我希望能够使用 pymc3 或 edward.lib 将其修改为贝叶斯神经网络,以便获得输出值的后验分布

例如 p(输出 | 权重)。

我已经阅读了来自 autograd、pymc3 和 edward [1,2,3] 的博客文章,但似乎都针对分类问题。

干杯

[1] https://github.com/HIPS/autograd/blob/master/examples/bayesian_neural_net.py

[2] http://twiecki.github.io/blog/2016/06/01/bayesian-deep-learning/

[3] https://github.com/blei-lab/edward/blob/master/examples/getting_started_example.py

编辑

澄清一下 - 我在问是否有人可以提供一些与在分类任务以外的任何事情中构建贝叶斯 RNN 相关的经验/建议/参考。

2个回答

从纯粹的实现角度来看,它应该很简单:获取您的模型代码,将每个可训练的变量创建替换为ed.Normal(...)或类似的东西,建立变分后验,将它们压缩到字典中,将其提供给 edward et voila 的一些推理对象。

问题是 RNN 的变分训练,因为基于采样,所以非常困难。采样噪声一旦被循环网络的动态放大,就没有乐趣了。据我所知,目前一般没有关于如何做到这一点的“黄金标准”。

起点可能是 Alex Graves 的论文 [1];Yarin Gal [2] 最近做了一些工作,其中 dropout 被解释为变分推理。它将通过整合 dropout 噪声为您提供预测分布。

后者可能是最容易开始工作的,但我自己没有实践经验。

  • [1] 格雷夫斯,亚历克斯。“神经网络的实用变分推理”。神经信息处理系统的进展。2011 年。
  • [2] 加尔,亚林。“递归神经网络中辍学的理论基础应用。” arXiv 预印本 arXiv:1512.05287 (2015)。

同时,其他与贝叶斯 RNN 相关的论文也已发表。例如,用于预测和量化时空数据不确定性的贝叶斯递归神经网络和贝叶斯递归神经网络模型