现在在做元学习的时候,我们最常拿来测 试元学习技术的任务叫做少样本图像分类,简单来讲就是每一个任务都只有几张图片,每一 个类别只有几张图片。比如我们使用图1的案例为例说明。现在分类的任务是分为三个 类别,每个类别都只有两张图片作为输入,我们希望通过这样一点点的数据就可以训练出一 个模型。也就是给这个模型一张新的图片,它可以知道这张图片属于哪一个类别。在做这种少样本图像分类的时候,我们会常看到一个名词叫做N类别K样例下的分类任务,这个名词 是什么意思呢?N类别K样例的分类任务,它的意思就是在每一个任务里面,我们有N个类 别,而每一个类别我们只有K个样例。举例来说,在图1这个例子里面我们有三个类别, 每一个类别只有两个样例,那它就是3类别2样例分类。在元学习里,如果我们要教机器能 够做N类别K样例分类,那意味着说我们需要准备很多的N类别K样例下的分类任务当做 训练的任务,这样机器才能够学到N类别K样例的算法。
图1 少样本的案例分析
那要怎么去找一系列的N类别K样例下的任务呢?在文章中最常见的一种做法是使用 Omniglot 当做基准,Omniglot 是一个手写的数据集,它有 1623 个不同的字符,每一个字符 有20 个样例。那有这些字符以后呢,我们就可以去制造N类别K样例下的分类。比如我们 从Omniglot 里面选出 20 个字符,然后每一个字符就只取一个样例,这样就得到一个20 类 别1样例的分类任务。如果我们把这个任务当做训练数据,那我们就可以让机器学习到20类 别1样例的分类算法。如果我们把这个任务当做测试数据,那我们就可以测试机器在20类别 1 样例的分类任务上的表现。同理,我们可以制造出20类别5样例的分类任务,这个任务里 面每一个类别都有5个样例,然后我们可以把这个任务当做训练数据,让机器学习到20类别 5 样例的分类算法。
在使用Omniglot 的时候,我们会把字符分成两半,一半是拿来制造训练任务的字符,另 外一半是拿来制造测试任务的字符。如果我们要去制造一个N类别K样例的任务,那么就是 从这些训练任务的字符里面先随机采样N个字符,然后这N个字符每个字符再去采样K个 样例,集合起来就得到一个训练的任务。对于测试的任务,就从这些测试的字符里面拿出N 个字符,然后每个字符采样K个样例,你就得到一个N类别K样例下的测试任务。这样我 们就可以把Omniglot 当做一个基准,然后在这个基准上面测试不同的元学习算法。
总之,元学习不是只能用非常简单的任务,今天在学界已经开始把元学习推向更复杂的 任务,我们也一直希望未来元学习这个技术能够真的用在现实的应用上,可以走得多远好。