Model-AgnosticMeta-Learning(MAML):与模型无关的元学习,可兼容于任何一种采用梯度下降算法的模型。MAML通过少量的数据寻找一个合适的初始值范围,从而改变梯度下降的方向,找到对任务更加敏感的初始参数,使得模型能够在有限的数据集上快速拟合,并获得一个不错的效果。该方法可以用于回归、分类以及强化学习。
MAML是典型的双层优化结构,其内层和外层的优化方式如下:
内层优化涉及到基学习器,从任务分布$p(T)$中随机采样第$i$个任务$T_{i}$。任务$T_{i}$上,基学习器的目标函数是:
$$\min{\phi}L{T_{i}}\left(f_{\phi}\right)$$
其中,$f_{\phi}$是基学习器,$\phi$是基学习器参数,$L_{T_{i}}\left(f_{\phi}\right)$是基学习器在$T_{i}$上的损失。更新基学习器参数:
$$\theta_{i}{N}=\theta_{i}-\alpha\left[\nabla_{\phi}L_{T_{i}}\left(f_{\phi}\right)\right]{\phi=\theta^{N-1}}$$
其中,$\theta$是元学习器提供给基学习器的参数初始值$\phi=\theta$,在任务$T_{i}$上更新$N$后$\phi=\theta_{i}^{N-1}$.
外层优化涉及到元学习器,将$\theta_{i}^{N}$反馈给元学匀器,此时元目标函数是:
$$\min{\theta}\sum\simp(T)}L_{T_{i}}\left(f_{\theta_{i}^{N}}\right)$$
元目标函数是所有任务上验证集损失和。更新元学习器参数:
$$\theta\leftarrow\theta-\beta\sum_{T_{i}\simp(T)}\nabla_{\theta}\left[L_{T_{i}}\left(f_{\phi}\right)\right]{\phi=\theta^{N}}$$
MAML中执行了两次梯度下降(gradientbygradient),分别作用在基学习器和元学习器上。图1给出了MAML中特定任务参数$\theta_{i}^{*}$和元级参数$\theta$的更新过程。
MAML是一种与模型无关的元学习方法,可以适用于任何基于梯度优化的模型结构。
基准模型:4moduleswitha3$\times$3convolutionsand64filters,followedbybatchnormalization,aReLUnonlinearity,and2$\times$2max-pooling。
优点
缺点
LatentEmbeddingOptimization(LEO)学习模型参数的低维潜在嵌入,并在这个低维潜在空间中执行基于优化的元学习,将基于梯度的自适应过程与模型参数的基础高维空间分离。
在元学习器中,使用SGD最小化任务验证集损失函数,使得模型的泛化能力最大化,计算元参数,元学习器将元参数输入基础学习器,继而,基础学习器最小化任务训练集损失函数,快速给出任务上的预测结果。LEO结构如图1所示。
图1LEO结构图。$D^{\mathrm{tr}}$是任务$\varepsilon$的supportset,$D^{\mathrm{val}}$是任务$\varepsilon$的queryset,$z$是通过编码器计算的$N$个类别的类别特征,$f_{\theta}$是基学习器,$\theta$是基学习器参数,$L^{\mathrm{tr}}=f_{\theta}\left(D^{\mathrm{tr}}\right)$,$L^{\mathrm{val}}=f_{\theta}\left(D^{\mathrm{val}}\right)$。
LEO包括基础学习器和元学习器,还包括编码器和解码器。在基础学习器中,编码器将高维输入数据映射成特征向量,解码器将输入数据的特征向量映射成输入数据属于各个类别的概率值,基础学习器使用元学习器提供的元参数进行参数更新,给出数据标注的预测结果。元学习器为基础学习器的编码器和解码器提供元参数,元参数包括特征提取模型的参数、编码器的参数、解码器的参数等,通过最小化所有任务上的泛化误差,更新元参数。
编码器和解码器都在基础学习器中,用于计算输入数据属于每个类别的概率值,进而对输入数据进行分类。元学习器提供编码器和解码器中的参数,基础学习器快速的使用编码器和解码器计算输入数据的分类。任务训练完成后,基础学习器将每个类别数据的特征向量和任务$\varepsilon$的基础学习器参数$\boldsymbol{\theta}_{\varepsilon}$输入元学习器,元学习器使用这些信息更新元参数。
编码器模型包括两个主要部分:编码器和关系网络。
编码器$g_{\phi_{e}}$,其中$\phi_{e}$是编码器的可训练参数,其功能是将第$n$个类别的输入数据映射成第$n$个类别的特征向量。
关系网络$g_{\phi_{r}}$,其中$\phi_{r}$是关系网络的可训练参数,其功能是计算特征之间的距离。
第$n$个类别的输入数据的特征记为$z_{n}$。对于输入数据,首先,使用编码器$g_{\phi_{e}}$对属于第$n$个类别的输入数据进行特征提取;然后,使用关系网络$g_{\phi_r}$计算特征之间的距离,综合考虑训练集中所有样本点之间的距离,计算这些距离的平均值和离散程度;第$n$个类别输入数据的特征$z_{n}$服从高斯分布,且高斯分布的期望是这些距离的平均值,高斯分布的方差是这些距离的离散程度,具体的计算公式如下:
$$\begin{aligned}&\mu_{n}^{e},\sigma_{n}^{e}=\frac{1}{NK^{2}}\sum_{k_{n}=1}^{K}\sum_{m=1}^{N}\sum_{k_{m}=1}^{K}g_{\phi_{r}}\left[g_{\phi_{e}}\left(x_{n}^{k_{n}}\right),g_{\phi_{e}}\left(x_{m}^{k_{m}}\right)\right]\&z_{n}\simq\left(z_{n}\midD_{n}{\mathrm{tr}}\right)=N\left{\mu_{n},\operatorname{diag}\left(\sigma_{n}{e}\right)\right}\end{aligned}$$
其中,$N$是类别总数,$K$是每个类别的图片总数,${D}{n}^{\mathrm{tr}}$是第$n$个类别的训练数据集。对于每个类别的输入数据,每个类别下有$K$张图片,计算这$K$张图片和所有已知图片之间的距离。总共有$N$个类别,通过编码器的计算,形成所有类别的特征,记为$z=\left(z,\cdots,z_{N}\right)$。
解码器$g_{\phi_{d}}$,其中$\phi_{d}$是解码器的可训练参数,其功能是将每个类别输入数据的特征向量$z_{n}$映射成属于每个类别的概率值$\boldsymbol{w}_{n}$:
$$\begin{aligned}&\mu_{n}^{d},\sigma_{n}^{d}=g_{\phi_{d}}\left(z_{n}\right)\&w_{n}\simq\left(w\midz_{n}\right)=N\left{\mu_{n}^{d},\operatorname{diag}\left(\sigma_{n}{d}\right)\right}\end{aligned}$$
其中,任务$\varepsilon$的基础学习器参数记为$\theta_{\varepsilon}$,基础学习器参数由属于每个类别的概率值组成,记为$\theta_{\varepsilon}=\left(w_{1},w_{2},\cdots,w_{N}\right)$,基础学习器参数$\boldsymbol{w}{n}$指的是输入数据属于第$n$个类别的概率值,$g{\phi_{d}}$是从特征向量到基础学习器参数的映射。
在基础学习器中,任务$\varepsilon$的交叉熵损失函数是:
$$L_{\varepsilon}^{\mathrm{tr}}\left(f_{\theta_{\varepsilon}}\right)=\sum_{(x,y)\inD_{\varepsilon}^{\mathrm{tr}}}\left[-w_{y}\boldsymbol{x}+\log\sum_{j=1}^{N}\mathrm{e}^{w_{j}x}\right]$$
其中,$(x,y)$是任务$\varepsilon$训练集$D_{\varepsilon}^{\mathrm{tr}}$中的样本点,$f_{\theta_{\varepsilon}}$是任务$\varepsilon$的基础学习器,最小化任务$\varepsilon$的损失函数更新任务专属参数$\theta_{\varepsilon}$。在解码器模型中,任务专属参数为$w_{n}\simq\left(w\midz_{n}\right)$,更新任务专属参数$\theta_{\varepsilon}$意味着更新特征向量$z_{n}$:
$$z_{n}^{\prime}=z_{n}-\alpha\nabla_{z_{n}}L_{\varepsilon}^{tr}\left(f_{\theta_{\varepsilon}}\right),$$
其中,$\boldsymbol{z}{n}^{\prime}$是更新后的特征向量,对应的是更新后的任务专属参数$\boldsymbol{\theta}^{\prime}$。基础学习器使用$\theta_{\varepsilon}^{\prime}$来预测任务验证集数据的标注,将任务$\varepsilon$的验证集$\mathrm{D}{\varepsilon}^{\mathrm{val}}$损失函数$L{\mathrm{val}}\left(f_{\theta_{\varepsilon}{\prime}}\right)$、更新后的特征向量$z_{n}^{\prime}$、更新后的任务专属参数$\theta_{\varepsilon}^{\prime}$输入元学习器,在元学习器中更新元参数。
在元学习器中,最小化所有任务$\varepsilon$的验证集的损失函数的求和,最小化任务上的模型泛化误差:
$$\min{\phi,\phi_{r},\phi_{d}}\sum_{\varepsilon}\left[L_{\varepsilon}{\mathrm{val}}\left(f_{\theta_{\varepsilon}{\prime}}\right)+\betaD_{\mathrm{KL}}\left{q\left(z_{n}\mid{D}{n}^{\mathrm{tr}}\right)|p\left(z\right)\right}+\gamma\left|s\left(\boldsymbol{z}_{n}{\prime}\right)-\boldsymbol{z}_{n}\right|_{2}\right]+R$$
其中,$L_{\varepsilon}{\mathrm{val}}\left(f_{\theta_{\varepsilon}{\prime}}\right)$是任务$\varepsilon$验证集的损失函数,衡量了基础学习器模型的泛化误差,损失函数越小,模型的泛化能力越好。$p\left(z_{n}\right)=N(0,I)$是高斯分布,$D_{\mathrm{KL}}\left{q\left(z_{n}\mid{D}{n}^{\mathrm{tr}}\right)|p\left(z\right)\right}$是近似后验分布$q\left(z_{n}\midD_{n}^{\text{tr}}\right)$与先验分布$p\left(z_{n}\right)$之间的KL距离(KL-Divergence),最小化$\mathrm{KL}$距离可使后验分布$q\left(z_{n}\mid{D}{n}^{\text{tr}}\right)$的估计尽可能准确。最小化距离$\left|s\left(z^{\prime}\right)-z_{n}\right|$使得参数初始值$z_{n}$和训练完成后的参数更新值$z_{n}^{\prime}$距离最小,使得参数初始值和参数最终值更接近。$R$是正则项,用于调控元参数的复杂程度,避免出现过拟合,正则项$R$的计算公式如下:
$$R=\lambda_{1}\left(\left|\phi_{e}\right|{2}{2}+\left|\phi_{r}\right|_{2}+\left|\phi\right|{2}^{2}\right)+\lambda\left|C_{d}-\mathbb{I}\right|_{2}$$
LEO算法流程
(1)初始化元参数:编码器参数$\phi_{e}$、关系网络参数$\phi_{r}$、解码器参数$\phi_{d}$,在元学习器中更新的元参数包括$\phi=\left{\phi_e,\phi_r,\phi_d\right}$。
(2)使用片段式训练模式,随机抽取任务$\varepsilon$,${D}{\varepsilon}^{\mathrm{tr}}$是任务$\varepsilon$的训练集,${D}^{\mathrm{val}}$是任务$\varepsilon$的验证集。
(3)使用编码器$g_{\phi_{e}}$和关系网络$g_{\phi_{r}}$将任务$\varepsilon$的训练集$D_{\varepsilon}^{\mathrm{tr}}$编码成特征向量$z$,使用解码器$g_{\phi_{d}}$从特征向量映射到任务$\varepsilon$的基础学习器参数${\theta}{\varepsilon}$,基础学习器参数指的是输入数据属于每个类别的概率值向量;计算任务$\varepsilon$的训练集的损失函数$L^{\mathrm{tr}}\left(f_{\theta_{\varepsilon}}\right)$,最小化任务$\varepsilon$的损失函数,更新每个类别的特征向量:
$$z_{n}^{\prime}=z_{n}-\alpha\nabla_{z_{n}}L_{\varepsilon}^{\mathrm{tr}}\left(f_{\theta_{\varepsilon}}\right)$$
使用解码器$g_{\phi_{d}}$从更新后的特征向量映射到更新后的任务$\varepsilon$的基础学习器参数${\theta}{\varepsilon}^{\prime}$;计算任务$\varepsilon$的验证集的损失函数$L^{\text{val}}\left(f_{\theta_{s}^{\prime}}\right)$;基础学习器将更新后的参数和验证集损失函数值输入元学习器。
(4)更新元参数,$\phi\leftarrow\phi-\eta\nabla_{\phi}\sum_{\varepsilon}L_{\varepsilon}^{\text{val}}\left(f_{\theta_{\varepsilon}^{\prime}}\right)$,最小化所有任务$\varepsilon$的验证集的损失和,将更新后的元参数输人基础学习器,继续处理新的分类任务。
LEO是一种与模型无关的元学习,[1]中给出的各部分模型结构及参数如表1所示。
Reptil是MAML的特例、近似和简化,主要解决MAML元学习器中出现的高阶导数问题。因此,Reptil同样学习网络参数的初始值,并且适用于任何基于梯度的模型结构。
在MAML的元学习器中,使用了求导数的算式来更新参数初始值,导致在计算中出现了任务损失函数的二阶导数。在Reptile的元学习器中,参数初始值更新时,直接使用了任务上的参数估计值和参数初始值之间的差,来近似损失函数对参数初始值的导数,进行参数初始值的更新,从而不会出现任务损失函数的二阶导数。
Peptile有两个版本:SerialVersion和BatchedVersion,两者的差异如下:
单次更新的Reptile,每次训练完一个任务的基学习器,就更新一次元学习器中的参数初始值。
(1)任务上的基学习器记为$f_{\phi}$,其中$\phi$是基学习器中可训练的参数,$\theta$是元学习器提供给基学习器的参数初始值。在任务$T_{i}$上,基学习器的损失函数是$L_{T_{i}}\left(f_{\phi}\right)$,基学习器中的参数经过$N$次迭代更新得到参数估计值:
$$\theta_{i}^{N}=\operatorname{SGD}\left(L_{T_{i}},{\theta},{N}\right)$$
(2)更新元学习器中的参数初始值:
$$\theta\leftarrow\theta+\varepsilon\left(\theta_{i}^{N}-\theta\right)$$
SerialVersionReptile算法流程
批次更新的Reptile,每次训练完多个任务的基学习器之后,才更新一次元学习器中的参数初始值。
(1)在多个任务上训练基学习器,每个任务从参数初始值开始,迭代更新$N$次,得到参数估计值。
$$\theta\leftarrow\theta+\varepsilon\frac{1}{n}\sum_{i=1}{n}\left(\theta_{i}-\theta\right)$$
其中,$n$是指每次训练完$n$个任务上的基础学习器后,才更新一次元学习器中的参数初始值。