web-dev-qa-db-ja.com

TensorflowのAdamOptimizerを使用すると、損失が突然増加します

回帰タスクにCNNを使用しています。私はTensorflowを使用しており、オプティマイザーはAdamです。ネットワークは、検証エラーとともに損失が突然増加する1つのポイントまで、完全に正常に収束しているように見えます。ラベルと分離された重みの損失プロットは次のとおりです(オプティマイザーはそれらの合計で実行されます) label lossweight loss

私は体重の正則化とラベルのためにl2損失を使用します。トレーニングデータにランダム性を適用します。現在、RSMPropで動作が変化するかどうかを確認しようとしていますが、エラーを再現するには少なくとも8時間かかります。

これがどのように起こり得るかを理解したいと思います。あなたが私を助けてくれることを願っています。

13
andre_bauer

過去数か月の私の経験は次のとおりです。最初の学習率で遊ぶ必要がなく、ほとんどの場合機能するため、Adamは非常に使いやすいです。ただし、収束に達すると、Adamは実際には解決策に取り組むのではなく、より高い反復で揺れ動きます。 SGDはほぼ完全な形状の損失プロットを提供し、より高い反復ではるかによく収束するようです。ただし、セットアップの一部を変更するには、SGDパラメータを調整する必要があります。そうしないと、NaNになります...アーキテクチャと一般的なアプローチの実験では、Adamを好みますが、選択したアーキテクチャの最良のバージョンを取得したい場合は、 SGDと少なくともソリューションを比較します。

また、適切な初期SGDセットアップ(学習率、重みの減衰など)は、少なくとも私のセットアップでは、Adamを使用するのと同じ速さで収束することに気付きました。これがあなたの何人かを助けるかもしれないことを願っています!

編集:私の最初の質問の効果は[〜#〜] not [〜#〜]アダムでも正常であることに注意してください。バグがあったようですが、その問題を本当に思い出せません。

9
andre_bauer