few-shot learning 小样本学习---综述_[7] wang y, yao q. few-shot learning: a survey[j].-程序员宅基地

技术标签: few shot learning  深度学习  

IBM-小样本学习(Few-shot Learning)State of the art 方法及论文讲解

CVPR 2019提前看:少样本学习专题

在这里插入图片描述

数据增广

FeLMi : Few shot Learning with hard Mixup

we propose Few shot Learning with hard Mixup (FeLMi) using manifold mixup to synthetically generate samples that helps in mitigating the data scarcity issue. Different from a naïve mixup, our approach selects the hard mixup samples using an uncertainty-based criteria.
github源码

Pushing the Limits of Simple Pipelines for Few-Shot Learning: External Data and Fine-Tuning Make a Difference----CVPR 2022

论文链接
源码
小样本学习可以通过元学习和迁移学习(基于大规模外部数据预训练的自监督模型)来实现。虽然大多数FSL研究人员关注的是前者,但我们表明后者可能更有效,因为它可以使用更强大的骨干网络架构(如VisionTransformer),并且可以与简单的元学习器(如ProtoNet)相结合。
在这里插入图片描述
这篇工作提出了: Pre-training → Meta-training → Finetuning (P>M>F) 的小样本学习的新范式,即先在大的数据集上进行与训练,然后再小样本数据集的训练集上进行元训练,最后再在小样本数据集的测试集上利用少量样本进行微调。
同时,作者发现这种徐训练方式对小样本任务是非常奏效的,达到了sota(现在的 paper with code的排行榜依然是第一名)。
最重要的是,本文的代码尝试了十几种不同的 backbone 以及 多种不同的小样本数据集(包括单域和跨域)

自监督/弱监督

Unsupervised Few-shot Learning via Distribution Shift-based Augmentation

在ULDA中,我们系统地研究了不同增强技术的影响,并建议通过分别增强这两个集合(即移位)来加强每个少数样本任务中查询集和支持集之间的分布多样性(或差异)。通过这种方式,即使结合简单的增强技术(例如,随机裁剪、颜色抖动或旋转),我们的 ULDA 也可以产生显着的改进。
github源码

MAGE: MAsked Generative Encoder to Unify Representation Learning and Image Synthesis—CVPR 2023

论文链接
源码
在这里插入图片描述
在这里插入图片描述
The premise of self-supervised learning is to learn representations on unlabeled data that can be effectively applied to prediction tasks with few labels [10]. Following [19], we freeze the weights of the pretrained model and train a linear classifier on top using a few labeled samples.
在这里插入图片描述

  • VQGAN的作用与用法
    —在整个代码中,VQGAN无需训练,都是加载已经预训练好的模型参数。
    —根据源码的理解,在预训练时,利用了VQGAN的encoder对原始图像进行语义编码得到语义令牌,然后作为transformer的输入;而在transformer输出的是经变换后的语义令牌,所以在transformer之后还需要接入VQGAN的decoder,将语义令牌恢复成图像。
    —预训练之后,如果用于生成任务,则还是需要在transformer之后继续使用VQGAN的decoder(只是利用预训练好的参数,无需训练),以将语义令牌恢复出图像。
    —预训练之后,如果用于分类任务,则不再需要在在transformer之后继续使用VQGAN的decoder,而是在transformer之后直接接入基于MLP的分类头,进行微调训练之后即可用于推理。(因为可以直接利用transformer产生的语义令牌来进行分类)

模型

多任务学习

多任务学习用于few-shot的办法是:将其它数据集上训练好的参数,共享给小数据集。
Hard Parameter Sharing. This strategy explicitly shares parameter among tasks , and can additionally learn a task-specific parameter for each task to account for task specialties.
In [ Fine-grained visual categorization using meta-learning optimization with sample selection of auxiliary data], this is done by sharing the first several layers of two networks to learn the generic information, while learning a different last layer to deal with different output for each task
在这里插入图片描述

