首发于书桌
模型无关的元学习:learn to learn

模型无关的元学习:learn to learn

Meta learning (元学习) 的兴趣首先起源于机器学习在few-shot learning问题中遭遇的困难。我们知道NN在大部分任务上,如CV / NLP,之所以能取得相当良好的表现,一个相当重要的因素便是这些领域易于获得海量的数据,well-presented data是能够驱动NN这类复杂模型从数据中提取模式的关键。

Few-shot Learning

但在某些任务中,其中的一些类别只有相当少量的数据(few-shots),如此一来few-shot learning的问题可以表述为:如何训练一个模型,让其在只见过某一个类很少的样本后,就能较好地分类该类样本。

Example meta-learning set-up for few-shot image classification, visual adapted from Ravi & Larochelle ‘17.

以MNIST为例说明该问题,假设现在模型得到一个手写体数字3的样本,如何学习这一张图片才能让该模型更好地分类数字3呢?”数字3″这个类别本身在特征空间中服从一个类别分布,除了输入空间中的pixel-level的信息,从一张数字3的图片中我们还可以观察到一些更复杂的特征:如3有两个突出的笔触、数字本身是非封闭的、图案大体垂直 … 等等。此外还有一些类别无关的特征:笔画的粗细、笔锋的角度等等。显然为了提升few-shot learning的性能,我们需要促使模型学习那些能够区分该类别的主要特征,而非类别无关的、对分类该样本没有帮助的特征。

说到学习主要特征,我们自然能够想到使用一些压缩表示的方法来提取这些特征。在few-shot learning中一个比较常见的做法便是学习一个Embedding,将原始输入空间嵌入到低维度的空间中,对于新样本在嵌入空间中计算两者的欧氏距离来判断该样本是否属于该类别。模型学习的主要目标是找出那些最能区分该类样本的特征,并学习如何将输入压缩并转换到这类特征中去。

在这套方法论中我们可以总结出一个核心思想:不要只关注于学习单个类别在样本空间上的分布最后尝试分类它,而应该关注每个类别在整个任务空间上的分布。这样做理论上能够解决许多问题:few-shot learning缺乏完整样本分布的学习问题,当任务本身改变时模型如何快速适应新任务的问题。其中后者便是本文主角Meta learning所主要关注的问题。

Why Meta Learning?

我们知道相比人类,一个RL模型的训练需要相当长的时间来收敛,为什么会出现这种差异?换言之,人类相比于RL模型在面对一个新的任务时有什么优势,能够导致一个人只需要玩上几局就能学会玩一个Atari小游戏,而RL模型却需要成千上万轮的训练? Meta learning讲的story给我们的答案是:先验知识(元知识) 与 快速适应

  1. 先验知识:是指人类在自己的生活中会逐渐积累一些普适的、对一些任务都适用的知识,比如在玩Atari小游戏时我们从一开始就理解输掉游戏是一个坏的结果,而我们所做的决策应当避免此类结果的发生。此外我们还自然知道一个小车的移动具有惯性,对对手开枪可以打败对手等。
  2. 快速适应:是指人类的神经结构在生活中(或者是进化过程中),以某种我们还不理解的方式具有基于已有知识快速学习一个新的任务的能力,放入上文的语境中,即我们天然具有直接关注”任务分布”的能力,可以根据已知知识忽略一些任务无关的信息,从而在一个崭新的任务中也能快速学习对应的行动策略。

上面两种概念相互之间并没有一个明确的界限,但又有所区别,两者相辅相成。
“任务分布”这个概念本身在meta learning中是一个绕不开的概念,文中对Task T有如下形式化描述:
Formally, each task T = {L(x1, a1, … , xH, aH), q(x1), q(xt+1|xt, at), H} consists of a loss function L, a distribution over initial observations q(x1), a transition distribution q(xt+1|xt, at), and an episode length H. In i.i.d. supervised learning problems, the length H = 1. The model may generate samples of length H by choosing an output at at each time t. The loss L(x1, a1, … , xH, aH) → R, provides task-specific feedback, which might be in the form of a misclassification loss or a cost function in a Markov decision process.

余下的问题是,我们如何赋予模型这种总结先验知识并将其用于快速适应一个新任务的能力?多数meta learning的文章选择学习超参数,通过设定一个良好的structure / learning rate / momentum / decay / dropout 等等来实现few-shot classification 以及 fast RL (AutoML … = = )

Various recent meta-learning approaches.

MAML的做法是:直接优化一个初始表征(representation),以该表征为基础,模型可以使用基于少量样本做出的梯度更新高效地做出调整。

听起来很像 pre-train + fine-tuning,但可以有效地使用小样本数据实现Fast Adaptation

文章中直观表示MAML作用的图例,\theta是MAML所学习到的表示,在面对一个新的任务\theta_n时,模型可以从\theta出发快速适应该任务

Meta Learning 概念的形式化表示

Recall 文中对任务的定义:T = {L(x1, a1, . . . , xH, aH), q(x1), q(xt+1|xt, at), H}
模型f将样本空间上的观测x映射到输出a,其中L代表任务本身定义的Loss函数;q(x1)是初始观测(feed的第一个样本)的分布;q(xt+1|xt, at)是在当前观测xt与输出at下下一个观测xt+1所服从的分布(类似马尔科夫链的状态转移概率);和一个”epsilode length” H,该模型f在每个时刻/状态t从H次观测{x1, … , xH}中生成H个输出{a1, … , aH}。

在Meta Learning的语境中,我们的目标是训练一个模型使其能最好地适应一个任务分布p(T) (i.e. 对于p(T)中的各种任务模型都能快速适应)。

以K-shot learning为例,我们最终得到的模型会面对一个从任务分布p(T)中得到的新任务Ti,模型的任务就是根据该特定任务Ti给出的观测分布qi,以及给定的feedback (损失函数) Lti,仅使用K个样本来快速适应任务Ti。

