1.1K Views
April 12, 19
スライド概要
2019/04/12
Deep Learning JP:
http://deeplearning.jp/seminar-2/
DL輪読会資料
1次近似系MAMLとその理論的背景 Naruya Kondo, Matsuo Lab (B4) 1
背景 • メタ学習の流行 – 複数の似た問題に対して汎用的な能力を得てほしい – でも、後で特定のタスクには特化できてほしい • MAMLの流行(?) – メタ学習といえばまずはMAML • タスク普遍な、全パラメタの良い初期値を求める – すごく自然な発想 • MAMLは計算コストが高すぎるので1次近似する手法が出ている – ☆割と大事な計算を捨ててなぜうまくいくのか – ☆メタ的に見て良いローカルの更新とは何か – (個人的解釈)基本1次近似系を使っといた方が良さそう 2
発表内容 • 論文 – On First-Order Meta-Learning Algorithms(OpenAI, 2018) • https://arxiv.org/abs/1803.02999 – MAMLの一次近似手法FOMAMLを拡張した『Reptile』を提案 – 一次近似系MAMLを解析的/実験的に評価 – 後続研究が凄そう(方向性はそれぞれ少し違う) • Transferring Knowledge across Learning Processes(ICLR 2019 oral) • Bayesian Model-Agnostic Meta-Learning(NeurIPS 2018) • Auto-Meta: Automated Gradient Based Meta Learner Search(NeurIPS 2018) • 内容 – – – – 前提知識(メタ学習, joint training, MAML, FOMAML) 提案手法Reptile メタ更新の解釈(メタ勾配の向き, パラメタ空間内での振る舞い) 実験(Reptile v.s. MAML/FOMAML, Reptileの頑健性) 3
メタ学習 • 複数の似た問題に対して汎用的な能力を得てほしい – 様々な言語での文字認識 – 強化学習(様々な身体的パラメタ/様々な環境/様々な報酬(タスク)) – (汎用AI感?) • 全タスクでのエラーの期待値を最小化したい omniglot/Guided Meta-Policy Search 4
• 恐らく一番単純なmeta-learning手法 • どんなタスクも満遍なくこなせるよう、エラーの期待値を最小化 – Τ: 全train taskからサンプリング – 評価タスクでは、学習したθ or 少しチューニングしたθ’を使って解く • チューニングで精度が上がる保証は全く無い • 4本足歩行RLの例(あくまでイメージ) – どんな坂道でも歩けるよう、グローバルに良いリズムで足を繰り出す – 結局は平均的な道(≒平坦な道)でしっかり歩けるようにするだけ • 単純だけど、MAMLも半分joint training。 5
joint trainingとの比較を意識して書くと、 • 本当にやりたいのは、評価時のエラーの期待値の最小化 – 学習時(meta-train) • Τ_tr/Τ_val: train taskからサンプリングしたΤをさらに訓練用/評価用に分ける • inner_update & meta_updateを繰り返す。 – 評価時(meta-test) • 解きたいタスクのfew sample/few episodeでチューニング • 必ず良いチューニングができる==良い初期値が得られている。 https://www.slideshare.net/YoonhoLee4/on-firstorder-metalearning-algorithms 6
(問題設定がやや面倒なので省略) • sin波形状推定 – – 様々な(λ:振幅, θ:位相) == タスク 書くタスク10点与えられて(==train)、全定義域で予測(==test) • joint trainingだと、様々なタスクで学習したところで 定数関数f(x)=0が最適解。few sampleでのチューニングは無理。 • joint trainingはダメ。『評価時のエラーの期待値の最小化』が大事。 7
• 実利用上の話、 MAMLはかなりのメモリを消費することが知られている。 – 結果から見れば無駄に計算コストが高い – inner_updateの回数にほぼ比例してメモリが持ってかれる(後述) • そのため多くのMAML実装ではfew_stepなinner_updateが一般的(主観) • MAMLのmeta-train時の式を一次近似して使うと良いらしい。 – (MAMLが初めに提案された論文にも命名書かれている) – 後にFOMAML(first-order MAML)と命名される 8
• 初期パラメタφの更新 – 二次勾配(L’’(φ))が登場する • lossをパラメタ数nの2乗回微分(?)←重たい 後で囲った 部分それぞ れでα^2以 上の項を無 視してみる – L_i: iステップ目でのloss, 9
• 二次勾配全部無視(Ui(φi)=φi, →Lkはφ1で発生) φ2 φ3 φ5 φ6 φ1 φ4 • 一番最後のloss == train taskのvalでのlossのみ使う – inner_update時の勾配を保存しない。実装的に自然な発想。 – 恐らくfew stepな更新を前提にしているのでうまくいく 10
• inner_update時の勾配を全部合成する – こちらも二次勾配は無視。 – パラメータ空間上の動きを見ると こちらの方が自然。 – FOMAMLと比べて計算コストはほぼ増えない – step数が増えても問題ない • 別の解釈 – 最後にたどり着いたパラメタとの差の方向に進む • MAMLの直接的な近似ではない(と思う) 11
transduction: テスト時に渡すデータが1つか複数か(複数の方が簡単) • 遜色なし。(勝手な解釈→)難しいタスクだと、Reptile≧MAML≧FOMAML 12
メタ更新の解釈 13
• ヘッセ行列をまるごと無視していいのか • MAML/FOMAML/Reptileの勾配方向の差には どのような意味があるのか 後で囲った 部分それぞ れでα^2以 上の項を無 視してみる 14
メタ勾配の向き • まず、g_i – Loss関数に依存するが、φ1周りでテイラー展開して α^2以上の項を無視してすべてφ1周りの勾配で表す • 全部φ1周りを計算すれば各地点での勾配を集めて処理しやすくなる 15
メタ勾配の向き • 前2枚のスライドの内容 • を合わせて、 16
メタ勾配の向き • ここから一旦k=2まで(inner_update1回+評価1回)を考える。 • FOMAML/Reptileについても、 ( ) • から同様に – ただし 17
メタ勾配の向き • 勾配の更新は実際には、複数タスクでの勾配の平均を取る – 平均をとると面白い(平均を取ることに大きな意味がある) 18
メタ勾配の向き • g_barの平均 • H_bar gの平均 19
メタ勾配の向き • gi_barの平均 – 『− AvgGrad』方向はjoint trainingに相当している • 「φ1をどっちに更新すればlossが小さくなったのか」 • それがチューニングしやすいかは考慮されてない 20
メタ勾配の向き • Hi_bar gjの平均 – 『AvgGradInner』方向は、各inner_update時の(各ミニバッチ間の)勾配の内積の値 を上げている • 同じタスクなのに違う方向に更新することは過適合している証(たぶん) • タスクに共通な汎化性能の向上に寄与する 21
メタ勾配の向き • 平均を取ると、 • FOMAMLがMAMLから捨てたのはAvgGradInner一回分 – 同じiter回数ならその分だけ性能が落ちる • ReptileはMAMLにAvgGradを+1回、AvgGradInnerを-1回 – Reptileは厳密にはMAMLの一次近似ではないので良し悪しは自明でない。 – AvgGradInnerを増やすには…→inner_update数を増やす 22
メタ勾配の向き • kステップ先まで伸ばすと、 • どの手法も伸ばせば伸ばすほどAvgGradInnerの 割合が高くなる – 伸ばしておけば汎化性があがると考えられる • Reptileはエラーの期待値を高速に下げる効果も この式から期待できる。 23
パラメタ空間内での探索時の振る舞い • Reptileは、パラメタ空間内でユークリッド距離的に最適な場所へ行くことが 示せる • Reptileは暗黙的に以下を行っている(距離の期待値の最小化) – Wτ: あるタスクτの最適なパラメタのリスト(多様体?) • 最適なパラメタは無数にある(入れ替え可能なパラメタはたくさんあるので) W1 W2 24
パラメタ空間内での探索時の振る舞い • 現在の初期値φに最も近いWτ内のパラメタをP_Wτとすると • 一つ一つのタスクに注目すると、 • 実際にはP_Wτはわからないので、 これをφkに置き換える • これはReptileのmeta_updateの式と同じ • MAML/FOMAMLには無い良さ 25
実験 26
• inner_loop時に、ミニバッチを4 つ、対応するlossとgradをそれ ぞれ計算し、 どのgradを使ってmeta_update するかを変える実験。 • gk: FOMAML • Σgi: Reptile • g4<g1+g2+g3+g4 • g3<g1+g2+g3 – Reptileが優位 • g2>g1+g2 – step数が少なくReptileでは AvgGradInnerが足りな かったと考えられる 27
の頑健性 • (a)inner_updateの数を変えた実験 – separate-tail/shared-tail: train-taskをさらに train/valに分ける(MAMLでの標準的な方法) か否か – cycling/replacement: ミニバッチを作り直さ ずに使いまわす/ランダムサンプリングし直す か • Reptileの優位性 – タスクをさらにtrain/valに分ける必要なし – 同じミニバッチを使ってinner_updateを繰り 返してもok • gradを足し合わせるからあまり問題ない 28
の頑健性 • (b)batch_sizeを変えた実験 – 各タスクに含まれるデータ数:25個 – inner_update4回 • データの数が少ないので、バッチサイズを 増やすと同じデータを使う機会が増える • (a)と同じ理由でReptileだと問題ない 29
の頑健性 • (c)FOMAMLに不利なパラメタを使ったの では? • →meta_update時のstep sizeをどう変え ても悪かった – inner_update4回, batch_size=100 • FOMAMLは、少ないstepで良いθに着い た場合に最後の勾配の方向が定まらない ため→Reptile良いよね 30
まとめ • 一次近似MAMLベースの手法Reptileを提案 – 速い収束&頑健性が期待できる • 良い(MAML/勾配法ベースの)メタ学習法とは何かを示した – エラー期待値の最小化 – ステップ間の内積の最大化 – 解探索時の振る舞い • MAMLを使う際は一旦一次近似版を考えてみるべき 31