前の節では、AIが霧の山の中で、坂の傾きを手がかりにして下っていく、勾配降下法のイメージを見てきました。
しかし、この方法にはいくつか問題があります。
たとえば、
・進む方向がぶれてしまう
・なかなか谷底にたどり着かない
・学習が遅い
といったことが起こります。
そこで研究者たちは、「もっと効率よく山を下る方法はないだろうか?」と考えました。
こうして生まれたのが、さまざまな 最適化アルゴリズムです。
ここでは、それを山を下るための装備の進化として見てみましょう。
確率的勾配降下法(SGD)
まず基本になるのが、確率的勾配降下法(SGD)です。
これは、勾配降下法を、データをランダムに選びながら更新する方法です。
山の旅で言えば、「その場その場の地面の傾きを見て、とりあえず一歩進んでみる」という歩き方です。
シンプルで計算も軽いのですが、進む方向が少しぶれやすいという特徴があります。
モーメンタム
そこで登場したのが、モーメンタム(Momentum)です。
モーメンタムは、前の動きの勢いを利用して進む方法です。
山を下るときに、ボールを転がすと、少し勢いがついて進みますよね。
同じように、過去の更新の方向を少し残しておくことで、進む方向が安定する、谷底へ向かいやすくなる、という効果があります。
AdaGrad
次に登場したのが、AdaGradです。
AdaGradは、パラメータごとに学習率を調整する、という考え方を持っています。
山で言えば、急な坂では小さく歩く、緩やかな坂では大きく歩くというように、地形に合わせて歩幅を変えるイメージです。
ただし、学習が進むと歩幅がどんどん小さくなってしまう、という欠点があります。
RMSprop と AdaDelta
AdaGradの問題を改善するために提案されたのが、RMSpropと、AdaDeltaです。
これらは、学習率が小さくなりすぎないように調整する、という考え方を取り入れています。
山の旅で言えば、「途中で歩幅が小さくなりすぎて、全然進めなくなる」という状況を防ぐ工夫です。
Adam
そして現在、ディープラーニングで最もよく使われているのが、Adam(Adaptive Moment Estimation)です。
Adamは、モーメンタムの考え方、AdaGrad系の学習率調整などを組み合わせた方法です。
つまり、これまでの装備のよいところを、まとめて取り入れたアルゴリズムと言えます。
そのため、学習が安定しやすい、多くの問題でうまく動くという理由から、現在のディープラーニングで広く使われています。
AdaBound と AMSBound
さらに研究は続いており、AdaBound、AMSBoundといった改良手法も提案されています。
これらは、Adamの性能をさらに安定させることを目的とした方法です。
まとめ
確率的勾配降下法(SGD)
→ 基本の方法
モーメンタム
→ 慣性を利用
AdaGrad
→ 学習率を調整
RMSprop / AdaDelta
→ 学習率が小さくなりすぎない工夫
Adam
→ これらを組み合わせた方法
next ▶ ハイパーパラメータと調整