Few-shot learning(少样本学习)和 Meta-learning(元学习)概述

参考:Few-shot learning(少样本学习)和 Meta-learning(元学习)概述_CaoChengtai的博客-CSDN博客_少样本学习

什么是少样本学习(Few-shot learning)

现在的主流的传统深度学习技术需要大量的数据来训练一个好的模型。例如典型的 MNIST 分类问题,一共有 10 个类,训练集一共有 6000 个样本,平均下来每个类大约 600 个样本,但是我们想一下我们人类自己,我们区分 0 到 9 的数字图片的时候需要看 6000 张图片才知道怎么区分吗?很显然,不需要!这表明当前的深度学习技术和我们人类智能差距还是很大的,要想弥补这一差距,少样本学习是一个很关键的问题。另外还有一个重要原因是如果想要构建新的数据集,还是举分类数据集为例,我们需要标记大量的数据,但是有的时候标记数据集需要某些领域的专家(例如医学图像的标记),这费时又费力,因此如果我们可以解决少样本学习问题,只需要每个类标记几张图片就可以高准确率的给剩余大量图片自动标记。这两方面的原因都让少样本学习问题很吸引人。

如何解决Fsl问题

数据增强和正则化策略和元学习策略

数据增强策略

这一类方法想法很直接简单,既然训练数据不够那我就增加训练样本,既然过拟合那我就使用正则化技术。

数据增强:就是扩充待识别目标的数据数量;或者通过一些如旋转、翻转数据增强方法扩充;或者作为一个长尾分布来解决。
正则化:除了一些基本的额解决过拟合的方法外,还可以在训练的时候加入一个正则项,这个正则项的构建选择是关键。比如 《Few-shot Classification on Graphs with Structural Regularized GCNs》。该论文讨论 Graph 中节点分类的 few-shot 问题,常见的节点分类是使用 GCN 从节点的特征向量 feature 学习一个 embedding 然后用 embedding 来做分类,如果是 few-shot 问题,性能会大大下降(准确率大约从 70% 到了 40%),作者在训练的时候给损失函数加了一个正则项。作者将 feature 到 embedding 的过程看成编码器 encoder,然后额外加了几层网络作为 decoder,将 embedding 重构为 feature ,然后重构误差作为正则项(准确率从 40% 提升了 50%,大约 10 个百分点)

什么是元学习

元学习的核心想法是先学习一个先验知识(prior),这个先验知识对解决 few-shot learning 问题特别有帮助。Meta-learning 中有 task 的概念,比如上面图片讲的 5-way 1-shot 问题就是一个 task,我们需要先学习很多很多这样的 task,然后再来解决这个新的 task 。最最最重要的一点,这是一个新的 task。分类问题中,这个新的 task 中的类别是之前我们学习过的 task 中没有见过的! 在 Meta-learning 中之前学习的 task 我们称为 meta-training task,我们遇到的新的 task 称为 meta-testing task。因为每一个 task 都有自己的训练集和测试集,因此为了不引起混淆,我们把 task 内部的训练集和测试集一般称为 support set 和 query set

简单画了一个示意图,前面三个是三个 meta-training task (当然实际需要很多这样的 meta-training task 才能学到我们需要的先验知识),最后一个就是 meta-testing task。我们最后评价我们的 meta-learning 方法的好坏就是在红色标记部分上的 performance。

方法 2.1 和方法 2.2 之间有个明显的差异就是 meta-learning 需要一些类来构建 meta-training task。由于 meta-testing 的类别要和 meta-training 完全不同,因此如果我们只有 MNIST 数据集,没法使用 meat-learning 来解决 MNIST 上的 10-way few-shot learning 问题,但是方法 2.1 可以。不过我们可以使用 meta-learning 解决 MNIST 上的 N-way (N < 6) 的 few-shot learning 问题。那么如果我们非要解决 MNIST 上的 10-way few-shot learning 问题怎么办呢,可以在另外一个数据集,例如 Omniglot ,上面进行 meta-training,然后学到的先验知识用来解决这个问题。《Siamese neural networks for one-shot image recognition.》 和 《Matching networks for one shot learning.》都在论文中做过这样子实验(这一种情况和迁移学习(transfer learning)有相似的地方)

如何进行元学习

Meta-learning 方法的分类标准有很多,个人喜欢按照如下标准分为三类。参考文章《Learning to Compare: Relation Network for Few-Shot Learning》

学习微调 (Learning to Fine-Tune)
基于 RNN 的记忆 (RNN Memory Based)
度量学习 (Metric Learning)

