Limited-memory BFGS 优于 ADAM 求解器的原因

机器算法验证 机器学习 神经网络 优化 scikit-学习 亚当
2022-02-09 02:43:07

我正在使用多层感知器MLPClassifier为我的问题训练分类模型。我注意到当数据集相对较小(小于 100K)时,使用求解器lbfgs(我猜这意味着scikit learn 中的有限内存 BFGS )优于ADAM 。有人可以为此提供具体的理由吗?事实上,我找不到一个很好的资源来解释其背后的原因。感谢任何参与。

谢谢

2个回答

有很多原因可能会出现这种情况。在我的脑海中,我能想到一个似是而非的原因,但如果不了解更多关于这个问题的信息,就很难暗示它就是那个原因。

L-BFGS 求解器是一种真正的准牛顿方法,因为它通过近似 Hessian 估计参数空间的曲率。因此,如果您的参数空间有很多长而近乎平坦的山谷,那么 L-BFGS 可能会表现良好。它的缺点是在每一步对(逆)Hessian 近似进行秩二更新时会产生额外成本。虽然这相当快,但它确实开始增加,尤其是随着输入空间的增长。这可能是因为当您获得更多数据时,ADAM 的性能优于 L-BFGS。

ADAM 是一种一阶方法,它试图通过调整每个维度的步长来补偿它不估计曲率的事实。在某种意义上,这类似于在每一步都构造一个对角 Hessian,但他们通过简单地使用过去的梯度巧妙地做到了这一点。通过这种方式,它仍然是一阶方法,尽管它具有表现得好像它是二阶的好处。该估计比 L-BFGS 的估计更粗略,因为它仅沿每个维度进行,并且没有考虑 Hessian 中的非对角线。如果您的 Hessian 几乎是奇异的,那么这些非对角线可能在曲率中起重要作用,ADAM 相对于 BFGS 可能表现不佳。

在我看来,它们是缩放梯度的两种不同的启发式方法,但是,它们的动机不同。

如今,人们试图在收敛速度快但泛化能力差的 Adam 和收敛性差但泛化能力更好的 SGD 之间找到一个平衡点。

也许您还应该考虑使用 DiffGrad,它是 Adam 的扩展,但具有更好的收敛性。

@David:我在您的回答中不理解的是您提到亚当没有考虑非对角线。然而,对于 L-BFGS,情况也是如此。它通过对角线逼近 Hessian 矩阵。考虑非对角线意味着必须评估/存储它们,最重要的是必须反转非对角矩阵。