元学习:基础与应用
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.1 研究背景

当下的元学习方法仍然在相似的任务之间进行模型的推广。例如,已有任务是进行猫和狗的图片分类识别,而推广到的新任务是进行羊驼的图片识别,任务仍然是图片分类,只是图片的类别不同,新任务中的图片类别没有在训练任务中出现过。元学习的目标是实现模型在差异较大的任务之间的推广和适应,例如,已有的任务是图片分类识别,而希望推广到的新任务是语音文字的分析识别。显然,在相似的任务之间进行模型推广较容易,而在差异较大的任务之间进行模型推广较难。

当下,就是否应当在差异较大的任务之间迁移模型有两种截然不同的看法。

一种看法认为应当追求在差异较大的任务之间迁移模型,且不能发生较大的精度损失,这就要求发现任务之间的共性、内在规律,即使在差异较大的任务之间,这些共性的规律仍然是存在的。模型中包括两部分:对每个任务特性的建模、对所有任务共性的建模,这两部分往往是需要权衡(tradeoff)的,此消彼长。对每个任务特性的建模越多,对所有任务共性的建模就越少。模型在任务上的精度太高,出现过拟合后,模型泛化到其他模型上的能力就会减弱。相似性太高的任务可以视为同一个任务,只是将同一个任务分割成了很多任务而已。反之,对每个任务特性的建模越少,对所有任务共性的建模就越多,模型在任务上的精度会受到损失,但是模型泛化到其他模型上的能力变强。元学习追求的是,将对每个任务特性的建模和对所有任务共性的建模进行分割,可以在模型中显式地看到这两个模块,在提高模型泛化能力时,增加对所有任务共性的建模,保持对每个任务特性的建模不变,从而保持模型在任务上的精度,同时增加模型的泛化能力,且不过分增加模型的计算量,给予模型额外的高泛化能力,何乐而不为。一般认为,对所有任务共性建模的复杂程度,不会超过对每个任务特性建模的复杂程度。

另一种看法认为不应当在差异较大的任务之间迁移模型,认为这是一个病态的问题,不可能实现,当任务之间没有任何相似性时,没有必要将完全不同的任务放在一起建模。直观上看,我们解决新问题时,会寻找过去的经验,从中获得灵感,再在其中进行创新,找到解决问题的办法,虽然任务看起来完全不同,但是也有可以借鉴的思想。例如,曹冲称象的故事,它说明了完成新任务的一种思路。大象太大无法称量,这是一个新任务,有人说,造一杆大秤,有人说,将大象切块来称,这些是过去解决称量物体重量问题的经验。根据这些经验,曹冲想到,找到一艘能装下大象的大船,可是大船不是大秤;大象不能切块,但是可以找到很多块石头,使这些石头的总重量等于大象的重量,然后称量每块石头的重量,再求和,就得到了大象的重量,实现了对大象的分块。接下来,曹冲进行了创新,那就是将大象赶到大船上,记下大船的吃水深度,然后,在大船上放石头,直到大船到达同样的吃水深度,之后,称量每块石头的重量,再求和,就得到了大象的重量。如此一来,通过创新,大船转变成了大秤,曹冲完成了新任务。很显然,照搬过去的经验是无法完成新任务的,其中最重要的一环是创新。在任务之间差异较大时,照搬过去的经验,不利于任务的完成,甚至会对任务产生误导,这种现象称为负迁移。因此,许多人认为在差异较大的任务之间迁移模型是病态问题,但是,曹冲做到了,由此可见,经验是否有用,在于使用者如何借鉴经验,在于如何创新。

元学习方法可以实现模型的快速准确迁移,降低模型训练的成本,让模型快速适应新任务。一般认为新任务与已有任务之间应该具有一定的相似性,模型迁移就是建立在任务之间的相似性上的,否则,使用已有任务的经验来完成新任务并没有帮助,甚至过分的经验主义会有害于新任务的完成。虽然学者们希望元学习创造出来的机器可以像人类一样,在很多看似无关的任务中,找到相似性,借鉴经验,解决新的问题。但是同样地,也有学者认为在相关性不明显的任务之间借鉴经验可能会导致负迁移。笔者认为只要模型能对任务之间的相似性进行合适的建模,那么经验的迁移便是有迹可循的,不会导致负迁移。