在meta learning的训练过程中,使用K个样本更新后模型在任务Ti测试集上的 test error (基于Ti给定的损失函数Lti计算) 在meta learning的训练过程中起到training error的作用。同样地,meta performance即使用K个样本更新后模型的test performance。

MAML: Model-Agnostic Meta-Learning

MAML最大的特点是Model-agnostic (模型无关的),MAML对模型的形式不做任何假设,这意味着MAML可以用一个普适的方法更新任意模型的参数来使其有快速适应的能力(fast adaptation)。这个想法背后的intuition是内部表示中的一部分表示相比其他表示更加transferrable,即这些表示在任务分布p(T)中都具有广泛的适用性,而非只在一个任务中有效。

为了找到上述的良好内部表示,MAML尝试找出那些对任务变化敏感的参数,通过反向传播test loss的梯度,在这些参数上做出很小的更新便能在大幅提升整个任务分布p(T)上的performance。

实现该目标的具体方法非常简单直接:

  1. 随机初始化网络的参数
  2. 从任务分布中选取一些任务t, 从训练集中选K个样本(K-shot learning)进行一步梯度更新
  3. 在测试集上评价更新后的网络
  4. 对任务t的测试表现求初始化网络时的参数的梯度, 然后依据这些梯度更新网络参数然后用更新后的参数返回第一步
MAML算法描述
以Ti上进行1次梯度更新为例得到的 θi

上述的目标是优化得到一个最优的参数 θ (见fig. 1),在适应一个新任务Ti时,经过在Ti上的1次/K次梯度更新得到参数 θi 。形式化表示如右图所示(算法第6步)。

注意到算法输入中有两个step size超参数,其中 α 为在特定任务Ti上进行梯度下降更新 θi 的learning rate, β 为遍历p(T)上所有任务Ti后更新 θ 的learning rate。

既然最终的目标是使 θ 在 p(T) 任意任务 Ti 上快速适应得到的 θi 都能有良好的表现,MAML的meta learning goal可以形式化表示为:

meta-objective

即寻找一组参数 θ 使所有任务经过K次更新之后的损失Lti之和最小。

跨任务的meta-optimization由SGD完成(算法第8步) 。由于 θ 与 θi 有同样的形式,所以计算梯度与更新的方式没有太大区别。

作者展示了MAML在两种不同任务: Supervised Classification / Regression 以及 Reinforcement Learning 下的运行过程 (Eq. 2为交叉熵损失/均方误差, Eq. 4为RL的损失函数)
Equation 4. (详见原文[1])
Appendix: 其他meta learning方法 (机器之心翻译自BAIR blog)
在元学习过程中,模型在元训练集中学习不同的任务。在该过程中存在两种优化:学习新任务的学习者和训练学习者的元学习者。元学习方法通常属于下面三个范畴中的一个:循环模型(recurrent model)、度量学习(metric learning)和学习优化器(learning optimizer)。
循环模型
这种元学习方法训练一个循环模型(即 LSTM),模型从数据集中获取序列输入,然后处理任务中新的输入。在图像分类设置中,这可能包括从(图像、标签)对数据集中获取序列输入,再处理必须分类的新样本。
度量学习
即学习一个度量空间,在该空间中的学习异常高效,这种方法多用于小样本分类。直观来看,如果我们的目标是从少量样本图像中学习,那么一个简单的方法就是对比你想进行分类的图像和已有的样本图像。但是,正如你可能想到的那样,在像素空间里进行图像对比的效果并不好。不过,你可以训练一个 Siamese 网络或在学习的度量空间里进行图像对比。与前一个方法类似,元学习通过梯度下降(或者其他神经网络优化器)来进行,而学习者对应对比机制,即在元学习度量空间里对比最近邻。这些方法用于小样本分类时效果很好,不过度量学习方法的效果尚未在回归或强化学习等其他元学习领域中验证。
学习优化器
最后一个方法是学习一个优化器,即一个网络(元学习者)学习如何更新另一个网络(学习者),以使学习者能高效地学习该任务。该方法得到广泛研究,以获得更好的神经网络优化效果。元学习者通常是一个循环网络,该网络可以记住它之前更新学习者模型的方式。我们可以使用强化学习或监督学习对元学习者进行训练。近期,Ravi 和 Larochelle 证明了该方法在小样本图像分类方面的优势,并表示学习者模型是一个可学习的优化过程。
作为元学习的初始化
迁移学习最大的成功是使用 ImageNet 预训练模型初始化视觉网络的权重。特别是当我们进行新的视觉任务时,我们首先只需要收集任务相关的标注数据,其次在 ImageNet 分类任务中获取预训练神经网络,最后再使用梯度下降在相关任务的训练集中微调神经网络。使用这种方法,神经网络从一般大小数据集中学习新的视觉任务将会变得更有效。然而,预训练模型也只能做到这一步了,因为神经网络最后几层仍然需要重新训练以适应新的任务,所以过少的数据仍会造成过拟合现象。此外,我们在非视觉任务中(如语音、语言和控制任务等)并没有类似的预训练计划。那么我们能从这样的 ImageNet 预训练模型迁移学习过程中学习其他经验吗?

--学界 | 与模型无关的元学习,UC Berkeley提出一种可推广到各类任务的元学习方法
cloud.tencent.com/devel
翻译自链接: bair.berkeley.edu/blog/

[1] Finn C, Abbeel P, Levine S. Model-Agnostic Meta-Learning for Fast Adaptation of Deep Networks[J]. 2017.
arxiv.org/pdf/1606.0483
zhiningliu1998zhiningliu.home.blog图标

编辑于 2019-01-06

文章被以下专栏收录