附录:相关论文及代码
[NIPS 2018 论文笔记] Stacked Semantics-Guided Attention Model for Fine-Grained Zero-Shot Learning
论文地址 代码地址

NIPS 2018:Zero-Shot Transfer with Deictic Object-Oriented Representation in Reinforcement Learning
NIPS 2018:Uncertainty-Aware Few-Shot Learning with Probabilistic Model-Agnostic Meta-Learning
NIPS 2018:Multitask Reinforcement Learning for Zero-shot Generalization with Subtask Dependencies
NIPS 2018:Stacked Semantics-Guided Attention Model for Fine-Grained Zero-Shot Learning
NIPS 2018:Delta-encoder: an effective sample synthesis method for few-shot object recognition
NIPS 2018:MetaGAN: An Adversarial Approach to Few-Shot Learning
NIPS 2018:One-Shot Unsupervised Cross Domain Translation
NIPS 2018:Generalized Zero-Shot Learning with Deep Calibration Network
NIPS 2018:Low-shot Learning via Covariance-Preserving Adversarial Augmentation Network
NIPS 2018:Improved few-shot learning with task conditioning and metric scaling
NIPS 2018:Adapted Deep Embeddings: A Synthesis of Methods for k-Shot Inductive Transfer Learning

ECCV2018:Y. Zhang, H. Tang, and K. Jia. 2018. Fine-grained visual categorization using meta-learning optimization with sample selection of auxiliary data.

基于度量的小样本学习

一个优秀的源码库

Prototype Completion with Primitive Knowledge for Few-Shot Learning(CVPR2021 源码)

Prototypical networks for few-shot learning

Prototypical networks for few-shot learning

Your Own Few-Shot Classification Model Ready in 15mn with PyTorch

对原型进行矫正的方法

  • Prototype Rectification for Few-Shot Learning

缺点:矫正原型时利用了无标签的测试集数据,如果利用的是无标签的非测试集数据就更好了
【论文总结】Prototype Rectification for Few-Shot Learning(附翻译)
少样本学习新突破!创新奇智入选ECCV 2020 Oral论文
小样本学习中的原型修正方法

数据回放

Class-incremental experience replay for continual learning under concept drift(2021,cvpr,有源码,质心驱动的内存可检测概念漂移并保持类buffer中样本多样化)

源码:github.com/lkorycki/rsb

这篇论文的核心内容是关于一种新的持续学习(Continual Learning)方法,这种方法能够在概念漂移(Concept Drift)的情况下处理类增量学习(Class-Incremental Learning)。以下是该论文的主要要点:

问题背景:现代机器学习系统需要能够应对不断变化的数据。持续学习和数据流挖掘是处理这类场景的两个主要研究方向。持续学习关注知识的积累和避免遗忘,而数据流挖掘关注对当前数据状态的适应、检测概念漂移并快速适应变化。

研究假设:类增量持续学习可以有效扩展,同时实现:(i) 通过有效积累新类别的知识来避免灾难性遗忘;(ii) 监控以前学习过的类别的变化,并自动适应概念漂移。

动机:现有的持续学习方法假设一旦学习到的知识就应该被模型记住和存储。然而,由于现代动态数据源可能会受到概念漂移的影响,这些知识可能不再有效。

方法概述:提出了一种整体的类增量持续学习方法,基于经验重放(Experience Replay)。该方法的新颖之处在于,它允许同时避免灾难性遗忘和自动更新以前学习过的类别,如果它们受到概念漂移的影响。

主要贡献:

提出了一种统一的持续学习视角,结合了类增量学习中的灾难性遗忘避免和对先前学习类别变化的适应。
开发了一个新颖的经验重放方法,结合了聚类驱动的缓冲区以管理数据多样性,以及集群跟踪、切换和分裂,以忘记过时的信息并自动适应概念漂移,无需显式变化点检测。
讨论了一个现实且具有说明性的学习场景——持续偏好学习和推荐。由于用户可能获得新的偏好,并且他们的旧偏好可能会随时间变化,这个问题涉及到增量学习中避免灾难性遗忘和处理概念漂移的需求。
类增量经验重放:大多数基于经验重放的类增量方法专注于为静态数据存储最具代表性的实例或原型。这些方法假设观察到的类别和选择的实例的类别不会改变,因此不需要控制它们。

