LoginSignup
2
0

More than 1 year has passed since last update.

SGD vs Adam Optimizerを選ぶときの単純な法則

Posted at

概要(モデルの精度 vs 学習の収束性)

Optimizerって沢山あって、結局どれが良いの?ってなる。論文でよく使われているやつを使えば良いのだが、様々な条件(モデルの大きさ、タスクの難易度、データの複雑性、lossの関数、etc...)によってBestなOptimizerは変わってくる。
Optimizerを選ぶときの単純な法則を知っていると、迷わずに済むと思う。

今回はモデルの精度と学習の収束性の2点が大きくある。

  • modelの性能を上げたい場合は、local minimaに収束しないようにしないといけない。local minimaから脱出するために、gradientを大きく更新させる必要がある。しかし学習が安定しにくい。
  • 学習を早く滑らかに収束させたい場合は、learning rateの調整やgradientのmoving average(移動平均)を取ったりする事で、パラメーターの突発的更新を抑制出来る。しかしlocal minimaに陥いる可能性が高く、精度が出にくい。

幾つかの有名なOptimizerを例に見ていく

SGD

SGDはシンプルにGradient方向へ重みをupdateする。故にlocal minimaから脱出しやすく精度が高くなる。余談ですが、PytorchのSGDのimplementationはrandomにサンプルするという確率的機能は無いらしい。じゃあSGDじゃなくて、GD(Gradient Descent)じゃんという会話があり、その通りだと思った。

SGD with momentum

SGDにgradientのmomentumを付ける事で学習をsmoothにする。故にSGDより精度が落ちるが学習の収束性が増す。

Adam

AdamはSGD with momentumにRMSPropという学習率を調整する機能が付いている。故にSGD with momentumより精度が落ちるが学習の収束性が増す。

結論

より多くのSmoothingの機能を付けることで学習速度が早く安定するが、一方で精度が落ちてくる(local minimaに陥りやすい)。まずはAdamで学習してみて収束するかを確認して、精度を上げたいのであればSGD with momentumまたはSGDを使ってみるのが良いと思う。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0