机器学习15 -- meta learning 元学习
1 什么是meta learning
一般的机器学习任务是,通过训练数据得到一个模型,然后在测试数据上进行验证。一般来说我们仅关注模型在该任务上的表现。而meta learning则探讨解决另一个问题,就是我们能否通过学习不同的任务,从而让机器学会如何去学习呢?也就是learn to learn。我们关注的不再是模型在某个任务上的表现,而是模型在多个任务上学习的能力。
试想一下机器学习了100个任务,他在第101个任务上一般就可以学的更好。比如机器学习了图像分类、语音识别、推荐排序等任务后,在文本分类上,它就可以因为之前学到的东西,而学的更好。meta learning就是解决这个问题,如何让机器去学习。
一般的机器学习任务,我们是需要学习一个模型f,由输入x得到输出y。而meta learning,则是要学习一个F,用它来学习各种任务的f。如下图
2 为什么需要meta learning
meta learning的优势主要有
- 让学习更加有效率。我们通过多个task的学习,使得模型学习其他task时更加容易。
- 样本数量比较少的任务上,更加需要有效率的学习,从而提升准确率和收敛速度。meta learning是few shot learning的一个比较好的解决方案
3 meta learning可以学到什么
通过meta learning,我们可以学到
- 模型参数 model parameters。包括模型的初始化参数,embedding,特征表达等
- 模型架构。可以通过network architecture search(NAS)得到模型的架构,比如几层网络,每层内部如何设计等
- 模型超参数。比如learning rate,drop out rate,optimizer等。这个是AutoML的范畴
- 算法本身,因为不一定是一个网络模型。
4 常用数据集
meta learning需要训练多个task,故一般每个task样本不会很多,其数据集本身也是few shot。常用的数据集datasets如下。
Omniglot
它由很多种不同语言构成,包括1623种字符,每个字符20个样本。所以也算是few shot learning了。
miniImageNet
ImageNet的few shot版本
CUB
Caltech-UCSD Birds。各种鸟类的图片,也是few shot。
5 优化目标和loss
如何评价meta learning的好坏呢,也就是我们的优化目标是什么呢。一般来说,meta learning需要多个机器学习task作为数据集,其中一部分task作为training task,另一部分作为testing task。training task和testing task中都包括训练数据和测试数据。
我们先通过task1学习到模型f1,并得到损失函数l1。然后再task2上学习模型f2,并得到l2。以此类推,得到所有task上的损失函数之和,即为meta learning的损失函数。如下
我们的目标就是降低这个损失函数 L(F)。
6 MAML
ICML 2017
Model-Agnostic Meta-Learning for Fast Adaptation of Deep Networks。
6.1 用来解决什么问题
MAML focus在学习模型初始化参数上,这和pretrain models的目标是相同的。pretrain models通过有监督或自监督方式,先在数据集充足的任务A上训练模型,然后利用该模型的参数来初始化数据量比较少的任务B。通过迁移学习的方式,让数据量比较少的任务,也能够train起来。meta learning和pretrain models虽然都可以帮助模型参数初始化,但二者差别还是很大的
- pretrain model的任务A,一般来说数据量比较充足,否则自己都没法train起来,也就无法得到一个不错的初始化参数
- pretrain model的初始化参数,重在当前任务A上表现好,可能在任务B上不一定好。meta learning则利用初始化参数,在各任务上继续训练后,效果都不错。它重在模型的潜力
6.2 loss和优化目标
MAML loss function如下
所有task的testing set上的loss之和,即为MAML的Loss,我们需要最小化这个loss。通过gradient descent的方法就可以实现。
6.3 创新点
MAML的创新点在于,训练模型时,在单个任务task中,模型参数只更新一次。李宏毅老师认为主要原因是
- MAML希望模型具有单个task上,参数只更新一次,就可以得到不错初始化参数的能力
- meta learning的数据集一般都是few shot的,否则很多task,训练耗时会很高。而few shot场景下,一般模型参数也更新不了几次
- 虽然在训练模型时只更新一次初始化参数,但在task test时,是可以更新多次参数,让模型充分训练的
- meta learning一般会包括很多个task,单个task上只更新一次,可以保证学习效率。
6.4 如何更新参数
MAML更新参数的过程如下所示
- 初始化meta learning参数φ0
- 由φ0梯度下降一次,更新得到θm
- 在task m上更新一次参数
- 通过第二次θ的方向,确定φ的更新方向,得到φ1。
而对于model pretrain,其φ和θ的更新始终保持一致。
7 Reptile
openAI,2018,On First-Order Meta-Learning Algorithms
7.1 模型特点
Reptile和MAML一样,也是focus在模型参数初始化上。故loss function也基本相同。不同之处是,它结合了pretrain model和MAML的特点,在模型参数更新上有所不同。Reptile也是先初始化参数φ0,然后采样出任务m,更新多次(而不是MAML的单次),得到一个不错的参数θm。利用θm的方向来更新φ0到φ1。同样的方法更新到φ2