元学习 Meta Learning,meta 这个词很好玩,在各个领域都能经常听到。“Meta X”的意思就是“X about X”。比如 Meta data 的意思就是“描述数据的数据”,而 Meta Learning 其实就是“learn to learn”学习如何学习

元学习听起来名字挺大,有种与深度学习齐名的感觉,但其实是训练模型的一种框架。元学习的初衷是让模型自主学习如何去对数据进行分类、回归等,具体一点,比如“如何进行二分类、三分类”等。既然是“学习如何学习”,一般情况下就是希望使用少量的数据就能让模型学到一个不错的效果。所以元学习的方法,经常用来完成小样本学习(Few-shot Learning)任务。

1 Meta Learning 元学习基础

该部分基于李宏毅机器学习元学习部分,结合本人所学过程中问题以及阅读论文等相关资料,介绍元学习的思想以及模型架构。

使用机器学习(深度学习)完成指定任务,一般可以总结为三个步骤:

  1. 定义函数Meta Learning 元学习 - 图1,制定好哪些参数Meta Learning 元学习 - 图2可学习的;
  2. 定义损失函数Meta Learning 元学习 - 图3
  3. 找到一个合适的优化算法,在深度学习里面一般就是梯度下降法及其变种 Meta Learning 元学习 - 图4

元学习也是如此三个步骤,接下来依次展开。优化算法当然还是基于梯度下降法,就不赘述了。

1.1 定义函数 F

image.png

图片截自李宏毅机器学习元学习视频

Meta learning 希望学习得到一个函数Meta Learning 元学习 - 图6,进而通过Meta Learning 元学习 - 图7根据不同的输入Meta Learning 元学习 - 图8产生一个对应的(分类、回归等)模型Meta Learning 元学习 - 图9来预测Meta Learning 元学习 - 图10,即Meta Learning 元学习 - 图11其中Meta Learning 元学习 - 图12是可学习的参数,而Meta Learning 元学习 - 图13是由Meta Learning 元学习 - 图14产生的,这里的Meta Learning 元学习 - 图15就可以是任何拍脑门想出来的模型参数,比如模型的层数、每一层(CNN、FCN 等)的参数、学习率等。根据视频中可知,元学习是基于要学习参数的类别进行分类的

从上图中可知,Meta Learning 元学习 - 图16就是我们正常用来图片分类、自然语言处理等深度学习模型,而这个深度学习的模型不是直接通过训练数据学出来的,而是通过另一个模型Meta Learning 元学习 - 图17的输出所得到的,因此Meta Learning 元学习 - 图18才是直接学习的对象。那么既然可以用一个深度神经网络来拟合参数Meta Learning 元学习 - 图19那么Meta Learning 元学习 - 图20就也可以是自定义的神经网络或其他模型

1.2 定义损失函数

元学习本质还是机器学习,即给定样本特征Meta Learning 元学习 - 图21和标签Meta Learning 元学习 - 图22,得到预测标签Meta Learning 元学习 - 图23。如何定义损失函数(Meta Learning 元学习 - 图24Meta Learning 元学习 - 图25之间的差距)就要看模型的输出长什么样,模型的输出长什么样就要看元学习是如何输入数据、处理数据的。
image.png

图片截自李宏毅机器学习元学习视频

一般深度学习的训练和测试流程会把训练数据和测试数据分成好多批次(batch),每个批次的大小为 batch_size,一个批次一个批次地训练 | 预测模型。而元学习是将数据分成好多个训练任务(task)和测试任务,每个任务中都包含了训练样本(samples)和测试样本。当然,训练任务就是用来训练模型的,而测试任务就是用来测试模型性能的。由于Meta Learning 元学习 - 图27才是我们最终希望学习的参数,所以训练任务和测试任务的区别就在于是否对Meta Learning 元学习 - 图28通过反向传播进行更新

那么在一个任务中为什么又分训练样本和测试样本,它们是如何使用的呢? —— 这就牵涉到了元学习的核心思想。

