【笔记】Reptile-一阶元学习算法

目录html

论文信息算法

Nichol A , Achiam J , Schulman J . On First-Order Meta-Learning Algorithms[J]. 2018.数组

1、摘要

本文主要考虑元学习问题,即存在一个任务分布(a distribution of tasks),从这个分布中抽取许多任务来训练元学习模型(或代理),使其在处理从这个分布中抽取的之前从未遇到过的任务时能更快的学习(即表现得更好)。网络

本文经过分析一系列仅在元学习更新(meta-learning update)过程当中使用一阶微分(first-order derivation)就能在新任务上实现快速微调的关于参数初始化的算法,验证了一阶元学习算法在一些完善的few-shot分类基准上的有效性,同时还对这些算法的可行性进行了理论分析。数据结构

这些一阶元学习算法主要包括MAML的近似表示(忽略二阶微分)——first-order MAML(简记:FOMAML)以及本文提出的Reptile算法。机器学习

2、背景

2.1 雅可比矩阵(Jacobi Matrix)

是函数的一阶偏导数以必定方式排列成的矩阵,其体现了一个可微方程与给出点的最优线性逼近。ide

  • 假设\(F:\mathbb{R}_\mathrm{n}\rightarrow \mathbb{R}_\mathrm{m}\)是一个从n维欧氏空间映射到到m维欧氏空间的函数。这个函数由m个实函数组成:

\[ F=\begin{cases} f_1(x_1,\cdots,x_n)\\ f_2(x_1,\cdots,x_n)\\ \cdots\\ f_m(x_1,\cdots,x_n)\\ \end{cases} \]函数

  • 这些函数的偏导数(若是存在)能够组成一个m行n列的矩阵,这个矩阵就是所谓的雅可比矩阵:

\[ J = [\frac{\partial f}{\partial x_1} \cdots \frac{\partial f}{\partial x_n}] =\begin{bmatrix} \frac{\partial f_1}{\partial x_1} & \cdots & \frac{\partial f_1}{\partial x_n} \\ \vdots & \ddots & \vdots \\ \frac{\partial f_m}{\partial x_1} & \cdots & \frac{\partial f_m}{\partial x_n} \end{bmatrix} \]性能

2.2 泰勒公式

\[ \begin{array}{*{20}{l}} {f{ \left( {x} \right) }{\begin{array}{*{20}{l}} {=f{ \left( {\mathop{{x}}\nolimits_{{0}}} \right) }+{f \prime }{ \left( {\mathop{{x}}\nolimits_{{0}}} \right) }{ \left( {x-\mathop{{x}}\nolimits_{{0}}} \right) }+\frac{{f '' { \left( {\mathop{{x}}\nolimits_{{0}}} \right) }}}{{2!}}\mathop{{ \left( {x-\mathop{{x}}\nolimits_{{0}}} \right) }}\nolimits^{{2}}+ \cdots +\frac{{\mathop{{f}}\nolimits^{{ \left( {n} \right) }}{ \left( {\mathop{{x}}\nolimits_{{0}}} \right) }}}{{n!}}\mathop{{ \left( {x-\mathop{{x}}\nolimits_{{0}}} \right) }}\nolimits^{{n}}+\mathop{{R}}\nolimits_{{n}}{ \left( {x} \right) }}\\ \end{array}}}\\ \end{array} \]学习

2.3 领头阶(Leading Order)

一个解析表达式按照泰勒公式成无穷级数(或者多项式),根据所研究的定义域,每个展开项所贡献的大小是不会都相同的,根据它们对解析表达式精确值的贡献大小将这些项分门别类地叫作领头阶、次领头阶、次次领头阶…

2.4 转导与概括

