確率的勾配降下のAdamメソッドはどのように機能しますか?


45

ニューラルネットワークをトレーニングするための基本的な勾配降下アルゴリズムに精通しています。Adam:ADAM:A METHOD for SCHOCASTIC OPTIMIZATIONを提案している論文を読みました。

(少なくとも)確かにいくつかの洞察を持っていますが、この論文は私にとって全体的に高すぎるようです。たとえば、コスト関数は多くの異なる関数の合計であることが多いため、その値を最適化するには膨大な量の計算が必要です。確率的勾配降下-トピックを理解している限り-これらの関数のサブセットについてのみ最適化を計算します。私には、Adamがこれをどのように行い、これにより全体のトレーニングエラーが減少する理由は不明です。J(θ)J(θ)

Adamは以前の勾配を考慮して勾配を更新すると思います。彼らはそれを勢いを利用するようなものと呼んでいますか?この勢いは正確に何ですか?論文の2ページ目のアルゴリズムによると、「通常の」勾配の1次モーメントと2次モーメントの推定値のような、ある種の移動平均ですか?

実際には、Adamを使用すると、勾配を小さくするために大きな有効ステップサイズを使用できるため、確率的近似と組み合わせてトレーニングエラーが発生すると考えられます。したがって、結果として得られる更新ベクトルは、通常の勾配降下アルゴリズムのように曲線を記述するのではなく、空間次元でさらに「ジャンプ」する必要があります。

誰かがアダムの仕組みを分かりやすく説明できますか?特にそれがどのように収束するのか、特にアダムの方法が機能する理由と正確な利点は何ですか?


1
質問に対してより良いタイトルを提供する必要があります。アダムについて具体的に尋ねたいのは何ですか?一般的には、もう少し検索できるようにしてください。
チャーリーパーカー

回答:


40

Adamの論文は、「...多くの目的関数は、データの異なるサブサンプルで評価されるサブ関数の合計で構成されています。この場合、最適化は、個々のサブ関数に対して勾配ステップを行うことでより効率的になります...」目的関数はトレーニング例の誤差の合計であり、トレーニングは個々の例またはミニバッチで実行できることを意味します。これは、確率的勾配降下法(SGD)と同じです。SGDは、パラメーターの更新がより頻繁に行われるため、バッチトレーニングよりも大規模な問題に対してより効率的です。

Adamが機能する理由については、いくつかのトリックを使用します。

これらのトリックの1つは勢いであり、これにより収束が速くなります。最小に向かって徐々に傾斜する長くて狭い峡谷のような形をした目的関数を想像してください。勾配降下を使用してこの関数を最小化するとします。キャニオンの壁のある点から開始する場合、負の勾配は最も急な降下の方向、つまりほとんどがキャニオンの床に向かっています。これは、キャニオンの壁が、キャニオンの最小に向かう緩やかな勾配よりもはるかに急勾配であるためです。学習率(つまり、ステップサイズ)が小さい場合は、キャニオンフロアに降りて、最小値に向かって進むことができます。しかし、進歩は遅いでしょう。学習率を上げることはできますが、これによりステップの方向は変わりません。この場合、峡谷の床をオーバーシュートして、反対側の壁に行き着きます。その後、このパターンを繰り返し、壁から壁へと振動しながら、最小に向かってゆっくりと進行します。この状況では、勢いが役立ちます。

勢いとは、単に、前の更新の一部が現在の更新に追加され、特定の方向の複合で更新が繰り返されることを意味します。私たちは勢いを増し、その方向にますます速く動きます。キャニオンの場合、すべての更新にはその方向のコンポーネントがあるため、最小の方向に勢いを付けます。対照的に、峡谷の壁を前後に移動するには、常に方向を反転させる必要があるため、運動量はそれらの方向の振動を減衰させるのに役立ちます。

Adamが使用するもう1つのトリックは、各パラメーターに個別の学習率を適応的に選択することです。通常、より小さなまたはより少ない頻度の更新を受け取るパラメーターは、Adamでより大きな更新を受け取ります(逆も同様です)。これにより、適切な学習率がパラメーター間で異なる場合の学習が高速化されます。たとえば、深層ネットワークでは、初期層で勾配が小さくなる場合があり、対応するパラメーターの学習率を上げることは理にかなっています。このアプローチのもう1つの利点は、学習率が自動的に調整されるため、手動調整がそれほど重要ではなくなることです。標準SGDでは、学習率を慎重に調整(および場合によってはオンライン調整)する必要がありますが、これはAdamおよび関連する方法ではあまり当てはまりません。ハイパーパラメーターを選択する必要がありますが、

関連メソッド

Momentumは標準SGDでよく使用されます。改良版は、Nesterov運動量またはNesterov加速勾配と呼ばれます。各パラメーターに自動的に調整された学習率を使用する他の方法には、Adagrad、RMSprop、およびAdadeltaがあります。RMSpropとAdadeltaは、学習を停止させる可能性のあるAdagradの問題を解決します。Adamは、勢いのあるRMSpropに似ています。ナダムは、古典的な運動量の代わりにネステロフ運動量を使用するようにアダムを修正します。

参照

キングマとバ(2014)。Adam:確率的最適化の方法。

グッドフェロー等。(2016)。ディープラーニング、第8章。

ジェフヒントンのコースのスライド

ドーザ(2016)。Nesterov MomentumをAdamに組み込みます。


2
(+1)「Adam and Beyondの収束について」openreview.net/forum?id=ryQu7f- RZ
モニカの復活

2
おかげで@Sycorax、私はいくつかの時間を得るとき、私は更新しようとするでしょう
user20160

1
IIUC、アダムは運動量に似たものを使用しますが、異なります。書いたように、momentumメソッドは、現在の更新を前の更新の(大きな)部分に追加します。対照的に、AdamはほとんどのSGDメソッドが現在の勾配を使用する最後の勾配の指数関数的に減衰する平均を使用します。すなわち、各ステップAdamは現在の勾配のごく一部のみを取得します。そのため、運動量を蓄積する単純なボールとは異なり、アダムは摩擦のある重いボールのように振る舞います。「2つの時間スケールの更新ルールによってトレーニングされたGANがローカルナッシュ均衡に収束する」で説明されています。w
オーレンミルマン

最後のコメントを続けて、この回答では、Adamとrmspropの運動量の違いについて説明し、Adamの運動量のような動作が通常の運動量のような動作とどのように異なるかに焦点を当てます。(その答えには、さまざまなメソッドの動作をシミュレートしてグラフィカルに示すPythonコードも含まれています。)
Oren Milman
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.