32
勾勾勾勾勾勾 勾勾勾勾勾勾勾勾勾 (Adagrad, Adadelta, Adam) 2016-10-07 勾勾勾勾勾 勾勾 勾勾勾 西

勾配降下法の最適化アルゴリズム

  • Upload
    nishio

  • View
    6.622

  • Download
    2

Embed Size (px)

Citation preview

Page 1: 勾配降下法の最適化アルゴリズム

勾配降下法の最適化アルゴリズム

(Adagrad, Adadelta, Adam)2016-10-07

サイボウズ・ラボ西尾泰和

Page 2: 勾配降下法の最適化アルゴリズム

2このスライドの目的

• 勾配降下法は Deep Learning の学習で重要な役割を果たす最適化手法

• Deep Leaning に限らず応用分野の広いツール

• ここ数年でアルゴリズムの改良が提案されているのでそれについて整理する

Page 3: 勾配降下法の最適化アルゴリズム

3勾配降下法

最適化 ( 関数の最小値を求めること ) の方法の一つ

関数が微分できることが条件

各点での微分 (= 勾配 ) をみて、一番勾配が急な方向に降りていく *

* 一番原始的な「最急降下法」の場合

Page 4: 勾配降下法の最適化アルゴリズム

4勾配が 0 の点

3 通りある

Page 5: 勾配降下法の最適化アルゴリズム

5すべての軸で二回微分が負

勾配 0 の点から遠ざかる方向に動くので、この点にハマって動けなくなることは確率的にはとても起こりにくい。

Page 6: 勾配降下法の最適化アルゴリズム

6すべての軸で二回微分が正

勾配 0 の点に近づく方向に動き、ここに集まる。

この点が関数の定義域全体で最小値なのかはわからないのだけど、それは勾配法ではどうしようもないので気にしない *

* 対処法:焼きなまし法とか初期値を変えて何度も計算とか

Page 7: 勾配降下法の最適化アルゴリズム

7二回微分の符号が異なる

関数の定義域が高次元の場合、このパターンが圧倒的に多い。 *これをうまく避けたい

* 10 次元の時、 99.8% ぐらい

Identifying and attacking the saddle point problem in high-dimensional non-convex optimizationhttps://arxiv.org/pdf/1406.2572v1.pdf

Page 8: 勾配降下法の最適化アルゴリズム

8Alec Radford による可視化

Page 9: 勾配降下法の最適化アルゴリズム

9Alec Radford による可視化

Page 10: 勾配降下法の最適化アルゴリズム

10各アルゴリズム解説

• 最急降下法

• モメンタム

• Nesterov accelerated gradient• Adagrad• Adadelta• Adam

Page 11: 勾配降下法の最適化アルゴリズム

11最急降下法

1. 現在位置での勾配を計算

2. その勾配に学習率を掛けたもので位置を更新

𝑥𝑡+1=𝑥𝑡−𝜂𝑔(𝑥𝑡)

Page 12: 勾配降下法の最適化アルゴリズム

12モメンタム

アイデア「慣性を付けたらいいんじゃない?」

1. 現在位置での勾配に学習率を掛ける

2. 前回の更新量に 0.9 ぐらいの減衰率を掛ける

3. 両方使って位置を更新

𝑥𝑡+1=𝑥𝑡+𝛾(𝑥𝑡−𝑥𝑡− 1)−𝜂𝑔 (𝑥𝑡)

Page 13: 勾配降下法の最適化アルゴリズム

13Nesterov accelerated gradientアイデア「一歩先の地点の勾配を使おう」

上 : モメンタム下 : NAG青矢印が矢印根元での勾配

図の簡略化のため学習率や減衰率は1 にした

Page 14: 勾配降下法の最適化アルゴリズム

14Nesterov accelerated gradient

数式的には として

モメンタム

NAG

Page 15: 勾配降下法の最適化アルゴリズム

15Adagrad

ここまでの話はいったん全部忘れて「そもそも学習率がどの軸でも同じって おかしいんじゃないの?」

特に確率的勾配降下法と組み合わせて使うことを考えた場合「まれにしか観測されない特徴」→「その軸方向の勾配が多くの場合ゼロ」

まれな特徴が観測されたときにはその軸方向には大きく学習したい

Page 16: 勾配降下法の最適化アルゴリズム

16Adagrad

そこで各軸方向の勾配の二乗和を溜めておいて学習率をその平方根 * で割ることでまれな特徴に対して学習率を高めにする。

学習率は他の方法と比べて 10 倍くらい大きくしておく。ゼロ除算を避けるために分母に小さい値を足す。

* RMS: Root mean square

Page 17: 勾配降下法の最適化アルゴリズム

17Adagrad の問題点

勾配の二乗は常に非負なので学習率は単調非増加。

学習初期に勾配のきついところを通るとそれ以降ずっとその軸方向の学習率が小さくなってしまう。

