这篇文章是MAML的提升版本,结合了Meta-LSTM
的思想,生成一种新的元学习算法。由于这种算法自行设计了学习率和优化方向来获取新的参数,这种做法和SGD
很像,因此作者取名为——Meta-SGD。
参考列表:
①Meta-SGD论文阅读笔记
②MAML与Meta-SGD
Meta-SGD: Learning to Learn Quickly for Few-Shot Learning
1 MAML
1.1 简介
具体可参考我的另一篇MAML论文解读
1.2 优势
- 可以在新的task上达到Fast Adaptation。
- 为算法提供一个可以快速收敛的合适初始化参数,而不是最优参数,这一点区别要理解。最优参数是Learner在MAML给予的初始参数基础上,进行微调从而达到它那个task上使得 L o s s Loss Loss达到最优化的参数。
1.3 缺陷
- 内更新的设计中,学习率、搜索方向都是自行设计的,其中搜索方向是样本上近似的梯度值。一来学习率的大小需要调节;二来搜索方向显然不是最佳的选择。
2 Meta-LSTM
2.1 简介
具体可参考我的2篇论文解读:
①L2L by gradient by gradient
②optimization as a model for few-shot learning
这是我用Meta-LSTM学习出来的优化器去优化最小二乘
L
o
s
s
Loss
Loss的学习曲线。
2.2 优势
用元学习算法学到了一种优化方法,MAML学习到了初始化参数,Meta-LSTM学习到了一种优化方式。利用LSTM作为Meta-Learner,然后将Meta-Learner作为模型,用Adam去训练,也就是说将Meta-Learner当作模型去训练参数 θ \theta θ。Learner的参数就通过LSTM的输出口获取: θ t = θ t − 1 + g t \theta_t=\theta_{t-1} +g_t θt=θt−1+gt,这就是Meta-LSTM所学习到的优化算法,简而言之就是用LSTM来表示参数更新这个式子。
2.3 缺陷
- 训练难度大。
- 收敛速度慢。
3 Meta-SGD
3.1简介
- Meta-SGD是MAML和Meta-LSTM的结合版本,或者说是MAML的升级版,它在MAML只能元学习网络初始化参数的基础上,还能去元学习优化的学习率和搜索方向,回忆下我们常用的SGD、Adam等优化算法,他们大多都是以手动设计学习率和搜索方向为主(比如SGD为 L o s s Loss Loss的梯度方向,结合我们的优化理论基础知识,梯度方向显然不是最优的搜索方向,比如自然梯度法、共轭梯度法、最速下降法等等,但谁都不能说是最好的,那么与其我们人为去选择一种优化方法,还不如让计算机自己去学习选择一个优化算法)。
- 和MAML一样,Meta-Learner可以快速将学习到的一套优化规则(学习率+搜索方向)适应到Learner上,具体来说,只需1个step。因此Meta-SGD也具备
Fast-Adaptation
的能力。 - Meta-SGD和Meta-LSTM一样,都算是学习到了一种优化方式,但是Meta-SGD更容易训练;且其实现起来简单:Meta-LSTM需要依赖LSTM,而Meta-SGD只需要一个可更新的矩阵即可,所以训练起来也更快。
3.2 核心思想
4. 如上图所示,就是MAML-SGD的核心思想的体现,乍一看和MAML论文中的很类似,它所表达的是:第一个正方形平面内黑色线是MAML中,不同task上的搜索方向,红色线是我们Meta-SGD在不同task上的搜索方向,可以看出——Meta-SGD添加了一个学习率矩阵
α
\alpha
α,这个矩阵和黑色梯度矩阵的大小是一样的,中间的
∘
\circ
∘表示按元素相乘,这种方式使得产生了一种新的搜索方向。
5.
α
∘
∇
L
(
θ
)
\alpha\circ\nabla\mathcal{L}(\theta)
α∘∇L(θ)的长度就是更新的步长,其归一化向量(方向)就是搜索方向。此外,
α
∘
∇
L
(
θ
)
\alpha\circ\nabla\mathcal{L}(\theta)
α∘∇L(θ)产生的更新方向和
∇
L
(
θ
)
\nabla\mathcal{L}(\theta)
∇L(θ)往往是不一样的,因为
α
\alpha
α是个可学习的矩阵(向量)。
- 中间的黑色弧线代表着Meta-Learner的参数,和MAML不同的是,Meta-SGD有2个—— ( θ α ) \begin{pmatrix}\theta\\\alpha\end{pmatrix} (θα)。
- 第二个正方形平面就是MAML的内循环,得到Learner的参数 θ i ∗ \theta_i^* θi∗,更新公式为: θ i ∗ = θ − α ∘ ∇ L i ( θ ) L i ( θ ) = 1 ∣ T ∣ ∑ ( x , y ) ∈ T l ( f θ ( x ) , y ) (2) \theta_i^* = \theta - \alpha\circ\nabla\mathcal{L}_i(\theta)\\\mathcal{L}_i(\theta) = \frac{1}{|\mathcal{T}|}\sum_{(x,y)\in\mathcal{T}}l(f_\theta(x), y)\tag{2} θi∗=θ−α∘∇Li(θ)Li(θ)=∣T∣1(x,y)∈T∑l(fθ(x),y)(2)
3.3 训练过程
整个训练过程如上所示:
- 和MAML类似,Meta-SGD也有2层的循环,第一层就是核心思想所述,将Meta-Learner参数快速适应到Learner上;第二层是Meta-Learner参数的更新。
- 第一层循环不用自己设定的固定学习率,而是用学习率矩阵 α \alpha α代替,其Size和参数的Size一样,使用按元素逐一相乘。损失是在Support-set上的损失。
- 第二层循环除了要更新网络的参数 θ \theta θ以外,还要去更新学习率矩阵 α \alpha α,两者更新方式一样。这里我个人在复现的时候使用的是FOMAML的做法。损失是在Query-set上的损失。
- 对于每一个任务都是相同的做法。实际在做的时候,第一个task上完成内更新之后,然后在Query-set上计算 L o s s Loss Loss的梯度;然后对第二个task也是这样的操作…mini-batch个tasks做完之后,求取mini-batch个 L o s s Loss Loss梯度的平均值用于更新 ( θ α ) \begin{pmatrix}\theta\\\alpha\end{pmatrix} (θα)。第一轮更新结束后,用新的Meta-Learner参数去做第二次,第三次…第n次更新。
3.4 伪代码
将3.3节训练过程整理成伪代码就是如上所示,其实和MAML的伪代码类似。第一张图片是Meta-SGD在监督学习上的应用;第二张图片是Meta-SGD在RL上的应用。两者区别主要在于
L
o
s
s
Loss
Loss的构成、task的构成不一样,其余大同小异。尤其要注意的一点是,无论是监督学习还是RL,外循环的
L
o
s
s
Loss
Loss一定是Learner参数
θ
′
\theta'
θ′在Query-set上的损失。
3.5 实验结果
3.5.1 回归
3.5.2 分类
3.5.3 强化学习
3.5.4 实验小结
- 总的来说,作者设置对比实验来突出Meta-SGD在监督学习和强化学习上对于MAML、Meta-LSTM的优越性。
- 证明了Meta-SGD在分类、回归、RL下的可行性高。
4 总结
- MAML-SGD = MAML + MAML-LSTM。
- 用最简单的方式来描述Meta-SGD就是在MAML的基础上,增加了一个可学习的学习率 α \alpha α矩阵(向量),这个学习率矩阵在内循环中和原MAML的梯度按元素相乘来改变更新方向;在外循环中和Meta-Learner参数一起更新。
- Meta-SGD的优点在于既可以学习网络的初始化参数,为Learner提供更快的收敛速度;其次对于每一步,它还可以自行学习适合task的学习率、搜索方向。可以说Meta-SGD拥有MAML的一切优点。
- Meta-SGD这种优化方式训练起来更加快速且实现方便。
- Meta-SGD适用范围广:分类、回归、强化学习。