1.2 元学习的起源
元学习的概念起源于General AI的范畴,是指让机器学会学习,从而让机器变得更加智能,代替人类完成复杂多变的任务。近来,MAML的兴起带火了元学习的概念,MAML将元学习视为深度学习模型的补充。引入MAML模块,通过适当的组合、调试,可以在保持深度模型精度的同时,额外提高深度学习模型的泛化能力,避免了出现过拟合问题,提高了深度学习模型在分布外任务上的精度。泛化能力的作用有以下这些:(1)可以减小模型过拟合的可能性;(2)可以提高模型的样本外预测能力;(3)扩大模型的适用范围,提高模型的适应性;(4)有利于不同场景之间模型的融合,在同一场景下有更多模型可供考虑和选择,既可以重新训练模型,也可以从类似任务的深度模型泛化而来;(5)提供模型之间互相借鉴的通道和框架,有利于不同模型和机器学习框架的交流和合作,基础学习器和元学习器可以是不同种类的机器学习模型。
元学习并不是一个新概念,早在1987年,科学家就提出了元学习的概念,指的是机器通过与环境交互,不断获取信息,进行自我更新调整,从而不断地适应环境,在没有任何人为干预的场景下,机器能自发地适应并且进化,智能地学会完成遇到的任何任务。元学习框架包括两个部分:(1)完成任务的基础层,对应每个任务上的基础学习器,(2)综合所有任务并且对基础学习器进行指导的元层,元层指导基础学习器更快地适应新任务、更好地解决新问题。元层是综合所有解决问题的经验并且进行分析的指挥层,元层代表知识层级中更加本质、普适的知识逻辑,可以很好地推广到新任务。基础层和元层是任务中知识层级的天然表达形式,基础层代表每个任务特性的知识,元层代表所有任务共性的知识。
元学习的研究已有将近40年的历史,最早的研究是Jürgen Schmidhuber在1987年5月14日提交的博士论文[1]中提出的元学习方法,通过生物进化算法让学习器自我更新,实现General AI。之后,Stuart Russell和Eric H.Wefald于1990年发表的论文“Principles of Metareasoning”[2]中提出了元推理(Metareasoning),让计算机通过因果推理在任何有限环境下优化计算行动,实现计算机算法随环境变化而自我更新优化。
1.2.1 1987年的Jürgen Schmidhuber
德国科学家Jürgen Schmidhuber是LSTM之父,现任职于瑞士AI实验室IDSIA。早在1987年5月14日,Jürgen Schmidhuber就在他的博士论文“Evolutionary Principles in Self-Referential Learning”[1]中提出了元学习的概念,他认为,元学习是指使用生物进化算法让学习器自我更新。机器不能仅仅依靠自身完成进化,机器需要与环境发生交互作用,学会奖励机制,引导机器完善自身,同理于自然界生物进化过程,物竞天择,适者生存。Jürgen Schmidhuber指出元学习包含两部分——学习和适应环境的变化。为了让学习器学会改进自身,需要考虑受环境影响的学习策略,这些复杂的学习策略中包含了环境的特征,当学习策略发现环境正在发生变化或者已经变化时,会及时地调整学习器。Jürgen Schmidhuber具有前瞻性的观点一直影响着当前的元学习研究。
根据瑞士著名儿童认知发展理论学家Jean Piaget的观点,孩子在五岁之后才有适应新环境的概念,孩子在十一岁之后才有逻辑思考的能力,但是五岁孩子都比元学习算法表现得要好。例如,五岁的孩子看一眼就能分辨出图片中的动物是否是同一类,而深度学习模型需要训练大量有标注数据,才能判断两张图片是否属于同一类,在新类别图片上尚未具有看一眼就能分辨的能力。五岁孩子既没有适应新环境的概念也没有逻辑推理能力,却能实现元学习的功能,这说明,元学习功能的实现并不一定依赖于适应性或者逻辑推理。五岁的孩子没有适应性或者逻辑思考,那么他们是如何实现元学习功能的呢?其实,五岁孩子的元学习功能是通过从特例到特例的思考方式完成的,此外,从特例到特例的思考依赖于特例之间相似性的发掘。通过认知理论可以看到,元学习并不一定需要考虑适应性,对于有大量记忆的人类,可以通过分析记忆中特例之间的相似性,为新的特例找到合适的解决方案。当前的许多元学习算法即是考虑特例之间的相似性,借鉴过去的经验,使机器学会学习的。例如,第4章介绍的基于度量学习的元学习方法,考虑的就是任务之间的相似性,训练任务之间的距离度量,找到最相关任务对应的训练经验,以加速新任务的完成,提高方法在新任务上的精度,这一类方法的确简单快速且精度高。
诚然,从特例到特例的元学习算法在著名的图片分类数据集miniImageNet上达到了不错的分类精度。然而,适应性或者逻辑推理的引入,可让元学习算法在miniImageNet上达到更好的图像分类精度,这也是当前元学习研究领域中的重要组成部分。使用生物进化算法来使机器学会学习,允许学习器具有更加复杂的结构,但是达到收敛的时间更长,而且生物进化算法的效率往往不高,并不适用于需要机器快速学会学习的案例。使用随机梯度下降来使机器学会学习,是目前主流的元学习研究中常用的方法,达到收敛的速度快,但是仅适用于可以用随机梯度下降来优化的学习器,不允许学习器拥有高度复杂的结构。
此外,Jean Piaget提出了学习过程中的两个重要概念:同质化(Assimilation)和适应性(Accommodation)。一个学习中的孩子看到一个小球落到地面的过程,可以类比到小球之外的任何物体落到地面的过程,即将系统中存在的规律类比到其他类似的情况中,例如,自由落体运动、作用力和反作用力等客观存在的物理规律,这就是同质化的过程。但是,这个学习中的孩子会发现鸟儿不会落到地面,而是飞上天去,因此,之前小球落到地面的规律不适用于鸟儿,规律发生了变化,这就是适应性。同质化是大脑总结世界规律的过程,适应性则是世界改变大脑认知的过程。Jürgen Schmidhuber认为,在元学习算法中,需要达成同质化和适应性的均衡,同质化完成稳定环境中的任务,适应性完成不稳定环境中的任务。
环境一般分为两种,一种是稳定的环境,不会发生剧烈的变化;另一种是不稳定的环境,存在更多的不确定性。对于不同的环境,元学习的内涵是不同的。在稳定的环境中,元学习的目标是应对环境中不大的变化,进行正常反应,一般不需要为了获得更好的适应性而牺牲目前学习器的精度。在不稳定的环境中,元学习的主要目标变为应对环境中的突发状况,例如,环境的突然恶化,在这种情况下,需要最大化学习器的适应性,而学习器的精度可能会受到一定的损失。
在综合许多任务中的经验时,在相似的任务之间需要考虑同质化,将这些非常接近的任务分为同一类,让它们之间的距离最小化,并且标注上它们共有的同质化的规律。例如,在小球和小鸟的例子中,所有不能自己动的没有生命的物体,分为一类,在它们落下的过程中,遵循自由落体规律;而所有能自己动的有生命的物体,分为一类,在它们落下的过程中,不遵循自由落体规律,而是会通过自身的动作改变落体的规律,鸟类会飞上天去,猫会调整自身的动作,实现四脚着地。
在归纳任务中的经验时,在不相似的任务之间需要考虑规律的适应性,将这些差别较大的任务分为不同类别,让它们之间的距离最大化,并且注明它们之间的差别会带来规律上怎样的不同,区别和联系分别是什么。例如,在小球和小鸟的例子中,没有生命不能自己动的物体是一类,有生命可以自己动的物体是另一类,表面上看起来,它们落地的规律不同,在模型中也会为它们标注上它们的规律有怎样的不同。然而,从更深层次来看,它们落地的规律都遵循重力、作用力与反作用力的物体规律,本质上遵循的规律都是相同的,只是物体可以自己动时,通过作用力和反作用力改变了自身形态,从而改变了自身受力情况,产生了不同的效果,小球直接落地,小鸟振翅飞行,小猫四脚着地。它们都遵循同样的物理定律是它们之间的联系,通过分析联系(都遵循的物理定律)和区别(物体通过自身动作改变了受力情况),就可以推断出如何在不同任务之间进行规律的调整和适应,以及在新任务上推断出规律,进而判断会出现怎样的现象,使得机器变得更加智能。
Jürgen Schmidhuber认为使用复杂学习器可以提高机器学会学习的潜力,让机器更加灵活,这对于完成更加复杂的学会学习任务至关重要,学习器复杂度的提高允许学习器包含更多有用信息,这些信息有利于机器完成新的任务。这与目前元学习研究中大量使用随机梯度下降优化学习器的情况相悖,未来元学习的发展是否会走向Jürgen Schmidhuber指出的方向不得而知。有趣的是,元学习本身就可以用来加速优化算法,让生物进化算法的优化过程更有效率。随着元学习模型解决的问题越来越多,模型本身包含的信息增多,模型的复杂程度自然会上升。世界很复杂,简单的模型不太可能给复杂的世界一个很好的表示,所以Jürgen Schmidhuber仍倾向于使用复杂学习器。
复杂学习器中包含大量的参数,在解决问题时,需要对这些参数进行估计,而估计参数需要大量有标注数据。有时,虽然待解决的问题很复杂,但是数据量却很少,如果使用复杂学习器,大量的参数无法估计,还是无法解决问题。因此,在数据量本身不是瓶颈时,即获取大量有标注数据很容易时,解决复杂问题应当使用复杂模型,复杂度匹配,才能让问题得到更好的解决。元学习框架很多时候都是用来解决这种复杂、数据量少、需要使用复杂模型的问题,通过借鉴过去的训练经验,更新其他训练过的深度学习模型,或者将复杂问题分解,然后将很多深度学习模型拼装组合起来。类似的方案还有很多,都能在一定程度上解决这样的问题,但是,目前的元学习模型却仍达不到五岁孩童的元学习能力,由于和人类的差距较大,提升空间很充足,所以,元学习领域的研究还很热门。
Jürgen Schmidhuber认为元学习可以有很多层,包括基础层和很多元层,这被称为元结构(Meta Hierarchy),而元结构是对任务中知识和逻辑的一种表示方法。不同任务中的元结构可能不同,对于元结构不同的任务,设计元学习模型来完成多个任务是个难题;对于元结构相同的任务,根据统一的元结构设计元学习模型,可以达到用一个元学习模型完成多个任务的目的。Jürgen Schmidhuber提到适应树(Generalization Tree)可以用来表示元结构,而元结构代表了任务中所需的知识和逻辑。在基于生物进化算法的元学习算法中,元结构得到了简化,仅包括基础层和一个元层。通过在生物进化算法中使用复杂学习器,将多个元层简化成一个元层,如此一来,许多任务都具有相同的元结构,基于此元结构可以设计一个元学习算法,完成这些任务。
在元结构中常见的有共赢结构和寄生结构。寄生结构是通过已有的结构来获取奖励,寄生结构自身并不能获取奖励。共赢结构是多个结构相互竞争或者合作,来增加所有结构的奖励。然而共赢结构和寄生结构的划分并不是唯一的,因此相应地,元结构也不是唯一的,而且元结构的提炼比较主观,依赖于任务本身和设计者的目标分解。对于复杂任务,提炼元结构,设计基础层和元层模型,设计损失函数和优化方法,这是Jürgen Schmidhuber提出的元学习步骤。目前,基于基础学习器(Base Learner,基础层中的学习器)和元学习器(Meta-Learner,元层中的学习器)组合的元学习框架非常受欢迎,这个框架和前面提到的基于度量学习的元学习方法是目前最受欢迎的元学习主流方向。
在1987年之后的研究中,在任务分解方向上并没有太多的研究,并没有成为火热主流的研究方法,即便是目前,在任务分解方向上的研究仍然不多。概括起来,大概有以下方向:(1)通过遗传演化算法来找到最优的任务分解结构;(2)给定任务分解模型,不管是不是最优的,这个任务分解模型可随着新任务获得更新;(3)任务分解后在子任务上需要共享参数,参数的训练需要综合多个子任务的数据。除了列出来的方向外,还有许多任务分解的研究,但是都没有达到火热的程度。其实,在完成复杂任务时,都会进行任务的简化,但是简化往往是通过对任务条件内容的精简,而不是通过将复杂任务分解为子任务。子任务的处理本身就是一个元学习问题,子任务的定义不是唯一的,而且任务分解可能非常主观,且难以程序化和自动化,这样可能会影响后续任务处理的效果,达不到最优的精度。
Jürgen Schmidhuber在他的博士论文中将认知科学、生物进化算法、图灵计算机和元学习结合起来,提出了自我进化更新的学习模型,想法和理念具有前瞻性,指引了近年来许多著名的元学习研究,具有重要的开创意义和学术价值。在之后的章节中,我会进一步阐释近年来元学习研究与这里提到的元学习思想之间的联系,读者也可以根据这里介绍的元学习思想创造新的元学习算法,用在自己的科研项目中。
1.2.2 1990年的Stuart Russell和Eric H.Wefald
伯克利大学计算机系教授Stuart Russell和Eric H.Wefald于1990年在期刊Artificial Intelligence上发表了论文“Principles of Metareasoning”[2],提出元推理,将元学习和因果推断结合,也是早期极具前瞻性的理念之一。Stuart Russell和Eric H.Wefald提出元推理的初衷是为计算机中的计算决策提供模型依据,基于因果推断的模型最优化是指对所有计算决策的潜在收益建模,以找到最优潜在收益对应的计算决策。元推理解决的是稀缺计算资源的最优分配问题,有限理性的机器计算得到的是稀缺资源的近似最优分配,我们总是可以在近似最优解的基础上计算出近似程度更高的解。接下来,我们对文中有趣的观点进行阐述。
机器在复杂环境下需要实时根据推理做出反应,机器对环境的适应体现在机器状态的变化程度上,变化的程度越大,说明机器对环境付出的适应越多。一般认为,环境变化的幅度越大,预期机器会做出的适应越多,因此,可以根据环境变化的程度对机器适应的多少做出预期,符合预期的机器适应被认为是合理的,会收到奖赏。同时,机器做出适应越快越好,所以,机器适应的时间越长,收到的奖赏越少。当奖赏最大化时,机器就选择了最优的计算方案。
在考虑有限计算资源的前提下,机器不再要求依次在系列行动所有的节点中做最优推理,而是要求同时考虑所有节点,来进行有限计算资源的最优分配。其实,即使每一步都是最优的,最终达成的整体结果仍然有可能不是全局最优的。正如在博弈理论中的囚徒困境,所有人都按照自己面临的选择做了最优的决策,但是所有人收益求和却不是全局最优的。此时,这一步是最优的,前两步却不一定是所有两步组合中最优的,类似地,已经选过的所有步仍可能不是全局最优组合。
所有元层的系统为基础层提供学习器和学习器参数,所有元元层(Meta-Meta-Level)最小化元层的损失函数,其实,元元层也可认为是另一个阶段的元层。根据泛化目标和任务的分解,不同元层用来为基础层提供合适的信息。任务的分解往往是天然存在的或者是通过无监督学习计算得到的,将复杂的任务分解成简单的子任务,有利于复杂任务的完成。大道至简,通过合适的划分,许多简单的子模型组合起来,形成完成复杂任务的大模型。正如在人类社会的树状工作组织结构中,分工明确,职权范围明确,各展所长,进行竞争、合作、交流,复杂任务可以分解成简单子任务组成的树状结构,在子任务上定义简单子模型,而不同子模型的组合和泛化依赖于不同元层,元层之间可以有竞争、合作、交流、演化等。
Stuart Russell和Eric H.Wefald于1991年发行的图书Do the Right Thing: Studies in Limited Rationality[3],为有限理性下的决策给出了模型依据,其中提到的“理性”体现在序贯决策的最优化程度中。在有限的计算资源下,模型的解只是近似最优化,因此人工智能机器人并非完全理性,而且通过机器与环境的交互不能计算出完全理性的最优决策。三十年后的今天,在因果推断中,资源有限导致的非完全理性模型仍是研究的热点。在有限的计算资源下,最优解的计算实现过程无法遍历所有可能性,只能遵循一定的规则找到近似最优解。此外,对精度和置信度的限制、正则项等都会导致最优解中有偏差,由于方差和偏差的相互制约,偏差增大往往导致方差减小,近似最优预测值的方差也会减小。
之前在笔者做的一个数据分析项目中,有两个模块,一个是使用文本生成程序根据模型生成代码,另一个是执行生成的代码来分析数据,然而其中并没有对计算资源在计算任务之间进行最优化分配,来实现最优的计算机计算行为选择,进而生成最优的程序。从文章的思路来看,计算机自行分析已有的计算资源和需要达成的计算目标,进行模型选择来选择计算行动,进而生成代码,再使用代码执行模块,就可以实现计算机自行分析计算,省去许多人工对计算行为的选择。