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

智能推荐

while循环&CPU占用率高问题深入分析与解决方案_main函数使用while(1)循环cpu占用99-程序员宅基地

文章浏览阅读3.8k次,点赞9次,收藏28次。直接上一个工作中碰到的问题,另外一个系统开启多线程调用我这边的接口,然后我这边会开启多线程批量查询第三方接口并且返回给调用方。使用的是两三年前别人遗留下来的方法,放到线上后发现确实是可以正常取到结果,但是一旦调用,CPU占用就直接100%(部署环境是win server服务器)。因此查看了下相关的老代码并使用JProfiler查看发现是在某个while循环的时候有问题。具体项目代码就不贴了,类似于下面这段代码。​​​​​​while(flag) {//your code;}这里的flag._main函数使用while(1)循环cpu占用99

【无标题】jetbrains idea shift f6不生效_idea shift +f6快捷键不生效-程序员宅基地

文章浏览阅读347次。idea shift f6 快捷键无效_idea shift +f6快捷键不生效

node.js学习笔记之Node中的核心模块_node模块中有很多核心模块,以下不属于核心模块,使用时需下载的是-程序员宅基地

文章浏览阅读135次。Ecmacript 中没有DOM 和 BOM核心模块Node为JavaScript提供了很多服务器级别,这些API绝大多数都被包装到了一个具名和核心模块中了,例如文件操作的 fs 核心模块 ,http服务构建的http 模块 path 路径操作模块 os 操作系统信息模块// 用来获取机器信息的var os = require('os')// 用来操作路径的var path = require('path')// 获取当前机器的 CPU 信息console.log(os.cpus._node模块中有很多核心模块,以下不属于核心模块,使用时需下载的是

数学建模【SPSS 下载-安装、方差分析与回归分析的SPSS实现(软件概述、方差分析、回归分析)】_化工数学模型数据回归软件-程序员宅基地

文章浏览阅读10w+次,点赞435次,收藏3.4k次。SPSS 22 下载安装过程7.6 方差分析与回归分析的SPSS实现7.6.1 SPSS软件概述1 SPSS版本与安装2 SPSS界面3 SPSS特点4 SPSS数据7.6.2 SPSS与方差分析1 单因素方差分析2 双因素方差分析7.6.3 SPSS与回归分析SPSS回归分析过程牙膏价格问题的回归分析_化工数学模型数据回归软件

利用hutool实现邮件发送功能_hutool发送邮件-程序员宅基地

文章浏览阅读7.5k次。如何利用hutool工具包实现邮件发送功能呢?1、首先引入hutool依赖<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.7.19</version></dependency>2、编写邮件发送工具类package com.pc.c..._hutool发送邮件

docker安装elasticsearch,elasticsearch-head,kibana,ik分词器_docker安装kibana连接elasticsearch并且elasticsearch有密码-程序员宅基地

文章浏览阅读867次,点赞2次,收藏2次。docker安装elasticsearch,elasticsearch-head,kibana,ik分词器安装方式基本有两种,一种是pull的方式,一种是Dockerfile的方式,由于pull的方式pull下来后还需配置许多东西且不便于复用,个人比较喜欢使用Dockerfile的方式所有docker支持的镜像基本都在https://hub.docker.com/docker的官网上能找到合..._docker安装kibana连接elasticsearch并且elasticsearch有密码

随便推点

Python 攻克移动开发失败!_beeware-程序员宅基地

文章浏览阅读1.3w次,点赞57次,收藏92次。整理 | 郑丽媛出品 | CSDN(ID:CSDNnews)近年来,随着机器学习的兴起,有一门编程语言逐渐变得火热——Python。得益于其针对机器学习提供了大量开源框架和第三方模块,内置..._beeware

Swift4.0_Timer 的基本使用_swift timer 暂停-程序员宅基地

文章浏览阅读7.9k次。//// ViewController.swift// Day_10_Timer//// Created by dongqiangfei on 2018/10/15.// Copyright 2018年 飞飞. All rights reserved.//import UIKitclass ViewController: UIViewController { ..._swift timer 暂停

元素三大等待-程序员宅基地

文章浏览阅读986次,点赞2次,收藏2次。1.硬性等待让当前线程暂停执行,应用场景:代码执行速度太快了,但是UI元素没有立马加载出来,造成两者不同步,这时候就可以让代码等待一下,再去执行找元素的动作线程休眠,强制等待 Thread.sleep(long mills)package com.example.demo;import org.junit.jupiter.api.Test;import org.openqa.selenium.By;import org.openqa.selenium.firefox.Firefox.._元素三大等待

Java软件工程师职位分析_java岗位分析-程序员宅基地

文章浏览阅读3k次,点赞4次,收藏14次。Java软件工程师职位分析_java岗位分析

Java:Unreachable code的解决方法_java unreachable code-程序员宅基地

文章浏览阅读2k次。Java:Unreachable code的解决方法_java unreachable code

标签data-*自定义属性值和根据data属性值查找对应标签_如何根据data-*属性获取对应的标签对象-程序员宅基地

文章浏览阅读1w次。1、html中设置标签data-*的值 标题 11111 222222、点击获取当前标签的data-url的值$('dd').on('click', function() { var urlVal = $(this).data('ur_如何根据data-*属性获取对应的标签对象

推荐文章

热门文章

相关标签