这篇文章和Andrychowicz在2016年发表的Learning to learn by gradient by gradient很相似,都是利用Meta-Learning来学习出一个优化算法,并且需要注意的是Meta-Learner都是基于LSTM的循环神经网络,这也就是本论文标题的由来——将优化看成是一个模型(RNN)。

Meta-Learning的通俗解释:
少样本学习(Few-shot Learning)是Meta-Learning在监督学习领域的一个应用。元学习的关键是找到一种系统化的方法去学习在各种任务上有效的通用初始化方案,这种方案能够为基于待考虑数据上的任务提供一个良好的初始训练点,从而实现在新任务上的快速适应至收敛,即Learn-to-Learn。

参考列表:
①李宏毅Meta-Learning视频
②RNN笔记
③论文笔记1
④论文笔记2
⑤论文笔记3

Optimization as a Model for Few-Shot Learning

  • 简介
  • 名词解释和训练过程
    • 名词解释
    • 训练过程
  • 核心内容
  • 参数共享和预处理
    • 参数共享
    • 预处理
  • 梯度独立性假设
  • 模型初始化
  • 实验
    • 对比实验
    • 可视化
  • 总结与展望

简介

论文中提出的基于LSTM的元学习者模型(LSTM-based),作为一个优化器的角色,能够捕获任务内的短期知识以及跨任务的长期知识,进而形成跨任务共享的基础知识,最后作用在学习者上,使其能够在每个任务上都可以快速收敛到一个较优解。

文章提出的问题以及解决方案:
对于传统基于梯度下降的优化算法而言,少样本学习是行不通的。

  1. 像SGD、Adam、RMSProp等一般都是为大样本训练集的任务而设定的。
  2. 对于分离的不同的tasks,比如不同的分类任务,传统梯度下降法会对于每个任务都设定随机化参数,而我们手上的样本很少,那么在少样本的迭代更新下,模型参数可能会到达一个很糟糕的状态。

因此必须找到一种优化算法去解决Few-shoting Learning问题。
解决方案:也就是本文的核心内容——学习一个LSTM-based Meta-Learning模型作为优化器,用它去学习出一套优化规则应用于不同的新tasks上去。
Note:

  1. 本文除了学习出一种通用性的学习规则之外,还可以学习出LSTM记忆细胞的初始值,有点类似于MAML。

名词解释和训练过程

名词解释

