论文笔记 – Model-agnostic meta-learning for fast adaptation of deep networks

Finn, Chelsea, Pieter Abbeel, and Sergey Levine. “Model-agnostic meta-learning for fast adaptation of deep networks.” ICML 2017

1 简介

这篇文章设计了一个与模型无关的元学习算法。之前的元学习,是 learning to learn,是学习一个 optimizer,这个 optimizer 再去学习模型该有的参数,相当于套娃。这样会产生许多新的参数(我的理解:传统机器学习就对应元学习的一个 optimizer,元学习元训练的过程中有好多 optimizer,因此参数量翻了很多倍?)。

这篇文章的做法是,只用一个 optimizer,在上面 optimizer 训练 —— 元训练 这样交替循环进行。这种方式得到的 optimizer,在所有的 task 上都能用很少的数据,在一步或者很少的几步梯度下降迭代内,优化到一个不错的结果。

前半部分的 optimizer 训练其实就是普通的梯度下降,后面的元训练,是在 task 的测试集上计算 loss,用这个 loss 梯度下降。这样做的意义是,可以使 loss 对新 task 的敏感度最高,这样在得到的模型中,梯度下降一小步,task 性能就强好多。

2 MAML

2.1 问题的定义

我先来用一个例子来定义一下 meta-learning 的任务,这部分论文里并没有写,但是对后面的理解非常重要。我参考的是 [3]。

以拟合正弦函数为例,我们的任务是让我们得到的模型能用几个很少的点,拟合任意的正弦函数 $y = a\; sin(x+b)$,那么我们就给出这样的一个训练集:数据集中有 n 个 task,每个 task 是 10 个点,对应一个 $a,b$ 随机取值的正弦函数曲线。随机取三个 task,将如图所示:

那取 1000 个 task,样本的分布将会是:

所以说,元学习的数据集是很多“普通机器学习”的数据集,我们管一个“普通机器学习”数据集叫 task。如果所有 task 直接进行梯度下降学习,这怎么可能学到东西!

2.2 A Model-Agnostic Meta-Learning Algorithm

之前 meta-LSTM 这篇文章是整了一个 RNN 作为优化器,开头说了,这样不好(我的理解:LSTM 做优化器,一方面,对每个参数都用一样的优化,这种简化不太好;另一方面,还是要 iteration 很多次,参数量问题还是存在的)。

作者的 intuition 是,一定有一组参数,它代表的模型在新的任务上能最快的接近最优解。

这张图来自 [1],MAML 的最终目标是学到参数 $\phi$ 的位置,这样无论在 task1 还是 task2,距离全局最优解都非常近;而我们并不关心在 $\phi$ 处 loss 的大小。那么,该怎么找 $\phi$ 的位置呢?直接看原文的算法图:

我们一开始随机初始化参数 $\theta$,然后开始进入循环:随机挑选一批 task,作为 meta-learning 的训练。每个 task 都包含训练集和测试集。在每个 task 中,把训练集作为一个 batch,来一步梯度下降:$$\theta_i’ = \theta – \alpha\triangledown_\theta \mathcal{L_{T_i}}(f_\theta)$$

其中 $\alpha$ 可以是超参数,也可以在元学习中学习。

对每一个 task 都进行梯度下降之后,开始元学习过程:元学习过程的训练损失,就是在之前所有 task 的测试集上的损失之和:$$\min_{\theta}\sum_{\mathcal{T_i}\sim p(T)}\mathcal{L}_{T_i}(f_{\theta_i’}) = \sum_{\mathcal{T_i}\sim p(T)}\mathcal{L}_{T_i}(f_{\theta – \alpha\triangledown_\theta \mathcal{L_{T_i}}(f_\theta)})$$

还是通过 SGD 来更新参数:$$\theta \leftarrow \theta – \beta\triangledown_{\theta}\sum_{\mathcal{T_i}\sim p(T)}\mathcal{L}_{T_i}(f_{\theta_i’})$$

这是什么意思呢?回归到一开始的拟合正弦曲线的例子上,前半部分的目的就是先用几个例子训练,让得到的模型能和“这几个例子的总体概率分布”比较好的拟合;后半部分是对于每一条曲线,都尽量让模型再来一步迭代,就能尽量拟合。这个 meta loss 的含义也正是这样,即使得在新出现的 test 数据上,一步优化,loss 变得最少。这样训练出来的就是最“敏感”的 $\phi$ 位置了。

作者在文中把后半部分在 test 上计算出的 loss 的梯度叫做“梯度的梯度”,说什么可以计算 hessian 矩阵能计算,这里我基础知识不懂【#TODO1】。

3 在各类算法的实现

作者讲了 MAML 在回归、分类、强化学习上的具体用法。分类就是按照 MN 里 episode 的方式进行,loss 可以是均方误差,也可以是交叉熵;强化学习的我没看。

4 实验结果

如上图所示,左边是 MAML,在新数据上迭代几步,就有很好的效果(原始模型什么水平我不在乎,反正迭代几步就能达到很好的水平);右边是迁移学习,在新数据上迭代几步也没什么用(非常依靠原始模型,fine-tune 的效果很有限)。

这张图表明,粉色的 MAML 在新任务上,第一步效果最大,但是后面每一步都还会有效果,比黄色的 transfer 效果好得多。另外,MAML 在拟合正弦曲线的任务上,如果新任务里只给出输入区间半侧的样本,整条曲线也能很好的拟合出来(说明学到 meta 知识了)。

在分类问题上,回到原来的 FSL 问题,Omniglot 和 mini-ImageNet 都是 SOTA,且参数比 MN 和 meta-LSTM 少。

MAML 要计算“梯度的梯度”,很慢。如果把后半部分换成直接算梯度,直接更新,而不是找“最小的梯度”,那么能快 33%,且性能掉的不多(但是这样和传统的机器学习梯度下降还是不同的?我有点乱了 【#TODO2】)。说明 MAML 的改进主要来自前半部分的参数更新(晕了)。

6 总结

这篇文章我也是没怎么看懂。好难,我还是需要先看看 meta-learning 最基础的东西去。

这里再放一个想法:如果神经网络用非常简单的结构,但是用元学习的方法,套娃套很多层,这可行吗?会不会有不错的效果呢?Reptile 是不是就是这样呢?

7 引用和拓展阅读

[1] 李宏毅机器学习2019(国语)-MAML 和 pdf

[2] What is Model-Agnostic Meta-learning (MAML) ? 是这篇文章的讲解,清晰易懂,需要翻墙

[3] Paper repro: Deep Meta-learning using “MAML” and “Reptile”

8 TODO

  1. The MAML meta-gradient update involves a gradient through a gradient. Computationally, this requires an additional backward pass through f to compute Hessian-vector products, which is supported by standard deep learning libraries such as TensorFlow.
  2. On MiniImagenet, we show a comparison to a first-order approximation of MAML, where these second derivatives are omitted. Note that the resulting method still computes the meta-gradient at the post-update parameter values θi′, which provides for effective meta-learning.
  3. [3] 中我还不太能理解的句子:The meta-learning approach of both Reptile and MAML is to come up with an initialization for neural networks that is easily generalizable to similar tasks. This is different to “Learning to Learn by Gradient Descent by Gradient Descent” in which we weren’t learning an initialization but rather an optimizer. 为什么 meta-LSTM 的目标不是找一个好的 initial?

发表评论