模型不可知元学习(Model-Agnostic Meta-Learning, MAML)的目标是使模型每次的梯度更新更有效、提升模型的学习效率、泛化能力等,它可以被看做一种对模型进行预训练的方法,适用于小样本学习。

  原文:http://proceedings.mlr.press/v70/finn17a/finn17a.pdf

  其它理解可以看:https://zhuanlan.zhihu.com/p/57864886

  看论文中Algorithm 2,在有监督分类任务上进行理解。为了表达更清晰,下面的符号表示与论文算法中的表示不同:

  假设模型$f_\theta$要执行小样本分类任务$\mathcal{T}$,其训练集和测试集分别是$\mathcal{D}_T$和$\mathcal{D}_E$。$\mathcal{D}_T$与$\mathcal{D}_E$都包含$N$个类别,$\mathcal{D}_T$每个类别$K_T$个样本,$\mathcal{D}_E$每个类别$K_E$个样本。

  为了增强模型对任务$\mathcal{T}$的训练效率和泛化能力,MAML使用另一个更大的数据集$\mathcal{D}_M$对模型进行预训练。$\mathcal{D}_M$即为文中Algorithm 2的$p(\mathcal{T})$。

  对于MAML的每次迭代(也就是Algorithm 2第2行),MAML从$\mathcal{D}_M$中随机抽取一批与任务$\mathcal{T}$有相同类别数和样本量的数据集$\{(\mathcal{D}^1_T,\mathcal{D}^1_E),...,(\mathcal{D}^n_T,\mathcal{D}^n_E)\}$。然后模拟任务$\mathcal{T}$使用$\mathcal{D}^i_T$对模型$f_\theta$进行训练并更新参数,得到$n$个更新参数后的模型$\{f_{\theta'_1},...,f_{\theta'_n}\}$。参数更新式子如下:

$\theta'_i=\theta-\alpha\nabla_\theta\mathcal{L}(\theta,\mathcal{D}^i_T),i=1,2,...,n$

  其中$\alpha$为学习率。以上只进行了一次训练,也可以进行多次。在本次MAML迭代中,下面就是MAML对模型$f_\theta$正式的参数更新,即文中Algorithm 2的第10行。MAML的思想是使模型$f_\theta$在不同训练集上进行少量的训练就能对测试集有良好的泛化性能。因此,MAML对$f_\theta$正式的参数更新表达如下:

$\theta=\theta-\beta\nabla_\theta\sum\limits_{i=1}^n\mathcal{L}(\theta'_i,\mathcal{D}^i_E)$

  其中$\beta$为学习率。经过多次以上MAML迭代,模型对于任务$\mathcal{T}$的学习效率和泛化能力得到了有效提升。接下来就是使用MAML预训练的模型$f_\theta^*$,在$\mathcal{D}_T$训练集上进行微调(Fine-tune),以完成任务$\mathcal{T}$的训练。最后使用$\mathcal{D}_E$进行测试。

  需要注意的是,由于上式会计算二重梯度,代码实现中第一次导数的计算与参数更新需要将计算图保留。另外,由于MAML是增强模型对某种任务的适应能力,而不是对单个数据集的性能,所以,$\mathcal{D}_M$无需包含$\mathcal{D}_T$或$\mathcal{D}_E$中的类别,当然包含的话效果更好。比如,你有猫狗二分类任务数据集,但样本量很小,你可以先使用ImageNet对模型进行MAML,然后再使用MAML后的模型进行猫狗分类的微调。

12-09 15:56