相比较机器学习模型需要大量的标注数据进行训练,人类学习新知识和新技能的过程要更快更高效。
Meta Learning元学习的目标是模型在多种多样的任务上进行训练之后,只需要少量的训练样本就可以学会一个新的任务。让机器学习模型更加智能。
Meta Learning一般有两类解决方案:
MAML[1]元学习算法全名Model-Agnostic Meta Learning,强调了它不受模型结构限制的特点,只要是采用梯度下降法训练的深度学习模型即可。
Meta Learning的目标是训练一个模型,对于每一个新任务只需要少量的训练数据和参数更新就可以很好的迁移。 如果用传统的训练方法,一条数据作为一个样本,一条数据对模型进行一次参数更新的话,没有办法实现上述目标。因为新任务训练数据的数量相比用来做基础训练的任务的训练数据的数量要小得多,所以新任务的训练数据对模型参数的影响非常小。怎么样可以克服不同任务训练样本不均衡的问题呢? 还记得在系列文章第一篇中介绍的Meta Learning的训练思路,把一个完整的少样本任务作为一个样本,每个样本都是一个新任务,实现了不同任务训练样本的均衡。 MAML算法通过最小化大量少样本任务的loss,使得模型面对新的少样本任务时能够得到最好的结果。
以少样本图像分类任务为例,目标是训练一个图像分类
模型,可以快速迁移到任意图像类别。
4-shot 2-class 图像分类
的参数
,作为训练样本 meta-learning samples。 如上图所示,第一个样本是猫和鸟的图像分类任务,第二个样本是花和自行车的图像分类任务,以此类推,采样大量的不同类别的图像分类任务作为样本进行训练。 2.1 对每一个少样本任务
,有8个训练数据 train samples,和若干个测试数据 val samples 2.2 模型
在8个训练数据上进行训练,经过若干次参数更新,得到
2.3 模型
在测试数据上进行测试,得到loss,对原始参数
进行更新。回到2.1
,作为测试样本 meta-testing samples 3.1 每个测试样本,同样分成8个训练数据 train samples,和若干个测试数据 val samples 3.2 模型
在8个训练数据上进行训练,得到
3.3 模型的元学习效果由模型
在测试数据上的测试结果体现
二次梯度
MAML算法的难点在于,用模型
在测试数据上计算得到的loss对原始参数
进行更新,这涉及到二次梯度的计算。 深度学习框架Pytorch和Tensorflow现在都可以支持二次梯度的计算。
为了降低MAML算法的计算复杂度,MAML作者提出了简化版。 直接舍去二阶导的项,用
在
的梯度代替
在
的梯度。这样可以在保持效果几乎一样的基础上,提速33%。
Reptile[2]是另一个一阶的基于优化的元学习算法,和MAML非常相似,同样的适用于所有深度学习模型。
Reptile算法非常简单,效果却出乎意料的好。
的参数
2.1.1 对每一个少样本任务
,不分训练数据和测试数据 2.1.2 模型
在
所有训练数据上进行训练,经过若干次参数更新,得到
。回到2.1.1 2.2 取当前迭代所有任务得到的
的平均值对原始参数
进行更新。回到2.1
Reptile
Meta Learning元学习的系列文章到这里就全部结束了,感谢大家的支持。
[1]
Model-agnostic meta-learning for fast adaptation of deep networks: http://proceedings.mlr.press/v70/finn17a/finn17a.pdf
[2]
On First-Order Meta-Learning Algorithms: https://arxiv.org/pdf/1803.02999.pdf