摘自:维基百科(https://en.wikipedia.org/wiki/Transduction_(machine_learning)

  • 转导(Transduction):从观察到的特定(训练)案例到特定(测试)案例的推理。
  • 概括(Induction):从观察到的训练案例到通常规则的推理,而后将其应用于测试案例。
  • 示例:

    给出一个点的集合,其中一些点被标记了为A,B或C,可是大多数点没有被标记,用?表示。训练的目的是预测全部未标记点的“最佳”标签。

    • 采用概括的思想,是使用有标记的点来训练监督学习算法,而后让其预测全部未标记的点的标签。可是,对于这个问题,监督学习算法将仅具备五个标记点,创建捕获该数据结构的模型确定会很困难。例如,若是使用最近邻居算法,则即便很明显能够看到中间附近的点与标记为“ B”的点属于同一个群集,也有可能会被标记为“ A”或“ C”。

    • 转导在执行标记任务时,可以考虑全部点,而不只仅是标记点。在这种状况下,转导算法将根据它们本来所属的簇来标记未标记的点。所以,中间的点极可能会标记为“ B”,由于它们的位置很是靠近该群集。
      • 转导的一个优点是,它可使用较少的标记点来进行更好的预测,由于它使用了未标记点中的天然隔断(Break)
      • 转导的一个缺点是它没有创建预测模型。若是将先前未知的点添加到集合中,则须要对全部点重复整个转换算法,以预测标签。若是数据在流式的数据中逐渐可用,则在计算上可能会很昂贵。此外,这可能会致使某些旧点的预测发生变化(取决于应用程序多是好是坏)。另外一方面,有监督的学习算法能够当即标记新点,而计算成本却不多。

3、介绍

3.1 算法动机
  • 人类在进行一项新的任务时,一般使用了大量编码于人类大脑和DNA中的先验知识。得益于此,人类具备快速学习的能力,在数学上这种能力的得到能够解释为贝叶斯推断(Bayesian Inference)过程,这也正是开发出能达到人类水平的学习速度的算法的关键。但实际上使用深度神经网络开发出计算上可行的贝叶斯机器学习算法是极具挑战的。
  • 与此不一样,元学习算法并无尝试去模拟贝叶斯推断过程,而是试图使用任务数据集直接优化快速学习算法,这种算法做为一种“代理”,可以在新任务上快速适应并学习。两类常见的元学习方法:
    • 基于模型:将学习算法编码为循环网络模型中的权重,从而在训练过程当中对元学习模型的参数进行更新。
    • 基于初始化:
      • pre-training:在大量数据上(ImageNet)上学习网络的初始化参数,而后在新任务上进行测试时对这些参数进行微调。这种方法没法保证得出的参数便于调整,为了达到良好的性能有时还须要一些特殊的技巧(ad-hoc tricks)
      • MAML:在优化过程当中对初始化参数进行微分更新,以得到一个敏感的基于梯度的学习算法。可是这种算法使用了二阶微分计算,增大了计算开销。
      • FOMAML:做为MAML的变种,忽略了二阶微分项,节省了计算开销,但损失了部分梯度信息。
  • 针对某些问题使用依赖于高阶梯度的技术可能出现的复杂性,本文探讨了基于一阶梯度信息的元学习算法。
3.2 本文贡献
  • 指出FOMAML的实现相比之前的认知更加容易。
  • 提出了Reptile算法。这种算法与联合训练(joint training,经过训练来最小化在一系列训练任务上指望损失)很是类似,而且与FOMAML紧密相关,可是与FOMAML不一样,Reptile无需对每个任务进行训练-测试(training-testing)划分
  • 对FOMAML和Reptile进行了理论分析,代表二者都对任务内泛化进行了优化。
  • 在对Mini-ImageNet和Omniglot数据集进行实证评价的基础上,提出了实施最佳实践的一些看法。

4、实现

4.1 FOMAML简化实现
  • MAML优化过程的公式化表示:
    \[ \min_{\phi}\mathbb{E}_{\mathcal{T}}[L_{\mathcal{T},B}(U_{\mathcal{T},A}(\phi))] \]

    对于给定的任务\(\mathcal{T}\),内循环中使用训练样本\(A\) 进行优化,而后使用测试样本 \(B\) 计算获得损失,外循环使用损失对初始化参数求梯度,便可得出新任务上参数的优化方向。

    \[ g_{MAML}=\frac{\partial L_{\mathcal{T},B}(U_{\mathcal{T},A}(\phi))}{\partial \phi}=L^{\prime}_{\mathcal{T},B}(\tilde{\phi})U^{\prime}_{\mathcal{T},A}(\phi), \qquad where \quad \tilde{\phi}=U_{\mathcal{T},A}(\phi)) \]

    其中 \(U^{\prime}_{\mathcal{T},A}(\phi)\) 能够视为是关于 \(U_{\mathcal{T},A}(\phi)\) 的雅可比矩阵,而 \(U_{\mathcal{T},A}(\phi)\) 能够视为是对初始化参数向量累加了一系列的梯度向量, \(U_{\mathcal{T},A}(\phi)=\phi+ g_1 + g_2 + \dots +g_k\)

  • FOMAML的简化:

    将梯度向量视为常量,便可将雅可比矩阵转化为恒等操做(identity operation),因此能够简化外循环优化过程当中所使用的梯度公式。

    \[ g_{FOMAML}=L^{\prime}_{\mathcal{T},B}(\tilde{\phi}) \]

    具体流程以下:

    1. 采样任务\(\mathcal{T}\)
    2. 对初始化参数执行更新操做,获得\(\tilde{\phi}=U_{\mathcal{T},A}(\phi))\)
    3. 利用 \(\tilde{\phi}\) 计算对 \(\phi\) 的梯度,获得 \(g_{FOMAML}=L^{\prime}_{\mathcal{T},B}(\tilde{\phi})\)
    4. \(g_{FOMAML}\) 应用到外部循环优化中。
