似乎,特别是对于深度学习,有一些非常简单的方法可以优化 SGD 收敛性,比如 ADAM - 很好的概述:http ://ruder.io/optimizing-gradient-descent/
他们只追踪单个方向——丢弃关于剩余方向的信息,他们不尝试估计与近极值的距离——这是梯度演化所建议的(极值),并且可以帮助选择步长的关键。
这两个错失的机会都可以被二阶方法利用——尝试同时在多个方向(不是全部,只是几个)对抛物线进行局部建模,例如在某些方向上接近鞍座吸引,在其他方向上排斥。这里有一些:
- L-BFGS:http ://aria42.com/blog/2014/12/understanding-lbfgs
- 汤加:https ://papers.nips.cc/paper/3234-topmoumoute-online-natural-gradient-algorithm
- K-FAC:https ://arxiv.org/pdf/1503.05671.pdf
- 无鞍牛顿:https ://arxiv.org/pdf/1406.2572
- 我的二阶本地参数化:https ://arxiv.org/pdf/1901.11457
但是一阶方法仍然占主导地位(?),我听说二阶方法不适用于深度学习(?)
主要有 3 个挑战(还有吗?):反转 Hessian、梯度随机性和处理鞍。如果在一些有希望的方向(我想使用)将参数化局部建模为抛物线,则所有这些都应该解决:根据计算的梯度更新此参数化,并基于此参数化执行适当的步骤。这样,极值可以在更新的参数中 - 没有 Hessian 反演,参数化的缓慢演变允许从梯度累积统计趋势,我们可以对鞍附近的两个曲率进行建模:相应地吸引或排斥,强度取决于建模的距离。
我们应该采用二阶方法进行深度学习吗?
为什么让它们比简单的一阶方法更成功如此困难——我们能否识别这些挑战……解决它们?
由于实现二阶方法的方法有很多,哪一种看起来最有前途?
更新:SGD 收敛方法概述,包括二阶:https ://www.dropbox.com/s/54v8cwqyp7uvddk/SGD.pdf
更新:有批评巨大的二阶方法,但我们可以在成本范围的另一端工作:从成功的一阶方法中做出微小的步骤,比如单向的廉价在线抛物线模型,例如动量方法,用于更明智地选择步长- 对于一阶方法的二阶增强,是否有有趣的方法?