然而,任务之间是否相似和我们看问题的角度有关。例如,猫和老虎都是猫科动物,尽管从外貌上来看它们并不那么相似,猫和老虎之间的相似性体现在它们的生物学分类上;通过DNA检测可以发现人们之间的亲缘关系,找到家谱中失散的亲人,虽然看似无关,但在某种维度上进行衡量时,可以发现相似性。因此,相似性代表了任务之间公有的信息,发现任务之间的相似性是元学习的重要一环。元学习让我们在相似任务上可以借鉴过去的经验,让任务的完成更加顺利,不用从头开始重新训练模型。

发掘任务之间的相似性是很难的问题,衡量相似性的维度有很多,在一些维度上是不相似的,在另一些维度上是相似的,有的维度决定了任务能否完成,有的维度和任务的完成没有关联。因此,关注的维度应该是和任务完成有关的维度,这些维度关系到完成任务选择哪些模型、选择怎样的模型训练方式等,找到这些关注的维度,并且在这些维度上寻找任务之间的相似性。诚然,在差异很大的任务之间,依靠相似性来完成新任务是危险的,容易出现照搬经验带来损失的情况,没有人能预知如何使用经验是正确的,有监督学习可以告诉大家怎样使用经验会带来增益,模型可以对于经验使用的方式进行探索。创新是创建模型时必不可少的一环,创新避免了照搬经验带来损失的情况,创新可以是重要维度的组合,也可以是重要维度的创造。

1.1.1 元学习与深度学习的区别和联系

深度学习可以用来解决很多实际问题,让人们的生活变得更加智能、更加方便,例如,出行规划和出行时间预测让人们节约了出行时间,并且缓解了交通拥堵。在实际应用中,深度学习拥有大量训练数据,用大量参数来描述问题,可将问题拟合得很好。深度学习能很好地解决生活中遇到的问题,加深加宽深度神经网络,可以达到人们需要的预测精度。但是深度学习也常常会遇到过拟合或者泛化这种挑战,当模型出现过拟合时,模型的泛化能力很低。统计学习模型没有深度学习模型包含的参数多,训练较快,需要的训练数据量较少,泛化能力不错,但是对问题的表示力没有深度学习模型好。元学习提供了将统计学习和深度学习结合起来的框架,得到的元学习算法既不会过拟合,又可以通过深度学习框架形成表示力强的深度模型。

这里需要介绍一些统计学中经常遇到的概念—样本内预测(In-Sample Prediction)和样本外预测(Out-of-Sample Prediction),如图1.1给出的示例。样本内预测是指预测点在观测值的范围内,即预测点的邻域中有足够的观测信息,这种预测相对容易,也更加准确。样本外预测是指预测点在观测值范围之外,需要对学习到的规律进行外推,此时预测点的邻域中没有足够的观测信息,这种预测较难。提高模型的泛化能力是为了更好地应对样本外预测,将模型更好地外推到观测值范围外的预测点。

img

图1.1 样本内预测和样本外预测

对于深度学习来说,如需进行样本外预测,可另外进行样本外数据集的收集和标注,然后使用深度学习模型来进行拟合,从而实现样本外预测。思想是将样本外预测问题转化为样本内预测,因此,从深度学习的角度看来,进行样本外预测无须进行元学习。然而在一些实际应用中,由于时间紧迫,且样本外的情况千差万别无法提前预知,尤其是在线学习中需要应对从未发生过的突发状况,这样的情况使得提高模型的泛化能力变得十分重要。

在生活中,人们常常不可避免地要处理一些意想不到的突发状况,可能有过去的经验来借鉴,也可能没有,这需要团队在突发时刻冷静思考,积极讨论,考虑各种解决方案,仔细衡量风险得失,找到最合理的解决方案。举个例子,2020年新冠肺炎疫情爆发,全球经济面临严峻考验,美国股市骤然下跌,出现了历史上从未出现过的多次熔断。在这种情况下,团队保持冷静,团结思考解决问题的方案,虽然没有足够的历史数据用来分析这种市场情况(过去没有发生过这样特殊的危机),但是团队可尽量寻找历史上类似时期的数据,基于现状对未来进行判断和预测。

