论文:[Model-Agnostic Meta-Learning for Fast Adaptation of Deep Networks](# Model-Agnostic Meta-Learning for Fast Adaptation of Deep Networks)
台大李宏毅老师的视频课程:Meata learning: MAML
1. Meta Learning
Few-shot leanring的方法可以分为三类:
- metric-based: Siamese Networks, Matching Networks, Prototypical Networks
- Model-based: Meta Networks, Memory-Augmented Neural Networks
- Optimized-based: MAML
Model-based方法针对few-shot learning问题特别设计了模型,而MAML允许使用任何模型,所以叫做model-agnostic。
Meta learning可以称为是一种"learn to learn"的学习方法。以往的机器学习任务都是教给模型学习一个任务,但在meta learning中,一次让模型处理好几种任务,让模型学习“学习这件事”,未来有新的任务后模型能够很快进行处理。
Machine learning: machine learning的目的是从训练数据中到一个函数,即。
Meta learning: meta learning的目的是从一系列任务中找到一个函数,该函数具有找到新任务函数的能力,这一个函数f其实是目标任务模型的参数,即。
Meta learning的方法可以概括为:
- 定义一组学习算法
- 定义一个loss function, 用来评价哪一个学习算法比较好(这里的loss就不再是评价预测和标签是否一致,而是预测与期望是否一致)
- 使用梯度下降找到最好的学习算法
2.How MAML works
2.1 Define algorithm
一般在有监督学习中,我们假设模型参数为,目标函数为:
梯度更新的表达式为:
但是使用这样的参数更新方法来处理few-shot问题会导致over-fitting,因为训练样本数量太少而模型参数太多。那么我们是否可以做一个假设,用其他相似的任务对模型进行预训练,然后再将预训练模型应用于目标任务。也就是我们想要从大量的任务中训练一个具有较好泛化性的模型,该模型的参数可以快速适应到其它任务,这就是meta learning。
对于模型而言,不同的初始化参数会得到不同的训练结果,因此不同的初始化参数会被认为是不同模型,我们的目标是找到最好的(optimal)初始化模型参数,这样使用较少的数据就可以微调模型而不会过拟合。
2.2 Define loss function
在传统的机器学习算法中,我们需要一个loss function来评价预测结果好坏。同样在meta learning中,我们也需要一个loss function来评价初始化参数的好坏。但是模型参数那么多,如何评价呢?我们可以用相同task的测试集的数据,如果测试集的数据得到的loss小,就表明该初始化参数比较好,反之亦然。
我们用task 1来训练学习算法(learning algorithm),会得到一个函数。为了评价好不好,我们可以将task 1的测试数据输入到模型中,得到测试结果的loss值。模型在一个任务上表现好还不够,我们希望模型在很多个任务上都有很好的表现,因此,我们还要测试在task2,task3,task4……的表现。相应的,我们得到了不同任务的,,……
所有的任务测试完成之后,我们将所有的loss加起来来评估的好坏:
其中,代表task的数量,是第个任务的test loss。
由此可以看到meta learning和传统的machine learning有着很大区别。Machine learning有training data和test data,loss是用training data计算得到的。而meta learning有training tasks和test tasks,training tasks和test tasks又包含training data和test data。
Machine Learning:
- training data
- test data
Meta Learning:
- training tasks
- training data
- test data
- test tasks
- training data
- test data
不过在few-shot learning中,我们通常把training data叫做support set,test data叫做query set。为了与传统的machine learning算法中的training data和test data进行区分,我后面都有叫做support set和query set。
在meta learning中我们不仅要寻找对所有任务都最优的初始化参数,当遇到新任务的时候也要可以微调模型适应新的任务(we will not simply use the data from other tasks to find parameters that are optimal for all tasks, but keep the option to fine-tune our model)。因此优化目标就可以写作:
其中,是一个将映射到新的参数向量的一个优化算法,并且可以更具梯度下降算法更新。是由一些列任务学习得到的,它可以被认为是优化器的初始化参数,因此是目标任务的元参数(meta-parameter),优化元参数的过程叫做元学习(meta learning)。如果我们能找到一个最优的元参数,我们就可以使用很少的数据fine-tune任何任务而不会过拟合。
更简单一点的表示可以记作(来自李宏毅老师):
- 定义评价的损失函数:
- 找到最优的:
将找到的应用到测试任务中,将测试任务的suppor set输入到,模型会找到一个,将query set输入到中进行测试,可以得到query set的loss,这个loss就是meta learning训练完成后模型的好坏。
2. Model-Agnostic Meta-Learning
Few-shot learning的目标函数:
我们令为训练任务,服从分布。任务是从数据集中随即选取的任务,因此它是一个随即变量。
MAML算法的流程如下:
- 首先初始化参数
- 随机选择一部分任务
- 对每一个任务使用梯度更新方法,计算得到该任务下的最优的作为初始化参数
- 现在我们已经得到了每个任务的初始化参数,我们要评价学习到的初始化参数的好坏,需要借助test data。为了评估training data或者说是(support set)训练得到的初始化参数的好坏,将每个任务的test data(或者说是query set)输入到训练后的模型中,计算损失函数。因此,优化目标就变成了:根据步骤3中的公式我们可以得到可以看到:这是一个关于求两次梯度的目标函数。则meta-gradient update就可以写成:
算法的为代码如下图所示。
image.png
值得注意的是:meta-gradient update更新的是初始值。初始值会影响训练出来的,求导记作:
Meta-gradient带来的一个问题是增加了一次额外的求导,作者在论文中提到使用了一阶近似来表示黑塞矩阵,结果和求两次导数差不多。
3. MAML的物理意义
maml.png假设初始化参数为,的一个task的training set更新后变成,用test set计算第二次梯度会得到另外一个向量,用这个向量的方向来更新得到。
而模型预训练与它不同,它一次只更新一个梯度,所以计算出来哪个方向就其哪个方向。
网友评论