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

2.3 元学习训练框架

与传统机器学习不同的是,元学习考虑的是通过训练大量的任务,提高元学习模型解决问题的能力,从而在遇到未解决过的问题时,可以给出好的解决方案。元学习是一个针对不同任务定制个性化学习器的机制,元学习的训练集和测试集都是任务的集合。小样本学习的主要方法是元学习方法,很多元学习方法都能解决小样本学习的问题。在小样本学习的元学习方法训练框架中,有一种训练方法被称为片段式训练,如图2.1所示。每个片段对应的是一个小样本学习任务。在许多介绍应用于小样本图片分类问题的元学习方法中,都用到了这种训练方式,它包括以下步骤。

img

图2.1 片段式训练(Episodic Training)示意图

(1)如图2.1所示,从支持集的大量有标注数据中随机抽取训练集。在小样本图片分类问题中,类别数目img很多,每个类别下的图片数目img很少。每个训练数据集都是从大量有标注数据集中随机抽取出来的,每次抽取出来的训练数据集被称为一个片段(Episode)。在数据集的标注中随机抽取img个类别,在每个类别下的图片中,随机抽取img张图片,生成一个训练数据集。

(2)从支持集的大量有标注数据中随机抽取验证集。验证集中的类别和训练集中的类别是完全不重合的,训练集中的类别不能出现在验证集中,验证集中的类别在训练集中没有出现过,这样才能用来验证模型的泛化能力。一般要求验证集中每个类别下的图片数目和训练集中的一样,这跟具体的元学习方法有关。在剩下的数据集标注中随机抽取img个类别,这些类别都是训练集中没有的,在每个类别下的图片中,随机抽取img张图片,生成一个验证集。

(3)类似地,如图2.1所示,从问询集的数据中随机抽取测试集,一个训练集、一个验证集、一个测试集就组成了一个小样本的图片分类任务。最后,使用训练集和验证集来对元学习模型中的参数进行估计,使用测试集来判断元学习模型的结果是否正确。

接下来,介绍元学习方法进行元训练的过程。这里展示的是一个简化的元训练的例子。在实际中,根据模型的不同设置,具体元学习模型的训练过程有差别,接下来以MAML为例简要介绍元训练方法。参考Antreas Antoniou等作者于2019年在论文“How to Train Your MAML”[7]中详细分析的MAML训练中的细节部件设置方法,MAML看似形式简单,在用MAML进行元训练的过程中,仍然有很多值得关注的技巧,它们可以让训练更加稳定。

元训练集是任务的集合,其中每个任务包含训练集、验证集和测试集。首先通过元学习器为基础学习器提供初始参数img,给出了一个初始的基础学习器img。初始的基础学习器在这个任务的训练集上进行训练,基础学习器中的参数得到了更新。在基础学习器接收了训练集数据进行第img次更新时,这时的基础学习器参数是img,这时的基础学习器表示为img。基础学习器在训练数据集上的损失函数是img,进行参数更新时,要计算损失函数对参数的梯度img(这里的梯度指的是损失函数梯度在参数img处的取值),这时的基础学习器参数更新为:

img

这里的参数img是更新过程中的步长,更新后的基础学习器参数是img,在进行几轮参数更新后,基础学习器完成了在这个任务上的适应。基础学习器的损失函数是在任务训练数据集上计算出来的。

在训练很多任务之后,元学习器中的参数得到了更新,此时为基础学习器提供初始值的机制发生了更新。在训练了img个任务之后,将这些任务上损失函数对参数的梯度传输到元学习器,元学习器使用这些梯度进行参数更新。第img个任务中训练完成的学习器记为img,损失函数记为img,其中任务上训练好的基础学习器参数img是初始参数img和训练数据集的函数。在每个任务上训练完基础学习器之后,损失函数对初始参数的梯度img会被传送回元学习器,元学习器使用的损失函数是在任务验证集上计算出来的,反映的是模型在验证集上的泛化能力。在img个任务上,元学习器收到了img个梯度img,其中img,元学习器中为基础学习器提供初始参数的机制得到了更新。在MAML中,元学习器的更新是通过梯度完成的:

img

其中img是步长参数,可以预设,也可以在训练中与其他参数共同调参得到。MAML在训练中需要在元学习器和基础学习器之间进行梯度传导,可能会导致训练不稳定。MAML中包含二阶导数的时间和计算成本,可以进行MAML的一阶近似,从降低时间和计算成本。

之后在一个新任务上,元学习器再次为基础学习器提供初始参数,给出的初始基础学习器收到了新任务中的训练集,基础学习器中的参数得到了更新,在任务上训练完之后,损失函数的梯度又反馈到了元学习器,元学习器收到img个任务上的梯度后更新了基础学习器初始值生成机制,然后接着开始接收下一个任务。

在元训练过程中,在每个新任务上,表示任务特性的参数会得到更新,而在很多任务的基础上,表示任务共性的参数会得到更新。在大多数元学习框架中,表示任务特性的参数和表示任务共性的参数的界限很明确,而有些元学习框架比较复杂,表示任务特性的参数和任务共性的参数之间的界限并不明确,任务共性的表示常常比较复杂,尤其是元学习模型需要适应差别较大的任务时,表示任务共性的模型部件需要复杂的设计。