これでいいのか?

Page 18: 勾配降下法の最適化アルゴリズム

18Adadelta

アイデア 1 「過去の勾配の二乗和全部を使うんじゃなくて、最近のだけ使おう」

最近 n 件を取っておくのはメモリ消費が大きいので指数平滑移動平均を使う

ADADELTA: AN ADAPTIVE LEARNING RATE METHODhttps://arxiv.org/pdf/1212.5701v1.pdf

Page 19: 勾配降下法の最適化アルゴリズム

19Adadelta

アイデア 2 「単位を合わそう」

Adagrad に限らず、 SGD やモメンタムでも「単位があっていない」

Page 20: 勾配降下法の最適化アルゴリズム

20単位とは?

例えば 1 次元の関数 f で、 x の単位がメートル(m)y の単位がキログラム (kg) である場合を考える。

f の勾配の単位はもちろん kg/mSGD の更新式では m に kg/m を足していておかしい。 Adagrad では kg/m を kg/m で割って無単位量になっててやっぱりおかしい。

Page 21: 勾配降下法の最適化アルゴリズム

21ニュートン法

ニュートン法の場合は「 y の値を f の勾配で割ったもの」を x の更新に使う。

先ほどの例なら「 kg を kg/m で割ったもの」で m の値の更新をすることになる。

これなら単位はおかしくない。

Page 22: 勾配降下法の最適化アルゴリズム

22Adadelta の単位合わせ

「過去の x の更新差分の平均」を「過去の勾配の平均」で割って今の勾配を掛けたものをx の更新差分とする。→単位 OK

* RMS: Root mean square

Page 23: 勾配降下法の最適化アルゴリズム

23単位合わせのメリット

単位のあってない SGD では関数 f の最適化とf を単に 10 倍した関数の最適化とで振る舞いが違う (後者が 10 倍大きい幅で更新する )この差を吸収するのが「学習率」なる値で後者の関数の最適化において更新幅が大きくなりすぎないようにするためには 10 倍小さい学習率にする必要がある。

Adadelta では y の単位が影響しないので、この目的で学習率をチューニングする必要がない

Page 24: 勾配降下法の最適化アルゴリズム

24学習率不要

論文中の数式、上から最急降下法、モメンタム、

Adagrad 、 Adadelta 。 Adadelta だけ学習率η がないことに注目。

Page 25: 勾配降下法の最適化アルゴリズム

25Adam

adaptive moment estimation勾配の 1 乗を溜めこむモメンタム勾配の 2 乗を溜めこむ Adagradこれって要するに 1 次と 2 次のモーメント推定じゃないか!というのが Adam のアイデア

ADAM: A METHOD FOR STOCHASTIC OPTIMIZATIONhttps://arxiv.org/pdf/1412.6980v8.pdf

Page 26: 勾配降下法の最適化アルゴリズム

26アルゴリズム

Page 27: 勾配降下法の最適化アルゴリズム

27抜粋

m が 1 次のモーメント ( モメンタム相当 )v が 2 次のモーメント、これの平方を分母に置くのがAdagrad の「勾配の RMS を分母に置く」に相当。

* RMS: Root mean square

Page 28: 勾配降下法の最適化アルゴリズム

28Adam は単位おかしい

Adam は Adagrad と RMSProp から派生しているので、 Adadelta が指摘した「単位おかしい」問題はそのまま引き継いでしまっている。

Page 29: 勾配降下法の最適化アルゴリズム

29実験

Adam著者ら「 AdaDelta より Nesterov がよい」

Page 30: 勾配降下法の最適化アルゴリズム

30Adam筆者らによる解釈なぜ Nesterov が Adagrad よりよいのか?

CNN の実験では 2 次のモーメントがゼロにvanish2 次のモーメントしか使ってない Adagrad は無力

1 次のモーメントが収束の高速化に寄与したのではないか。

一方 1 次のモーメントを使っている Nesterovよりもさらに性能が良いのは「軸ごとの学習率」が効いているのではないか

Page 31: 勾配降下法の最適化アルゴリズム

31疑問点

「 CNN の実験では 2 次のモーメントがゼロにvanish 」

それ β が小さいとか α と ε の比がおかしいとかじゃないのか……?

β が小さいと過去のデータを素早く忘れすぎる。2 次のモーメントが ε に比べて小さい件は、 εを小さくして α も同率で小さくすれば済む話。

そもそも初期値依存の激しい問題で 1 回の実験結果を見て議論してもアレなので初期値とパラメータを変えて何度も実験してほしい。

Page 32: 勾配降下法の最適化アルゴリズム

32感想

Adam はモメンタム系と Adagrad の「各軸ごとの学習率」の良いとこどりをしているが、 Adadelta の「単位正しく」は取り込んでいない。

そこも取り込んだ手法が今後生まれるのかもしれない。