Meta-learning 中 task 的概念是和 meta-learning 的本质有关的。Meta-learning 其实还有一个名字叫做“学会学习” (Learn to learn),这来自于对人类智能的基本认知:我们人类学习一个东西的时候不是从头开始学的,都是基于之前学习的知识来进行学习的。比如如果你会玩英雄联盟,那你学习玩王者荣耀会快很多。但是我们的深度学习模型呢,学习新的东西(可以看成新的类,新的 task)需要从头开始学习( 当然需要大量的样本 ),即使你之前学过特别类似的东西。因此 Meta-learning 就像让深度学习学会学习,利用之前学过的知识在面对新的问题可以学习得又快又好,如何体现又快又好呢? – few-shot learning 呗~ 因此 meta-learning 和 few-shot learning 现在的研究基本都是在一起的。接下来介绍如何从之前的 task 来学习我们想要的先验知识。

1. 学习微调 (Learning to Fine-Tune)
        MAML(《Model-Agnostic Meta-Learning for Fast Adaptation of Deep Networks》) 是这类方法的范例之一。MAML 的思想是学习一个 初始化参数 (initialization parameter),这个初始化参数在遇到新的问题时,只需要使用少量的样本 (few-shot learning) 进行几步梯度下降就可以取得很好地效果( 参见后续博客 )。另一个典型是《Optimization as a Model for Few-Shot Learning》,他不仅关注于初始化,还训练了一个基于 LSTM 的优化器 (optimizer) 来帮助微调( 参见后续博客 )。
2. 基于 RNN 的记忆 (RNN Memory Based)
        最直观的方法,使用基于 RNN 的技术记忆先前 task 中的表示等,这种表示将有助于学习新的 task。可参考《Meta networks》和 《Meta-learning with memory-augmented neural networks.》
3.度量学习 (Metric Learning)
        主要可以参考《Learning a Similarity Metric Discriminatively, with Application to Face Verification.》,《Siamese neural networks for one-shot image recognition》,《Siamese neural networks for one-shot image recognition》,《Matching networks for one shot learning》,《Prototypical Networks for Few-shot Learning》,《Learning to Compare: Relation Network for Few-Shot Learning》。
核心思想:学习一个 embedding 函数,将输入空间(例如图片)映射到一个新的嵌入空间,在嵌入空间中有一个相似性度量来区分不同类。我们的先验知识就是这个 embedding 函数,在遇到新的 task 的时候,只将需要分类的样本点用这个 embedding 函数映射到嵌入空间里面,使用相似性度量比较进行分类。
4.方法简单比较
        三种方法会在后续博客中继续介绍,这里简单比较一下三种方法:
        1.基于 RNN 的记忆 (RNN Memory Based) 有两个关键问题,一个是这种方法经常会加一个外部存储来记忆,另一个是对模型进行了限制 (RNN),这可能会在一定程度上阻碍其发展和应用。
        2.学习微调 (Learning to Fine-Tune) 的方法需要在新的 task 上面进行微调,也正是由于需要新的 task 中 support set 中有样本来进行微调,目前我个人还没看到这种方法用于 zero-shot learning(参考 few-shot learning 问题的定义,可以得到 zero-shot learning的定义)的问题上,但是在《Model-Agnostic Meta-Learning for Fast Adaptation of Deep Networks》的作者 Chelsea Finn 的博士论文《Learning to Learn with Gradients》中给出了 MAML 的理论证明,并且获得了 2018 ACM 最佳博士论文奖,还有一点就是 MAML 可以用于强化学习,另外两种方法多用于分类问题。链接:https://mp.weixin.qq.com/s/AdlwI-nbVlDWCj0o5LR7Sw
        3.度量学习 (Metric Learning),和学习微调 (Learning to Fine-Tune) 的方法一样不对模型进行任何限制,并且可以用于 zero-shot learning 问题。虽然效果比较理想但是现在好像多用于分类任务并且可能缺乏一些理论上的证明,比如相似性度量是基于余弦距离还是欧式距离亦或是其他?为什么是这个距离?(因为 embedding 函数是一个神经网络,可解释性差,导致无法很好解释新的 embedding 空间),虽然《Learning to Compare: Relation Network for Few-Shot Learning》中的 Relation Network 将两个需要比较的 embedding 又送到一个神经网络(而不是人为手动选择相似性度量)来计算相似性得分,但是同样缺乏很好地理论证明。
5.找到一个图网络进行元学习的方法:少样本学习_klsfct的博客-CSDN博客_少样本学习,不过暂且不知如何归类。

