目录
- 背景
- Meta-Learning的数据划分
- MAML算法
- MAML的思考
- 参考
背景
我们知道现在深度学习在使用大型数据集掌握一项任务(检测,分类等)方面取得了巨大的成功,但这并不是真正我们追求的“人工智能”。具体来说,我们可能训练了一个能做物理题很高分的学生,但是他也只能做物理题而已,面对数学题他只能吞下零分的命运;其次,在面对新的任务(数学题)的时候,我们的学生仍然需要大量的数据(数学题)进行训练,而在学习物理的时候积累下的学习方法(先验知识)却基本帮不上忙。
以上的问题可以抽象为一个具体的问题:现在的深度学习往往只是在学习某一类特定的任务,而不是在学习自身“学习”的能力,这也是Meta-Learning的定义:学习如何学习的能力,而不是学习具体的某一个任务。假如我们的算法学会了怎么学习,当面对一个新的任务的时候,有了学习能力(先验知识)就可以只用少量的数据进行快速的学习,而这种学习如何学习的方式才是真正的“人工智能”。
Meta-Learning 的算法有很多,有些算法可以针对不同的训练任务,输出不同的神经网络结构和超参数,例如 现在很火的 Neural Architecture Search (NAS) 和 AutoML。本文主要介绍另外一种Meta-Learning算法:MAML,它不改变深度神经网络的结构,只改变网络的初始化参数。
Meta-Learning的数据划分
首先我先用一段不严谨的语言描述一下Meta-Learning:我们假定传统的深度学习算法是给100道化学题让他学会做化学题(再用50道化学题进行测试),MAML算法则是用5道数学题,5道语文题,5道物理题来让算法学会做5道化学题,具体来说先通过5道数学、5道语文、5道物理题来让算法掌握学习的能力(分别用2道数学、2道语文、2道物理题来验证学习效果),然后再给一点点化学题(5题)训练就可以让算法掌握化学题的做法。如果说传统深度学习是在学习一个任务,那么MAML则是在遍历多个任务后找到一组敏感的参数,在新任务到来的时候帮助模型利用这组参数快速地将先验知识转移到新任务上。自然地,Meta-Learning的数据集肯定不是像传统DL那样简单划分为训练集和测试集:
如上图所示,在Meta-Learning上,我们不再直接叫train和test了,而是叫Meta-train和Meta-test。在上图中,每一行都是一个task(例如数学题、物理题),包含了task的train set和test set,图中展示就是所谓的5way 1shot 设定,也就是一个task包含5个类,每一个类一个训练样本,然后给你2个测试样本测试。我们可以把每一个task当做一个Meta-Learning的训练样本。我们要通过多种task的训练,从而在Meta-test的时候也就是在新的task上取得好效果。出于习惯,我们把meta-training中的training data叫做support set、test set叫做query set。
这部分主要是掌握Meta-Learning的数据集是如何划分的即可,具体MAML的细节下一部分会具体阐述。
MAML算法
MAML算法主要分成三步:
- (1)采样任务数据:首先会从meta-training里面采样一个batch size的training data,比如batch size为3的时候我们就会随机采样3个任务的数据(比如做数学题,做物理题,做语文题)。
- (2)计算梯度和参数:对 training data 中每一个 task 以及其对应的 label 计算属于每个 Task 的 gradient 与更新后的 model 参数。(这里是第一次计算梯度)
- (3)更新模型:当有了每个 task 利用 training data of meta-train(即support set)得到的新模型参数后,可以利用test data of meta-train(即query set)验证,並且加总所有任务的loss,对原本模型参数(注意不是对第一次求的梯度参数)微分并真正的更新一次参数。(第二次计算梯度)
MAML的思考
整个算法的流程还是比较简洁的,读者可能会觉得为什么不和往常一样计算一次梯度就好了,为什么要算两次,我的理解是:对于一个有很多任务要学习的模型,我们要优化这个模型,第一个想法可能是找到一个点(参数空间上)让所有的任务在这个点是最优解,听起来很强,但想想都觉得很困难,平时我们训练单一任务SGD找最优解都要迭代那么久,怎么可能一下子就可以找到一个点是所有任务的最优解?所以MAML把问题转换为找到一个点,让这个点距离各个任务的最优解最近,让这个点只需要简单地梯度下降一次就可以找到最优解,显然这种想法更加的科学。
回到我们一开始的例子:我们想在计算机视觉漫谈公众号发掘一位有考上清华潜力的全才,只计算一次梯度的想法相当于我先在这些人里面找语文满分的,然后在语文满分的中找数学满分的,再在数学满分里面找英语满分的……,这肯定很难。而计算两次梯度的想法相当于我在所有关注计算机视觉漫谈公众号中的人中找到很聪明的那个,这个人不一定语文第一名,但他很聪明,全能型选手,学啥都很快很好,显然通过第二种方法更能挖掘出一位有考上清华潜力的全才。
另外有接触过迁移学习的同学可能会觉得元学习和迁移学习很像,在我的理解上两者其实没有明显的界限,这里引用王晋东博士的话:你可以说元学习是强调从不同的若干小任务小样本来学习一个对未知样本未知类别都有好的判别和泛化能力的模型,但其实你想想,难道这不就是知识迁移吗?从迁移上来看,你可以说学习一个可迁移的特征或模型,可以从A迁移到B。但这些可以被迁移过提纯的东西,难道不能被叫做元知识吗?所以其实是殊途同归的,都应该一起联系起来看。
参考
- (1)论文:https://arxiv.org/pdf/1703.03400.pdf
- (2)Chelsea Finn ‘s blog https://bair.berkeley.edu/blog/2017/07/18/learning-to-learn/