首先,元学习的初衷是通过学习Meta Learning 元学习 - 图29进而让其产生出的模型Meta Learning 元学习 - 图30学习一类任务,而不是某一个任务。以二分类问题举例,“二分类”是一类任务,而“分类猫和狗”则是一个具体的任务,元学习希望通过在不同的二分类任务(分类猫狗、分类苹果和橘子等)学习,最终让模型学会“如何进行二分类”(听起来有点夸张),而不是只会分类猫狗、苹果和橘子。上面所说的“二分类”任务,就是元学习的全体可能的输入,而具体的“分类猫和狗”、“分类苹果和橘子”则是元学习模型每一次输入的一个任务。

其次,具体到每一个训练任务而言,以上图中分类苹果和橘子为例,训练样本首先被输入到Meta Learning 元学习 - 图31中,由Meta Learning 元学习 - 图32产生一个能够解决该任务(即能够分类苹果和橘子)的初始模型Meta Learning 元学习 - 图33。随后,用训练样本对Meta Learning 元学习 - 图34进行训练几个 step(在论文中通常被叫做update_stepupdate_step的数值通常较小)得到Meta Learning 元学习 - 图35。随后将训练任务中的测试样本输入到Meta Learning 元学习 - 图36中并计算得到损失Meta Learning 元学习 - 图37作为Meta Learning 元学习 - 图38在该任务上的损失

在一轮的训练过程中会牵涉到Meta Learning 元学习 - 图39个训练任务和测试任务,Meta Learning 元学习 - 图40在一轮中的训练损失为将Meta Learning 元学习 - 图41个任务的损失求和再取平均,如下图所示。
image.png

图片截自李宏毅机器学习元学习视频

上图中也包含了一个关键信息,就是同一个任务中的训练样本和测试样本,都来自相同的二分类问题,即 task1 是分类苹果和橘子, task2 是分类自行车和汽车。为了检测模型是否“学会了如何进行二分类”,在测试任务中的分类问题都将是模型没有见过的二分类问题,如“分类猫和狗”等,但只对通过Meta Learning 元学习 - 图43计算得到的模型预测计算准确度,而不再对参数Meta Learning 元学习 - 图44进行更新。元学习训练的大致流程图如下:
meta train.png

在 testing task 上进行预测,只是没有最后一步更新Meta Learning 元学习 - 图46,其他的流程跟训练相同。

1.3 相关概念

在阅读论文和代码的过程中,除了上述的taskupdate_step等还经常会遇到一些别的概念。
image.png

图片截自李宏毅机器学习元学习视频

在同一个任务(不管是训练任务还是测试任务)中,训练样本通常被称为 support set,而测试样本被称为 query set

image.png

图片截自李宏毅机器学习元学习视频

在训练过程中,在一个任务内训练模型被叫做 within-task training (inner loop),而在不同任务之间训练模型被称为 accros-task trainning (outer loop)

2 Categorization 元学习分类 TODO

image.png

图片来自论文

论文从四个不同的维度对元学习进行分类:

  1. Meta-Optimizer —— 对元学习模型进行优化的方法
    1. 梯度下降法
    2. 强化学习方法
    3. 进化算法
  2. Meta-Representation —— 就是元学习具体要学的东西
    1. 模型初始化参数
    2. 网络层数
    3. 学习率
    4. ……
  3. Meta-Objective —— 元学习的具体目标
    1. Few-Shot Learning 小样本学习
    2. Fast Learning 快速学习
    3. Continual Learning 持续学习
    4. Compression 模型压缩
  4. Application —— 应用场景

援引文章的一段话:

这就是一个方法库,仿佛引出了一条水 paper 的 pipeline:

  1. 选择一个 application,构造为meta learning的问题
  2. 确定 meta-objective
  3. 选择一个或多个 meta-representation
  4. 选择一个 meta-optimizer

或者

  1. 确定 meta-objective
  2. 选择一个或多个 meta-representation
  3. 选择一个 meta-optimizer
  4. 根据以上寻找一个适合的 application

针对每一个类别的 paper 解读,请移步 Daily Paper Reading 仓库