考虑过去发生过类似危机的情况,2008年的次贷危机虽然不是由于疫情引发的,但是仍然带来了经济危机。2008年的次贷危机经历了两个阶段,一是信用体系危机,二是实体经济危机。类似地,可以推测在2020年的疫情危机中可能也会出现这样两个阶段,一是公共卫生危机,二是实体经济危机。进行这种推测的根据是,要考虑两个任务的相似性体现在何处,如果认为二者相似性体现在都具有两个阶段上,就会得出这样的推测。显然,我们无法判断这种相似性是否真正存在,也无法判断这样的推测是否正确,只有当未来已经成为过去的时候,我们才能对过去的模型进行判断。深度学习模型对样本中的数据集已经研究透彻,在应对突发状况时,需要将深度学习模型学到的经验推广到样本外情况,分析样本外情况与样本内情况的共性,将样本内问题的经验拓展到样本外问题,从而合理解决样本外问题。

任务(Task)代表的是研究者需要解决的问题,例如,通过无监督学习将数据集中的样本进行分类,或者通过回归模型分析时间序列的走势。如图1.2所示,深度学习(Deep Learning)输入的基本单元是观测样本点,深度学习输入的是一个训练集(Training Data)、一个验证集(Validation Data)和一个测试集(Testing Data),它们都是样本点的集合。深度学习的目标是从数据集中找到规律,进行预测,解决问题。这里,输入的一组数据集就是一个任务。元学习中输入的是许多任务,目的是从许多任务中提炼出完成任务的方法,从而达到用一个元学习模型完成多个任务的目的,让机器学会在面对新任务时自我更新,从而快速有效地完成新任务。元学习模型代表的是一个针对不同任务给出不同学习器的模型泛化机制。

元学习考虑的基本单元是任务,元学习的输入是许多任务,元训练集(Meta-Training Data)、元验证集(Meta-Validation Data)和元测试集(Meta-Testing Data)都是由抽样任务组成的任务集合。元训练集和元验证集中的任务用来训练元学习模型,元测试集中的任务用来衡量元学习模型完成任务的效果。图1.2中所示的支持集(Support Data)是所有有标注数据(Labeled Data)的集合,问询集(Query Data)是所有无标注数据(Unlabeled Data)的集合,训练集和验证集是从支持集中随机抽样生成的,测试集是从问询集中随机抽样生成的。每个任务包含一个训练集、一个验证集和一个测试集。任务定义是基于对真实问题的分析判断来进行的,遇到复杂问题时,需要将复杂问题分解为容易解决的子问题,进而产生对任务的划分和界定。元学习模型在解决复杂问题时,首先处理好每个子任务,实现模型在每个子任务上的适应和推广,进而解决复杂多变的母问题。

img

图1.2 元学习数据集示意图

举例说明,在图片分类中,对所有动物图片的分类是一个任务,对所有植物图片的分类也是一个任务,植物和动物不同,所以这两个任务是不同的任务。在训练元学习模型时,类似地,可以使用片段式训练(Episodic Training)模式,随机抽取出许多小样本图片分类任务。接下来,举例说明片段式训练的步骤。在1000个不同的图片类别中,随机抽取5个类别,然后取出这5个类别对应的所有图片,组成图片数据集,进行图片分类,这是一个图片分类任务。在随机抽取过程中,会抽取出200组完全不同的类别组合,这些类别之间完全没有重复,每组类别里都有5个类别,取出这5个类别对应的所有图片,组成图片数据集,进行图片分类,于是形成了200个图片数据集的不同图片分类任务。在这200个不同的图片分类任务中,随机抽取150个任务作为元训练集,用于训练元学习模型,剩下的50个任务组成元验证集,用于调试元学习模型中的超参数。通过训练新类别的图片分类任务,提高元学习模型完成新类别图片分类任务的能力。

在元学习中,样本点是一个任务。在元学习中一般假设存在任务的概率分布——任务分布(Task Distribution),对于离散的任务,有离散的任务概率分布,对于包含连续参数的任务,有连续的任务分布函数。图1.3给出了任务分布的示意图,人们容易观测到的是任务分布中概率较大的样本点,即分布内任务(In-Distribution Task)。因此,分布内任务的处理有大量过去的经验可以借鉴;相反,人们不容易观测到任务分布中概率较小的样本点,即分布外任务(Out-of-Distribution Task),因此,分布外任务的完成只有少量过去的经验可以借鉴。这里的分布内任务对应于样本内预测的问题,而分布外任务对应于样本外预测的问题。元学习关注的是分布外任务的完成,即元学习模型的泛化能力。

