深度学习为什么不用二阶优化?
1. 计算复杂度与资源开销
- Hessian矩阵的规模:在神经网络中,二阶优化需要计算损失函数相对于所有模型参数的二阶偏导数,这形成了一个巨大的 Hessian 矩阵。假设一个神经网络有 n 个参数,那么 Hessian 矩阵的大小是 n×n,这意味着存储和操作该矩阵的计算复杂度是平方级别的。
- 求逆操作的难度:二阶优化方法如牛顿法或拟牛顿法需要用到 Hessian 矩阵的逆矩阵或伪逆矩阵。对于大规模的神经网络模型,求 Hessian 矩阵的逆非常昂贵。相比之下,一阶方法(如 SGD)仅计算梯度向量,开销较小。
- 计算时间的消耗:即使是使用近似二阶方法,如 BFGS 等拟牛顿方法,计算成本依然较高。这对于需要大规模数据训练的大型深度神经网络而言非常不划算,因此在实践中不常使用二阶优化方法。
2. 泛化能力与优化目标
- 深度模型对参数精度的敏感度较低:在浅层模型中,参数的精度对最终模型效果的影响可能会较大,因此使用二阶优化可以获得更高精度的解。然而在深度神经网络中,参数对精度的需求不高,一阶优化在误差范围内的解已经足够好。这是因为深层模型通过非线性激活函数、正则化等技术,使得模型在训练数据上的性能不再完全依赖于精确的参数值。
- 模型的泛化能力与优化的平衡:一阶优化方法,如随机梯度下降法(SGD),往往会在某种程度上引入噪声,这种噪声可以帮助模型逃离局部最优点,并有利于找到泛化性能更好的平坦区域。而二阶优化通常会找到更窄、更陡的最优区域,这可能导致模型在训练数据上表现较好,但泛化性能较差,容易过拟合。
3. 非凸优化中的问题
- 神经网络的非凸特性:大多数深度学习问题中的损失函数都是非凸的,包含大量的局部极小值或鞍点。在这样的非凸空间中,Hessian 矩阵往往表现出复杂的特性,存在较多的零特征值和负特征值,导致其在实际求解中的数值不稳定。二阶方法在非凸问题上可能会被困在某个局部最优,或花费更多时间在高阶的平坦区域,不如一阶方法的效果好。
- 鞍点和局部极小值:神经网络的参数空间往往包含大量鞍点,二阶方法在接近鞍点时,可能会因 Hessian 矩阵包含负特征值而误导方向,使得优化过程更加复杂和不稳定。一阶方法在这种情况下,反而因为只关注梯度而能够更快通过这些点,继续寻找最优解。
4. 数值稳定性问题
- Hessian 矩阵的条件数:对于深层神经网络,Hessian 矩阵通常是病态的,条件数较大。这会导致二阶优化在处理时出现数值不稳定性,尤其是在反向传播计算中,Hessian 矩阵的求逆会放大误差。
- 依赖高精度的数据:由于二阶方法对解的精度要求较高,输入数据中的微小误差可能会在优化过程中被放大,从而导致梯度波动加剧。对比之下,一阶方法中的梯度下降不受 Hessian 条件数的影响,能更稳定地进行参数更新。
5. 已有深度学习优化算法的高效性
- 动量方法和自适应学习率方法的成功:诸如 Adam、RMSprop 等改进的一阶优化方法,结合了动量和自适应学习率调整,在深度学习中表现出极高的有效性和计算效率。动量方法帮助优化算法克服小的局部极小值,而自适应方法则根据梯度动态调整步长,减少了对初始学习率的敏感性,从而弥补了二阶方法的一些优势。
- 牛顿法等经典二阶方法的局限:经典的二阶方法在凸优化问题中可以快速收敛,但在深度学习的复杂非凸空间中并不总是适用。这些方法假设目标函数是局部凸的,且对于小规模的优化变量表现良好,而神经网络模型往往违背这些假设。
总结
二阶优化在深度学习中不常用的原因归结于计算开销、数值稳定性、泛化能力、非凸问题的适用性等方面。一阶优化方法虽然简单,但更适合深度学习的大规模非凸问题,尤其是在面对数百万、甚至上亿参数的神经网络时,更加高效且具有良好的泛化能力。