实验研究:通过模拟二元推荐系统,使用原始数据集的超类(0/1)来分配类别,评估了所提出的算法。实验旨在证明算法能够处理来自静态和非静态数据的类增量学习。

结论与未来工作:论文讨论了一种统一的持续学习方法,该方法桥接了避免灾难性遗忘和概念漂移下的数据流挖掘之间的差距。提出了一种基于反应性子空间缓冲区(Reactive Subspace Buffer, RSB)的经验重放方法,该方法结合了聚类驱动的记忆和适应组件,允许动态监控、重新标记和分裂现有集群。

在这里插入图片描述

算法是Reactive Subspace Buffer (RSB) 的实现,它是一种用于持续学习(Continual Learning)的经验重放(Experience Replay)方法,特别设计来处理概念漂移(Concept Drift)。以下是算法的详细解释:

输入参数:
cmin: 类的最小质心数。
cmax: 类的最大质心数。
bmax: 缓冲区的最大大小。
ωmax: 滑动窗口的最大大小。
输出结果:
B: 每次迭代的重放缓冲区。
算法步骤:
- 初始化:对于每个类别,确保至少有cmin个质心。如果没有,则为该类别添加新的质心、缓冲区和滑动窗口。

- 接收实例:对于每个到来的实例x及其标签y,执行以下步骤:
--- 寻找最近质心:找到实例x最近的质心Cx。
--- 更新质心:如果最近的质心Cx属于实例x的类别y,则更新质心Cx,以及它的缓冲区Bx和滑动窗口Wx。
- 概念漂移检测:如果实例x的类别与最近质心Cx的类别不一致,但实例x仍在Cx的范围内,仅更新滑动窗口Wx。

- 标签切换:如果检测到质心Cx的类别与实例x的类别不一致,并且有显著数量的实例标签与Cx当前标签不同,将Cx切换到新的多数类。

- 寻找同类别质心:如果实例x属于类别y,但最近的质心Cx不属于y,则寻找最近的同类别质心Cy,x。

- 更新或添加质心:如果实例x足够接近质心Cy,x,并且质心的数量没有达到最大值cmax,则更新Cy,x。否则,为类别y添加新的质心Cnew,以及相应的缓冲区Bnew和滑动窗口Wnew。

- 检查分裂和移除:对于每个质心C,在滑动窗口W更新后的第ns次,检查是否需要分裂成两个类别或移除微小的簇。

- 采样重放:基于质心的纯度标准,从重放缓冲区中采样实例。如果质心的纯度高于随机数r,则从其缓冲区中采样实例。

- 过采样平衡:由于采样过程可能导致采样实例的总数不确定,使用过采样来平衡选定的批次。

算法特点:
- 动态监控:通过滑动窗口跟踪当前概念。
- 标签切换:能够将质心的标签切换到新的多数类。
- 分裂机制:当簇足够“不纯”时,可以分裂成两个类别。
- 基于纯度的采样:根据簇的纯度来决定是否从其缓冲区中采样实例。

RSB算法的核心在于它能够适应概念漂移,同时避免灾难性遗忘,这使得它在持续学习环境中特别有效。通过结合聚类驱动的缓冲区和反应性组件,RSB能够在学习新类别的同时,对旧类别中的概念漂移做出反应。
为什么一个类需要多个质心?

在持续学习(Continual Learning)和数据流挖掘(Data Stream Mining)的背景下,一个类需要多个质心的原因通常与以下几个方面有关:

数据多样性:在现实世界的数据集中,一个类别(class)可能包含多种不同的模式或子空间(subspaces)。例如,在图像识别任务中,即使所有图像都属于同一个类别,它们也可能在形状、大小或方向上有所不同。使用多个质心可以帮助模型捕捉并代表这些不同的模式。

