Reptile:On First-Order Meta-Learning Algorithms

与MAML类似,Reptile是一种寻找神经网络初始化参数的元学习方法,在新任务上只需要少量数据进行 fine-tune。与MAML不同的是,Reptile只需要简单地每个任务上执行SGD而不需要像MAML一样计算两次微分。这使得Reptile消耗的计算量和内存更少。在MAML中,作者也使用了一次微分进行了实验,发现效果是差不多的,虽然看起来是丢失了一些信息,确切的说,本文就是基于FOMAML的。

MAML

Reptile:On First-Order Meta-Learning Algorithms_第1张图片
使用训练集优化内层循环,使用测试集优化模型,也就是外层循环
Reptile:On First-Order Meta-Learning Algorithms_第2张图片

模型

Reptile:On First-Order Meta-Learning Algorithms_第3张图片
Reptile将后面一步替换为了使用 ϕ − W \phi-W ϕW作为梯度,并使用更复杂的优化器优化 ϕ \phi ϕ,例如Adam。
同样每次迭代可以使用一个batch的数据进行评估,
ϕ ← ϕ + ϵ 1 n ∑ i = 1 n ( ϕ ~ i − ϕ ) \phi\leftarrow\phi+\epsilon\frac{1}{n}\sum_{i=1}^n(\tilde{\phi}_i-\phi) ϕϕ+ϵn1i=1n(ϕ~iϕ)
这个算法看着很像在期望损失 E γ [ L γ ] \mathbb{E}_\gamma[L_\gamma] Eγ[Lγ]下的joint training,如果定义U是单步的梯度更新的话(k=1),算法就变成了在期望损失下的SGD,
g R e p t i l e , k = 1 = E γ [ ϕ − U γ ( ϕ ) ] / α = E γ [ ∇ ϕ L γ ( ϕ ) ] g_{Reptile,k=1}=\mathbb{E}_\gamma[\phi-U_\gamma(\phi)]/\alpha =\mathbb{E}_\gamma[\nabla_\phi L_\gamma(\phi)] gReptile,k=1=Eγ[ϕUγ(ϕ)]/α=Eγ[ϕLγ(ϕ)]
然而,如果执行多步梯度下降的话,期望的更新将和对 E γ [ L γ ] \mathbb{E}_\gamma[L_\gamma] Eγ[Lγ]只执行一步梯度下降不同,会包含二阶或者高阶的微分。

通过泰勒展开近似这个更新过程,发现Reptile的更新过程可以使同一任务中不同batch的梯度之间的内积最大化,相当于提高了泛化能力,这可能可以解释元学习设置之外的SGD的泛化性。

后面就是一些数学证明了,原博客,感兴趣的可以看一下

你可能感兴趣的:(meta,learning)