【问题标题】:Bayesian Neural Network: Computation of Hessian贝叶斯神经网络:Hessian 的计算
【发布时间】:2016-02-07 15:03:54
【问题描述】:

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

虽然我执行了简单的 1 隐藏层 NN 和卷积 NN,但我成功地避免了任何二阶优化方法,因此没有计算 Hessian 矩阵。然而,后来我来到了贝叶斯神经网络,为了优化超参数,Hessian 的计算是强制性的。

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

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

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

【问题讨论】:

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


    【解决方案1】:

    您可以尝试使用the BFGS algorithm 进行梯度上升,它近似于 Hessian 并且倾向于节省(大量)内存。有一个implementation in Scipy

    【讨论】:

    • 我猜你正在考虑 L-BFGS (en.wikipedia.org/wiki/Limited-memory_BFGS),BFGS 需要与典型的 hessian 方法相同的内存量,所以如果 OPs 问题在于内存消耗 - BFGS 也会失败
    • 是的。感谢您的澄清。
    猜你喜欢
    • 2019-11-05
    • 2014-08-07
    • 2011-03-31
    • 2010-09-23
    • 1970-01-01
    • 1970-01-01
    • 2011-01-09
    • 2022-08-24
    • 2013-04-08
    相关资源
    最近更新 更多