概念漂移适应性:在非静态的数据环境中,类别的分布和特征可能会随时间发生变化,这种现象称为概念漂移(Concept Drift)。多个质心可以更好地适应这种变化,因为它们允许模型在类别内部的不同子空间上进行更新和适应。

鲁棒性:多个质心可以提高模型对于噪声和异常值的鲁棒性。如果只有一个质心,那么异常值或噪声可能会对该质心的位置产生较大影响,从而影响整个类别的表示。多个质心可以通过聚合多个实例的特征来减少这种影响。

泛化能力:在机器学习中,泛化能力是指模型对未见过的数据做出准确预测的能力。通过使用多个质心来代表一个类别,可以帮助模型学习到更加泛化的特征表示,而不是仅仅记住训练数据中的特定样本。

避免过拟合:在某些情况下,如果一个类别只用一个质心来表示,模型可能会对训练数据过拟合,尤其是当类别内的变化不大时。多个质心可以促使模型学习到更加分散和泛化的特征。

灵活性和可扩展性:在类增量学习(Class-Incremental Learning)中,新类别的引入可能需要模型对现有类别的理解进行调整。多个质心提供了必要的灵活性,允许模型在新数据到来时对现有类别的表示进行更新和扩展。

在论文中提出的Reactive Subspace Buffer (RSB) 方法中,使用多个质心是为了创建一个能够同时处理新类别学习、避免灾难性遗忘以及适应概念漂移的动态学习系统。
通过这种方式,RSB 算法能够在持续学习的场景下,有效地维护和更新模型的知识库。
当缓冲区满时,新来的实例是如何将旧实例替换掉的?

在论文中提出的Reactive Subspace Buffer (RSB) 算法中,当缓冲区满时,新来的实例将替换掉旧实例的具体机制通常遵循以下原则:

先进先出 (FIFO):一种常见的替换策略是使用先进先出的原则,这意味着缓冲区中最旧的实例(通常是最先添加到缓冲区的实例)将被新的实例替换。

随机替换:在某些情况下,可能会采用随机替换策略,即从缓冲区中随机选择一个实例进行替换。

基于代表性的替换:在更复杂的方法中,替换决策可能基于实例的代表性。例如,如果新实例在特征空间中代表了之前未充分探索的区域,那么与当前缓冲区中的实例相比,它可能更具有代表性,因此可以替换掉一个不那么具有代表性的旧实例。

重要性加权:在某些经验重放方法中,每个实例可能会根据其对当前学习目标的重要性被赋予不同的权重。在缓冲区满时,可能会优先替换那些权重较低的实例。

性能驱动的替换:有时,替换决策可能基于模型性能的影响。如果替换一个实例能够提高模型在验证集上的性能,那么这样的替换可能更受青睐。

在RSB算法的上下文中,以下是新实例可能导致旧实例被替换的具体步骤:

接收新实例:算法接收一个新的实例 x 及其对应的标签 y。
找到最近质心:算法确定新实例 x 最接近的质心 Cx。
质心类别匹配:如果 x 的类别 y 与 Cx 的类别相匹配,算法将更新 Cx 及其缓冲区 Bx 和滑动窗口 Wx。
缓冲区已满:如果 Bx 已经达到最大大小 bmax,则需要替换一个旧实例。
确定替换策略:根据算法的设计,可能采用上述提到的FIFO、随机替换、基于代表性、重要性加权或性能驱动的替换策略。
执行替换:按照确定的替换策略,从缓冲区 Bx 中移除一个旧实例,并将新实例 x 添加到缓冲区中。
通过这种方式,RSB算法能够在学习新类别的同时,适应旧类别的变化,从而在持续学习环境中保持模型的性能。替换策略的选择将直接影响模型对旧知识的保留以及对新知识的吸收。
如何保证样本的多样性?

