【深度学习入门到进阶】必看系列,含激活函数、优化策略、损失函数、模型调优、归一化算法、卷积模型、序列模型、预训练模型、对抗神经网络等
专栏详细介绍:【深度学习入门到进阶】必看系列,含激活函数、优化策略、损失函数、模型调优、归一化算法、卷积模型、序列模型、预训练模型、对抗神经网络等
本专栏主要方便入门同学快速掌握相关知识。后续会持续把深度学习涉及知识原理分析给大家,让大家在项目实操的同时也能知识储备,知其然、知其所以然、知何由以知其所以然。
声明:部分项目为网络经典项目方便大家快速学习,后续会不断增添实战环节(比赛、论文、现实应用等)
专栏订阅:
- 深度学习入门到进阶专栏
- 深度学习应用项目实战篇
深度学习应用篇-元学习[14]:基于优化的元学习-MAML模型、LEO模型、Reptile模型
1.Model-Agnostic Meta-Learning
Model-Agnostic Meta-Learning (MAML):
与模型无关的元学习,可兼容于任何一种采用梯度下降算法的模型。
MAML 通过少量的数据寻找一个合适的初始值范围,从而改变梯度下降的方向,
找到对任务更加敏感的初始参数,
使得模型能够在有限的数据集上快速拟合,并获得一个不错的效果。
该方法可以用于回归、分类以及强化学习。
该模型的Paddle实现请参考链接:PaddleRec版本
1.1 MAML
MAML 是典型的双层优化结构,其内层和外层的优化方式如下:
1.1.1 MAML 内层优化方式
内层优化涉及到基学习器,从任务分布 p ( T ) p(T) p(T) 中随机采样第 i i i 个任务 T i T_{i} Ti。任务 T i T_{i} Ti 上,基学习器的目标函数是:
min ϕ L T i ( f ϕ ) \min _{\phi} L_{T_{i}}\left(f_{\phi}\right) ϕminLTi(fϕ)
其中, f ϕ f_{\phi} fϕ 是基学习器, ϕ \phi ϕ 是基学习器参数, L T i ( f ϕ ) L_{T_{i}}\left(f_{\phi}\right) LTi(fϕ) 是基学习器在 T i T_{i} Ti 上的损失。更新基学习器参数:
θ i N = θ i N − 1 − α [ ∇ ϕ L T i ( f ϕ ) ] ϕ = θ i N − 1 \theta_{i}^{N}=\theta_{i}^{N-1}-\alpha\left[\nabla_{\phi} L_{T_{i}}\left(f_{\phi}\right)\right]_{\phi=\theta_{i}^{N-1}} θiN=θiN−1−α[∇ϕLTi(fϕ)]ϕ=θiN−1
其中, θ \theta θ 是元学习器提供给基学习器的参数初始值 ϕ = θ \phi=\theta ϕ=θ,在任务 T i T_{i} Ti 上更新 N N N 后 ϕ = θ i N − 1 \phi=\theta_{i}^{N-1} ϕ=θiN−1.
1.1.2 MAML 外层优化方式
外层优化涉及到元学习器,将 θ i N \theta_{i}^{N} θiN 反馈给元学匀器,此时元目标函数是:
min θ ∑ T i ∼ p ( T ) L T i ( f θ i N ) \min _{\theta} \sum_{T_{i}\sim p(T)} L_{T_{i}}\left(f_{\theta_{i}^{N}}\right) θminTi∼p(T)∑LTi(fθiN)
元目标函数是所有任务上验证集损失和。更新元学习器参数:
θ ← θ − β ∑ T i ∼ p ( T ) ∇ θ [ L T i ( f ϕ ) ] ϕ = θ i N \theta \leftarrow \theta-\beta \sum_{T_{i} \sim p(T)} \nabla_{\theta}\left[L_{T_{i}}\left(f_{\phi}\right)\right]_{\phi=\theta_{i}^{N}} θ←θ−βTi∼p(T)∑∇θ[LTi(fϕ)]ϕ=θiN
1.2 MAML 算法流程
- randomly initialize θ \theta θ
- while not done do:
- sample batch of tasks T i ∼ p ( T ) T_i \sim p(T) Ti∼p(T)
- for all T i T_i Ti do:
- evaluate ∇ ϕ L T i ( f ϕ ) \nabla_{\phi}L_{T_{i}}\left(f_{\phi}\right) ∇ϕLTi(fϕ) with respect to K examples
- compute adapted parameters with gradient descent: $\theta_{i}{N}=\theta_{i}{N-1} -\alpha\left[\nabla_{\phi}L_{T_{i}}\left(f_{\phi}\right)\right]{\phi=\theta{i}^{N-1}} $
- end for
- update $\theta \leftarrow \theta-\beta \sum_{T_{i} \sim p(T)} \nabla_{\theta}\left[L_{T_{i}}\left(f_{\phi}\right)\right]{\phi=\theta{i}^{N}} $
- end while
MAML 中执行了两次梯度下降 (gradient by gradient),分别作用在基学习器和元学习器上。图1给出了 MAML 中特定任务参数 θ i ∗ \theta_{i}^{*} θi∗ 和元级参数 θ \theta θ 的更新过程。
1.3 MAML 模型结构
MAML 是一种与模型无关的元学习方法,可以适用于任何基于梯度优化的模型结构。
基准模型:4 modules with a 3
×
\times
× 3 convolutions and 64 filters,
followed by batch normalization,
a ReLU nonlinearity,
and 2
×
\times
× 2 max-pooling。
1.4 MAML 分类结果
Method | 5-way 1-shot | 5-way 5-shot | 20-way 1-shot | 20-way 5-shot |
---|---|---|---|---|
MANN, no conv (Santoro et al., 2016) | 82.8 % \% % | 94.9 % \% % | – | – |
MAML, no conv | 89.7 ± \pm ± 1.1 % \% % | 97.5 ± \pm ± 0.6 % \% % | – | – |
Siamese nets (Koch, 2015) | 97.3 % \% % | 98.4 % \% % | 88.2 % \% % | 97.0 % \% % |
matching nets (Vinyals et al., 2016) | 98.1 % \% % | 98.9 % \% % | 93.8 % \% % | 98.5 % \% % |
neural statistician (Edwards & Storkey, 2017) | 98.1 % \% % | 99.5 % \% % | 93.2 % \% % | 98.1 % \% % |
memory mod. (Kaiser et al., 2017) | 98.4 % \% % | 99.6 % \% % | 95.0 % \% % | 98.6 % \% % |
MAML | 98.7 ± \pm ± 0.4 % \% % | 99.9 ± \pm ± 0.1 % \% % | 95.8 ± \pm ± 0.3 % \% % | 98.9 ± \pm ± 0.2 % \% % |
Method | 5-way 1-shot | 5-way 5-shot |
---|---|---|
fine-tuning baseline | 28.86 ± \pm ± 0.54 % \% % | 49.79 ± \pm ± 0.79 % \% % |
nearest neighbor baseline | 41.08 ± \pm ± 0.70 % \% % | 51.04 ± \pm ± 0.65 % \% % |
matching nets (Vinyals et al., 2016) | 43.56 ± \pm ± 0.84 % \% % | 55.31 ± \pm ± 0.73 % \% % |
meta-learner LSTM (Ravi & Larochelle, 2017) | 43.44 ± \pm ± 0.77 % \% % | 60.60 ± \pm ± 0.71 % \% % |
MAML, first order approx. | 48.07 ± \pm ± 1.75 % \% % | 63.15 ± \pm ± 0.91 % \% % |
MAML | 48.70 ± \pm ± 1.84 % \% % | 63.11 ± \pm ± 0.92 % \% % |
1.5 MAML 的优缺点
优点
-
适用于任何基于梯度优化的模型结构。
-
双层优化结构,提升模型精度和泛化能力,避免过拟合。
缺点
- 存在二阶导数计算
1.6 对 MAML 的探讨
-
每个任务上的基学习器必须是一样的,对于差别很大的任务,最切合任务的基学习器可能会变化,那么就不能用 MAML 来解决这类问题。
-
MAML 适用于所有基于随机梯度算法求解的基学习器,这意味着参数都是连续的,无法考虑离散的参数。对于差别较大的任务,往往需要更新网络结构。使用 MAML 无法完成这样的结构更新。
-
MAML 使用的损失函数都是可求导的,这样才能使用随机梯度算法来快速优化求解,损失函数中不能有不可求导的奇异点,否则会导致优化求解不稳定。
-
MAML 中考虑的新任务都是相似的任务,所以没有对任务进行分类,也没有计算任务之间的距离度量。对每一类任务单独更新其参数初始值,每一类任务的参数初始值不同,这些在 MAML 中都没有考虑。
- 参考文献
[1] Model-Agnostic Meta-Learning for Fast Adaptation of Deep Networks.
2.Latent Embedding Optimization
Latent Embedding Optimization (LEO) 学习模型参数的低维潜在嵌入,并在这个低维潜在空间中执行基于优化的元学习,将基于梯度的自适应过程与模型参数的基础高维空间分离。
2.1 LEO
在元学习器中,使用 SGD 最小化任务验证集损失函数,
使得模型的泛化能力最大化,计算元参数,元学习器将元参数输入基础学习器,
继而,基础学习器最小化任务训练集损失函数,快速给出任务上的预测结果。
LEO 结构如图1所示。
图1 LEO 结构图。
D
t
r
D^{\mathrm{tr}}
Dtr 是任务
ε
\varepsilon
ε 的 support set,
D
v
a
l
D^{\mathrm{val}}
Dval 是任务
ε
\varepsilon
ε 的 query set,
z
z
z 是通过编码器计算的
N
N
N 个类别的类别特征,
f
θ
f_{\theta}
fθ 是基学习器,
θ
\theta
θ 是基学习器参数,
L
t
r
=
f
θ
(
D
t
r
)
L^{\mathrm{tr}}=f_{\theta}\left( D^{\mathrm{tr}}\right)
Ltr=fθ(Dtr),
L
v
a
l
=
f
θ
(
D
v
a
l
)
L^{\mathrm{val}}=f_{\theta}\left( D^{\mathrm{val}}\right)
Lval=fθ(Dval)。
LEO 包括基础学习器和元学习器,还包括编码器和解码器。
在基础学习器中,编码器将高维输入数据映射成特征向量,
解码器将输入数据的特征向量映射成输入数据属于各个类别的概率值,
基础学习器使用元学习器提供的元参数进行参数更新,给出数据标注的预测结果。
元学习器为基础学习器的编码器和解码器提供元参数,
元参数包括特征提取模型的参数、编码器的参数、解码器的参数等,
通过最小化所有任务上的泛化误差,更新元参数。
2.2 基础学习器
编码器和解码器都在基础学习器中,用于计算输入数据属于每个类别的概率值,
进而对输入数据进行分类。
元学习器提供编码器和解码器中的参数,基础学习器快速的使用编码器和解码器计算输入数据的分类。
任务训练完成后,基础学习器将每个类别数据的特征向量和任务
ε
\varepsilon
ε 的基础学习器参数
θ
ε
\boldsymbol{\theta}_{\varepsilon}
θε 输入元学习器,
元学习器使用这些信息更新元参数。
2.2.1 编码器
编码器模型包括两个主要部分:编码器和关系网络。
编码器
g
ϕ
e
g_{\phi_{e}}
gϕe ,其中
ϕ
e
\phi_{e}
ϕe 是编码器的可训练参数,
其功能是将第
n
n
n 个类别的输入数据映射成第
n
n
n 个类别的特征向量。
关系网络
g
ϕ
r
g_{\phi_{r}}
gϕr ,其中
ϕ
r
\phi_{r}
ϕr 是关系网络的可训练参数,
其功能是计算特征之间的距离。
第
n
n
n 个类别的输入数据的特征记为
z
n
z_{n}
zn 。
对于输入数据,首先,使用编码器
g
ϕ
e
g_{\phi_{e}}
gϕe 对属于第
n
n
n 个类别的输入数据进行特征提取;
然后,使用关系网络
g
ϕ
r
g_{\phi_r}
gϕr 计算特征之间的距离,
综合考虑训练集中所有样本点之间的距离,计算这些距离的平均值和离散程度;
第
n
n
n 个类别输入数据的特征
z
n
z_{n}
zn 服从高斯分布,
且高斯分布的期望是这些距离的平均值,高斯分布的方差是这些距离的离散程度,
具体的计算公式如下:
μ n e , σ n e = 1 N K 2 ∑ k n = 1 K ∑ m = 1 N ∑ k m = 1 K g ϕ r [ g ϕ e ( x n k n ) , g ϕ e ( x m k m ) ] z n ∼ q ( z n ∣ D n t r ) = N { μ n e , diag ( σ n e ) 2 } \begin{aligned} &\mu_{n}^{e}, \sigma_{n}^{e}=\frac{1}{N K^{2}} \sum_{k_{n}=1}^{K} \sum_{m=1}^{N} \sum_{k_{m}=1}^{K} g_{\phi_{r}}\left[g_{\phi_{e}}\left(x_{n}^{k_{n}}\right), g_{\phi_{e}}\left(x_{m}^{k_{m}}\right)\right] \\ &z_{n} \sim q\left(z_{n} \mid D_{n}^{\mathrm{tr}}\right)=N\left\{\mu_{n}^{e}, \operatorname{diag}\left(\sigma_{n}^{e}\right)^{2}\right\} \end{aligned} μne,σne=NK21kn=1∑Km=1∑Nkm=1∑Kgϕr[gϕe(xnkn),gϕe(xmkm)]zn∼q(zn∣Dntr)=N{μne,diag(σne)2}
其中,
N
N
N 是类别总数,
K
K
K 是每个类别的图片总数,
D
n
t
r
{D}_{n}^{\mathrm{tr}}
Dntr 是第
n
n
n 个类别的训练数据集。
对于每个类别的输入数据,每个类别下有
K
K
K 张图片,
计算这
K
K
K 张图片和所有已知图片之间的距离。
总共有
N
N
N 个类别,通过编码器的计算,形成所有类别的特征,
记为
z
=
(
z
1
,
⋯
,
z
N
)
z=\left(z_{1}, \cdots, z_{N}\right)
z=(z1,⋯,zN)。
2.2.2 解码器
解码器
g
ϕ
d
g_{\phi_{d}}
gϕd ,其中
ϕ
d
\phi_{d}
ϕd 是解码器的可训练参数,
其功能是将每个类别输入数据的特征向量
z
n
z_{n}
zn
映射成属于每个类别的概率值
w
n
\boldsymbol{w}_{n}
wn:
μ n d , σ n d = g ϕ d ( z n ) w n ∼ q ( w ∣ z n ) = N { μ n d , diag ( σ n d ) 2 } \begin{aligned} &\mu_{n}^{d}, \sigma_{n}^{d}=g_{\phi_{d}}\left(z_{n}\right) \\ &w_{n} \sim q\left(w \mid z_{n}\right)=N\left\{\mu_{n}^{d}, \operatorname{diag}\left(\sigma_{n}^{d}\right)^{2}\right\} \end{aligned} μnd,σnd=gϕd(zn)wn∼q(w∣zn)=N{μnd,diag(σnd)2}
其中,任务
ε
\varepsilon
ε 的基础学习器参数记为
θ
ε
\theta_{\varepsilon}
θε,
基础学习器参数由属于每个类别的概率值组成,
记为
θ
ε
=
(
w
1
,
w
2
,
⋯
,
w
N
)
\theta_{\varepsilon}=\left(w_{1}, w_{2}, \cdots, w_{N}\right)
θε=(w1,w2,⋯,wN),
基础学习器参数
w
n
\boldsymbol{w}_{n}
wn 指的是输入数据属于第
n
n
n 个类别的概率值,
g
ϕ
d
g_{\phi_{d}}
gϕd 是从特征向量到基础学习器参数的映射。
2.2.3 基础学习器更新过程
在基础学习器中,任务 ε \varepsilon ε 的交叉熵损失函数是:
L ε t r ( f θ ε ) = ∑ ( x , y ) ∈ D ε t r [ − w y x + log ∑ j = 1 N e w j x ] L_{\varepsilon}^{\mathrm{tr}}\left(f_{\theta_{\varepsilon}}\right)=\sum_{(x, y) \in D_{\varepsilon}^{\mathrm{tr}}}\left[-w_{y} \boldsymbol{x}+\log \sum_{j=1}^{N} \mathrm{e}^{w_{j} x}\right] Lεtr(fθε)=(x,y)∈Dεtr∑[−wyx+logj=1∑Newjx]
其中,
(
x
,
y
)
(x, y)
(x,y) 是任务
ε
\varepsilon
ε 训练集
D
ε
t
r
D_{\varepsilon}^{\mathrm{tr}}
Dεtr 中的样本点,
f
θ
ε
f_{\theta_{\varepsilon}}
fθε 是任务
ε
\varepsilon
ε 的基础学习器,
最小化任务
ε
\varepsilon
ε 的损失函数更新任务专属参数
θ
ε
\theta_{\varepsilon}
θε 。
在解码器模型中,任务专属参数为
w
n
∼
q
(
w
∣
z
n
)
w_{n} \sim q\left(w \mid z_{n}\right)
wn∼q(w∣zn),
更新任务专属参数
θ
ε
\theta_{\varepsilon}
θε 意味着更新特征向量
z
n
z_{n}
zn:
z n ′ = z n − α ∇ z n L ε t r ( f θ ε ) , z_{n}^{\prime}=z_{n}-\alpha \nabla_{z_{n}} L_{\varepsilon}^{t r}\left(f_{\theta_{\varepsilon}}\right), zn′=zn−α∇znLεtr(fθε),
其中,
z
n
′
\boldsymbol{z}_{n}^{\prime}
zn′ 是更新后的特征向量,
对应的是更新后的任务专属参数
θ
ε
′
\boldsymbol{\theta}_{\varepsilon}^{\prime}
θε′。
基础学习器使用
θ
ε
′
\theta_{\varepsilon}^{\prime}
θε′ 来预测任务验证集数据的标注,
将任务
ε
\varepsilon
ε 的验证集
D
ε
v
a
l
\mathrm{D}_{\varepsilon}^{\mathrm{val}}
Dεval
损失函数
L
ε
v
a
l
(
f
θ
ε
′
)
L_{\varepsilon}^{\mathrm{val}}\left(f_{\theta_{\varepsilon}^{\prime}}\right)
Lεval(fθε′) 、
更新后的特征向量
z
n
′
z_{n}^{\prime}
zn′、
更新后的任务专属参数
θ
ε
′
\theta_{\varepsilon}^{\prime}
θε′ 输入元学习器,
在元学习器中更新元参数。
2.3 元学习器更新过程
在元学习器中,最小化所有任务
ε
\varepsilon
ε 的验证集的损失函数的求和,
最小化任务上的模型泛化误差:
min ϕ e , ϕ r , ϕ d ∑ ε [ L ε v a l ( f θ ε ′ ) + β D K L { q ( z n ∣ D n t r ) ∥ p ( z n ) } + γ ∥ s ( z n ′ ) − z n ∥ 2 2 ] + R \min _{\phi_{e}, \phi_{r}, \phi_{d}} \sum_{\varepsilon}\left[L_{\varepsilon}^{\mathrm{val}}\left(f_{\theta_{\varepsilon}^{\prime}}\right)+\beta D_{\mathrm{KL}}\left\{q\left(z_{n} \mid {D}_{n}^{\mathrm{tr}}\right) \| p\left(z_{n}\right)\right\}+\gamma\left\|s\left(\boldsymbol{z}_{n}^{\prime}\right)-\boldsymbol{z}_{n}\right\|_{2}^{2}\right]+R ϕe,ϕr,ϕdminε∑[Lεval(fθε′)+βDKL{q(zn∣Dntr)∥p(zn)}+γ∥s(zn′)−zn∥22]+R
其中,
L
ε
v
a
l
(
f
θ
ε
′
)
L_{\varepsilon}^{\mathrm{val}}\left(f_{\theta_{\varepsilon}^{\prime}}\right)
Lεval(fθε′) 是任务
ε
\varepsilon
ε 验证集的损失函数,
衡量了基础学习器模型的泛化误差,损失函数越小,模型的泛化能力越好。
p
(
z
n
)
=
N
(
0
,
I
)
p\left(z_{n}\right)=N(0, I)
p(zn)=N(0,I) 是高斯分布,
D
K
L
{
q
(
z
n
∣
D
n
t
r
)
∥
p
(
z
n
)
}
D_{\mathrm{KL}}\left\{q\left(z_{n} \mid {D}_{n}^{\mathrm{tr}}\right) \| p\left(z_{n}\right)\right\}
DKL{q(zn∣Dntr)∥p(zn)} 是近似后验分布
q
(
z
n
∣
D
n
tr
)
q\left(z_{n} \mid D_{n}^{\text {tr }}\right)
q(zn∣Dntr ) 与先验分布
p
(
z
n
)
p\left(z_{n}\right)
p(zn) 之间的 KL 距离 (KL-Divergence),
最小化
K
L
\mathrm{KL}
KL 距离可使后验分布
q
(
z
n
∣
D
n
tr
)
q\left(z_{n} \mid {D}_{n}^{\text {tr}}\right)
q(zn∣Dntr) 的估计尽可能准确。
最小化距离
∥
s
(
z
n
′
)
−
z
n
∥
\left\|s\left(z_{n}^{\prime}\right)-z_{n}\right\|
∥s(zn′)−zn∥ 使得参数初始值
z
n
z_{n}
zn 和训练完成后的参数更新值
z
n
′
z_{n}^{\prime}
zn′ 距离最小,
使得参数初始值和参数最终值更接近。
R
R
R 是正则项, 用于调控元参数的复杂程度,避免出现过拟合,正则项
R
R
R 的计算公式如下:
R = λ 1 ( ∥ ϕ e ∥ 2 2 + ∥ ϕ r ∥ 2 2 + ∥ ϕ d ∥ 2 2 ) + λ 2 ∥ C d − I ∥ 2 R=\lambda_{1}\left(\left\|\phi_{e}\right\|_{2}^{2}+\left\|\phi_{r}\right\|_{2}^{2}+\left\|\phi_{d}\right\|_{2}^{2}\right)+\lambda_{2}\left\|C_{d}-\mathbb{I}\right\|_{2} R=λ1(∥ϕe∥22+∥ϕr∥22+∥ϕd∥22)+λ2∥Cd−I∥2
其中,
∥
ϕ
r
∥
2
2
\left\|\phi_{r}\right\|_{2}^{2}
∥ϕr∥22 指的是调控元参数的个数和大小,
C
d
{C}_{d}
Cd 是参数
ϕ
d
\phi_{d}
ϕd 的行和行之间的相关性矩阵,
超参数
λ
1
,
λ
2
>
0
\lambda_{1},\lambda_{2}>0
λ1,λ2>0,
∥
C
d
−
I
∥
2
\left\|C_{d}-\mathbb{I}\right\|_{2}
∥Cd−I∥2 使得
C
d
C_{d}
Cd 接近单位矩阵,
使得参数
ϕ
d
\phi_{d}
ϕd 的行和行之间的相关性不能太大,
每个类别的特征向量之间的相关性不能太大,
属于每个类别的概率值之间的相关性也不能太大,分类要尽量准确。
2.4 LEO 算法流程
LEO 算法流程
- randomly initialize ϕ e , ϕ r , ϕ d \phi_{e}, \phi_{r}, \phi_{d} ϕe,ϕr,ϕd
- let ϕ = { ϕ e , ϕ r , ϕ d , α } \phi=\left\{\phi_{e}, \phi_{r}, \phi_{d}, \alpha\right\} ϕ={ϕe,ϕr,ϕd,α}
- while not converged do:
- for number of tasks in batch do:
- sample task instance T i ∼ S t r \mathcal{T}_{i} \sim \mathcal{S}^{t r} Ti∼Str
- let ( D t r , D v a l ) = T i \left(\mathcal{D}^{t r}, \mathcal{D}^{v a l}\right)=\mathcal{T}_{i} (Dtr,Dval)=Ti
- encode D t r \mathcal{D}^{t r} Dtr to z using g ϕ e g_{\phi_{e}} gϕe and g ϕ r g_{\phi_{r}} gϕr
- decode z \mathbf{z} z to initial params θ i \theta_{i} θi using g ϕ d g_{\phi_{d}} gϕd
- initialize z ′ = z , θ i ′ = θ i \mathbf{z}^{\prime}=\mathbf{z}, \theta_{i}^{\prime}=\theta_{i} z′=z,θi′=θi
- for number of adaptation steps do:
- compute training loss L T i t r ( f θ i ′ ) \mathcal{L}_{\mathcal{T}_{i}}^{t r}\left(f_{\theta_{i}^{\prime}}\right) LTitr(fθi′)
- perform gradient step w.r.t. z ′ \mathbf{z}^{\prime} z′:
- z ′ ← z ′ − α ∇ z ′ L T i t r ( f θ i ′ ) \mathbf{z}^{\prime} \leftarrow \mathbf{z}^{\prime}-\alpha \nabla_{\mathbf{z}^{\prime}} \mathcal{L}_{\mathcal{T}_{i}}^{t r}\left(f_{\theta_{i}^{\prime}}\right) z′←z′−α∇z′LTitr(fθi′)
- decode z ′ \mathbf{z}^{\prime} z′ to obtain θ i ′ \theta_{i}^{\prime} θi′ using g ϕ d g_{\phi_{d}} gϕd
- end for
- compute validation loss L T i v a l ( f θ i ′ ) \mathcal{L}_{\mathcal{T}_{i}}^{v a l}\left(f_{\theta_{i}^{\prime}}\right) LTival(fθi′)
- end for
- perform gradient step w.r.t ϕ \phi ϕ: ϕ ← ϕ − η ∇ ϕ ∑ T i L T i v a l ( f θ i ′ ) \phi \leftarrow \phi-\eta \nabla_{\phi} \sum_{\mathcal{T}_{i}} \mathcal{L}_{\mathcal{T}_{i}}^{v a l}\left(f_{\theta_{i}^{\prime}}\right) ϕ←ϕ−η∇ϕ∑TiLTival(fθi′)
- end while
(1) 初始化元参数:编码器参数
ϕ
e
\phi_{e}
ϕe、关系网络参数
ϕ
r
\phi_{r}
ϕr、解码器参数
ϕ
d
\phi_{d}
ϕd,
在元学习器中更新的元参数包括
ϕ
=
{
ϕ
e
,
ϕ
r
,
ϕ
d
}
\phi=\left\{\phi_e, \phi_r,\phi_d \right\}
ϕ={ϕe,ϕr,ϕd}。
(2) 使用片段式训练模式,
随机抽取任务
ε
\varepsilon
ε,
D
ε
t
r
{D}_{\varepsilon}^{\mathrm{tr}}
Dεtr 是任务
ε
\varepsilon
ε 的训练集,
D
ε
v
a
l
{D}_{\varepsilon}^{\mathrm{val}}
Dεval 是任务
ε
\varepsilon
ε 的验证集。
(3) 使用编码器
g
ϕ
e
g_{\phi_{e}}
gϕe 和关系网络
g
ϕ
r
g_{\phi_{r}}
gϕr 将任务
ε
\varepsilon
ε 的训练集
D
ε
t
r
D_{\varepsilon}^{\mathrm{tr}}
Dεtr 编码成特征向量
z
z
z,
使用 解码器
g
ϕ
d
g_{\phi_{d}}
gϕd 从特征向量映射到任务
ε
\varepsilon
ε 的基础学习器参数
θ
ε
{\theta}_{\varepsilon}
θε,
基础学习器参数指的是输入数据属于每个类别的概率值向量;
计算任务
ε
\varepsilon
ε 的训练集的损失函数
L
ε
t
r
(
f
θ
ε
)
L_{\varepsilon}^{\mathrm{tr}}\left(f_{\theta_{\varepsilon}}\right)
Lεtr(fθε),
最小化任务
ε
\varepsilon
ε 的损失函数,更新每个类别的特征向量:
z n ′ = z n − α ∇ z n L ε t r ( f θ ε ) z_{n}^{\prime}=z_{n}-\alpha \nabla_{z_{n}} L_{\varepsilon}^{\mathrm{tr}}\left(f_{\theta_{\varepsilon}}\right) zn′=zn−α∇znLεtr(fθε)
使用解码器
g
ϕ
d
g_{\phi_{d}}
gϕd 从更新后的特征向量映射到更新后的任务
ε
\varepsilon
ε 的基础学习器参数
θ
ε
′
{\theta}_{\varepsilon}^{\prime}
θε′;
计算任务
ε
\varepsilon
ε 的验证集的损失函数
L
ε
val
(
f
θ
s
′
)
L_{\varepsilon}^{\text {val}}\left(f_{\theta_{s}^{\prime}}\right)
Lεval(fθs′);
基础学习器将更新后的参数和验证集损失函数值输入元学习器。
(4) 更新元参数,
ϕ
←
ϕ
−
η
∇
ϕ
∑
ε
L
ε
val
(
f
θ
ε
′
)
\phi \leftarrow \phi-\eta \nabla_{\phi} \sum_{\varepsilon} L_{\varepsilon}^{\text {val}}\left(f_{\theta_{\varepsilon}^{\prime}}\right)
ϕ←ϕ−η∇ϕ∑εLεval(fθε′),
最小化所有任务
ε
\varepsilon
ε 的验证集的损失和,
将更新后的元参数输人基础学习器,继续处理新的分类任务。
2.5 LEO 模型结构
LEO 是一种与模型无关的元学习,[1] 中给出的各部分模型结构及参数如表1所示。
Part of the model | Architecture | Hiddenlayer | Shape of the output |
---|---|---|---|
Inference model ( f θ f_{\theta} fθ) | 3-layer MLP with ReLU | 40 | (12, 5, 1) |
Encoder | 3-layer MLP with ReLU | 16 | (12, 5, 16) |
Relation Network | 3-layer MLP with ReLU | 32 | (12, 2 × 16 2\times 16 2×16) |
Decoder | 3-layer MLP with ReLU | 32 | (12, 2 × 1761 2\times 1761 2×1761) |
2.6 LEO 分类结果
Model | 5-way 1-shot | 5-way 5-shot |
---|---|---|
Matching networks (Vinyals et al., 2016) | 43.56 ± \pm ± 0.84 % \% % | 55.31 ± \pm ± 0.73 % \% % |
Meta-learner LSTM (Ravi & Larochelle, 2017) | 43.44 ± \pm ± 0.77 % \% % | 60.60 ± \pm ± 0.71 % \% % |
MAML (Finn et al., 2017) | 48.70 ± \pm ± 1.84 % \% % | 63.11 ± \pm ± 0.92 % \% % |
LLAMA (Grant et al., 2018) | 49.40 ± \pm ± 1.83 % \% % | – |
REPTILE (Nichol & Schulman, 2018) | 49.97 ± \pm ± 0.32 % \% % | 65.99 ± \pm ± 0.58 % \% % |
PLATIPUS (Finn et al., 2018) | 50.13 ± \pm ± 1.86 % \% % | – |
Meta-SGD (our features) | 54.24 ± \pm ± 0.03 % \% % | 70.86 ± \pm ± 0.04 % \% % |
SNAIL (Mishra et al., 2018) | 55.71 ± \pm ± 0.99 % \% % | 68.88 ± \pm ± 0.92 % \% % |
(Gidaris & Komodakis, 2018) | 56.20 ± \pm ± 0.86 % \% % | 73.00 ± \pm ± 0.64 % \% % |
(Bauer et al., 2017) | 56.30 ± \pm ± 0.40 % \% % | 73.90 ± \pm ± 0.30 % \% % |
(Munkhdalai et al., 2017) | 57.10 ± \pm ± 0.70 % \% % | 70.04 ± \pm ± 0.63 % \% % |
DEML+Meta-SGD (Zhou et al., 2018) | 58.49 ± \pm ± 0.91 % \% % | 71.28 ± \pm ± 0.69 % \% % |
TADAM (Oreshkin et al., 2018) | 58.50 ± \pm ± 0.30 % \% % | 76.70 ± \pm ± 0.30 % \% % |
(Qiao et al., 2017) | 59.60 ± \pm ± 0.41 % \% % | 73.74 ± \pm ± 0.19 % \% % |
LEO | 61.76 ± \pm ± 0.08 % \% % | 77.59 ± \pm ± 0.12 % \% % |
Model | 5-way 1-shot | 5-way 5-shot |
---|---|---|
MAML (deeper net, evaluated in Liu et al. (2018)) | 51.67 ± \pm ± 1.81 % \% % | 70.30 ± \pm ± 0.08 % \% % |
Prototypical Nets (Ren et al., 2018) | 53.31 ± \pm ± 0.89 % \% % | 72.69 ± \pm ± 0.74 % \% % |
Relation Net (evaluated in Liu et al. (2018)) | 54.48 ± \pm ± 0.93 % \% % | 71.32 ± \pm ± 0.78 % \% % |
Transductive Prop. Nets (Liu et al., 2018) | 57.41 ± \pm ± 0.94 % \% % | 71.55 ± \pm ± 0.74 % \% % |
Meta-SGD (our features) | 62.95 ± \pm ± 0.03 % \% % | 79.34 ± \pm ± 0.06 % \% % |
LEO | 66.33 ± \pm ± 0.05 % \% % | 81.44 ± \pm ± 0.09 % \% % |
2.7 LEO 的优点
-
新任务的初始参数以训练数据为条件,这使得任务特定的适应起点成为可能。
通过将关系网络结合到编码器中,该初始化可以更好地考虑所有输入数据之间的联合关系。 -
通过在低维潜在空间中进行优化,该方法可以更有效地适应模型的行为。
此外,通过允许该过程是随机的,可以表达在少数数据状态中存在的不确定性和模糊性。
- 参考文献
[1] Meta-Learning with Latent Embedding Optimization
3.Reptile
Reptil 是 MAML 的特例、近似和简化,主要解决 MAML 元学习器中出现的高阶导数问题。
因此,Reptil 同样学习网络参数的初始值,并且适用于任何基于梯度的模型结构。
在 MAML 的元学习器中,使用了求导数的算式来更新参数初始值,
导致在计算中出现了任务损失函数的二阶导数。
在 Reptile 的元学习器中,参数初始值更新时,
直接使用了任务上的参数估计值和参数初始值之间的差,
来近似损失函数对参数初始值的导数,进行参数初始值的更新,从而不会出现任务损失函数的二阶导数。
Peptile 有两个版本:Serial Version 和 Batched Version,两者的差异如下:
3.1 Serial Version Reptile
单次更新的 Reptile,每次训练完一个任务的基学习器,就更新一次元学习器中的参数初始值。
(1) 任务上的基学习器记为
f
ϕ
f_{\phi}
fϕ ,其中
ϕ
\phi
ϕ 是基学习器中可训练的参数,
θ
\theta
θ 是元学习器提供给基学习器的参数初始值。
在任务
T
i
T_{i}
Ti 上,基学习器的损失函数是
L
T
i
(
f
ϕ
)
L_{T_{i}}\left(f_{\phi}\right)
LTi(fϕ) ,
基学习器中的参数经过
N
N
N 次迭代更新得到参数估计值:
θ i N = SGD ( L T i , θ , N ) \theta_{i}^{N}=\operatorname{SGD}\left(L_{T_{i}}, {\theta}, {N}\right) θiN=SGD(LTi,θ,N)
(2) 更新元学习器中的参数初始值:
θ ← θ + ε ( θ i N − θ ) \theta \leftarrow \theta+\varepsilon\left(\theta_{i}^{N}-\theta\right) θ←θ+ε(θiN−θ)
Serial Version Reptile 算法流程
- initialize θ \theta θ, the vector of initial parameters
- for iteration=1, 2, … do:
- sample task T i T_i Ti, corresponding to loss L T i L_{T_i} LTi on weight vectors θ \theta θ
- compute θ i N = SGD ( L T i , θ , N ) \theta_{i}^{N}=\operatorname{SGD}\left(L_{T_{i}}, {\theta}, {N}\right) θiN=SGD(LTi,θ,N)
- update θ ← θ + ε ( θ i N − θ ) \theta \leftarrow \theta+\varepsilon\left(\theta_{i}^{N}-\theta\right) θ←θ+ε(θiN−θ)
- end for
3.2 Batched Version Reptile
批次更新的 Reptile,每次训练完多个任务的基学习器之后,才更新一次元学习器中的参数初始值。
(1) 在多个任务上训练基学习器,每个任务从参数初始值开始,迭代更新 N N N 次,得到参数估计值。
(2) 更新元学习器中的参数初始值:
θ ← θ + ε 1 n ∑ i = 1 n ( θ i N − θ ) \theta \leftarrow \theta+\varepsilon \frac{1}{n} \sum_{i=1}^{n}\left(\theta_{i}^{N}-\theta\right) θ←θ+εn1i=1∑n(θiN−θ)
其中, n n n 是指每次训练完 n n n 个任务上的基础学习器后,才更新一次元学习器中的参数初始值。
Batched Version Reptile 算法流程
- initialize θ \theta θ
- for iteration=1, 2, … do:
- sample tasks T 1 T_1 T1, T 2 T_2 T2, … , T n T_n Tn,
- for i=1, 2, … , n do:
- compute θ i N = SGD ( L T i , θ , N ) \theta_{i}^{N}=\operatorname{SGD}\left(L_{T_{i}}, {\theta}, {N}\right) θiN=SGD(LTi,θ,N)
- end for
- update θ ← θ + ε 1 n ∑ i = 1 n ( θ i N − θ ) \theta \leftarrow \theta+\varepsilon \frac{1}{n} \sum_{i=1}^{n}\left(\theta_{i}^{N}-\theta\right) θ←θ+εn1∑i=1n(θiN−θ)
- end for
3.3 Reptile 分类结果
Algorithm | 5-way 1-shot | 5-way 5-shot | 20-way 1-shot | 20-way 5-shot |
---|---|---|---|---|
MAML + Transduction | 98.7 ± \pm ± 0.4 % \% % | 99.9 ± \pm ± 0.1 % \% % | 95.8 ± \pm ± 0.3 % \% % | 98.9 ± \pm ± 0.2 % \% % |
1 s t 1^{st} 1st-order MAML + Transduction | 98.3 ± \pm ± 0.5 % \% % | 99.2 ± \pm ± 0.2 % \% % | 89.4 ± \pm ± 0.5 % \% % | 97.9 ± \pm ± 0.1 % \% % |
Reptile | 95.32 ± \pm ± 0.05 % \% % | 98.87 ± \pm ± 0.02 % \% % | 88.27 ± \pm ± 0.30 % \% % | 97.07 ± \pm ± 0.12 % \% % |
Reptile + Transduction | 97.97 ± \pm ± 0.08 % \% % | 99.47 ± \pm ± 0.04 % \% % | 89.36 ± \pm ± 0.20 % \% % | 97.47 ± \pm ± 0.10 % \% % |
Algorithm | 5-way 1-shot | 5-way 5-shot |
---|---|---|
MAML + Transduction | 48.70 ± \pm ± 1.84 % \% % | 63.11 ± \pm ± 0.92 % \% % |
1 s t 1^{st} 1st-order MAML + Transduction | 48.07 ± \pm ± 1.75 % \% % | 63.15 ± \pm ± 0.91 % \% % |
Reptile | 45.79 ± \pm ± 0.44 % \% % | 61.98 ± \pm ± 0.69 % \% % |
Reptile + Transduction | 48.21 ± \pm ± 0.69 % \% % | 66.00 ± \pm ± 0.62 % \% % |
- 参考文献
[1] Reptile: a Scalable Metalearning Algorithm