GradientDescentOptimizerとAdamOptimizer(TensorFlow)の違いは?


45

XOR-GateをモデリングしているTensorFlowで簡単なMLP作成しました。

だから:

input_data = [[0., 0.], [0., 1.], [1., 0.], [1., 1.]]

次のものが生成されます。

output_data = [[0.], [1.], [1.], [0.]]

このネットワークには、入力層、隠れ層、出力層があり、それぞれ2、5、1個のニューロンがあります。

現在、私は次のクロスエントロピーを持っています:

cross_entropy = -(n_output * tf.log(output) + (1 - n_output) * tf.log(1 - output))

私はこの簡単な代替手段も試しました:

cross_entropy = tf.square(n_output - output)

他のいくつかの試みと一緒に。


ただし、私の設定が何であっても、のエラーはのエラーよりもはるかに遅くGradientDescentOptimizer減少していましAdamOptimizer

実際tf.train.AdamOptimizer(0.01)、どのクロスエントロピー計算または学習率が使用されたとして0.01も、tf.train.GradientDescentOptimizer常に2000を超える学習ステップが必要でしたが、(最高の結果が得られた学習率に応じて)400から800の学習ステップ後に本当に良い結果が得られました。

これはなぜですか?そうですAdamOptimizer、常により良い選択です!


2
Adamオプティマイザーは、勾配降下よりも高度です(このペーパーに基づいています)。
マーククレセン

回答:


77

tf.train.AdamOptimizerKingma及びBaの使用アダム・アルゴリズムを学習速度を制御します。Adamは単純なものよりいくつかの利点を提供しますtf.train.GradientDescentOptimizer。まず第一に、パラメータの移動平均(運動量)を使用します。Bengioはこの論文のセクション3.1.1でこれが有益である理由について議論します。簡単に言えば、これによりAdamはより大きな有効ステップサイズを使用できるようになり、アルゴリズムは微調整することなくこのステップサイズに収束します。

アルゴリズムの主な欠点は、Adamが各トレーニングステップの各パラメーターに対してより多くの計算を実行する必要があることです(移動平均と分散を維持し、スケーリングされた勾配を計算するため)。さらに、各パラメーターに対して保持する状態を増やします(モデルのサイズを約3倍にして、各パラメーターの平均と分散を保存します)。tf.train.GradientDescentOptimizerMLPでもシンプルを使用できますが、同じようにすばやく収束する前にハイパーパラメーターの調整が必要になります。


5
この答えをありがとう!「ハイパーパラメーターチューニング」について話すとき、正確にあなたが意味することを追加していただけますか?
ダニエル451

12
専門用語でごめんなさい!おおよそ、私は「コンストラクターlearning_rateへの引数をtf.train.GradientDescentOptimizerより速く収束するまで変化させる」ことを意味しました。:)
mrry
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.