ニューラルネットワークとディープラーニングの基礎知識だけでなくても、TensorFlowとその使用方法を勉強しています。
チュートリアルに続いて、私は損失の3つのオプティマイザーの実際の実際的な違いを理解していません。 API を見て、原則を理解していますが、私の質問は次のとおりです。
1。他の代わりに1つを使用することが望ましいのはいつですか?
2。知っておくべき重要な違いはありますか?
私の理解に基づいた簡単な説明を次に示します。
Adamまたは適応運動量は、AdaDeltaに似たアルゴリズムです。ただし、各パラメーターの学習率を保存するだけでなく、各パラメーターの運動量の変化も個別に保存します。
A 少数の視覚化 :
SGD、Momentum、Nesterovは最後の3よりも劣っていると思います。
いくつかの簡単な質問に要約しましょう。
どのオプティマイザが最適な結果/精度を提供しますか?
特効薬はありません。タスクのオプティマイザーの中には、おそらく他のオプティマイザーよりもうまく機能するものがあります。事前に伝える方法はありません。最適なものを見つけるには、いくつか試してみる必要があります。良いニュースは、異なるオプティマイザーの結果がおそらく互いに近いことです。ただし、選択する単一のオプティマイザーに最適なハイパーパラメーターを見つける必要があります。
今、どのオプティマイザーを使用すべきですか?
たぶん、AdamOptimizerを取得して、learning_rate 0.001および0.0001で実行してください。より良い結果が必要な場合は、他の学習率で実行してみてください。または、他のオプティマイザーを試して、ハイパーパラメーターを調整します。
オプティマイザーを選択する際に考慮すべきいくつかの側面があります。
Plain SGDは、実行可能な最小限の値です。これは、単に勾配に学習率を乗算し、結果を重みに追加するだけです。 SGDには多くの美しい特性があります。ハイパーパラメーターは1つしかありません。追加のメモリは必要ありません。トレーニングの他の部分への影響は最小限です。また、2つの欠点もあります。学習率の選択に敏感すぎる可能性があり、他の方法よりもトレーニングに時間がかかる可能性があります。
単純なSGDのこれらの欠点から、より複雑な更新ルール(オプティマイザー)が何であるかがわかります。トレーニングの高速化のためにメモリの一部を犠牲にし、場合によってはハイパーパラメーターの選択を単純化します。
メモリオーバーヘッドは通常、重要ではないため無視できます。モデルが非常に大きい場合、またはGTX760でトレーニングしている場合、またはImageNetのリーダーシップを求めて戦っている場合を除きます。運動量やNesterov加速勾配などのより単純な方法では、1.0以下のモデルサイズ(モデルハイパーパラメーターのサイズ)が必要です。 2次メソッド(アダム、2倍のメモリと計算が必要な場合があります。
収束速度-賢明なことはほとんどSGDよりも優れており、他の比較は困難です。 1つの注意点は、AdamOptimizerは、ウォームアップなしでほとんどすぐにトレーニングを開始できることです。
easy-of-useは、オプティマイザの選択において最も重要であると考えています。オプティマイザーごとにハイパーパラメーターの数が異なり、感度も異なります。私は、Adamを最も簡単に入手できるものの中で最も単純なものと考えています。通常、モデルがうまく収束するかどうかを判断するには、0.001
と0.0001
の間の2-4のlearning_ratesをチェックする必要があります。 SGD(および勢い)の比較のために、私は通常[0.1, 0.01, ... 10e-5]
を試します。 Adamには、変更する必要のあるハイパーパラメーターがさらに2つあります。
オプティマイザーとトレーニングの他の部分との関係。通常、ハイパーパラメーターの調整には、{learning_rate, weight_decay, batch_size, droupout_rate}
の同時選択が含まれます。それらはすべて相互に関連しており、それぞれがモデルの正則化の形として見ることができます。たとえば、正確にweight_decayまたはL2-normが使用され、場合によってはAdamWOptimizer
ではなくAdamOptimizer
を選択する場合、細心の注意を払う必要があります。