我正在尝试用 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/