最適化アルゴリズム

AdaGrad / RMSProp あだぐらど / あーるえむえすぷろっぷ

AdaGradRMSProp適応的学習率最適化勾配降下法深層学習
AdaGrad / RMSPropについて教えて

簡単に言うとこんな感じ!

AdaGradは「よく更新されるパラメータは学習率を小さく、あまり更新されないパラメータは学習率を大きく」と自動調整する賢い最適化手法だよ。RMSPropはAdaGradの「学習率が下がりすぎて止まってしまう」欠点を直した改良版なんだ!


AdaGrad / RMSPropとは

AdaGrad(Adaptive Gradient Algorithm) は2011年にDuchiらが提案した最適化手法です。各パラメータに個別の学習率を設定し、これまでの勾配の累積に応じて自動調整します。テキスト処理のようなスパース(まばら)なデータで特に有効で、頻出単語(よく更新)は小さく、希少単語(めったに更新されない)は大きく学習率を設定できます。

ただしAdaGradは学習を重ねるほど学習率が単調に小さくなるため、長い学習では更新が止まってしまうという欠点があります。

RMSProp(Root Mean Square Propagation) は2012年にGeoff Hintonが提案した改良版です。過去の勾配を指数移動平均で忘れながら管理することで、学習率の急激な低下を防ぎます。LSTMなどのRNN系の学習に特に効果的で、後にAdamの基礎部品にもなりました。


各手法の比較

項目SGDAdaGradRMSPropAdam
学習率の調整一律パラメータ別(累積)パラメータ別(指数平均)パラメータ別(指数平均)+モメンタム
スパースデータへの強さ弱い強い強い強い
長期学習問題なし学習率が0に近づく問題なし問題なし
実装の複雑さ簡単やや簡単中程度やや複雑
import torch.optim as optim

# AdaGrad
optimizer_adagrad = optim.Adagrad(model.parameters(), lr=0.01)

# RMSProp
optimizer_rmsprop = optim.RMSprop(
    model.parameters(),
    lr=0.01,
    alpha=0.99,  # 指数移動平均の減衰率
    eps=1e-8
)

歴史と背景

  • 2011年:DuchiらがスタンフォードでAdaGradを発表。自然言語処理の分野で大きな注目を集める
  • 2012年:Hintonが機械学習講義の資料でRMSPropを紹介(論文化されていない珍しい経緯)
  • 2014年:AdamにRMSPropのアイデアが取り込まれ、AdaGrad・RMSPropの後継として普及
  • 現在:単体ではなくAdamの理解を深めるための「祖先」として教育的に重要な位置付け

どの手法を使えばいいか

状況推奨手法
とりあえず始めたいAdam
スパースな特徴量(テキストなど)AdaGrad または Adam
RNN・LSTMの学習RMSProp または Adam
大規模言語モデルAdamW
小規模・シンプルなモデルSGD + モメンタム

関連用語