python - 贝叶斯神经网络 : Computation of Hessian

标签 python machine-learning neural-network mnist hessian-matrix

我正在尝试用 Python 编写几种类型的 ANN 算法,以便更好地理解/直觉这些算法。我没有使用 Scikit-learn 或任何其他现成的软件包,因为我的目标是教育性而非实用性。 作为示例问题,我使用 MNIST 数据库 ( http://yann.lecun.com/exdb/mnist/ )。

当我执行简单的 1 隐藏层神经网络和卷积神经网络时,我成功地避免了任何二阶优化方法,因此没有计算 Hessian 矩阵。然而,后来我进入了贝叶斯神经网络,为了优化超参数,必须进行 Hessian 计算。

在我的全连接网络中,有 784 个输入、300 个隐藏单元和 10 个输出单元。所有这些都会产生 238200 个权重(+ 偏差)。 当我尝试计算甚至近似 Hessian 矩阵(通过梯度的外积)时,Python 会发出“MemoryError”通知。即使我将权重数量减少到约 40000 并且没有显示错误消息,我的计算机也会在几分钟后卡住。据我了解,问题在于所需的矩阵非常巨大。 我浏览了几篇关于贝叶斯神经网络的文章,注意到作者通常使用不超过 10 或 20 个输入和隐藏单元的网络架构,因此参数比我少得多。不过,我还没有看到任何此类限制的明确声明。

为了将贝叶斯方法应用于 MNIST 的神经网络,我该怎么做?

更一般地说: 是否可以将贝叶斯方法应用于此(238200 个权重)甚至更大的架构? 或者也许它只适合相对较小的网络?

最佳答案

你可以尝试the BFGS algorithm对于梯度上升,它近似 Hessian 矩阵并且倾向于节省(大量)内存。有一个implementation in Scipy .

关于python - 贝叶斯神经网络 : Computation of Hessian,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33567260/

相关文章:

machine-learning - 机器学习算法: which algorithm for which issue?

neural-network - OCR 和神经元网络?

python - keras 中输入数据不兼容错误,维度不匹配 ValueError

python - 我可以在排序列表时使 python 代码工作吗

python - 如何在 Python 中让我的递归函数返回 0

python - 如何在Python中选择其一列值包含特定字符串的行?

python - 我的 R 平方分数为负,但使用 k 倍交叉验证的准确度分数约为 92%

neural-network - 从神经网络领域寻找有趣的话题

machine-learning - 图像分类,具有自定义标签的窄域

python - 检查数据框中是否存在正值