4.2 Reptile实现
  • 算法描述

  • 算法最后一步的模型参数更新的batch版本,能够写为以下形式:
    \[ \phi \leftarrow \phi +\epsilon \frac{1}{n} \sum_{i=1}^{n}(\tilde{\phi_i}-\phi) \]

    其中\(\tilde{\phi_i}=U^{k}_{\mathcal{T}_i} \left\{ \phi \right\}\) ,表示在第i个任务上对参数的更新操做。

  • 这个算法与在损失指望上进行的联合训练十分类似。

  • 当k=1时,算法对应于指望损失的随机梯度降低(SGD)
    \[ \begin{align} g_{Reptile,k=1} & =\mathbb{E}_{\mathcal{T}}\mathrm{[\phi-U_{\mathcal{T}}(\phi)]/\alpha}\\ & =\mathbb{E}_{\mathcal{T}}\mathrm{[\nabla_{\phi}L_{\mathcal{T}}(\phi)]} \end{align} \]

  • 当k>1时,更新过程包含了\(L_{\mathcal{T}}\) 的二阶乃至更高阶的微分项。

4.3 理论分析
  • 更新过程当中的领头阶(Leading Order)展开

    直觉是:

    • 使用泰勒序列展开来近似表示Reptile与MAML的更新过程,发现二者具备相同的领头项(leading-order terms)——领头阶(第一项)起着最小化指望损失的做用;次领头项(第二项)及后续项最大化任务内的泛化性

    • 最大化同一任务中不一样minibatch之间梯度的内积,对其中一个batch进行梯度更新会显著改善另外一个batch的的表现。

    • 表达式定义(\(i\in[1,k]\) 指代不一样的batch)
      \[ \begin{align} &g_i=L^{\prime}_i(\phi_{i})\quad(在SGD过程当中得到的梯度)\\ &\phi_{i+1}=\phi_i-\alpha g_i\quad(参数更新序列)\\ &\bar{g_i}=L^{\prime}_i(\phi_1)\quad (起始点梯度)\\ &\bar{H_i}=L^{\prime \prime}_i(\phi_1)\quad (起始点Hessian矩阵,即二阶梯度) \end{align} \]

    • 将SGD过程当中得到的梯度,按照泰勒公式展开

    • 近似表示MAML梯度(\(U_i\) 表示在第\(i\)个minibatch上对参数向量的更新操做)

    • 领头阶展开

    • 当k=2时,三者的通常表示形式为:
      \[ \begin{align} &g_{MAML}=\bar{g_2}-\alpha\bar{H_2}\bar{g_1}-\alpha\bar{H_1}\bar{g_2}+O(\alpha^2)\\ &g_{MAML}=g_2=\bar{g_2}-\alpha\bar{H_2}\bar{g_1}+O(\alpha^2)\\ &g_{Reptile}=g_1+g_2=\bar{g_1}+\bar{g_2}-\alpha\bar{H_2}\bar{g_1}+O(\alpha^2)\\ \end{align} \]

      其中:

      • 相似于\(\bar{g_1}\quad \bar{g_2}\)的项就是领头项,用于最小化联合训练损失;
      • 相似于\(\bar{H_2}\bar{g_1}\)的项就是次领头项,做用是最大化不一样批次数据上获得的梯度的内积。
    • 在进行minibatch采样,取三种梯度的指望时,上述两种领头项分别用AvgGradAvgGradInner表示(k=2):

    • 三种算法梯度的指望表示形式能够化为:

    • 扩展到k>2的状况有:

      • 能够看到三者AvgGradInner与AvgGrad之间的系数比的关系是:MAML > FOMAML > Retile
      • 这个比例与步长\(\alpha\),迭代次数\(k\) 正相关。
  • 找到一个接近全部解流形(Solution Manifolds)的点

    直觉:

    • Reptile收敛于一个解,这个解在欧式空间上与每一个任务的最优解的流形接近。

    • \(\phi\) 表示网络初始化,\(\mathcal{W_{T}}\) 表示任务\(\mathcal{T}\)上的最优参数集。优化过程的最终目标是找到一个\(\phi\)使得其与全部任务的\(\mathcal{W_{T}}\) 之间的距离最小。
      \[ \min_{\phi}\mathbb{E}_{\mathcal{T}}[\frac{1}{2} D(\phi,\mathcal{W_T})^2] \]

    • 对参数\(\phi\)的梯度为:

    • 在Reptile中每一次迭代至关于采样一个任务而后在上面执行一侧SGD更新。

    • 实际状况下,很难直接计算出\(P_{\mathcal{W_T}}(\phi)\),即便得\(L_T\) 取得最小值的p。所以在Reptile中,用初始化参数\(\phi\)\(L_T\) 上执行k步梯度降低后获得的结果来代替最优化参数\(\mathcal{W^{\star}_{T}(\phi)}\)

