为什么牛顿方法没有在机器学习中广泛使用?


131

这是困扰我一段时间的事情,而且我在网上找不到任何令人满意的答案,所以这里是:

在复习了一组关于凸优化的讲座之后,牛顿的方法似乎比梯度下降算法更优越,可以找到全局最优解,因为牛顿的方法可以为其求解提供保证,它的仿射不变性,并且大多数收敛于步骤少得多。为什么在机器学习问题中二阶优化算法(例如牛顿法)不如随机梯度下降法那么广泛使用?


23
对于神经网络,deeplearningbook.org的 “ 8.6近似二阶方法”一节提供了很好的概述。总结:“除了目标函数的某些特征(例如鞍点)所带来的挑战之外,牛顿方法在训练大型神经网络中的应用还受到其施加的巨大计算负担的限制。” 有一些替代方法试图在克服计算障碍的同时获得牛顿方法的某些优势,但是它们都有自己的问题。
Franck Dernoncourt,2016年

1
看到这个相关问题和评论,stats.stackexchange.com
Haitao Du

1
请注意,除了“深度学习”之外,其他评论在机器学习中具有更广泛的适用性。然而,尽管所有机器学习问题都可能是“大数据”,但并非所有机器学习问题都必然是“大特征”(即许多参数需要调整),尽管深度学习总是如此。
GeoMatt22

1
值得注意的是,在深度学习之外的机器学习中,L-BFGS(粗略地说是近似牛顿法)一种相当普遍的优化算法。
Dougal

2
牛顿的方法假设是凸性的,现代ML问题(中性网络)不太可能在凸性附近出现,尽管这里公认是一个开放研究领域。因此,牛顿法的估计量可能不如在计算点附近的任何地方都是线性的。对于计算的二次增加,您可能会获得很少的收益。就是说,最近在伯克利举行的一次会议上,一位主持人继续展示使用二阶方法的进展,因此无论如何它还没有死。
大卫·帕克斯

Answers:


95

梯度下降使用其导数知识使函数最大化。牛顿法,一种寻根算法,利用其二阶导数的知识来最大化函数。当二阶导数已知且易于计算时(在逻辑回归中使用Newton-Raphson算法),这样做可能会更快。但是,二阶导数的解析表达式通常很复杂或难以处理,需要大量的计算。计算二阶导数的数值方法也需要大量计算-如果需要值来计算一阶导数,则二阶导数需要。N 2NN2


5
值得一提的是,基于高斯-牛顿法的事物(基于事物的事物)可能更常见。这是牛顿对非线性最小二乘的一种特殊化。
GeoMatt22

4
我不会将高斯-牛顿称为牛顿对非线性最小二乘的特化。我将其称为非线性最小二乘的牛顿的混和近似,它使用更不精确的Hessian近似,拟合方程中的残差越大,因此,论点离最优性越远。
Mark L. Stone

1
@ MarkL.Stone公平的观点,我试图不涉及技术问题:)的确,高斯-牛顿风格的方法试图“伪造”只有一阶信息的二阶。我个人从未使用过牛顿方法进行优化,仅使用了高斯-牛顿(或LM或类似的UKF)或DFO-SQP方法(例如BOBYQA)。我会说“最优性”是一个棘手的问题……对于ML问题,与工程设计优化问题相比,“本地Hessian”的可靠性/信息性可能令人怀疑。也许非本地DFO-SQP是“随机牛顿”?(例如“在线”)
GeoMatt22,2016年

1
再次考虑,DFO-SQP方法在参数空间中倾向于非局部的,而不是数据批量。该UKF可能是味道最接近“随机牛顿”,因为它是在线瓦特/内存有限...但它有效地呈现正定黑森州(即高斯约)。
GeoMatt22

1
实际上,这是一个令人误解的原因,因为像CG这样的二阶方法不需要计算粗麻布。CG的k次迭代将仅花费kN。CG理论上仅在k = N时才匹配牛顿是正确的,但实际上您不需要这么多迭代。
user25322

40

更多的人应该在机器学习中使用牛顿方法*。我说这是一个具有数值优化背景的人,在过去的几年中涉足机器学习。

如果正确使用牛顿法,此处(甚至在文献中)答案中的缺点都不是问题。而且,确实很重要的缺点也会减缓相同或更多数量但通过不太明显的机制进行的梯度下降。

  • 在Wolfe条件下使用线搜索或使用或信任区域可防止收敛到鞍点。适当的梯度下降实现也应该这样做。Cam.Davidson.Pilon的答案引用了该论文,指出了在存在鞍点的情况下“牛顿法”存在的问题,但他们主张的解决方法也是牛顿法。

  • 使用牛顿法不需要构造整个(密集的)Hessian。您可以使用仅使用矩阵向量乘积的迭代方法(例如共轭梯度之类的Krylov方法)将Hessian的逆应用于向量。参见,例如,CG-Steihaug信任区域方法。

  • 您可以通过求解两个形式与已用于计算梯度的伴随方程相同形式的高阶伴随方程,来有效地计算Hessian矩阵向量乘积(例如,神经网络训练中两个反向传播步骤的工作)。

  • 病态条件减慢了迭代线性求解器的收敛速度,但同时也减慢了梯度下降的速度,甚至更慢。使用牛顿法而不是梯度下降法将难度从非线性优化阶段(可以做很多事情来改善这种情况)转移到线性代数阶段(在线性代数阶段,我们可以使用数字线性代数预处理技术的整个库来攻击它)。

  • 同样,计算从“许多便宜的步骤”转变为“一些昂贵的步骤”,从而为子步骤(线性代数)级别的并行化提供了更多机会。