少样本学习(一):了解一些基础概念相关推荐

  1. 悟道·文汇详解:少样本学习等近十个数据集取得第一

    智源导读:预训练模型如今已经成为深度学习研究中的一种主流范式,智源研究院认为「深度学习已经从『大炼模型』步入到『练大模型』的阶段」.基于此种考虑,由智源研究院牵头,汇聚清华.北大.中科院.人大等高校院 ...

  2. NeurIPS 2019 少样本学习研究亮点全解析

    作者:Angulia Chao 编辑:Joni Zhong 少样本学习(Few-Shot Learning)是近两年来非常有研究潜力的一个子方向,由于深度学习在各学科交叉研究与商业场景都有比较普遍的应 ...

  3. 基于语言模型的少样本学习 / 深度学习优化器基准测试 | 本周值得读

    在碎片化阅读充斥眼球的时代,越来越少的人会去关注每篇论文背后的探索和思考.在这个栏目里,你会快速 get 每篇精选论文的亮点和痛点,时刻紧跟 AI 前沿成果.如果你也希望让自己的科研成果被更多人看到, ...

  4. weka分类器怎么设置样本类别_NeurIPS 2019 少样本学习研究亮点全解析

    少样本学习(Few-Shot Learning)是近两年来非常有研究潜力的一个子方向,由于深度学习在各学科交叉研究与商业场景都有比较普遍的应用,然而训练出高精度模型的情况大部分来源于充足的训练数据,这 ...

  5. Few-shot learning 少样本学习

    N-way K-shot用来衡量网络泛化能力,但小样本在实际应用中并不是很好. 背景 深度学习已经广泛应用于各个领域,解决各类问题,在图像分类的问题下,可以很轻松的达到94%之上.然而,deep le ...

  6. Meta-learning(元学习与少样本学习)

    Meta-learning(元学习) 虽然目前很多暴力堆算力堆数据的模型取得了很好的效果,但由于有些数据很难收集到,或者大量的标注耗费人力太多,关于元学习的研究也很多.特别是比如人类往往只需要通过少量 ...

  7. Few-shot learning(少样本学习,入门篇)

    本文介绍一篇来自 https://www.analyticsvidhya.com/ 关于少样本学习的的博客. 原文地址 文章目录 1. 少样本学习 1.1 为什么要有少样本学习?什么是少样本学习? 1 ...

  8. 少样本学习原理快速入门,并翻译《Free Lunch for Few-Shot Learning: Distribution Calibration》

    ICLR2021 Oral<Free Lunch for Few-Shot Learning: Distribution Calibration> 利用一个样本估计类别数据分布 9行代码提 ...

  9. 姚班代有才人出:清华本科生用“最简单的形式”,大幅提高少样本学习性能...

    鱼羊 十三 发自 凹非寺 量子位 报道 | 公众号 QbitA 仅仅根据元学习(Meta-Learning)的基线,就彻底打败了所有"花里胡哨"的改进方法. 就是这些看似简单,又容 ...

最新文章

  1. Python:numpy实现生成随机数,忽略warnings
  2. 将类别加入到别人的名称空间内
  3. 树莓派开发2-静态库,动态库,wiringpi库
  4. python篮球-用Python让蔡徐坤在我的命令行里打篮球!|附完整代码
  5. ie浏览器跨域报错问题;Access-Control-Allow-Headers 列表不存在请求表头 content-type;XMLHTTPRequest:网络错误 0x80070005,拒绝访问。
  6. 【CodeForces - 227A】Where do I Turn? (计算几何,叉积判断直线拐向)
  7. 方向盘开极品飞车9很Hapyy
  8. 计算机科学开设的核心主干课程,以中美大学先修课程培养计算机科学核心素养的探索实践...
  9. java 视频 缩略图_java获取视频缩略图
  10. 限制只允许某个进程调用库
  11. 软件需求说明书模板概要书
  12. 简单的C语言程序介绍(重点理解),超详细基础代码解析
  13. Hadoop组件概览
  14. vs2015 社区版
  15. centos7构建kylo-0.10.1
  16. Arduino Adafruit GFX图形库介绍(三)- 图形基本元素
  17. 12年双11:从春雷到秋实,为复苏喝彩
  18. 解析SRAM存储容量及基本特点
  19. sox处理mp3,使用SoX将mp3文件拆分为TIME秒
  20. 拓嘉启远:拼多多购物运输中的商品能拒收吗

热门文章

  1. 文末赠书 | 2020年的华为天才少年,已成团队leader,26岁CV博士毕业,为车打造一双慧眼...
  2. python mechanize使用
  3. BUG 终结者,现场抓获!|颠覆认知
  4. Linux操作系统安装及应用
  5. Galaxy固定容器IP网路方案
  6. 吃透Chisel语言.36.Chisel实战之以FIFO为例(一)——FIFO Buffer和Bubble FIFO的Chisel实现
  7. i5 12400f和i5 12400区别
  8. 视频教程-uniapp开发仿阿里飞猪旅游微信小程序,vue中高级课程-Vue
  9. skynet使用总述——棋牌类手游的尝试
  10. 改变 WID 的位置