N-way K-shot用来衡量网络泛化能力,但小样本在实际应用中并不是很好。

背景

深度学习已经广泛应用于各个领域,解决各类问题,在图像分类的问题下,可以很轻松的达到94%之上。然而,deep learning是一种data hungry的技术,需要大量的标注样本才能发挥作用。

但现实世界中,有很多问题是没有那么多的标注数据的,获取标注数据的成本也非常大。因此,我们讨论的是这样一个问题的场景,也就是小样本问题。它面临的问题是:

  • 训练过程中有从未见过的新类,只能借助每类少数几个标注样本;
  • 不改变已经训练好的模型;

传统的方法是基于左边这些训练集,获得模型,然后对右边测试集进行自动标注。而小样本问题如图所示,我们大量拥有的是上方这5类的数据,而新问题(下方这5类)是只有很少的标注数据

一、概念扫盲

1.学习先验与学习策略

  • a.学习先验:对过去的知识重用
  • b.学习策略:对知识结构的重用,

2.Meta-learning元学习,学习怎么去学习

  • a.Meta学习得到的算法能够依据自己表现的反馈信号及时地调整其结构和参数空间,进而能够在新的环境中通过累计经验提升性能。
  • b.在meta training阶段将数据集分解为不同的meta task,去学习类别变化的情况下(所以一般构造数据集会构造很多类别)模型的泛化能力

meta-learning不是为了总结某个类的分布中存在的共享信息和模式,而是试图学习存在于任务分布上的规律。(怎么去学习)

3.Few-shot learning 少样本学习

  • a.机器学习模型在学习了一定类别的大量数据后,对于新的类别,只需要少量的样本就能快速学习,即Few-shot learning要解决的问题。
  • b.Few-shot learning 是meta-learning的监督学习领域的应用

4.一个meta-learning的描述

  • 有一个学习内部循环优化器的网络,这个优化器本身就是一个网络,即有一个学习自己怎么去学习的方法,在不同的结构中,常表现为有一个学习优化自己梯度下降参数的网络或者有一个学习各类别结构的metrics等等。

5.C way K-shot问题

  • a.训练集中有很多类别,选出C个类别,每个类别选出K个样本,作为support集,之后再从这C个类别中抽取剩余的batch,作为测试集,这就是meta training task
  • b.需要特殊的结构,解决每次训练得到不同meta-task,让网络学习到这task中的共同部分,而忘掉task部分。

二、研究方向

1.动机

现在的在互联网,我们主要用large-scale方法处理数据,但在真实情况下,大部分类别我们没有数据积累,large-scale方法不完全适用。所以,我们希望在学习率一定类别的大量数据后,对于新的类别,我们只需要少样的样本就能快速学习。

主要是存在两个问题:一方面是知识缺失,另一方面需要大量的训练样本。

对于第二点,目前考虑的解决方法主要有两个:

  • 第一个是人能够识别一个从没有见过的物体,也就是zero-shot learning
  • 第二个是从已有任务中学习知识,将其应用到未来模型训练中,可以认为是一个迁移学习的问题。

那么one-shot learning?它的目的是从一个或几个图像样本中学习类别信息。但这里的one-shot learning并不限于一般图像,也可以在文本,医疗图像等特殊图像,或者物理化学中的扫描图像上进行应用。

One-shot learning的研究主要分为如下几类:

  • 第一类方法是直接基于有监督学习的方法,这是指没有其他的数据源,不将其作为一个迁移学习的问题看待,只利用这些小样本,在现有信息上训练模型,然后做分类。
  • 第二类是基于迁移学习的方法,是指有其他数据源,利用这些辅助数据集去做迁移学习。

对于第一类直接进行有监督学习的方法,可以做基于实例的学习,比如KNN,以及非参数。

Few-shot learning模型大致可分为三类:Mode Based,Metric Based和Optimization Based。

其中Mode Based的方法旨在通过模型结构的设计快速在少量样本上更新参数,直接建立输入x和预测P的映射函数;Metric Based方法通过度量batch集中的样本和support集中样本的距离,借助最近邻的思想完成分类;Optimization Based方法认为普通的梯度下降方法难以在few-shot场景下拟合,因此通过调整优化方法来完成小样本分类的任务。

数据增强方法:

第一,利用流信息学习one-shot模型,常见的有半监督学习和transductive learning,探讨的是如何用无标签数据去做one-shot learning。