有关这些概念的背景信息,我推荐Nocedal和Wright 撰写的《数值优化》一书。

*当然,牛顿的方法对L1或其他类似的压缩感测/稀疏度提升惩罚函数没有帮助,因为它们缺乏所需的平滑度。


2
我认为我们彼此之间(而不是其他所有人)之间存在暴力协议。
马克·L·斯通

1
这就像通过比较26岁的吸毒成瘾的高中辍学生的数学能力,而不是比较来自每个国家最好的学校的数学研究生的顶尖梯队,来比较英国还是美国培养出更好的研究数学家。没有人对文件进行签名,盖章和交付,我的意思是没有人现在要更改或撤回它。不可侵犯的。
马克·L·斯通

3
@ MarkL.Stone似乎这里发生了对话,在我离开时被删除了。无论如何,我认为您是对的,我们彼此同意,没有其他人同意。我想这是根据我们与其他人的背景而得出的。如您所料,我对链接文件的看法并不多。另一方面,我确实认为黎曼流形牛顿法是一种在非常困难的问题上有很大希望的技术,该方法沿牛顿搜索方向绘制测地轨迹。
尼克·阿尔杰

2
您将如何应对大型培训课程?如果您有例如一百万个训练样本,那么仅评估当前的优化目标就需要测试一百万个样本。而且您需要在行搜索期间多次执行该操作。因此,当您完成1牛顿步时,随机梯度下降将完成数百万次更新。
nikie

2
尼克和@ MarkL.Stone:您实质上是在谈论这种方法吗?这是在深度学习中短暂流行的一种方法,特别是对于递归网络,但是此后我就不再受欢迎,因为它在经验上并没有比自适应梯度法更好。如果他们只是做错事,你解决什么是并显示它通常优于现行标准SGD变种亚当,你可能会做一个大的影响:亚当纸在两年内已经有1345个引文....
杜格尔

33

我本人最近才学到这一点-问题是牛顿方法要收敛到的高维空间中鞍点的扩散。请参阅本文:在高维非凸优化中识别和解决鞍点问题

实际上,鞍点数与局部最小值的比值随维度N呈指数增长。

当通过遵循负曲率方向将梯度下降动力学从鞍点推开以降低误差时,...牛顿法不能适当地处理鞍点;如下所述,鞍点在牛顿动力学下变得有吸引力。


3
您能为为什么添加一些解释吗?理论上,牛顿法对每个特征向量执行加权梯度下降,并具有“最佳”权重。
nbubis '16

4
那篇文章所说的“想要”收敛到鞍点的牛顿方法仅适用于牛顿方法的垃圾实现。
马克·L·斯通

本文根据特征值和特征向量对参数进行了重新参数化,并以此来表明梯度下降从鞍点移开:它沿着负e矢量的方向移向鞍点,但在负e矢量的方向移开正电子向量,因此最终离开了鞍点。另一方面,牛顿没有这样的保证。
伊丽莎白·圣托里拉

他们在本文中提倡的新算法不过是牛顿方法的一种。对于正曲率方向,基本上是牛顿法,对于负曲率方向,基本上是负牛顿法。
尼克·阿尔杰

26

结合两个原因:

  • 牛顿法会吸引到鞍点。
  • 鞍点在机器学习或实际上是任何多变量优化中很常见。

f=x2y2
在此处输入图片说明

xn+1=xn[Hf(xn)]1f(xn)

H=[2fx122fx1x22fx1xn2fx2x12fx222fx2xn2fxnx12fxnx22fxn2].

H=[2002]

[Hf]1=[1/2001/2]

f=[2x2y]

[xy]n+1=[xy]n[1/2001/2][2xn2yn]=[xy]n[xy]n=[00]

x=0,y=0

相反,梯度下降法不会导致鞍点。在鞍点处,渐变为零,但是从上面的渐变中可以看到,稍微跨出一步就会使优化无法进行-y变量上的渐变为负。


1
多亏了您,我才真正理解了该方法从A到Z的工作原理,因此非常感谢您提供的清晰示例!
greenoldman

这里最喜欢的地方是什么?
Ben

14

您问了两个问题:为什么没有更多的人使用牛顿法,为什么有那么多的人使用随机梯度下降法?这些问题有不同的答案,因为有许多算法可以减轻牛顿方法的计算负担,但通常比SGD更好。

