论文:2018-On First-Order Meta-Learning Algorithms
算法简介
MAML,FOMAML,reptile这些都是关于fewshot任务中参数初始化的问题,这些算法都是寻找一个模型合理的初始化参数,使模型能够较快的适应小样本数据,在新任务上也能有较好的表现。
MAML在论文中是二阶的,但是作者通过简化,推出了first-order MAML,(FOMAML),这个算法是一阶的,更方便实施。
reptile也是一个一阶的基于梯度的元学习算法。
伪代码
这个图很经典,但是要注意的是,我们k(对一个任务的更新次数)一般会大于2,大家可以想一下如果是1会变成什么样子。
对变成了,pretrained的样子。也就是对多个任务求最优(论文里的“联合训练”)。那就不行了,后面实验2能让你看见一步和多步的差距。
步骤:
1.初始化参数
2.开始循环迭代i =0,1,2…
3.采样一个meta batch,每个batch内有多个任务task
4.对于每一个task,根据迭代次数k采样出含k个batch的minibatch,
5.对minibatch内的每一个batch使用梯度下降法更新初始化参数,得到Ψ’
6.将每个task更新后的参数Ψ’与初始参数Ψ相减,将这个相减的结果经过某个映射(将这个差值看做某个梯度,加入到某种自适应的算法中)。在我们的实现中一般是(Ψ’-Ψ)/a,这个a我们一般设置为一个可以变的值。
7.回到2,继续,直到循环结束。
(后面放个代码详细介绍一下)
案例:一维sin函数回归问题
通过不同的a,b构造不同的sin函数,作为不同的task,采样(x,y)的点进行实验。
从左到右,依次为随机初始化网络和MAML、reptile算法给的初始化参数在迭代32次以后的结果。(迭代32次,MLp网络)
分析:为什么reptile可以?
方法1:泰勒级数展开
首先我们看一下参数更新的过程(以两步的SGD为例):
放几个定义,要仔细看gi和