在本文提出的Reactive Subspace Buffer (RSB) 算法中,保证样本多样性的机制主要体现在以下几个方面:

聚类驱动的缓冲区:RSB算法使用聚类方法来组织数据,其中每个质心(Centroid)代表一个簇(Cluster),并且每个簇维护一个缓冲区来存储该簇的实例。这种方法有助于保持簇内样本的多样性,因为每个簇都能够独立地捕捉并维护其数据子空间的多样性。

缓冲区大小限制:通过为每个簇的缓冲区设定大小上限(bmax),算法可以确保缓冲区中的样本不是简单地按照先进先出(FIFO)原则替换,而是根据其代表性和与簇中心的距离来决定是否替换。这样可以避免缓冲区中只有非常相似的样本。

滑动窗口:每个簇的缓冲区中还包含一个滑动窗口(Wx),它用于跟踪最近的概念变化。滑动窗口有助于算法快速响应概念漂移,同时保持对最近样本的多样性。

基于纯度的采样:RSB算法在进行经验重放时,会根据每个簇的纯度(即簇内样本的一致性)来决定是否从其缓冲区中采样实例。纯度较低的簇意味着簇内存在多样性,算法可能会更倾向于从这些簇中采样实例。

质心的动态更新:当新实例到达时,如果它与最近的质心属于同一类别,算法会更新该质心及其缓冲区和滑动窗口。如果实例与当前质心类别不一致,但足够接近,算法可能只更新滑动窗口而不改变质心,这有助于维护簇的多样性。

概念漂移的适应性:RSB算法能够检测和响应概念漂移,通过切换质心的标签、分裂簇或移除过时的质心,算法可以适应数据分布的变化,从而保持样本的多样性。

过采样平衡:在从缓冲区采样实例进行经验重放时,由于采样过程可能导致某些类别的实例数量减少,RSB算法使用过采样来平衡选定的批次,这有助于保持样本的多样性。

通过上述机制,RSB算法能够在持续学习的过程中,不仅学习新的类别,而且保留对以前类别的知识,同时适应概念漂移,从而在整个学习过程中保持样本的多样性。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xys430381_1/article/details/90705743

智能推荐

PHP生成迅雷、快车、旋风等软件的下载链接代码实例-程序员宅基地