HO(N2)NgO(N)H1gO(N3)计算。因此,在计算Hessian的成本很高时,将其求逆或求解最小二乘通常会更糟。(如果您具有稀疏的功能,则渐近看上去更好,但是其他方法也可以更好地执行,因此稀疏性不会使牛顿相对更具吸引力。)

其次,许多方法不仅是梯度下降法,而且比牛顿法更常用。它们通常是Newton方法的简化版本,从某种意义上说,它们以较低的每步计算成本来近似Newton步骤,但需要更多的迭代才能收敛。一些例子:

  • H1

  • O(N2)

  • 当您根本不想处理近似二阶导数时,梯度下降法很有吸引力,因为它仅使用一阶信息。当学习率乘以单位矩阵时,梯度下降就隐式近似了逆Hessian。我个人很少使用梯度下降法:L-BFGS易于实现,因为它只需要指定目标函数和梯度即可。它具有比梯度下降更好的逆Hessian近似值;并且由于梯度下降需要调整学习率。

  • 有时,您有大量的观测值(数据点),但是您从较少的观测值中也可以学到很多。在这种情况下,您可以使用“分批方法”,例如随机梯度下降,通过使用观测的子集来循环。


(+1)值得注意的是,就参数数量而言,L-BFGS的复杂度与梯度下降相同。BFGS并非如此。因此,吸引人的不仅仅是 L-BFGS的有限内存部分。
克里夫·AB

12

梯度下降方向的计算成本较低,并且在该方向上进行线搜索是朝最佳方向发展的更可靠,稳定的来源。简而言之,梯度下降相对可靠。

牛顿法相对昂贵,因为您需要在第一次迭代时计算Hessian。然后,在每个后续迭代中,您可以完全重新计算Hessian(如在牛顿方法中),或仅“更新”先前迭代的Hessian(在拟牛顿方法中),这种方法便宜但不那么可靠。

在行为特别良好的函数的极端情况下,尤其是二次函数非常完美的情况下,牛顿方法无疑是赢家。如果是完美的二次方,牛顿方法将在一次迭代中收敛。

在功能非常差的极端情况下,梯度下降往往会胜出。它将选择一个搜索方向,向下搜索该方向,并最终采取小而有效的步骤。相比之下,在这些情况下,牛顿法往往会失败,特别是如果您尝试使用准牛顿逼近。

在梯度下降和牛顿方法之间,有一些方法,例如Levenberg-Marquardt算法(LMA),尽管我已经看到名称有些混淆。要点是,当事物变得混乱和混乱时,应使用更多的梯度下降信息搜索,然后在事物变得更加线性和可靠时,使用更多的牛顿法信息搜索。


3
男孩,您必须使用牛顿和拟牛顿的可怕实现。如果同时使用非正定性Hessian,则使用信任区域或沿负曲率方向进行线搜索。如果是这样,则它们比最陡峭的下降(即带有线搜索或信任区域的梯度下降)更可靠。简而言之,梯度下降比可靠实施的拟牛顿法可靠性低得多,而准牛顿方法的可靠性不如牛顿法可靠。但是,每次迭代的计算时间和内存需求却是另一回事。
马克·L·斯通

4
我认为您的意思是完美的二次函数。也就是说,牛顿法在一次迭代中收敛于具有线性梯度的二次目标函数。
伊丽莎白·桑托拉

1
@ElizabethSantorella:是的,你是对的!我更新了答案。
纳特

2
1/2xTx

1
我已经说明了 如果您想考虑最陡峭的下降,梯度下降是很棒的,尤其是在表现不佳的功能上,那是您的事。把自己打昏。
马克·L·斯通

7

Hd=g

牛顿法在接近解或Hessian缓慢变化时效果很好,但是需要一些技巧来解决缺乏收敛性和确定性的问题。

通常寻求改进而不是精确的解决方案,在这种情况下,没有理由证明牛顿法或类似牛顿法的额外成本。

有多种改善上述情况的方法,例如可变度量或信任区域方法。

附带说明一下,在许多问题中,关键问题是缩放,尽管成本高昂,但Hessian提供了出色的缩放信息。如果可以近似于粗麻布,则通常可以大大提高性能。牛顿法在某种程度上提供了“最佳”缩放,因为它是仿射不变的。


0

关于牛顿法用于SGD的方法有很多困难,尤其是:

  • 它需要Hessian矩阵-如何例如以合理的成本从噪声梯度中以足够的精度进行估算?

  • 完整的Hessian太昂贵了-我们宁愿需要一些限制,例如限制在一个子空间(哪个子空间?),

  • H1λ=0

  • 牛顿法直接以零梯度吸引到闭合点……在这里通常是鞍形。如何排斥他们呢?例如,无鞍牛顿可反转负曲率方向,但需要控制特征值的符号,

  • 最好在网上进行操作-与其在一个点上进行大量计算,不如尝试利用更多本地信息将其拆分为许多小步骤。

我们可以从一阶到二阶进行小步移动,例如,向动量法中添加仅3个平均值的更新,我们可以同时沿其方向MSE拟合抛物线,从而更智能地选择步长...在低维子空间中进行二阶建模,我们仍可以将其余坐标用于同时梯度下降。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.