Raul Rojas 关于神经网络的书在第 8.4.3 节专门解释了如何进行二阶反向传播,即一次计算关于两个权重的误差函数的 Hessian。
使用这种方法而不是一阶反向传播更容易解决哪些问题?
Raul Rojas 关于神经网络的书在第 8.4.3 节专门解释了如何进行二阶反向传播,即一次计算关于两个权重的误差函数的 Hessian。
使用这种方法而不是一阶反向传播更容易解决哪些问题?
像 Hessian 优化这样的二阶优化算法有更多关于损失函数曲率的信息,因此收敛速度比像梯度下降这样的一阶优化算法快得多。我记得在某处读过,如果你有神经网络中的权重,二阶优化算法的一次迭代将以大致相同的速率减少损失函数标准一阶优化算法的迭代。然而,随着最近梯度下降(动量、自适应率等)的进步,差异不再那么大了——@EmmanuelMess 指出一篇论文指出:
所提出的具有自适应增益的一阶和二阶方法(BP-AG、CGFR-AG、BFGS-AG)与没有增益的标准二阶方法(BP、CGFR、BFGS)在收敛速度方面的性能评估在纪元数和 CPU 时间。基于一些仿真结果,表明所提出的算法在不损失其准确性的情况下,在收敛速度上比其他标准算法快了 40%。
这是一篇很棒的文章,解释了为什么会这样的数学背后的背景。
此外,二阶梯度可以帮助优化器识别鞍点等状态,并帮助求解器摆脱这些状态。鞍点给标准梯度下降带来了很多问题,因为梯度下降有困难并且移出鞍点的速度很慢。修复鞍点问题是过去二十年来改进梯度下降的动机之一(SDG 与动量、自适应学习率、ADAM 等)。更多信息。
但问题是计算二阶导数需要一个矩阵在大小上,与需要矩阵的梯度下降相反在尺寸方面。对于大型网络,内存和计算变得难以处理,尤其是当您拥有数百万个权重时。
存在一些有效逼近二阶优化的方法,解决了易处理性问题。一种流行的是L-BFGS。我没怎么玩过它,但我相信 L-BFGS 不如梯度下降算法(例如 SGD-M、ADAM)流行,因为它仍然对内存要求很高(需要存储大约 20-100 个以前的梯度评估),并且不能在随机上下文中工作(您不能对小批量进行抽样训练;您必须在每次迭代中训练整个数据集)。如果这两个对你来说不是问题,那么我相信 L-BFGS 工作得很好。