Meta-RL之Learning to Learn by gd by gd

这篇文章由DeepMind发表于2016年,比MAML的发表要早一些。2001年发表了一篇Learning to Learn Using Gradient Descent,这篇是其进一步的改进与优化。论文标题中就可以看出文章的目的:针对不同的需要用到梯度下降优化的模型,用梯度下降来优化的元学习算法去学习一种对应的梯度下降算法。可能听起来有点难以理解,但看过MAML这篇论文的,就可以把它和MAML放一起看,只不过MAML是通过元学习算法去学习初始化参数,而这篇使用元学习算法去学习一种优化算法。

参考列表:
论文解读
这位博主提供了PyTorch的代码
论文翻译

简介

在机器学习中最常见的优化方式就是SGD: θ t + 1 = θ t − α t ∇ f ( θ t ) \theta_{t+1}=\theta_t-\alpha_t\nabla f(\theta_t) θt+1=θtαtf(θt),其中 f ( ⋅ ) f(\cdot) f()为目标函数。那么这种优化方式,包括其余的momentum、Adam、RMSprop等都属于需要手动设置的优化方式,比如式子中的学习率,碰到不同的tasks,需要手动去调节。
那么本文的目的在于设计一种自己会去学习出一种针对新task的优化方式的学习算法,即Learn to Learn的一个分支,和MAML思想类似。
表达式为:
θ t + 1 = θ t + g t ( ∇ f ( θ t ) , ϕ ) (1) \theta_{t+1}=\theta_t+g_t(\nabla f(\theta_t),\phi)\tag{1} θt+1=θt+gt(f(θt),ϕ)(1)Note:

  1. g ( ⋅ ) g(\cdot) g()代表梯度更新规则函数。作者将其描述为optimizer,其实本质就是个Meta-Learner
  2. ϕ \phi ϕ是optimizer的参数, θ \theta θ是optimizee的参数。
  3. Optimizer和Optimizee之间的关系如下:在这里插入图片描述其实就是Meta-Learner和Learner之间的关系:optimizer负责将参数快速适应到optimizee(本质就是个Learner)上,使其在新的task上有不错的表现;而optimizee负责将 l o s s loss loss发到optimizer上,使其可进行参数调整。为什么是由optimizee的损失来调节 ϕ \phi ϕ呢?因为元学习就是规定Meta-Learner的参数更新得来源于Learner上的损失。
  4. 式(1)也可以简写为: θ t + 1 = θ t + g t \theta_{t+1}=\theta_t+g_t θt+1=θt+gt

核心内容

作者首先给出一个最佳优化器应该是怎么样的,应该是可以让损失函数最小化:
L ( ϕ ) = E f [ f ( θ ∗ ( f , ϕ ) ) ] (2) \mathcal{L}(\phi)=\mathbb{E}_f[f(\theta^*(f,\phi))]\tag{2} L(ϕ)=Ef[f(θ(f,ϕ))](2)Note:

  1. 可以看到Meta-Learner的训练的Loss来自于Learner。
  2. 但是这个损失函数不适合用于训练,因为式(2)只用到了最后一步优化的损失,直接忽略了轨迹中前面step的训练,这样会导致RNN网络的BPTT算法失效。

Optimizee的参数更新

因此式(2)只能说是理想中的损失函数,真正用于训练的应该是:
L ( ϕ ) = E f [ ∑ t = 1 T w t f ( θ t ) ] w h e r e θ t + 1 = θ t + g t [ g t h t + 1 ] = m ( ∇ t , h t , ϕ ) (3) \mathcal{L}(\phi)=\mathbb{E}_f[\sum^T_{t=1}w_tf(\theta_t)]\qquad where\quad \theta_{t+1}=\theta_t+g_t\\ \begin{bmatrix} g_t\\h_{t+1} \end{bmatrix}=m(\nabla_t,h_t,\phi)\tag{3} L(ϕ)=Ef[t=1Twtf(θt)]whereθt+1=θt+gt[gtht+1]=m(t,ht,ϕ)(3)Note:

  1. ω = 1 , T = t \omega=1,T=t ω=1T=t的时候,式(3)的Loss就是式(2)。
  2. ω ∈ R ≥ 0 \omega\in\mathbb{R}_{\ge0} ωR0 ∇ t = ∇ t f ( θ t ) \nabla_t=\nabla_tf(\theta_t) t=tf(θt) T T T为时间总步数。
  3. 为了简单,实际做的时候可以忽略 ω t \omega_t ωt,即 L ( ϕ ) = E f [ ∑ t = 1 T f ( θ t ) ] \mathcal{L}(\phi)=\mathbb{E}_f[\sum^T_{t=1}f(\theta_t)] L(ϕ)=Ef[t=1Tf(θt)]
  4. 式(3)揭示了Optimizee是如何更新参数的。

