プレーンなSGDから最近のアルゴリズム(Adabound)までの流れをまとめています。
確率的勾配法のはなし2019/04/17 Kaggle もくもくかい@nyker_goto
View Slide
じこしょうかい@nyker_goto (twitter)京都大学院, 最適化数理 (修論は確率的勾配法関連)零細ベンチャー Atmaでデータサイエンティスト (新卒二年目)人大募集中です!!!今日は確率的勾配法の歴史と最近の論文 Adabound をざっくり紹介します2
はじめにおことわりこのスライドの数式は若干適当です3
なんで適当か● 数式追いかけてもあんまりおもしろくない○ 正直あまり本質的でもなかったり(変形すればいいだけなので○ なので収束性とかの込み入った話はしないです● SGD の「ノリ」をちょっとでも知ってほしいという気持です○ SGD は楽しいのです以上のねらいのため, 出来る限り一般化を避けた表記に変えています。そのため論文の数式よりも具体的になっていて表記が若干違います。4
早速ですが Deep の optimizer って何使ってますか !?5
Optimizer なにつかってますか !?● SGD○ Nesterov の加速法○ Momentum● Adagrad● RMSProp● Adadelta● Adam● Adabound (NEW!) …僕は SGD + Nesterov + Momentum (0.8) とかが好きです6図1. 勝手にとってきた Nesterov 先生
しんぷるなSGDt ステップ目で全体のうちひとつのデータの勾配 g を使って更新。たんじゅん。Gradient Descent (最急降下法) だと全データ N 使うのがちがうとこSGD (Stochastic Gradient Descent ちなみに: Gradient Descent7
ちょっと一般化今後の議論のため天下り的にちょっと一般化します。SGD は毎回勾配(やそれに似た方向) m に対してあるステップサイズと補正ベクトル Vtをかけたような動きをすりゃいいので…と表せます。これを基本形と呼ぶことにします(V と m はアダマール積)8
SGD再掲この基本形で SGD を書き直すと以下のような感じ。基本形 SGD9● SGD は学習率をいじると収束が早いことが実験的に知られている○ 最初大きくあとで小さくとかがポピュラー● できれば人がいじらずに勝手に良い学習率で更新してほしい
適合的 (adaptive) なアルゴリズム● Adagrad (2010)● ADAM (2015)● Adabound (2019)10
Q. 適合的 (adaptive) って何?11
A. いい感じに学習率(や勾配)を変えてくれるような方法のこと12
Adagrad (2010)Adaptive Subgradient Methods for Online Learning and Stochastic Optimization(2010)発想● 学習率がすべての要素で同じなのは不自然なのでは?○ 毎回大きな勾配を持っているような要素ではあまり大きな学習率をとりたくない○ 反対にほとんど毎回ゼロの勾配を持つものはたまに勾配があるとき大きく更新したい● 要素ごとにいい感じの学習率で更新させたい13
Adagrad (2010)うごく方向 m は SGD と同じSGD のときとの 差分は Vt にあり過去の勾配の二乗を足したもの平均値で割り算● 過去に大きな勾配を持っている要素はステップサイズが小さくなる。● 要素ごとにいい感じの lr を選べる。基本形Adagrad14[note] 実は Vt は BFGS などの準ニュートン法的な発想で導入されていたりします
Adagrad の問題点● よーく V を見ると過去の値すべての平均をとっている● 一度とても大きい勾配に遭遇すると再度 V が小さくなる (= lr が大きくなる)ことはなかなか無い○ Deep のような非凸関数だと局所解に捕まったりする。そのときは step size を大きくして抜けだしたい。けどできない。基本形Adagrad15
みんなだいすき ADAM 先生 (2015)16発想● V の計算を指数で重み付けするので最近の勾配が小さいと大きい lr を取れる● 勾配も過去の情報も使うようにしたらいいんじゃない? (Momentum的な発想)● 単に足して平均取るんじゃなくてついでに期待値でも一致するよう 1- β を掛け算しとくといいのでは?
ADAM の問題点● 実は どんな lr をとったとしても, 凸な問題で収束しないような場合があります(SGDだと収束します)。○ ニューラルネットワークは非凸関数なので直接的には影響しませんが解のごく近傍では凸に近似できるのでちょっと気持ちがわるい○ Adabound 論文中では学習が進んだ終盤で SGD にくらべ adam の性能がわるくなるのはこのためではないか? と指摘されています要するに最初は adam 的な更新が良いけれど学習終盤(解近傍)の挙動は微妙むしろ適合的でない SGD のほうが理論的にも良い (余計なことしないほうが良い)17
じゃあ ADAM からSGD にかわるようなアルゴリズムにすればよくない?18
Adabound (NEW! 2019)● V, m (補正項と方向) は adam と一緒● 違うのは学習率を Clip しているとこ○ 最大最小を決めることで極端な学習率にならなくなる○ 最大最小を特定の値に収束させるような関数を使えば学習終盤でスムーズにSGD に置きかわる(左の例なら lr=0.1 の SGD )最大最小の一例@論文中19
数値実験● DenseNet121 で CIFAR-10● 強いよね。序盤、中盤、終盤、隙がない。(終盤で SGD Momentum に追いつかれているものの序盤は圧倒的)20
まとめ● 適合的な手法の発想はどれも似ている。割とシンプル。● Adabound は SGD と Adam のいいとこ取り。これから流行りそう21
参考文献● Duchi, John and Hazan, Elad and Singer, Yoram / Adaptive Subgradient Methods for Online Learningand Stochastic Optimization. https://dl.acm.org/citation.cfm?id=2021068adagrad の論文。結構最適化よりなのでむずい。● Sebastian Ruder. An overview of gradient descent optimization algorithms.https://arxiv.org/abs/1609.04747勾配法とか確率的勾配法のサーベイ。わかりよい。● Liangchen Luo, Yuanhao Xiong, Yan Liu, Xu Sun. Adaptive Gradient Methods with Dynamic Bound ofLearning Rate. https://openreview.net/forum?id=Bkg3g2R9FXadabound 論文22