贝叶斯神经网络:Hessian

时间:2015-11-06 12:53:24

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

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

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

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

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

更一般地说: 是否有可能采用贝叶斯方法(238200权重)或甚至更大的架构? 或者它可能仅适用于相对较小的网络?

1 个答案:

答案 0 :(得分:2)

您可以尝试the BFGS algorithm进行渐变上升,它近似于Hessian并且倾向于节省(相当大的)内存。有一个implementation in Scipy