首先第一个步骤(如图1所示)是我们的学习算法里要有一些要被学的东西,就像在 机器学习里面神经元的权重和偏置是要被学出来的一样。在元学习里面,我们通常会考虑要 让机器自己学习网络的架构,让机器自己学习初始化的参数,让机器自己决定学习率等等,我 们期待它们是可以通过学习算法被学出来的,而不是像机器学习一样我们人为设定的。我们 把这些在学习算法里面想要它自学的东西统称为ϕ,在机器学习里面我们是用来θ代表一个 函数里面我们要学的东西。接下来,我们都将学习算法写为Fϕ,代表这个学习算法里面有些 是未知的参数。对于不同的元学习的方法,它会想办法去学模型不同的成分,当去学不同模型 成分的时候,我们就有了不同的元学习的方法。
图1 元学习的步骤二:定义损失函数
接下来,第二步(如图15.3所示)是设定一个损失函数,损失函数在元学习里是要决定 学习算法的好坏。L(ϕ) 代表现在用ϕ作为参数的算法的性能。如果L(ϕ)的值很小就代表它 是一个好的学习算法,反之它就是一个不好的学习算法。我们需要如何决定这个L损失函数 呢?在机器学习里面,损失函数来自于训练数据,那在元学习里面,我们收集的是训练任务。 举例来说,假设今天想要训练一个二分类的分类器,来分辩苹果和橘子(任务一),以及分别 脚踏车和车(任务二),以上每一个任务里面我们都会有分训练数据和测试数据。
接下来我们就要分析在元学习中的损失函数L应该如何定义。我们评价一个学习算法的 好坏,是看其在某一个任务里面使用训练数据学习得到的算法的好坏。比如,任务一是分辨苹 果和橘子,我们就把任务一里的训练数据拿出来输入给这个学习算法,从而学出一个分类。我 们使用fθ1∗ 来代表这个是任务一的分类,分辨苹果和橘子。如果这个分类是好的,那就代表 我们的L的规则是好的,反之如果这个分类是不好的,就代表说这个学习算法是不好的。对 于不好的学习算法(测试数据中表现不好的),我们就会给它比较大的损失L(ϕ)。
到目前为止,我们都只考虑了一个任务,那在元学习中我们通常不会只考虑一个任务,也 就是我们不会只用苹果和橘子的分类来看一个二分类学习算法的好坏。我们还希望拿别的二 元分类的任务来测试它,比如说区分自行车和汽车的训练数据(如图2所示),输入给这 个学习算法,让它进行分类。像这两个学习算法是一样的,但是因为输入的训练数据不一样, 所以产生的分类也不一样。θ1∗ 代表的是这个学习算法在任务一(分类苹果和橘子)上面学习 得到的参数,θ2∗ 代表的是这个学习算法在任务二(分类自行车和汽车)上面学习得到的参数。 与任务一相同,任务二它自身也有一些测试的数据,我们一样把它的测试数据输入给fθ2∗,然 后看看得到的正确率如何,就可以计算出其在任务二中的表现。所以我们现在知道这个学习 算法L(ϕ) 在任务一和任务二上的表现以后,就可以把任务一和任务二上的表现把它加起来, 得到这个整个学习算法的损失。当然如果扩展到N个任务的话,整个损失就是一个N个任务 的损失,我们把这个损失写成L(ϕ),这个损失就是我们的元学习的损失。其代表了现在这个 学习算法学习所有问题的表现有多好。
图2 元学习的步骤二中的多任务分类
大家应该已经关注到了一件事情,元学习中在每一个任务计算损失的时候,我们是用测 试数据来进行计算。而在一般的机器学习里面,所谓的损失其实是用训练数据来进行计算的。 这个问题是因为我们的训练单位是任务,所以可以用训练的任务里面的测试数据,训练的任 务里面的测试数据是可以在元学习的训练的过程中被使用到的。我们将元学习的演算法介绍 完以后,再会把元学习和机器学习再做一次比较,届时会更加清楚。
最后,元学习的第三个任务就是要找一个学习算法,即找一个ϕ让损失越小越好。这件 事怎么做呢?我们已经写出了损失函数L(ϕ),是N个任务的损失的总和。我们现在要找一个 ϕ 使得L(ϕ)最小,我们将这个ϕ定义为ϕ∗。解这个优化问题的过程有很多,比如之前我们介 绍过的梯度下降;如果没有办法计算梯度,也可以用强化学习的方法来解这个优化问题,或者 使用进化算法来解这个优化问题。总之,我们就可以让机器自己找出来的一个学习算法Fϕ∗, 这个学习算法Fϕ∗ 就是我们的元学习算法。
我们再来回顾一下元学习的三个过程,如图3所示。首先收集一批训练数据,这些训 练数据是由很多个任务组成的,并且每一个任务都有训练数据和测试数据。根据这些训练数 据通过我们刚才讲的三个步骤,可以得到一个学习算法Fϕ∗。接下来我们就可以用这个学习 算法Fϕ∗ 来进行测试。假设训练的时候,训练任务是教机器分苹果和橘子以及自行车和汽车, 测试的时候是要分猫和狗,那每一个任务里面都有训练数据,也都有测试数据。我们就需要把 测试任务里面的训练数据学出一个分类,然后再把这个分类用在测试任务里面的测试数据上。 其中我们真正关心的是测试任务里面的测试数据,因为这个测试数据是我们真正要分类的东 西。
图3 元学习的完整框架
很多人会觉得小样本学习和元学习非常的像,所以我们也简单区分一下元学习和小样本 学习。简单来说,小样本学习指的是期待机器只看几个样例,比如每个类别都只给他三张图 片,它就可以学会做分类。而我们想要达到小样本学习中的算法通常就是用元学习得到的学 习算法,这就是两者的关系。