第二,在有预训练模型时,用这些预训练模型进行数据增强。

第三,从相近的类别借用数据,来增强训练数据集。

第四,合成新的有标签训练数据,用一些遥感里的方法,可以合成一些图像,或者3d物体。

第五,用GAN来学习合成模型,比如最近用GAN来做personal ID和人脸相关研究。

第六,属性引导的增强方法。具体大家可以在文章里进行详细了解。

1.基于Finetune

这种方法已经被广泛地应用。获得一定量的标注数据,然后基于一个基础网络进行微调。

这个基础网络是通过含有丰富标签的大规模数据集获得的,比如imagenet,为我们的淘宝电商数据,成为通用的数据域。然后在特定数据域中进行训练。训练时,会固定基础网络部分的参数,对特定领域的网络参数进行训练。这个方法相对较快,依赖数据量也不必太多,效果还行。

2 Model Based方法

Santoro 等人 提出使用记忆增强的方法来解决 Few-shot Learning 任务。基于记忆的神经网络方法早在 2001 年被证明可以用于 meta-learning。他们通过权重更新来调节 bias,并且通过学习将表达快速缓存到记忆中来调节输出。

然而,利用循环神经网络的内部记忆单元无法扩展到需要对大量新信息进行编码的新任务上。因此,需要让存储在记忆中的表达既要稳定又要是元素粒度访问的,前者是说当需要时就能可靠地访问,后者是说可选择性地访问相关的信息;另外,参数数量不能被内存的大小束缚。神经图灵机(NTMs)和记忆网络就符合这种必要条件。

文章基于神经网络图灵机(NTMs)的思想,因为 NTMs 能通过外部存储(external memory)进行短时记忆,并能通过缓慢权值更新来进行长时记忆,NTMs 可以学习将表达存入记忆的策略,并如何用这些表达来进行预测。由此,文章方法可以快速准确地预测那些只出现过一次的数据。

文章基于 LSTM 等 RNN 的模型,将数据看成序列来训练,在测试时输入新的类的样本进行分类。

具体地,在 t 时刻,模型输入,也就是在当前时刻预测输入样本的类别,并在下一时刻给出真实的 label,并且添加了 external memory 存储上一次的 x 输入,这使得下一次输入后进行反向传播时,可以让 y (label) 和 x 建立联系,使得之后的 x 能够通过外部记忆获取相关图像进行比对来实现更好的预测。

Meta Network [12] 的快速泛化能力源自其“快速权重”的机制,在训练过程中产生的梯度被用来作为快速权重的生成。模型包含一个 meta learner 和一个 base learner,meta learner 用于学习 meta task 之间的泛化信息,并使用 memory 机制保存这种信息,base learner 用于快速适应新的 task,并和 meta learner 交互产生预测输出。

2.基于metric

该方法是对样本间距离分布进行建模,使得属于同类样本靠近,异类样本远离。简单地,我们可以采用无参估计的方法,如KNN。KNN虽然不需要训练,但效果依赖距离度量的选取,一般采用的是一个比较随意的距离计算(L2)。另一种,也是目前比较好的方法,即通过学习一个端到端对的最近邻分类器,它同时受益于带参数和无参数的优点,使得不但能快速的学习到新的样本,而且能对已知样本有很好的泛化性。

2.1 孪生网络(Siamese Neural Networks)

这个方法对输入的结构进行限制并自动发现可以从新样本上泛化的特征。通过一个有监督的基于孪生网络的度量学习来训练,然后重用那个网络所提取的特征进行one/few-shot学习。

它是一个双路的神经网络。训练时,通过组合不同类的样本成对,同时输入网络进行训练,在最上层通过一个距离的交叉熵进行loss的计算。

如图,在预测的时候,以5way-5shot为例,从5个类中随机抽取5个样本,把这个mini-batch=25的数据输入网络,最后获得25个值,取分数最高对应的类别作为预测结果。

网络结构如下图所示,是一个8层深度卷积孪生网络,图中只展示了其中一路计算,在网络的4096维的全连接层后执行component-wise 的L1距离计算,产生一个4096维的特征向量,并通过sigmoidal激活获得一个0到1的概率作为两个输入样本是否相似的结果。

2.2匹配网络

匹配网络为支撑集和 Batch 集构建不同的编码器,最终分类器的输出是支撑集样本和 query 之间预测值的加权求和。