img

图1.3 分布内任务和分布外任务

举例说明,在ImageNet上训练深度神经网络模型VGGNet,获得了预训练的深度神经网络模型。这里,分布内任务指的是已经训练过的任务的分布,包括所有已知类别的图片分类任务,此时,遇到一个新任务,其中包括新类别的图片分类,这种新类别在已经训练过的图片中并不存在,这里的新任务就是分布外任务,没有很多过去的经验可以借鉴,需要将已经训练好的深度神经网络模型扩展推广到新任务上。

在前面的例子中,新任务的标志是新类别的图片分类,但是新任务仍然属于图片分类任务的范畴,只是图片类别是过去训练过的图片中所没有的,从这个层面上来看,新任务和已经训练过的任务仍然是相似的任务。完成新任务的方式,是对预训练深度神经网络中的参数进行更新,常见的是对输出层的参数进行随机梯度下降法更新。

然而,新任务也可以是在新类别的图片中将重点物体用矩形框框出来,也就是Bounding Box问题。和上一个新任务相比,这里的新任务已经不是图片分类任务了。首先,这样的新任务没有很多过去的经验可以借鉴,再者,新任务和过去训练过的任务不那么相似。

这样的新任务怎么完成呢?研究表明,完成这样的新任务必须要对预训练深度神经网络模型的结构进行修改。首先,将全连接层换成上采样层,将图片特征映射到像素点上,获得像素点级的预测值,在每个像素点预测该像素点是否属于重点物体,进而给出Bounding Box的估计,用估计的矩形框框出图片中的重点物体。这时,为了适应新任务,神经网络模型的结构发生了变化,参数也发生了更新。显然,对于差异更大的新任务,神经网络模型需要改变的方面更多。

在元学习中训练过的任务大部分是分布内任务,而分布外任务的训练经验相对较少,所以分布外任务常常是小样本任务。因此,将分布内任务训练得到的模型推广到分布外任务非常必要,这是完成分布外任务的一种途径。通常是通过寻找分布外任务与分布内任务的相似性,通过相似任务的大量经验,来完成分布外任务。元学习模型的目标不仅是很好地完成分布内任务,而且在分布外任务上也要有很好的泛化性能。因此,元学习模型不仅包括深度学习模型的功能,而且具有多任务上良好的泛化性能。

深度学习模型是元学习模型的基础,元学习模型是深度学习模型结合任务间的泛化模型(Generalization Model)形成的,具体的结合形式有很多种。例如,基于相似性度量的元学习模型、贝叶斯元学习模型、基础学习器模型和元学习器模型。元学习模型非常灵活,涵盖范围很广,思路很多,几乎包括所有机器学习和统计学习的方法,界定元学习这个领域的范畴并不十分容易。在概念上,元学习和迁移学习非常类似;在应用上,元学习和强化学习、模仿学习、迁移学习有许多结合,可综合起来解决复杂的实际问题。

1.1.2 元学习应用举例

如今,元学习的应用场景主要有以下这些:(1)数据量很少却需要训练深度学习模型的场景;(2)在线学习需要实时更新深度学习模型,但是每个时刻获取的数据包都很小;(3)复杂的优化问题,包括许多连续和离散的超参数需要优化,元学习器指导基础学习器优先探索更有希望的超参数组合;(4)解决从头训练深度模型过于复杂或者无法实现的场景,必须借鉴过去的经验对深度模型的训练进行加速。

伯克利Bair人工智能实验室做了许多著名的元学习研究,并在元学习基础理论和机器人应用上做出了巨大的贡献。元学习在机器人领域的应用十分广泛,机器人为了完成复杂的动作,需要用深度学习模型进行训练。在抓取物体的动作训练中,通过深度学习,机器人学会了对于不同物体采用不同的抓取方式,例如,软的物体要捏紧一些。但是一旦环境发生细小的变化,已经训练好的深度学习模型无法快速且准确地迁移到新环境中,已有的方法不够快也不够准确。在这样的情况下,2017年,在Bair实验室工作的Chelsea Finn提出了模型无关元学习方法MAML,可以将训练好的机器人深度学习模型快速准确迁移到新环境,因此,元学习在机器人领域兴起了。与迁移学习不同的是,MAML使用了元学习器(元层)来指引基础学习器(基础层)完成任务。元层综合所有任务训练的经验,为新任务训练提供模型初始值,在新任务上经过少量训练就可以获得高精度的基础学习器。

