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に組み込みます。