该文章也是在不改变网络模型的前提下能对未知类别生成标签,其主要创新体现在建模过程和训练过程上。对于建模过程的创新,文章提出了基于 memory 和 attention 的 matching nets,使得可以快速学习。

对于训练过程的创新,文章基于传统机器学习的一个原则,即训练和测试是要在同样条件下进行的,提出在训练的时候不断地让网络只看每一类的少量样本,这将和测试的过程是一致的。

1)基于双向 LSTM 学习训练集的 embedding,使得每个支撑样本的 embedding 是其它训练样本的函数;2)基于 attention-LSTM 来对测试样本 embedding,使得每个 Query 样本的 embedding 是支撑集 embedding 的函数。文章称其为 FCE (fully-conditional embedding)。

关于训练策略。文章对imagenet进行的采样,制作了3种适合做one/few shot的数据集,其中miniImageNet,它包含100类,每类600张图片,其中80个类用来训练,20类用来测试, 称为后续相关研究经常被采用的数据集。以5-way 5-shot为例。训练时,在80类中随机采样5个类,然后把这5类中的数据分成支持集S和测试B,训练matching net模型来使得在S条件下的B的预测结果误差最小。测试时,在20个未被训练过的类中抽取5类,每类5张图,作为测试支持集S’。如图7,MatchNet方法相对原始的Inception模型能正确识别模型从未见过的轮胎和自行车。

2.3 原型网络

该方法思想十分简单高效,效果也非常好。它学习一个度量空间, 通过计算和每个类别的原型表达的距离来进行分类。文章基于这样的想法:每个类别都存在一个聚在某单个原型表达周围的embedding,该类的原型是support set在embedding空间中的均值。然后,分类问题变成在embedding空间中的最近邻。如图8,c1、c2、c3分别是三个类别的均值中心(称Prototype),将测试样本x进行embedding后,与这3个中心进行距离计算,从而获得x的类别。

文章采用在Bregman散度下的指数族分布的混合密度估计,实验表明squared Euclidean距离比cosine距离要好14到17个点。另外,文章在训练时采用相对测试时更多的类别数,即训练时每个episodes采用20个类(20 way),而测试对在5个类(5 way)中进行,其效果相对训练时也采用5 way的提升了2.5个点。

前面介绍的几个网络结构在最终的距离度量上都使用了固定的度量方式,如 cosine,欧式距离等,这种模型结构下所有的学习过程都发生在样本的 embedding 阶段。

2.4 Relation Network

Relation Network [6] 认为度量方式也是网络中非常重要的一环,需要对其进行建模,所以该网络不满足单一且固定的距离度量方式,而是训练一个网络来学习(例如 CNN)距离的度量方式,在 loss 方面也有所改变,考虑到 relation network 更多的关注 relation score,更像一种回归,而非 0/1 分类,所以使用了 MSE 取代了 cross-entropy。

3.Optimization Based方法

Ravi 等人 [7] 研究了在少量数据下,基于梯度的优化算法失败的原因,即无法直接用于 meta learning。

首先,这些梯度优化算法包括 momentum, adagrad, adadelta, ADAM 等,无法在几步内完成优化,特别是在非凸的问题上,多种超参的选取无法保证收敛的速度。

其次,不同任务分别随机初始化会影响任务收敛到好的解上。虽然 finetune 这种迁移学习能缓解这个问题,但当新数据相对原始数据偏差比较大时,迁移学习的性能会大大下降。我们需要一个系统的学习通用初始化,使得训练从一个好的点开始,它和迁移学习不同的是,它能保证该初始化能让 finetune 从一个好的点开始。

文章学习的是一个模型参数的更新函数或更新规则。它不是在多轮的 episodes 学习一个单模型,而是在每个 episode 学习特定的模型。

文章设定目标为通过少量的迭代步骤捕获优化算法的泛化能力,由此 meta learner 可以训练让 learner 在每个任务上收敛到一个好的解。另外,通过捕获所有任务之前共享的基础知识,进而更好地初始化 learner。

以训练 miniImage 数据集为例,训练过程中,从训练集(64 个类,每类 600 个样本)中随机采样 5 个类,每个类 5 个样本,构成支撑集,去学习 learner;然后从训练集的样本(采出的 5 个类,每类剩下的样本)中采样构成 Batch 集,集合中每类有 15 个样本,用来获得 learner 的 loss,去学习 meta leaner。