5、实验

5.1 少样本分类

Few-Shot Classification(少样本分类)是少样本学习中的一类任务,在这类任务中,存在一个元数据集(Meta-Data Set),包含了许多类的数据,每类数据由若干个样本组成,这种任务的训练一般与K-Shot N-way分类任务绑定在一块儿,具体理解参见《关于N-Way K-Shot 分类问题的理解》。

创建与MAML同样的CNN训练模型,在Ominglot和MiniImageNet数据集上进行训练与测试,实验结果以下:

从两个表格中的数据能够看出,MAML与Reptile在加入了转导(Transduction)后,在Mini-ImageNet上进行实验,Reptile的表现要更好一些,而Omniglot数据集上正好相反。

5.2 不一样的内循环梯度组合比较

经过在内循环中使用四个不重合的Mini-Batch,产生梯度数据\(g_1,g_2,g_3,g_4\) ,而后将它们以不一样的方式进行线性组合(等价于执行屡次梯度更新)用于外部循环的更新,进而比较它们之间的性能表现,实验结果以下图:

从曲线能够看出:

  • 仅使用一个批次的数据产生的梯度的效果并不显著,由于至关于让模型用见到过的少许的数据去优化全部任务。
  • 进行了两步更新的Reptile(绿线)的效果要明显不如进行了两步更新的FOMAML(红线),由于Reptile在AvgGradInner上的权重要小于FOMAML。
  • 随着mini-batch数量的增多,全部算法的性能也在提高。经过同时利用多步的梯度更新,Reptile的表现要比仅使用最后一步梯度更新的FOMAML的表现好。
5.3 内循环中Mini-Batch 重合比较

Reptile和FOMAML在内循环过程当中都是使用的SGD进行的优化,在这个优化过程当中任何微小的变化都将致使最终模型性能的巨大变化,所以这部分的实验主要是探究二者对于内循环中的超数的敏感性,同时也验证了FOMAML在minibatch以错误的方式选取时会出现显著的性能降低状况。

mini-batch的选择有两种方式:

  • shared-tail(共尾):最后一个内循环的数据来自之前内循环批次的数据
  • separate-tail(分尾):最后一个内循环的数据与之前内循环批次的数据不一样

采用不一样的mini-batch选取方式在FOMAML上进行实验,发现随着内循环迭代次数的增多,采用分尾方式的FOMAML模型的测试准确率要高一些,由于在这种状况下,测试的数据选取方式与训练过程当中的数据选取方式更为接近。

当采用不一样的批次大小时,采用共尾方式选取数据的FOMAML的准确性会随着批次大小的增长而显著减少。当采用full-batch时,共尾FOMAML的表现会随着外循环步长的加大而变差。

共尾FOMAML的表现如此敏感的缘由多是最初的几回SGD更新让模型达到了局部最优,之后的梯度更新就会使参数在这个局部最优附近波动。

6、总结

Reptile有效的缘由有二:

  • 经过用泰勒级数近似表示更新过程,发现SGD自动给出了与MAML计算的二阶项相同的项。这一项调整初始权重,以最大限度地增长同一任务中不一样小批量梯度之间的点积,从而增大模型的泛化能力。
  • Reptile经过利用屡次梯度更新,找到了一个接近全部最优解流形的点。

当执行SGD更新时,MAML形式的更新过程就已经被自动包含在其中了,经过最大化模型在不一样批次数据之间的泛化能力,从而使得模型在微调(fine-tune)时能取得显著的效果。

相关文章
相关标签/搜索