座標降下と勾配降下


23

2つのアルゴリズムCoordinate DescentGradient Descentの異なるユースケースは何だろうと思っていました。

座標降下には、滑らかでない関数に問題があることを知っていますが、SVMやLASSOなどの一般的なアルゴリズムで使用されています。

しかし、勾配降下法は、特にANNの復活や他の多くの機械学習タスクで、より広く使用されていると思います。

私の質問は次のとおりです。どのタイプの問題が一方に適合し、他方には適合しないか、その点でSVMおよびLASSOの座標降下フィッティングを作成しますが、ANNの勾配降下フィッティングを作成します。

最適化アルゴリズムを選択するときに、2つのうちどちらを選択する必要がありますか?

回答:


7

私は通常、関数の滑らかな部分の勾配および/またはペナルティの近位演算子を計算することがいかに簡単/簡単かという問題だと思います。

1つの変数(または1つまたは複数の変数)を使用する場合、すべての変数を同時に解決するよりも、問題の正確な解決策を見つける方がはるかに簡単な場合があります。また、個々の導関数と比較して勾配を計算するには高すぎる場合もあります。また、座標降下の収束は、istaの場合と同じ1/k2で、kは反復回数ですが、ISTAとFISTAの両方に比べてパフォーマンスが向上する場合がありますたとえば、 http://statweb.stanfordを参照してください。 edu /〜tibs / comparison.txt

このようなことは、たとえば、座標降下とISTA / FISTAの選択に影響します。


では、座標降下(CD)が高速になるのはどのような場合ですか?CDがより良い候補になる特定のタイプの機能はありますか?
バー

私は、関数の特定のクラスは、より高速なCDとのような他の方法と比べになると言うことはできません例えば FISTA。私の知る限り、これはあなたの関数に大きく依存し、勾配とそのようなことを評価するのにどれだけ費用がかかりますか。私の経験から、モデルに変数がほとんどない場合、投げ縄問題のCDはFISTAより高速です(覚えていないが、数千未満)。ここでCDをISTAおよびFISTAと比較しているだけであることに注意してください。他のアルゴリズム(NewtonやPseudo-Newtonなど)はおそらくより高速です。しかし、これは手元の問題に完全に依存しています。
トミーL

どうしてCDはGDより速いのですか?反論のようです。
ロイ

3

座標降下は一度に1つのパラメーターを更新しますが、勾配降下はすべてのパラメーターを一度に更新しようとします。

あるアルゴリズムが他のアルゴリズムよりも優れている場合を正確に指定するのは困難です。たとえば、私は座標降下がLASSOの最新技術であることを知って非常にショックを受けました。そして、私だけではありませんでした。スライド17を参照してください。

そうは言っても、降下を調整するために問題をより修正しやすい機能がいくつかあります。

(1)高速の条件付き更新。何らかの理由で問題が原因でパラメータを個別に非常に迅速に最適化できる場合、座標降下によりこれを利用できます。たとえば、データのサブセットのみを使用して特定のパラメーターを更新でき、これらの更新の計算コストを大幅に削減できます。別のケースは、他のすべてのパラメーターの値を条件として、個々のパラメーターに閉じた形式のソリューションがある場合です。

(2)パラメーターの比較的独立したモード。1つのパラメーターの最適値が他のパラメーター値から完全に独立している場合、1ラウンドの座標降下により解が導き出されます(各座標更新が現在のモードを検出すると仮定)。一方、特定のパラメーターのモードが他のパラメーター値に非常に大きく依存している場合、座標降下はインチごとに非常に小さく、各ラウンドで非常に小さな更新が行われます。

残念ながら、ほとんどの問題では、(2)は成り立たないため、座標降下法が代替アルゴリズムと比較してうまく機能することはまれです。LASSOでうまく機能する理由は、条件を制定するために使用できるトリックがたくさんあるからだと思います(1)。

α


0

これは古い質問であり、いくつかの非常に良い答えがあることを理解しています。いくつかの実用的な個人的な経験を共有したいと思います。

k

  • すべての確率は正でなければなりません。
  • 確率セットのすべての要素は合計1つでなければなりません

これは実際に多くを求めています。勾配降下では、通常、ペナルティ関数を介して制約を扱います。ここでは機能しません。値がこれらの制約の1つに違反するとすぐに、通常、コードは並べ替えの数値エラーを発生させます。そのため、最適化アルゴリズムが実際にそれを通過することを決して許可しないことにより、制約に対処する必要があります。

勾配降下を可能にするために、制約を満たすために問題に適用できる多数の変換があります。ただし、これを実装する最も簡単で最も怠zyな方法を探している場合は、座標降下が行く方法です:

p

  • pk+1=pkηJp
  • p=最大p01
  • Pj+1=Pj1=1np

私のようにPythonで働いている人にとって、これは通常、パフォーマンスにかなり悪影響を与える追加のforループを使用する必要があることを意味します。勾配降下により、パフォーマンスが最適化されたNumpyを使用できます。それで非常に良い速度を得ることができますが、これは座標降下では達成できないので、私は通常何らかの変換テクニックを使用します。

したがって、結論は、座標降下法は、ポアソン分布のレートパラメーターなどの非常に厳しい制約に対処する最も簡単なオプションであるということです。マイナスになった場合、コードの不満などがあります。

これにより少し洞察が得られることを願っています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.