在这里插入图片描述
上图是整个元学习算法的计算图:

  1. 其中 m m m是一个LSTM的细胞。输入分别是Optimizee的 ∇ t \nabla_t t、隐藏状态 h t h_t ht以及Optimizer的参数 ϕ \phi ϕ,输出是梯度更新规则 g t g_t gt以及下个隐藏状态 h t + 1 h_{t+1} ht+1。可以看出整个Optimizer就是一个完整的LSTM
  2. 从上面的计算图的backward我们就可以得到 ∂ L ( ϕ ) ∂ ϕ \frac{\partial{\mathcal{L}(\phi)}}{\partial{\phi}} ϕL(ϕ),大致计算过程如下:在这里插入图片描述

作者指出一般都假设二阶偏导为0,这样就可以省去一部分计算资源。在这里插入图片描述
Optimizer自身也需要优化方法去做,文章中使用的是Adam

共享网络

截止到目前为止,我们都希望对于每一个参数 θ i \theta_i θi,都可以用上面的Meta-Learning去学习一个优化算法。但是仔细想想,参数 θ \theta θ数目可能多达几千个,如果相应安排几千个LSTM未免不太现实。因此比较直接的思路就是Optimizee的不同参数共享同一个LSTM(Optimizer),原文如下:在这里插入图片描述
整个结构如下:
在这里插入图片描述

  1. 如上图所示,LSTM接受来自于历史的梯度值,这就是类似于Momentum算法。

为什么这么多参数共享一个LSTM会没事呢?

  1. 每个维度上的参数 θ i \theta_i θi产生的LSTM的输入 ∇ t f ( θ i t ) \nabla_tf(\theta_i^t) tf(θit)以及hidden state都是不同的,所以尽管都是使用同一个参数 ϕ \phi ϕ,其产生的结果都是不同。这就和我们常见的优化算法Adam、RMSprop等一样,对于每个维度的参数都使用同样的更新规则。这一点从Figure 2中也可以看出来。

Optimizer的参数更新

那么 ϕ \phi ϕ该如何更新呢?
如果每一次更新,都按照维度来的话,那就要把 ϕ \phi ϕ更新几千次了,先不然不行。因此作者对于每一次更新,都是用某一个维度的Loss值来做。我们的目标是学习出一个学习算法 ϕ \phi ϕ,这个学习算法可以产生一个优化算法用于更新 θ \theta θ。但学习算法本身也是需要训练的,本文作者采用的是Adam训练算法。

实验部分

在这里插入图片描述
上图是学习型算法——将优化看成一种学习问题和我们平时用的手工设计型算法——自己选择学习率、更新规则(Adam还是RMSprop等)进行对比。实验分2个,一个是10维的回归问题,另一个是MNIST数据集上的分类问题。
从结果来看,显然学习出来的算法(LSTM)比自己手工设计的要有更优的优化结果。

总结

  1. LSTM优化算法的伪代码如下:
    在这里插入图片描述
  2. 这篇论文是Meta-Learning在优化算法上的应用。通过学习一个学习算法去给新的task适应一个优化规则,这正如图MAML是通过学习一个学习算法 ϕ \phi ϕ去给新的task适应一个初始化参数 θ \theta θ一样。
  3. 至于为何LSTM的输入要选择 ∇ \nabla 以及 h h h,那是因为LSTM的细胞结构和优化算法的结构很像,可以对应起来,如下图所示:在这里插入图片描述当然 z f z_f zf z i z_i zi也是可以来学习的,如果其它们看成可学习参数而非固定值,则优化算法和LSTM的对应关系为:在这里插入图片描述
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值