---
title: [DL輪読会]1次近似系MAMLとその理論的背景
tags:  #deep learning  
author: [Deep Learning JP](https://www.docswell.com/user/DeepLearning2023)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/4JQ8LYX97P.jpg?width=480
description: 2019/04/12 Deep Learning JP:  http://deeplearning.jp/seminar-2/
published: April 12, 19
canonical: https://www.docswell.com/s/DeepLearning2023/KP9YPG-dl1maml
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/4JQ8LYX97P.jpg)

1次近似系MAMLとその理論的背景
Naruya Kondo, Matsuo Lab (B4)
1


# Page. 2

![Page Image](https://bcdn.docswell.com/page/K742DW2RJ1.jpg)

背景
• メタ学習の流行
– 複数の似た問題に対して汎用的な能力を得てほしい
– でも、後で特定のタスクには特化できてほしい
• MAMLの流行(?)
– メタ学習といえばまずはMAML
• タスク普遍な、全パラメタの良い初期値を求める
– すごく自然な発想
• MAMLは計算コストが高すぎるので1次近似する手法が出ている
– ☆割と大事な計算を捨ててなぜうまくいくのか
– ☆メタ的に見て良いローカルの更新とは何か
– (個人的解釈)基本1次近似系を使っといた方が良さそう
2


# Page. 3

![Page Image](https://bcdn.docswell.com/page/LJ1MZYMVEG.jpg)

発表内容
• 論文
– 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


# Page. 4

![Page Image](https://bcdn.docswell.com/page/GJW39G33J2.jpg)

メタ学習
• 複数の似た問題に対して汎用的な能力を得てほしい
– 様々な言語での文字認識
– 強化学習(様々な身体的パラメタ/様々な環境/様々な報酬(タスク))
– (汎用AI感?)
• 全タスクでのエラーの期待値を最小化したい
omniglot/Guided Meta-Policy Search
4


# Page. 5

![Page Image](https://bcdn.docswell.com/page/4EZV9LVGJ3.jpg)

• 恐らく一番単純なmeta-learning手法
• どんなタスクも満遍なくこなせるよう、エラーの期待値を最小化
– Τ: 全train taskからサンプリング
– 評価タスクでは、学習したθ or 少しチューニングしたθ’を使って解く
• チューニングで精度が上がる保証は全く無い
• 4本足歩行RLの例(あくまでイメージ)
– どんな坂道でも歩けるよう、グローバルに良いリズムで足を繰り出す
– 結局は平均的な道(≒平坦な道)でしっかり歩けるようにするだけ
• 単純だけど、MAMLも半分joint training。
5


# Page. 6

![Page Image](https://bcdn.docswell.com/page/Y765KW5QEV.jpg)

joint trainingとの比較を意識して書くと、
• 本当にやりたいのは、評価時のエラーの期待値の最小化
– 学習時(meta-train)
• Τ_tr/Τ_val: train taskからサンプリングしたΤをさらに訓練用/評価用に分ける
• inner_update &amp; meta_updateを繰り返す。
– 評価時(meta-test)
• 解きたいタスクのfew sample/few episodeでチューニング
• 必ず良いチューニングができる==良い初期値が得られている。
https://www.slideshare.net/YoonhoLee4/on-firstorder-metalearning-algorithms
6


# Page. 7

![Page Image](https://bcdn.docswell.com/page/G75YPMY274.jpg)

(問題設定がやや面倒なので省略)
• sin波形状推定
–
–
様々な(λ:振幅, θ:位相) == タスク
書くタスク10点与えられて(==train)、全定義域で予測(==test)
• joint trainingだと、様々なタスクで学習したところで
定数関数f(x)=0が最適解。few sampleでのチューニングは無理。
• joint trainingはダメ。『評価時のエラーの期待値の最小化』が大事。
7


# Page. 8

![Page Image](https://bcdn.docswell.com/page/9J2G69G1JR.jpg)

• 実利用上の話、
MAMLはかなりのメモリを消費することが知られている。
– 結果から見れば無駄に計算コストが高い
– inner_updateの回数にほぼ比例してメモリが持ってかれる(後述)
• そのため多くのMAML実装ではfew_stepなinner_updateが一般的(主観)
• MAMLのmeta-train時の式を一次近似して使うと良いらしい。
– (MAMLが初めに提案された論文にも命名書かれている)
– 後にFOMAML(first-order MAML)と命名される
8


# Page. 9

![Page Image](https://bcdn.docswell.com/page/DEYV94V4EM.jpg)

• 初期パラメタφの更新
– 二次勾配(L’’(φ))が登場する
• lossをパラメタ数nの2乗回微分(?)←重たい
後で囲った
部分それぞ
れでα^2以
上の項を無
視してみる
– L_i: iステップ目でのloss,
9


# Page. 10

![Page Image](https://bcdn.docswell.com/page/VJNMLYM678.jpg)

• 二次勾配全部無視(Ui(φi)=φi, →Lkはφ1で発生)
φ2
φ3
φ5
φ6
φ1
φ4
• 一番最後のloss == train taskのvalでのlossのみ使う
– inner_update時の勾配を保存しない。実装的に自然な発想。
– 恐らくfew stepな更新を前提にしているのでうまくいく
10


# Page. 11

![Page Image](https://bcdn.docswell.com/page/YE9N4PNRE3.jpg)

• inner_update時の勾配を全部合成する
– こちらも二次勾配は無視。
– パラメータ空間上の動きを見ると
こちらの方が自然。
– FOMAMLと比べて計算コストはほぼ増えない
– step数が増えても問題ない
• 別の解釈
– 最後にたどり着いたパラメタとの差の方向に進む
• MAMLの直接的な近似ではない(と思う)
11


# Page. 12

![Page Image](https://bcdn.docswell.com/page/GE8KQDKG7D.jpg)

transduction: テスト時に渡すデータが1つか複数か(複数の方が簡単)
• 遜色なし。(勝手な解釈→)難しいタスクだと、Reptile≧MAML≧FOMAML
12


# Page. 13

![Page Image](https://bcdn.docswell.com/page/LELZXMZXJR.jpg)

メタ更新の解釈
13


# Page. 14

![Page Image](https://bcdn.docswell.com/page/4JMVLYV3JW.jpg)

• ヘッセ行列をまるごと無視していいのか
• MAML/FOMAML/Reptileの勾配方向の差には
どのような意味があるのか
後で囲った
部分それぞ
れでα^2以
上の項を無
視してみる
14


# Page. 15

![Page Image](https://bcdn.docswell.com/page/PJR2K92RE9.jpg)

メタ勾配の向き
• まず、g_i
– Loss関数に依存するが、φ1周りでテイラー展開して
α^2以上の項を無視してすべてφ1周りの勾配で表す
• 全部φ1周りを計算すれば各地点での勾配を集めて処理しやすくなる
15


# Page. 16

![Page Image](https://bcdn.docswell.com/page/PEXDLQDY7X.jpg)

メタ勾配の向き
• 前2枚のスライドの内容
• を合わせて、
16


# Page. 17

![Page Image](https://bcdn.docswell.com/page/3EKXL9X47D.jpg)

メタ勾配の向き
• ここから一旦k=2まで(inner_update1回+評価1回)を考える。
• FOMAML/Reptileについても、
(
)
• から同様に
– ただし
17


# Page. 18

![Page Image](https://bcdn.docswell.com/page/L7353W5DE5.jpg)

メタ勾配の向き
• 勾配の更新は実際には、複数タスクでの勾配の平均を取る
– 平均をとると面白い(平均を取ることに大きな意味がある)
18


# Page. 19

![Page Image](https://bcdn.docswell.com/page/87DD4KD27G.jpg)

メタ勾配の向き
• g_barの平均
• H_bar gの平均
19


# Page. 20

![Page Image](https://bcdn.docswell.com/page/VJPXMKXL78.jpg)

メタ勾配の向き
• gi_barの平均
– 『− AvgGrad』方向はjoint trainingに相当している
• 「φ1をどっちに更新すればlossが小さくなったのか」
• それがチューニングしやすいかは考慮されてない
20


# Page. 21

![Page Image](https://bcdn.docswell.com/page/2EVL9VL6JQ.jpg)

メタ勾配の向き
• Hi_bar gjの平均
– 『AvgGradInner』方向は、各inner_update時の(各ミニバッチ間の)勾配の内積の値
を上げている
• 同じタスクなのに違う方向に更新することは過適合している証(たぶん)
• タスクに共通な汎化性能の向上に寄与する
21


# Page. 22

![Page Image](https://bcdn.docswell.com/page/57GXZLX2EL.jpg)

メタ勾配の向き
• 平均を取ると、
• FOMAMLがMAMLから捨てたのはAvgGradInner一回分
– 同じiter回数ならその分だけ性能が落ちる
• ReptileはMAMLにAvgGradを+1回、AvgGradInnerを-1回
– Reptileは厳密にはMAMLの一次近似ではないので良し悪しは自明でない。
– AvgGradInnerを増やすには…→inner_update数を増やす
22


# Page. 23

![Page Image](https://bcdn.docswell.com/page/4EQ8LY89JP.jpg)

メタ勾配の向き
• kステップ先まで伸ばすと、
• どの手法も伸ばせば伸ばすほどAvgGradInnerの
割合が高くなる
– 伸ばしておけば汎化性があがると考えられる
• Reptileはエラーの期待値を高速に下げる効果も
この式から期待できる。
23


# Page. 24

![Page Image](https://bcdn.docswell.com/page/KJ42DW9RE1.jpg)

パラメタ空間内での探索時の振る舞い
• Reptileは、パラメタ空間内でユークリッド距離的に最適な場所へ行くことが
示せる
• Reptileは暗黙的に以下を行っている(距離の期待値の最小化)
– Wτ: あるタスクτの最適なパラメタのリスト(多様体?)
• 最適なパラメタは無数にある(入れ替え可能なパラメタはたくさんあるので)
W1
W2
24


# Page. 25

![Page Image](https://bcdn.docswell.com/page/LE1MZYKV7G.jpg)

パラメタ空間内での探索時の振る舞い
• 現在の初期値φに最も近いWτ内のパラメタをP_Wτとすると
• 一つ一つのタスクに注目すると、
• 実際にはP_Wτはわからないので、
これをφkに置き換える
• これはReptileのmeta_updateの式と同じ
• MAML/FOMAMLには無い良さ
25


# Page. 26

![Page Image](https://bcdn.docswell.com/page/GEW39GD3E2.jpg)

実験
26


# Page. 27

![Page Image](https://bcdn.docswell.com/page/47ZV9LGGE3.jpg)

• inner_loop時に、ミニバッチを4
つ、対応するlossとgradをそれ
ぞれ計算し、
どのgradを使ってmeta_update
するかを変える実験。
• gk: FOMAML
• Σgi: Reptile
• g4&lt;g1+g2+g3+g4
• g3&lt;g1+g2+g3
– Reptileが優位
• g2&gt;g1+g2
– step数が少なくReptileでは
AvgGradInnerが足りな
かったと考えられる
27


# Page. 28

![Page Image](https://bcdn.docswell.com/page/YJ65KWYQ7V.jpg)

の頑健性
• (a)inner_updateの数を変えた実験
– separate-tail/shared-tail: train-taskをさらに
train/valに分ける(MAMLでの標準的な方法)
か否か
– cycling/replacement: ミニバッチを作り直さ
ずに使いまわす/ランダムサンプリングし直す
か
• Reptileの優位性
– タスクをさらにtrain/valに分ける必要なし
– 同じミニバッチを使ってinner_updateを繰り
返してもok
• gradを足し合わせるからあまり問題ない
28


# Page. 29

![Page Image](https://bcdn.docswell.com/page/GJ5YPMG2J4.jpg)

の頑健性
• (b)batch_sizeを変えた実験
– 各タスクに含まれるデータ数:25個
– inner_update4回
• データの数が少ないので、バッチサイズを
増やすと同じデータを使う機会が増える
• (a)と同じ理由でReptileだと問題ない
29


# Page. 30

![Page Image](https://bcdn.docswell.com/page/LE353WR1J5.jpg)

の頑健性
• (c)FOMAMLに不利なパラメタを使ったの
では?
• →meta_update時のstep sizeをどう変え
ても悪かった
– inner_update4回, batch_size=100
• FOMAMLは、少ないstepで良いθに着い
た場合に最後の勾配の方向が定まらない
ため→Reptile良いよね
30


# Page. 31

![Page Image](https://bcdn.docswell.com/page/8EDD4KYKEG.jpg)

まとめ
• 一次近似MAMLベースの手法Reptileを提案
– 速い収束&amp;頑健性が期待できる
• 良い(MAML/勾配法ベースの)メタ学習法とは何かを示した
– エラー期待値の最小化
– ステップ間の内積の最大化
– 解探索時の振る舞い
• MAMLを使う際は一旦一次近似版を考えてみるべき
31


