目录
摘要
Introduction
Meta Learning的建模思路
第一步
第二步
第三步
Techniques Today
MAML
MAML vs Model Pre-training
Reptile
MAML vs Model Pre-training vs Reptile
结论与展望
摘要
元学习的训练样本和测试样本都是基于任务的。通过不同类型的任务训练模型,更新模型参数,掌握学习技巧,然后举一反三,更好地学习其他的任务。传统的机器学习训练模型 f ,而元学习有让机器根据数据找一个能找 f 的函数 F 的能力。
Meta Learning的方法可以简单理解为三步:首先找到一个learning algorithm的集合,之后寻找到一个判别learning algorithm好坏的方法,最后得到一个最好的learning algorithm做为F。Meta Learning 的算法有很多,有些高大上的算法可以针对不同的训练任务,输出不同的神经网络结构和超参数,这次要介绍的 MAML 和 Reptile,它们不改变深度神经网络的结构,只改变网络的初始化参数。MAML和Reptile相比较,MAML一般是只走了一步,然后更新meta网络,而在Reptile中,训练任务的网络可以更新多次。与pre-training不同,MAML更看重未来参数的表现,而pre-training方法更看重当前网络初始化参数的表现。
Introduction
Meta Learning被称作元学习,不同于Machine Learning的目标是让机器能够学习,Meta Learning则是要让机器学会如何去学习。
举例来说,机器已经在过去的100个任务上进行了学习,现在我们希望,机器能够基于过去100个任务学习的经验,变成一个更厉害的学习者,这样当在第101个新任务到来之时,机器能够更快地学习。值得注意的是,机器之所以能够学习地更快并不是依赖于在旧任务中已获取的“知识”,而是机器学到了如何去更好获取知识的方法,并将这一方法应用于新任务当中,从而较快地提升学习效率。
以上图为例,假设前99个学习任务都是各种辨识任务,例如语音辨识、图像辨识等,在前99个任务学习完成之后,我们给机器一个新的学习任务,而这个新的学习任务与前99个任务没有任何关联,譬如是一个文本分类任务。而现在,Meta Learning的目的就是希望能够通过前99个辨识任务的学习让机器在新的文本分类任务上学习得更好,也就是说,机器在前面的学习中不仅仅学到了如何解决某些特定的任务,而是学习到了学习本身这件事情,从而能提升自己在面对新任务上的学习能力。所以,Meta Learning就是一门研究如何让机器学会更好地学习的新兴研究方向。
Meta Learning的建模思路
总体介绍
首先,上图描述的是传统机器学习在做的事情——由人来设计一套学习算法,然后这个算法会输入一堆训练资料,通过长时间的训练得到算法里的参数,这堆参数拟合出一个函数f*,然后用测试资料来测试这个f*,如果效果达标就证明机器学到了该特定任务的实现函数f*。而Meta Learning做的事情与上述描述不同的地方在于,将其中由人来设计学习方法的过程,改成了由机器来设计一套学习方法。
如上图所示,如果将原本机器学习中的训练资料记为Dtrain,那么在Meta Learning中的训练资料变为一堆Dtrain和f*的组合,,然后现在机器要求解的结果不再是f*,而是一个新的函数F,这个F决定在给的Dtrain的情况下f*的结果。简言之,如果机器学习的定义表述为:根据资料找一个函数f的能力,那么Meta Learning的定义就可以表述为:根据资料找一个找一个函数f的函数 F 的能力,如下图所示:
就是machine learning和meta learning都是要找一个function,但是两者所要寻找的function是不相同的,前者寻找的是解决一个问题的f,后者寻找的是生成f的F,F的输入是训练数据,输出是解决一个小问题的f。
机器学习的方法可以简单理解为三步:
- 找到一个f的集合
- 找到一个判别f的方法(loss function)
- 在这个集合中寻找最好的f
meta learning的方法和machine learning的方法是十分相似的,也是三步:
- 找到一个learning algorithm的集合
- 之后寻找到一个判别learning algorithm好坏的方法
- 最后得到一个最好的learning algorithm做为F
现在,清楚了Meta Learning的架构搭建思路以后,我们就可以顺着该思路一步一步寻找解决方案。
第一步
首先第一步要做的,是准备Meta Learning的训练资料。前面说过,Meta Learning的训练资料是一堆Dtrain和f*的组合,显然一堆Dtrain是准备好的,,于是重点在于,一堆f*该如何准备。事实上,f *本身是一个抽象概念,我们需要知道它的具体实例是什么,不妨以传统的神经网络为例来介绍。
上图是大家都熟悉的梯度下降算法,它的流程可以简述为:
设计一个网络架构->给参数初始化->读入训练数据批次->计算梯度->基于梯度更新参数->进入下一轮训练->……
对于每一个具体的任务来说,它的全部算法流程就构成了一个f*,,(如图中红色框架)每当我们采用了一个不同的网络架构,或使用了不同的参数初始化,或决定了不同的参数更新方式时,我们都在定义一个新的f*。。所以,针对梯度下降算法来说,Meta Learning的最终学习成果是在给定训练资料的条件下,机器能够找到针对这笔资料的SGD最佳训练流程f*best,因此,前边我们探讨的为Meta Learning准备的f*,实际上是由包含尽量多和丰富的组合方式的不同训练流程来组成的。
那元学习与传统深度学习的联系在哪儿呢?注意到红色方框中的东西都是人为设计定义的,其实元学习的目标就是去自动学习或者说代替方框中的东西,不同的代替方式就发明出不同的元学习算法。
第二步
在说这一步之前,我们先来看一下元学习的数据集:
一般的机器学习任务是单任务的,所以数据集是一堆训练数据,和测试数据(右上角图)。但是在meta learning的任务是多任务的,所以在这种情况下,我们需要做的是将很多的任务分为训练任务和测试任务,之后每一个小的任务都有训练数据和测试数据。比如说一共有十个任务,我们将其中的八个作为是训练任务,剩余的两个作为测试任务,其中每一个任务都有自己的测试数据和训练数据。以此来检测meta learning的学习能力。我们为了名字混淆,我们将每一个任务的训练数据称为support set,并且将每一个人物的测试数据称为query set。
接下来我们来说第二步,这一步要做的,就是设计评价函数 F好坏的指标。具体来说,F可以选择各种不同的训练流程f*, ,如何评价F找到的现有流程f*,以及如何提升f*,这是Meta Learning中比较重要的部分。
我们先来说明Meta Learning中函数F的损失函数的定义。
如上图所示,在Task1中,函数F学习到的训练算法是f1,,而Task1中的测试集在上f1的测试结果被记作在Task1上的损失值l1,同理,在Task2中的测试集在f2上的测试结果记作在Task2上的损失值l2, 最终,函数F的损失函数就定义为所有Task上的损失的总和L(F)。
第三步
上面一步我们已经求得了函数F的损失函数,即所有Task上的损失的总和:L(F),这一步我们就是要找到一个F*,使得L最小:F* = argmin(L(F)),也就是说我们用梯度下降的方法不断的更新F的参数,得到一个最好的F*,之后我们将训练好的F*放入到测试任务集中进行测试,比如第一个测试任务是一个自行车汽车识别器(上图右),我们将小的训练数据放入到F*中,之后得到一个分类器f*,之后我们将测试数据放入到f中,得到最终的loss,作为这次测试的结果。
Techniques Today
MAML
MAML算法想要解决的问题是,对于F在每一个任务中学习到的f,规定f负责决定参数的赋值方式,而不涉及模型的架构,也就是说,MAML中的f网络结构和更新方式都是提前固定的,MAML要解决的是如何针对不同任务为网络赋不同的初始值,换种说法就是想让机器自己学会初始化参数。
MAML vs Model Pre-training
看到meta learning的更新参数方法以后就会想到迁移学习中的model pre-training(假设task2的训练集太小不好训练,我们将和task2相似的task1作为先导数据集,进行训练,将训练的结果作为task2的初始化)。那么这两种方法有什么区别呢?
- meta learning中的参数 是模型刚刚训练生成的,通过训练之后的参数用测试集求loss;
- 但是model pre-training的参数就是当前使用的模型的参数,也就是直接在原有基础上求loss没有经过训练。
总结一下就是:
- Model Pre-training方法想要得到的参数 就是在任何task上都表现良好的参数。但是MAML想要得到的参数是在某一任务task中经过训练集训练所能得到的比较好的参数。
- Model Pre-training看重的是现在的表现,但是MAML看重的是未来的潜力。
Reptile
MAML vs Model Pre-training vs Reptile
- g1 是pre-train的更新方向
- g2是MAML的更新方向
- g1+g2是Reptile的更新方向,当然还可以更新更多次
结论与展望
元学习的损失通过N个任务task的测试损失相加得到。 Meta Learning 算法有很多种,这次课要介绍的是 MAML 和 Reptile,它们不改变深度神经网络的结构,只改变网络的初始化参数。
MAML工作机理:
- 随机初始化模型的参数
- 循环,可以理解为一轮迭代过程或一个epoch
- 随机对若干个task采样,形成一个batch。
- 对batch中的每一个task进行循环
- 对利用batch中的某一个task中的support set,计算每个参数的梯度。
- 第一次梯度的更新。
- 结束第一次梯度更新
- 第二次梯度更新。这里用的样本是query set。步骤8结束后,模型结束在该batch中的训练,开始回到步骤3,继续采样下一个batch。
即MAML基于二重梯度,每次迭代包括两次参数更新的过程,所以有两个学习率可以调整,第一步梯度下降调整得到特定任务task m的参数,第二步梯度下降,用任务task m的损失函数在上一步求的参数上的梯度更新主网络参数,以此类似,最终得到各个task最优的初始化参数。
元学习和传统机器学习的区别:
- 传统的深度学习方法都是从头开始学习(训练),即learning from scratch,需要的训练数据也多,对算力和时间都是更大的消耗和考验。
- 元学习强调从不同的若干小任务小样本来学习一个对未知样本未知类别都有好的判别和泛化能力的模型