MAML适用于所有基于随机梯度下降法优化的学习器,因此,所有深度学习模型都可以引入MAML模块,保持模型的精度,提高模型的泛化能力。深度学习模型的应用范围很广,适用于很多问题的解决,例如,翻译问题,包括稀有文字的翻译,古老语言的翻译,方言的翻译,在样本量少的情况下,深度学习模型没法训练那么多参数,于是需要元学习框架来解决深度学习模型的使用问题。元学习框架的引入,可以提高深度学习模型的精度和泛化能力。例如,在比赛中,元学习器可以预测足球运动的位置、速度等,提醒运动员提前进入指定区域,采取最优行动。例如,在机器人完成复杂任务时,元学习器可以根据当前场景,预测下一刻可能出现的突发状况,指引机器人提前做好准备,采取及时且最优的行动。例如,在对像素点进行插值的深度学习模型中,图片多变,图片中的内容也多变,引入元学习器,可指引深度学习模型在不同图片和不同内容处,相应地采取最优行动,提高插值的效果。

机器人在执行任务的过程中,经常会遇到突发状况,例如,机器人的某部件忽然损坏,或者环境忽然恶化,机器人遭遇暴雨冰雹等恶劣天气,这种突发状况发生概率小,属于分布外任务,机器人已经训练过应对这种突发状况的概率也很小。在这些情况下,机器人需要将已经训练过的深度学习模型推广到分布外任务,应对突发状况,而且需要快速准确的反应,MAML快速准确迁移的特性使它成为解决这种问题的首选。

元学习最重要的应用之一是小样本学习,其中最重要的例子之一是小样本图片分类问题,每一个类别下只有少量图片可作为样本点,要求通过少量图片的训练即可识别图片的新类别。在小样本学习的框架下发展出来许多元学习方法,因为小样本问题是深度学习难以解决的,只能通过将深度学习模型泛化到小样本上来解决,这反映出元学习与深度学习的不同。其实元学习不仅可以将深度学习模型泛化到小样本上,也可将深度学习模型泛化到不同类型的问题上;在训练数据充足的情况下,可以直接训练深度学习模型,无须通过其他类似问题的深度模型泛化得到好的模型。其实泛化本身快速准确,然而深度学习模型往往追求高精度,对速度要求不高,仅在对训练速度要求很高的情况下,使用元学习模型才有助益。

除此之外,元学习还可以应用于自然语言处理(Natural Language Processing)。例如,在甲骨文中,常用字的出现频率非常高,属于分布内任务,出现频率高的字的样本量多,可以用深度学习的方法实现对这些字的含义解释。然而,还有3000多个甲骨文字的出现频率较低,属于分布外任务,样本量较少,因为样本量少,所以无法使用包含大量参数的深度学习模型从头训练,来实现对这些文字的释义,只能考虑使用元学习模型,将分布内任务训练出来的深度学习模型泛化到分布外任务,来实现对罕见文字的解释。类似地,对于样本稀少的古文字和方言,都可以用元学习的方法进行释义。

元学习还可以应用到药物发现领域。药物发现是使用深度学习模型来预测治疗疾病的药物分子结构的研究,许多罕见疾病的样本量很少,研究这些疾病的药物分子很难。因为样本量少,使用深度学习模型从头训练仍然不可行,只能将训练过的大量药物医疗数据深度学习模型推广到分布外任务,来实现对罕见疾病药物分子结构的预测。在任何能明确定义任务的情况下,都可以使用元学习模型进行深度学习模型的泛化。

近来在2020年的CVPR会议上,有许多将元学习的MAML模型结合到实际的计算机视觉深度学习模型中的案例。在模型精度不变或者有所提升的基础上,模型的泛化性能得到了提升,许多计算机视觉的深度学习模型在结合了MAML之后,设计出来达到了精度新高的SOTA(State of the Art)算法。由此可见,元学习的兴起已经从最开始的计算机领域扩展到了计算机视觉的细分领域,而元学习体现出来的实际应用价值也越来越大。