
書記が数学やるだけ#778 勾配降下法の改良法
機械学習において,勾配降下法の改良法が多数報告されている。
問題
今回はAdamの理解までを目標とする。

説明
勾配降下法(最急降下法)について復習:

確率的勾配降下法(オンライン学習)では,勾配は1つの訓練データから計算した勾配で近似する,これにより確率的に局所解にはまりにくくなる効果がある。実際には,複数の訓練データを用いたミニバッチ学習が用いられる。

機械学習の分野では,これをもとに多数の改良が提案されてきた。今回は主要なものに絞って解説する。

解答
簡単な式で勾配降下法の学習率の効果を確認する。学習率が小さすぎると学習がなかなか進まないが,かといって大きくしすぎると発散してしまう。勾配降下法はさまざまな改良を得てきたが,適正なハイパーパラメータを見極めることが重要である点は変わらない。

まずは基本である確率的勾配降下法(SGD)から。全ての訓練データを用いた時よりも局所解にハマりにくくなるのが長所である。一方で,以下に示す振動・停止・反射の問題がある。

等方的でない2変数関数についてSGDを実施した結果,どう学習率を調整しても上に示した問題が回避できていないことがわかる。

Momentum(doi:10.1038/323533a0)は1986年にデビッド・ラメルハートらがバックプロパゲーションと共に提案した方法であり,前の勾配の情報を用いることで振動を抑制しながら学習を加速されることができる。
これに似た方法として,1983年に Yurii Nesterov が発表したネステロフの加速法(NAG: Nesterov's Accelerated Gradient method)がある。

AdaGrad(https://jmlr.org/papers/v12/duchi11a.html)は2011年に John Duchi らが発表した方法で,学習率を過去の勾配成分の2乗和の平方根で割ることで,学習が進まない方向を生じることを防ぐ。しかし,勾配の二乗が蓄積され続けることで学習率が小さくなり続ける難点がある。

RMSPropは2012年に Tijmen Tieleman らが発表した方法で,AdaGradを勾配の2乗の指数移動平均を取るように変更したものである。
補足として,RMSPropは両辺の次元が一致していないという難点がある。これを改善したのが,2012年に Matthew D. Zeiler が発表したAdaDelta(
https://doi.org/10.48550/arXiv.1212.5701)である。

Adam(https://doi.org/10.48550/arXiv.1412.6980)は2015年に Diederik P. Kingma らが発表した方法で,AdaGradとRMSPropを融合したものである。

ついでにもう一つ,AdaBound(https://doi.org/10.48550/arXiv.1902.09843)は2019年のICLRでLiangchen Luoらが発表した方法で, Adamに学習率の制限(Bound)を加え,ステップごとにSGDへ連続的に変化させることによって,Adamの収束速度とSGDの汎化性能の両立を目指した。
上に示した例を適用してみると,いずれもSGDに比べ改善傾向が見られる。

実装においては漸化式を変えるだけでいいので難しいことはない。PyTorchにおいてもtorch.optim.Optimizerで設定するだけで実装できる。
本記事のもくじはこちら: