坐标与梯度下降


23

我想知道Coordinate DescentGradient Descent这两种算法的不同用例是什么。

我知道坐标下降存在函数不平滑的问题,但是它已用于诸如SVM和LASSO的流行算法中。

但是我认为梯度下降法得到了更广泛的应用,尤其是随着人工神经网络的兴起以及许多其他机器学习任务的出现。

我的问题是:哪种类型的问题适合一种而不是另一种,在这方面,什么使SVM和LASSO的坐标下降适合,而对ANN的梯度下降适合?

选择优化算法时,应该如何在两者之间进行选择?

Answers:


7

我认为通常要算出函数的平滑部分和/或罚分的近端算符的梯度是多么简单/容易。

有时候,对于一个变量(或一个块或多个变量)而言,找到问题的精确解决方案要比对所有变量同时进行求解要容易得多。有时,与单个导数相比,计算梯度太昂贵了。同样,坐标下降的收敛与ista ,其中k1个/ķ2ķ是迭代次数,但与ISTA和FISTA相比,有时可能表现更好,请参见例如 http://statweb.stanford。 edu /〜tibs / comparison.txt

例如,这样的事情将影响与ISTA / FISTA相比的协调下降选择。


那么在哪些情况下坐标下降(CD)会更快?CD上是否有某些特定类型的功能更适合使用?
2015年

我不能说CD的特定功能类别要比其他方法(例如 FISTA)更快。据我所知,这在很大程度上取决于您的功能以及评估梯度之类的费用。根据我的经验,在模型中变量很少(不记得了,但少于数千个)的情况下,CD在套索问题上比FISTA快。注意,这里我只是将CD与ISTA和FISTA进行比较,其他算法(例如Newton或Pseudo-Newton)可能会更快。但这完全取决于手头的问题。
汤米L

为什么CD比GD快?似乎是反逻辑。
罗伊,2016年

3

坐标下降一次更新一个参数,而梯度下降则尝试一次更新所有参数。

很难确切说明一种算法何时会比另一种算法更好。例如,我很震惊地得知协调下降是LASSO的最新技术。我不是唯一的一个。见幻灯片17

话虽如此,有些功能可以使问题更易于协调以降低血统:

(1)快速的条件更新。如果由于某种原因该问题允许人们非常快速地对参数进行单独优化,则可以使用坐标下降法。例如,一个人可能仅能使用数据的子集来更新某些参数,从而大大降低了这些更新的计算成本。另一种情况是,如果有一个针对单个参数的封闭式解决方案,则以所有其他参数的值为条件。

(2)相对独立的参数模式。如果一个参数的最佳值完全独立于其他参数的值,那么将经过一轮坐标下降来求解(假设每个坐标更新都能找到当前模式)。另一方面,如果给定参数的模式高度依赖于其他参数值,则坐标下降很有可能随时间推移而增加,每轮更新很少。

不幸的是,对于大多数问题,(2)不成立,因此与其他算法相比,坐标下降效果很好。我相信它对LASSO表现良好的原因是,人们可以使用许多技巧来制定条件(1)。

α


0

我意识到这是一个古老的问题,并且有一些很好的答案。我想分享一些实际的个人经验。

ķ

  • 所有概率都必须为正。
  • 概率集合的所有元素之和必须等于1

这实际上是很多问题。对于梯度下降,通常通过惩罚函数处理约束。在这里它不起作用。一旦值违反这些约束之一,您的代码通常会引发各种数字错误。因此,必须从未真正允许优化算法遍历它来处理约束。

您可以将多种变换应用于您的问题,以满足约束条件,以允许梯度下降。但是,如果您正在寻找最简单,最懒惰的方法来实现此目标,那么协调下降是最好的方法:

p一世

  • p一世ķ+1个=p一世ķ-ηĴp一世
  • p一世=最高p一世01个
  • PĴ+1个=PĴ1个一世=1个ñp一世

对于像我这样使用Python的人来说,这通常意味着我必须使用附加的for循环,这会对性能产生负面影响。梯度下降使我可以使用经过优化的Numpy。使用它可以获得一个很好的速度,但是使用坐标下降法是无法实现的,因此我通常使用某种变换技术。

因此,结论实际上是,坐标下降是处理非常严格的约束(例如泊松分布中的速率参数)的最简单选择。如果它变为负数,则您编码为抱怨等。

我希望这能增加一些见识。

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.