测试时的流程一样,从测试集(16 个类,每类 600 个样本)中随机采样 5 个类,每个类 5 个样本,构成支撑集 Support Set,去学习 learner;然后从测试集剩余的样本(采出的 5 个类,每类剩下的样本)中采样构成 Batch 集,集合中每类有 15 个样本,用来获得 learner 的参数,进而得到预测的类别概率。这两个过程分别如图 8 中虚线左侧和右侧。

Few-shot learning 少样本学习相关推荐

  1. DeepLearning | Zero shot learning 零样本学习AWA2 图像数据集预处理

    因为有打算想要写一组关于零样本学习算法的博客,需要用到AWA2数据集作为demo演示 之前想只展示算法部分的代码就好了,但是如果只展示算法部分的代码可能不方便初学者复现,所以这里把我数据预处理的方法也 ...

  2. DeepLearning | Zero Shot Learning 零样本学习(扩展内容、模型、数据集)

    之前写过一篇关于零样本学习的博客,当时写的比较浅.后来导师让我弄个ppt去给本科生做一个关于Zero Shot Learning 的报告,我重新总结了一下,添加了一些新的内容,讲课的效果应该还不错,这 ...

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

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

  4. 【转载】Few-shot learning(少样本学习)和 Meta-learning(元学习)概述

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/weixin_37589575/arti ...

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

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

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

    目录 (一)Few-shot learning(少样本学习) 1. 问题定义 2. 解决方法 2.1 数据增强和正则化 2.2 Meta-learning(元学习) (二)Meta-learning( ...

  7. 【机器学习】Few-shot learning(少样本学习)

    文章目录 少样本学习的诞生 元学习 少样本学习 少样本学习中的相关概念 概念1:Support set VS training set 概念2:Supervised learning VS few-s ...

  8. Yann LeCun、吴恩达的新年AI预测:强调“少样本学习”,AI恐慌在减少

    来源:大数据文摘 新年伊始,海外媒体VentureBeat电话访谈了包括吴恩达.Yann Lecun在内的四位人工智能领域领军者,询问了他们对于过去一年人工智能领域发展的看法,以及他们认为新一年人工智 ...

  9. 如何实现少样本学习?先让神经网络get√视觉比较能力

    在碎片化阅读充斥眼球的时代,越来越少的人会去关注每篇论文背后的探索和思考. 在这个栏目里,你会快速 get 每篇精选论文的亮点和痛点,时刻紧跟 AI 前沿成果. 点击本文底部的「阅读原文」即刻加入社区 ...

最新文章

  1. dataTables-使用详细说明整理
  2. 连接web端,mysql,返回乱码解决
  3. 【量化投资】策略九(聚宽)
  4. 模式匹配算法Index
  5. Android日志Log使用
  6. pycharm 如何自动添加头注释,比如时间,作者信息等
  7. Golang的cookie
  8. XCL-Charts图表库中柱形图的同源风格切换介绍
  9. python二级考试选择题公共基础知识_计算机二级选择题(公共基础知识)
  10. 青蛙跳Java程序,青蛙跳台阶(java)
  11. ColdFusion mx 7.0 函数分类列表
  12. 洛谷 P2123 皇后游戏 解题报告
  13. iOS直播APP流程和相关技术介绍
  14. 读英语计算机书籍读后感,英语读后感
  15. JavaScript---网络编程(9-2)--DHTML技术演示(2-2)-表格加强
  16. 玩转AWS CloudWatch微信告警
  17. 微信小程序:个人页面/我的页面/资料页面
  18. node 对接微信支付的踩坑记录(服务端)
  19. 使用HMMER搜索PFam
  20. Python近期练习小案例

热门文章

  1. PL/SQL(英文版)中如何改变 字体大小
  2. MySql---关键字 limit和offset
  3. Linux九阴真经之九阴白骨爪残卷2(SSH)
  4. 基于c++版本的opencv操作(Mat类)
  5. 面试linux中sed的用法,linux中sed命令的使用与注意小结
  6. 学习笔记:Java SE(2)
  7. java中草药美白淡斑紧肤膏_中医:美白5种药材+美白淡斑3个偏方
  8. 你真的了解python中的setup.py吗?
  9. Excel插入图片自动OCR识别成可编辑的文字
  10. 微信小程序 解决按钮点击后e.currentTarget.dataset为空的方法