记meta-set为D\mathfrak{D}D,比如Meta-Learning经典数据集Mini-Imagenet。Dmeta−train\mathfrak{D}_{meta-train}Dmeta−train​、Dmeta−validation\mathfrak{D}_{meta-validation}Dmeta−validation​、Dmeta−test\mathfrak{D}_{meta-test}Dmeta−test​分别是用于训练、验证、测试(微调)的数据集,且都是D\mathfrak{D}D的超集。Dtrain\mathcal{D}_{train}Dtrain​、Dtest\mathcal{D}_{test}Dtest​是上述三种集合的超集,一般都分别称之为suppprt−setsuppprt-setsuppprt−set和query−setquery-setquery−set。用一个完整的图来表示就是:
D{Dmeta−train{DtrainDtestDmeta−validation{DtrainDtestDmeta−test{DtrainDtest\mathfrak{D} \begin{cases} \mathfrak{D}_{meta-train}\begin{cases}\mathcal{D}_{train}\\\mathcal{D}_{test}\end{cases}\\ \mathfrak{D}_{meta-validation}\begin{cases}\mathcal{D}_{train}\\\mathcal{D}_{test}\end{cases}\\ \mathfrak{D}_{meta-test}\begin{cases}\mathcal{D}_{train}\\\mathcal{D}_{test}\end{cases} \end{cases} D⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧​Dmeta−train​{Dtrain​Dtest​​Dmeta−validation​{Dtrain​Dtest​​Dmeta−test​{Dtrain​Dtest​​​Note:

  1. Dmeta−train\mathfrak{D}_{meta-train}Dmeta−train​用于训练,比如MAML这篇文章中的:
    就是使用了Dmeta−train\mathfrak{D}_{meta-train}Dmeta−train​,其中2个更新过程分别使用了Dtrain\mathcal{D}_{train}Dtrain​和Dtest\mathcal{D}_{test}Dtest​。
  2. Dmeta−test\mathfrak{D}_{meta-test}Dmeta−test​用于微调,一般用于检测训练结果,集合里都是新的tasks。
  3. Dmeta−validation\mathfrak{D}_{meta-validation}Dmeta−validation​用于调整选择一些超参数。
  4. k−shot,N−classk-shot,N-classk−shot,N−class指的是Dtrain\mathcal{D}_{train}Dtrain​中包含k⋅Nk\cdot Nk⋅N个样本即NNN个类别,每个类别有kkk张。常用于分类问题,比如k⋅Nk\cdot Nk⋅N张图片。
  5. 因为小样本问题导致样本集很欠缺,所以一般我们都选择k=1k=1k=1或者k=5k=5k=5。下图是一个经典的1−shot,5−class1-shot,5-class1−shot,5−class栗子:
    可以看出每一个task是如何组成的,另外support−setsupport-setsupport−set和query−setquery-setquery−set指的都是每一个task内部的集合。

训练过程

在Few-shot Learning中,一个task就是由k−shot,N−classk-shot,N-classk−shot,N−class以及query-set组成的。在Meta-Learning中,一个task称之为一个样本,而监督学习里面一个样本往往指一张图片。标准的Meta-Learning训练过程:在多个Meta-Training tasks(Dmeta−train\mathfrak{D}_{meta-train}Dmeta−train​)上进行训练,然后学到我们需要的更新规则和初始化。面对一个新的Few-shot task(Dmeta−test\mathfrak{D}_{meta-test}Dmeta−test​)时,我们在这个任务的support-set上面使用我们的更新规则对这个初始化参数进行优化更新(微调),在query-set上面进行性能评估。LSTM-Based Meta-Learning的训练示意图如下:
Note:

  1. Learner会接受来自query-set的batch个tasks的输入,然后输出的(∇L\nabla\mathcal{L}∇L,L\mathcal{L}L)给Meta-Learner做更新,然后Meta-Learner会输出θ\thetaθ来对Learner做更新。
  2. Support-set上只更新Learner的参数,不更新Meta-Learner参数。 Query上则相反。我们可以理解Support-set上我们用当前的更新规则去试验一下效果好不好,然后在Query-set上我们在来更新修改这个更新规则。
  3. Meta-Learner由一个LSTM组成,其参数的学习来自于Learner在Query-set上的表现,如下图所示:

核心内容

这篇文章的核心:

  1. 通过LSTM-based Meta-Learning学习一个通用化的用于学习Learner参数的梯度规则。
  2. 以及LSTM初始参数c0c_0c0​的学习。

在一个Learner上标准的梯度更新为:
θt=θt−1−αt⋅∇θt−1Lt(1)\theta_t=\theta_{t-1}-\alpha_t\cdot\nabla_{\theta_{t-1}}\mathcal{L}_t\tag{1} θt​=θt−1​−αt​⋅∇θt−1​​Lt​(1)而LSTM的记忆细胞输出公式为:
ct=ft⊙ct−1+it⊙ct~(2)c_t=f_t\odot c_{t-1}+i_t\odot \tilde{c_t}\tag{2} ct​=ft​⊙ct−1​+it​⊙ct​~​(2)因此,当ft=1,ct−1=θt−1,it=αt,ct~=−∇θt−1Ltf_t=1,c_{t-1}=\theta_{t-1},i_t=\alpha_t,\tilde{c_t}=-\nabla_{\theta_{t-1}}\mathcal{L}_tft​=1,ct−1​=θt−1​,it​=αt​,ct​~​=−∇θt−1​​Lt​的时候,则梯度更新规则就可以用LSTM的记忆细胞来表示了,即ct=θtc_t=\theta_tct​=θt​。

这里需要注意的是学习率αt\alpha_tαt​(输入门)和遗忘门的值,你大可把他们两当做常数看待,但是最佳的选择是通过学习的方式动态调整这两个值,如下图所示:
怎么去学习呢,就是把it、fti_t、f_tit​、ft​参数化表示:
it=σ(WI⋅[∇θt−1Lt,Lt,θt−1,it−1]+bI)ft=σ(WF⋅[∇θt−1Lt,Lt,θt−1,ft−1]+bF)i_t=\sigma(W_I\cdot[\nabla_{\theta_{t-1}}\mathcal{L}_t,\mathcal{L}_t,\theta_{t-1},i_{t-1}]+b_I)\\ f_t=\sigma(W_F\cdot[\nabla_{\theta_{t-1}}\mathcal{L}_t,\mathcal{L}_t,\theta_{t-1},f_{t-1}]+b_F) it​=σ(WI​⋅[∇θt−1​​Lt​,Lt​,θt−1​,it−1​]+bI​)ft​=σ(WF​⋅[∇θt−1​​Lt​,Lt​,θt−1​,ft−1​]+bF​)Note:

  1. 表达的意思就是学习率或者ftf_tft​都是∇θt−1Lt,Lt,θt−1,it−1,ft−1\nabla_{\theta_{t-1}}\mathcal{L}_t,\mathcal{L}_t,\theta_{t-1},i_{t-1},f_{t-1}∇θt−1​​Lt​,Lt​,θt−1​,it−1​,ft−1​的函数,由于其值是动态变化的,因此Meta-Learner可以进行调节。
  2. 对于ftf_tft​,一般来说都是ft=1f_t=1ft​=1,但是能如果参数陷入局部最优,那么我们可能会想要去忘掉之前的内容,这就需要遗忘门ftf_tft​去调节值,而不是只能等于1.

LSTM内部的初始值,比如记忆细胞c0c_0c0​,是可以通过训练得到的,因此在LSTM-based的架构下:把θ0=c0\theta_0=c_0θ0​=c0​当作是参数,也可以被学出来。这种通过Meta-Learning学习初始化参数的方法有点类似于MAML。但和MAML明显不同的是,MAML是显式的去学习这个初始化参数,而LSTM-based是基于LSTM可学习细胞初始值的特性而学习的。可以想象,一个好的初始化值对于之后优化的速度是大有裨益的。

参数共享和预处理

这一节其实在更早的时候由Andrychowicz发表的Learning to learn by gradient descent by gradient descent中有了介绍说明。

参数共享

一般我们的θ\thetaθ维度都是很大的,那么如果给每个维度的参数θi\theta_iθi​都配一个LSTM去学习的话,那么LSTM的参数量可是非常巨大了。因此作者提出不管参数有多少维度,都只使用一个LSTM,即共享LSTM,由于每个维度对应的(∇θiL,L)(\nabla_{\theta_i}\mathcal{L},\mathcal{L})(∇θi​​L,L)都是不一样的,那么即便是同一个LSTM,那么输出的结果也是不一样的,那么问题就不大。这样做的另一个好处是,这样的LSTM学出来的更新规则使得每个维度的参数当共享一套更新规则,回想SGD、Adam、RMSProp的每个参数也都是共享一套更新规则的。

预处理

由于共享LSTM,而每个维度的大小可能大不一样,因此需要做个预处理,将他们的大小进行类似标准化的处理:
x→{(log⁡(∣x∣)p,sgn(x))if∣x∣≥e−p(−1,epx)otherwisex\to\begin{cases} (\frac{\log(|x|)}{p},sgn(x))\quad if\,|x|\ge e^{-p}\\ (-1,e^px)\quad \mathbf{otherwise} \end{cases} x→{(plog(∣x∣)​,sgn(x))if∣x∣≥e−p(−1,epx)otherwise​意思就是,对参数的每个维度的值xxx进行判定,从而获取(∇θiL,L)(\nabla_{\theta_i}\mathcal{L},\mathcal{L})(∇θi​​L,L)的值。

梯度独立性假设

实际我们在做的时候是这样的:

如上图所示,因为∇θL\nabla_\theta\mathcal{L}∇θ​L和θ\thetaθ一定是有依赖的,所以你在做backward的时候,除了主线做梯度回传以外,红框虚线处也会有梯度回传。但实际上LSTM的记忆细胞和输入是没有关系的,因此这里作者也做了个假设:假设红色虚线这里的依赖关系是不存在的,不去管他少改一点代码量,这样假设也符合LSTM的特征。

做梯度独立性假设,即删掉虚线之后:

模型初始化

作者给了LSTM的初始化的一个小技巧,为了使初始LSTM的输出更像标准的梯度下降,即较小的学习率以及遗忘门ft≈1f_t\approx1ft​≈1,可以将遗忘门的bias设置较大,使得输出溢出,这样就能保证ft=1f_t=1ft​=1,此外将输入门的bias设置小一点,那么输出的学习率就不会太大。

实验

对比实验

从对比实验的结果来看,LSTM-Based优化算法超过了一些基线算法,并且和当时已经在Few-shot Learning取得最佳效果的Matching Network FCE几乎持平

可视化


上图可视化了遗忘门和输入门网络中4层卷积层以及末尾全连接层输出的情况:

  1. 遗忘门的情况可以理解,几乎输出维持在常数1,意味着Meta-Learner学到的值就是1。而输入门的情况不太好去解释。
  2. 不同的曲线代表着不同的tasks上的随机选取的参数值,因此我们可以知道Meta-Learner学到的不只是一种固定的参数,而是针对不同task而不同的策略。也就是说,不同的task,Meta-Learner学到的东西都是不同的,这对于Meta-Learner的意义在于元学者本身具有的通用性。

总结与展望

  1. 伪代码如下:①显然上述代码是预训练的伪代码,并不包括在Dmeta−test\mathfrak{D}_{meta-test}Dmeta−test​上进行微调的过程,但大致也差不多。②Meta-Learner的初始参数是随机初始化的,而Learner的初始化参数是可以学习的,因为c0c_0c0​可以当作LSTM的内部的参数来学习。③Meta-Learner的训练是通过Adam优化算法来实现的。

  2. 本文的意义在于:在Few-shot Learning领域,找到了一种LSTM-based的Meta-Learning方法,它可以在少量样本下学到一种通用性的更新规则去update学习者的参数;除此之外,它也可以给于Learner一个较好的初始化参数θ0\theta_0θ0​,从而有一个较快的收敛速度。


  3. 上图是李宏毅教授在视频中提出的一个理想结构,可以看出来这个结构是Learning to Learn by gradient by gradient这篇论文以及本论文的合体。在前者那篇论文中,是没有红色框的,它只是将绿色框的输出和θ\thetaθ做简单相加来实现梯度下降规则。而在本论文中,是只有红色框而没有蓝色框的

Meta-RL之Optimization as a Model for Few-Shot Learning相关推荐

  1. (转)Paper list of Meta Learning/ Learning to Learn/ One Shot Learning/ Lifelong Learning

    Meta Learning/ Learning to Learn/ One Shot Learning/ Lifelong Learning 2018-08-03 19:16:56 本文转自:http ...

  2. 顶会论文笔记:联邦学习——ATPFL: Automatic Trajectory Prediction Model Design under Federated Learning Framework

    ATPFL: Automatic Trajectory Prediction Model Design under Federated Learning Framework 文章目录 ATPFL: A ...

  3. 小样本论文笔记5:Model Based - [6] One-shot learning with memory-augmented neural networks.

    小样本论文笔记5:Model Based - [6] One-shot learning with memory-augmented neural networks 文章目录 小样本论文笔记5:Mod ...

  4. Large-Scale Global Optimization Using Cooperative Coevolution with Variable Interaction Learning

    0.论文背景 本文在CC框架的基础上,提出了一个新的CC框架CCVIL,放弃了均匀的随机变量分组策略.该框架最初将所有变量视为独立的,并将每个变量放入一个单独的组中.迭代地,它发现它们之间的关系,并相 ...

  5. 论文翻译:2021_语音增强模型压缩_Towards model compression for deep learning based speech enhancement...

    论文地址:面向基于深度学习的语音增强模型压缩 论文代码:没开源,鼓励大家去向作者要呀,作者是中国人,在语音增强领域 深耕多年 引用格式:Tan K, Wang D L. Towards model c ...

  6. 元学习论文OPTIMIZATION AS A MODEL FOR FEW-SHOT LEARNING的简单理解

    我们常用的基于梯度优化的深层网络往往需要大量的数据和迭代步骤. 我们面对的数据场景是有一系列小的数据集而不是一个大的数据集,每一个类有很少的标记数据,这种情况和人类的学习很像,通过一个给定的数据,就能 ...

  7. Model-Agnostic Meta-Learning for Fast Adaptation of Deep Networks(MAML)简析

    在看MAML这篇论文的时候,因为是初学者,很多都不懂,网上查了许多资料也没看明白,最后来来回回找了很多资料结合原文才看懂一些,在这简单分享一下. 什么是元学习? 元学习(meta-learning)已 ...

  8. Django Model各种操作 Meta 常用字段 一对多操作 多对对操作 F Q查询 聚合函数

    Model操作 meta源信息 class CLS(models.Model):username = models.CharField(max_length=32)class Meta:db_tabl ...

  9. 论文理解【RL - Episodic Control】 ——【MFEC】Model Free Episodic Control

    标题:Model Free Episodic Control 文章链接:Model Free Episodic Control 代码实现:sudeepraja Model-Free-Episodic- ...

最新文章

  1. fullcaledar日历插件
  2. android 之ListView总结(一个综合实例)
  3. WebStorm 使用经验
  4. wordpress html页面缓存 cdn,WordPress 下老旧又高效的本地缓存插件 cos-html-cache
  5. python中 tolist_python 列表,数组,矩阵两两转换tolist()的实例
  6. cvc 降噪_哪款蓝牙耳机降噪效果最好,降噪音质俱佳的蓝牙耳机推荐
  7. java jmf for mac 安装_Mac版-Jdk安装与环境配置
  8. 常见的监控项目组网方案技术系统图,一文了解清楚!
  9. 计算机公式和函数的区别,什么是函数 什么是公式
  10. 【知识点2】最大公约数与最小公约数
  11. New Year Garland(dp+组合数学)
  12. c语言人机界面,C语言实现可视化人机界面的有效方法
  13. 巧用 Redis Hyperloglog,轻松统计 UV 数据
  14. 最小化函数minimize
  15. 神经网络epoch和batch的粗浅理解
  16. S2B2C模式是什么?与其他电商模式有何区别?
  17. IPO中的锁定期规则
  18. STM32--0.96寸OLED显示屏
  19. LeetCode 21. 合并两个有序链表(链表)
  20. idea右边找不到maven窗口不见了的多种解决方法

热门文章

  1. 学生信息管理系统——python版(附流程图)
  2. .csd文件怎么读?--CMU_MOSI_Opinion_Labels.csd
  3. android 上传nexus_上传 Android aar 到 nexus 上
  4. 第四章(1.2)机器学习——在web攻击检测中的应用实践
  5. 通过java解码web前端直接预览海康威视摄像头
  6. python矩阵求和, numpy.sum()
  7. 网管软件 LANDesk的配置(视频配截图)
  8. 程序员体验AI换脸就不要用ZAO了,详解Github周冠军项目Faceswap的变脸攻略
  9. 短跑enti策略:如何在不破坏软件的情况下改进软件
  10. power Designer VBS 脚步 通过 excel 生成实体,不用一个一个的输入。