文章浏览阅读131次。<?php function Download() { $urlodd=explode('//',$_POST["url"],2);//把链接分成2段,//前面是第一段,后面的是第二段 $head=strtolower($urlodd[0]);//PHP对大小写敏感,先统一转换成小写,不然 出现HtTp:或者ThUNDER:这种怪异的写法不好处...

创建带有UTF-8 的声明的XMLDocument_xmlnewdoc utf-8-程序员宅基地

文章浏览阅读4.6k次。class Program { static void Main(string[] args) { // Create and load the XML document. XmlDocument doc = new XmlDocument(); string xmlString = "_xmlnewdoc utf-8

Jquery 多选下拉列表插件jquery multiselect-程序员宅基地

文章浏览阅读286次。有一个多选的需求,在网上找到了这个插件:multiselecthttps://github.com/ehynds/jquery-ui-multiselect-widgetcsdn博客上有这个插件的介绍,不少童鞋都问了这么个问题,怎么获取选中的值?真是个好问题,因为我在看demo的时候也发现了这个问题,呵呵!先简单说说这个插件: jquery-multisel..._multiselect 多级 多选插件 checkbox

解决android studio打包后安装APK提示“签名不一致,该应用可能已被修改。“_签名不一致该应用可能已被修改-程序员宅基地

文章浏览阅读8.4k次,点赞5次,收藏15次。现象解决办法修改applicationId名_签名不一致该应用可能已被修改

PHP用户缓存APCU_php apcu 100%-程序员宅基地

文章浏览阅读6.1k次。故事APCu 是老牌 PHP 字节码和对象缓存 缓存器 APC 的分支,具体由来还得讲个故事。首先提一下,PHP 如果公用多个缓存器是会冲突的,例如同样都是字节码缓存器,OPcache 和 eAccelerate 同时安装就会起冲突甚至报错;而 XCache 同时有字节码缓存器和对象缓存,和 OPCache 共存也是会起冲突的。在 PHP 5.5 之前是没有 OPcache 这个缓存器_php apcu 100%

Android progressbar设置虚线进度条时不显示的解决办法_android 进度条设置processdrawable后不显示进度条-程序员宅基地

文章浏览阅读1.6k次。最近公司要求实现进度条,除了渐变的要求,还要有是虚线,我想定义一个shape即可,结果发现写好的资源文件,在预览图上面是虚线,可是运行到手机上就是实现,如下代码:<ProgressBar android:id="@+id/progress_ckbg" style="?android:attr/progressBarStyleHorizon..._android 进度条设置processdrawable后不显示进度条

随便推点

【openresty】API disabled in the context of init_worker_by_lua_api disabled in the current context-程序员宅基地

文章浏览阅读4.9k次。在调用init.lua初始化的过程中,我调用了mysql数据库接口初始化数据,然后就提示了此错误:2020/06/28 19:56:40 [error] 24673#24673: *7 [lua] init.lua:2: init , context: init_worker_by_lua*2020/06/28 19:56:40 [error] 24673#24673: *7 [lua] data.lua:11: load(): context: init_worker_by_lua*2020/0_api disabled in the current context

openlayers6【八】地图覆盖物overlay详解_ol.overlay-程序员宅基地

文章浏览阅读5k次,点赞4次,收藏16次。文章目录1. overlay 简述2. overlay 属性2. overlay 事件4. overlay 方法5. overlay 实例5.1 overlay 实现 windowInfo 弹窗5.2 overlay 实现 label标注信息5.3 overlay 实现 text文本信息1. overlay 简述overlay是覆盖物的意思,顾名思义就是在地图上以另外一种形式浮现在地图上,这里很多同学会跟图层layers搞混淆,主要是放置一些和地图位置相关的元素,常见的地图覆盖物为这三种类型,如:win_ol.overlay

matlab 广义互相关,广义互相关求时延的问题-程序员宅基地

文章浏览阅读708次。clear all%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%获得语音文件%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%[x,fs,nbits]=wavread('bluesky3.wav'); %%%%%%打开wav文件%fs=8000%nbits=16x=x/max(abs(x)); %%%%%幅度..._matlab中广义互相关scot求时延

搜索关键词采集YouTube视频字幕-程序员宅基地

文章浏览阅读2.5k次,点赞2次,收藏12次。使用python采集YouTube视频字幕本篇博客纯干货!!!最近接到leader安排的采集任务,抓取采集世界上最大的视频共享网站YouTube的视频字幕。分析目标网站,开始抓包当我打开视频链接点击显示字幕按钮时,通过浏览器抓取到timedtext这样的一个请求,而返回的内容正式我想要的数据——每个时间点的字幕。...

无语!35 岁华人程序员涉嫌诈骗 150 万美元抗疫贷款,在美国遭 FBI 逮捕-程序员宅基地

文章浏览阅读1.6k次。(给程序员的那些事加星标)有个华人程序员????了最近,有一个华人程序员在网上「火了」,负面的那种火。????5 月 22 日,美国司法部官网公开了一份刑事起诉书,一位软件工程师涉嫌 1...

armeabi-v7a arm64-v8a armeabi 兼容适配区别_v8a和v7a哪个兼容性更好-程序员宅基地

文章浏览阅读9k次,点赞2次,收藏8次。首先介绍arm64-v8a: 目前主流版本(Google Play上架要求app必须适配arm64-v8a)armeabi-v7a: 一些老旧的手机armeabi/mips / mips64: NDK 以前支持 ARMv5 (armeabi) 以及 32 位和 64 位 MIPS,但 NDK r17 已不再支持,极少用于手机可以忽兼容只适配armeabi的APP可以跑在armeabi,x..._v8a和v7a哪个兼容性更好