Meta-RL之Reptile算法

Reptile算法和MAML一样,是Meta-Learning在学习一种初始化参数上的算法。MAML有二阶和简化版本——一阶FOMAML(First-order MAML)2种形式,而Reptile类似于FOMAML,是一种新型的一阶Gradient-Based 元学习算法。从实现上来看,Reptile比FOMAML还要简单,并且实验结果和FOMAML、MAML相差无几
Reptile是一篇2018年的论文,作者是Nichol,发布时间在MAML之后。

参考列表:
Reptile原论文(On First-Order Meta-Learning Algorithms)
从MAML到Reptile
Reptile深度解析
LiI’log-Meta Learning综述

On First-Order Meta-Learning Algorithms

MAML

标准的MAML算法是一种二阶算法,也就是说算法中需要计算二阶偏导数,因此比较耗时耗资源。谈到MAML,第一个想到的就是著名的二次更新,即内更新( θ ′ ← θ \theta'\gets\theta θθ)和外更新( θ ← θ ′ \theta\gets\theta' θθ)。内更新用于Meta-Learner到Learner的Fast-Adaptation;外更新用于训练Meta-Learner。
在这里插入图片描述
如上图所示,灰色线代表着不同tasks所产生的梯度值(方向);黑色线代表着最终算法选择更新的方向,可以看出来黑色方向应该是几个tasks产生方向的平均值;虚线代表着Fast-Adaptation,即 θ → θ ′ \theta\to\theta' θθ,不同的方向代表着不同的task应该更新的方向。
在这里插入图片描述这张图我们对照着内外更新的公式来看:
①内更新: θ i ′ = θ − α ∇ θ L τ i ( f θ ) \theta_i'=\theta-\alpha\nabla_\theta\mathcal{L}_{\tau_i}(f_\theta) θi=θαθLτi(fθ)
②外更新: θ = θ − β ∇ θ ∑ τ i ∼ p ( τ ) L τ i ( f θ i ′ ) \theta=\theta-\beta\nabla_\theta\sum_{\tau_i\sim p(\tau)}\mathcal{L}_{\tau_i}(f_{\theta_i'}) θ=θβθτip(τ)Lτi(fθi)
第一次更新(绿色方向)得到 θ ′ \theta' θ,第二次更新虽然是对 θ \theta θ求导,但是经过简化之后可以转为对 θ ′ \theta' θ的求导,因此就好像说外更新就像继续对 θ ′ \theta' θ做更新一样( θ n e w ′ ← θ o l d ′ − β ∇ θ ′ L \theta'_{new}\gets\theta'_{old}-\beta\nabla_{\theta'}\mathcal{L} θnewθoldβθL),于是就有了长一点的黄色线。由于梯度本身就是个向量,因此进行平移就可以达到外更新的效果,再加上学习率 β \beta β,因此 θ \theta θ的更新如短一点的黄色线所示。

由于这篇笔记主要讲Reptile,因此关于更多MAML的细节请参考我的另一篇关于MAML的笔记,点这里

FOMAML

FOMAML,即First-Order MAML,标准的MAML算法需要涉及到二阶导数,既浪费时间又消耗计算资源,因此一阶的MAML就有必要引出。
FOMAML伪代码如下:
在这里插入图片描述
一句话概括就是在外更新中,只使用Fast-Weights θ ′ \theta' θ最后一次的梯度更新结果,详细推导如下图:
在这里插入图片描述
在代码实现是这样做的:
在这里插入图片描述
其中losses_q[-1]指的是最后一个task里最后一次更新的 L o s s Loss Loss值,通过它的backward来更新Meta-Learner的参数,即Slow-Weights。

Reptile

和MAML一样,Reptile也是旨在学习到一种合适的初始化策略。
在这里插入图片描述
上图和MAML那张很像,只不过Reptile更简单,可以看出,就是用Meta-Learner的参数 ϕ \phi ϕ连续做几次更新到达Learner的参数 θ m \theta^m θm,然后 ϕ \phi ϕ的更新方向就是沿着 ϕ → θ m \phi\to\theta^m ϕθm的方向前进,当然还要乘以学习率。可以看出和MAML的区别在于, θ \theta θ参数的获得可以更新好几次,而MAML里是只有1次,这也是MAML的一个特点(需要注意的是,MAML也是可以更新好几次的,并不是只能1次)。

Reptile的伪代码如下:
在这里插入图片描述
Note:

  1. 对于Meta-Learner参数的更新,Reptile并没有去求梯度,而是通过一种软更新的方式,这里 ϵ \epsilon ϵ是学习率。
  2. Reptile并没有像MAML一样去搞Support-set和Query-set。
  3. 关于 U U U的解释:在这里插入图片描述这里指的就是Reptile更新图中深绿色部分,意思就是通过Adam或SGD这种优化算法,其实就相当于MAML里的内更新, ϕ ~ \tilde{\phi} ϕ~就相当于Fast-Weights,从 ϕ \phi ϕ开始连续做几次梯度下降,给定一堆tasks,进行采样,更新 k k k次: ϕ ~ = ϕ − g 1 − g 2 ⋯ − g k \tilde{\phi}=\phi-g_1-g_2\cdots-g_k ϕ~=ϕg1g2gk,如下图所示:在这里插入图片描述
  4. 软更新使得 ϕ \phi ϕ朝着 ϕ ~ − ϕ \tilde{\phi}-\phi ϕ~ϕ的方向前进,这就是Reptile,简单粗暴!至于为什么选择这个更新方向,作者进行了一系列复杂的数学推导才得出。

Reptile&MAML&Pre-training

在这里插入图片描述
上图是Reptile、MAML、Pre-training三种方法更新参数的示意图,这里Reptile选择了2次更新,仅仅只是为了容易和MAML进行比较而已。可以看出在这种情况下,Reptile几乎就是MAML和Pre-training的合体。

下图是Reptile原论文中做的比较实验:
在这里插入图片描述

  1. 从上图可以看出Pre-training(g1)的效果是最差的。
  2. MAML是g2,效果处于中间的位置。
  3. 效果最好的是 k = 4 k=4 k=4的时候,即 g 1 + g 2 + g 3 + g 4 g_1+g_2+g_3+g_4 g1+g2+g3+g4,比MAML要好上一些。因此Reptile虽然简单,但是还是比较实用的。
  • 7
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值