小样本学习

article/2025/10/24 19:28:21

机器学习就是从数据中学习,从而使完成任务的表现越来越好。小样本学习是具有有限监督数据的机器学习。类似的,其他的机器学习定义也都是在机器学习定义的基础上加上不同的限制条件衍生出来。例如,弱监督学习是强调在不完整、不准确、有噪声、数据少的数据上学习,半监督学习是强调在少量标注数据和大量非标注数据上学习,迁移学习是把充足数据上学习的知识迁移到数据匮乏的任务上。

所谓小样本是训练数据较少,小样本学习的先验知识来自三方面:数据、模型、算法,小样本学习的研究也都是从这三方面着手。因此,小样本学习方法大致可分为基于数据增强的方法、基于模型改进的方法、基于算法优化的方法。当把few-shot learning运用到分类问题上时,就可以称之为few-shot classification,当运用于回归问题上时,就可以称之为few-shot regression。

1、基于数据增强的方法

主要思路就是数据增强,通俗地讲就是扩充样本。小样本学习所使用的数据增强方法主要有三个思路:

1)只有小样本数据集:可以训练一个transformer学习样本之间的变化,然后使用该transformer对小样本数据集进行扩充;

2)有小样本数据集+弱标注数据集:可以训练transformer从弱标注数据集中“挑选”样本来扩充小样本数据集;

3)有小样本数据集+相似的数据集:可以训练一个GAN网络,通过学习给小样本数据集加上扰动来生成新样本。

2、分类任务的小样本学习

总结:https://blog.csdn.net/qq_24178985/article/details/119900076

举例:小敏生日,在动物园游玩。小敏走进极地馆,发现了一毛茸茸的可爱小动物,她非常喜欢,但是小敏之前只认识其它动物,没有见过这种动物。小敏拿出入园时领取的动物学识卡,逐一翻阅卡片,确定图一中的小动物是狐狸。

2.1、Support Set 和 Query

在小样本学习中,动物学识卡这种数据集被称为Support Set,种需要判断其类别的图片被成为Query。根据Support Set中类别数量和样本数量的不同,Support Set 可被称为 k-way、 n-shot Support Set。小样本分类问题一般被定义为 K-way N-shot 问题。

k-way:Support Set中存在 k 个类别

n-shot:每个类别中存在 n 个样本

在上述小敏学会辨认狐狸的例子中,小敏入园时领取的动物学识卡构成的Support Set中有狐狸、松鼠、兔子、仓鼠、水獭和海狸6种不同的小动物,因此 k 等于6。每种小动物卡片只有一张,所有 n 等于1。这个Support Set是6-way 1-shot Support Set。

小样本分类准确率会受到Support Set中类别数量和样本数量的影响,随着类别数量增加,分类准确率会降低。随着每个类别样本数增加,分类会更准确。

Support Set与训练集的区别:

训练集是一个非常大的数据集,每一类均包含非常多张图片。训练集足够大,可以用来训练一个深度神经网络。Support Set非常小,每一类只包含一张或几张图片,不足以训练一个深度神经网络。Support Set用于在预测时提供额外信息,使得模型能够断出所属类别不在训练集中的Query图片的类别。

即:先通过大的数据集训练一个能够区分与本类别相似的分类网络,之后在 Support Set 上微调。查询测试则在 Query 上进行。

2.2、基本思路

在小样本学习问题中,Support Set中每一类往往只有少数几个样本,单单依靠这些样本,不可能训练出一个深度神经网络,甚至无法采用迁移学习中的Pretraining+Fine Tuning方法。即对于小样本学习问题,不能采用传统的监督学习方法来进行分类。

小样本学习的最基本想法是学习一个 sim 函数来判断相似度。给定两张图片 a 和 b,如果两张图片越相似,则 sim (a, b) 的值越大。在理想情况下,若 a 和 b 属于同一类,则 sim (a, b) = 1 ,若a 和 b 属于不同类,则 sim (a, b) = 0。具体可以按照如下思路解决小样本学习问题:

step1、在一个大数据集中学习一个判断两张图片相似程度的相似度函数;

step2、给定一个Query图片,将其和Support Set中各图片逐一对比,计算相似度;

step3、在Support Set中找到与Queryt图片相似度最高的图片,将其类别作为预测结果。

3、孪生网络

训练孪生网络需要用到一个大的分类数据集,数据集中每张图片均有标注,每一类均包含许多张图片。训练的第一种方法是每次从数据集中随机抽取两个样本,比较他们的相似度,并根据相似度函数损失更新网络参数。

首先须使用数据集来构造正样本和负样本,其中正样本用于告诉神经网络什么东西是同一类,负样本用于告诉神经网络事物之间的区别。构造正样本首先须从数据集中随机抽取一张图片 a,然后从同一类中随机抽取另一张图片 b,形成三元组( a, b, 1)。构造负样本每次先随机抽取一张图片 c,然后排除 c 的类别,从随机集中随机抽取另一张图片d,形成三元组(c , d,0)。重复上述构造正样本和负样本的过程,即可生成用于训练孪生网络的训练集。

搭建卷积神经网络用于提取图片中的特征,网络输入是一张图片 x ,输出是提取的特征向量 f(x)。将生成的训练集中一个样本的两张图片 x1和 x2 分别输入搭建的卷积神经网络,得到特征向量 h1 和 h2。将向量 h1 和 h2 结合形成特征向量 z (如令 z = concat(h1, h2)或 z=|h1-h2| 等等),然后用一些全连接层处理 z 向量,输出一个标量,并将该标量经过 Sigmoid 激活函数,得到一个介于0 ∼ 1之间的实数。

该实数可以衡量输入的两张图片 x1和 x2 之间的相似度,如果 x1和 x2 属于同一个类别,则输出实数应该接近于1,否则应该接近于0。使用网络输出与真实标签之间的交叉熵(CrossEntropy)作为损失函数,通过反向传播计算模型参数的梯度,并使用梯度下降法来更新模型参数。

训练孪生网络需要准备数量大致相当的正样本和负样本,负样本是不同类别的两张图片,其标签为0,通过训练使孪生网络输出接近于0。训练好孪生网络之后,可以用来做小样本分类。逐一对比Query图片与Support Set中的图片,返回Support Set中相似度最高的图片类别作为预测结果。

4、Triplet Loss

上述训练孪生网络方法从理论上看起来很完美,但是在深度学习实践中,上述方法效果并不是特别好。在深度学习领域,理论上看起来很完美,但是实际效果却一塌糊涂的例子数见不鲜,比上述方法更好的训练孪生网络的方法是使用Triplet Loss。

使用Triplet Loss,在构建训练集时,需每次从数据集中选取3张图片。首先从数据集中随机选取一张图片作为锚点(Anchor),再从锚点图片所在类别中随机抽取另一张图片作为正样本(Positive),然后排除锚点图片所在类别,从数据集中随机选取一张图片作为负样本(Negative)。

将锚点图片、正样本图片和负样本图片分别输入搭建好的用于提取图片特征的卷积神经网络,得到三个特征向量,计算类内、类间距离。训练时希望类内距离越小、类间距离越大。

训练孪生网络的损失函数首先应该鼓励正样本在特征空间上接近锚点,即使d+尽量小。其次应该鼓励负样本在特征空间上远离锚点,即使d-尽量大。因此,可分为如下两种情况:

确定损失函数之后,可以求损失函数关于模型参数的梯度,并使用随机梯度下降法更新模型参数。训练好孪生网络之后,可以通过如下方法来做小样本分类。

将Query图片和Support Set中所有图片全部转化为特征向量,然后依次计算Query图片对应的特征向量和Support Set中各图片对应特征向量之间的距离,返回Support Set中距离最小的图片类别作为预测结果。

参考文献:

1、Generalizing from a Few Examples: A Survey on Few-Shot Learning

https://arxiv.org/pdf/1904.05046.pdf

2、距离你解决小样本/少数据难题,只差这篇文章

https://mp.weixin.qq.com/s/WsQWRbtkylDC81EXOI6NxA

3、小样本学习(Few-Shot Learning)

https://blog.csdn.net/qq_24178985/article/details/119900076

4、【机器学习】Few-shot learning(少样本学习)

https://blog.csdn.net/weixin_44211968/article/details/121314757


http://chatgpt.dhexx.cn/article/UpjK9wm7.shtml

相关文章

小样本(少样本)目标检测概述(few-shot object detection)

文章目录 一、小样本目标检测 vs 少样本目标检测二、小样本目标检测简介三、小样本目标检测的方法四、小样本目标检测现有的问题五、参考资料 一、小样本目标检测 vs 少样本目标检测 首先必须要分辨这两个概念。如果光看名字,我们可能会单纯的认为小样本就是代检测…

【学习笔记】小样本学习(Few-shot Learning)

参考视频:https://www.youtube.com/watch?vUkQ2FVpDxHg 文章目录 基本概念孪生网络(Siamese Network)Pretraining and Fine TuningFew-shot常用数据集参考资料 基本概念 小样本学习(few-shot learning)是什么&#x…

localStorage与location的用法

1、localStorage 是h5提供的客户端存储数据的新方法: 之前,这些都是由 cookie 完成的。但是 cookie 不适合大量数据的存储,因为它们由每个对服务器的请求来传递,这使得 cookie 速度很慢而且效率也不高。 设置存储时localStorage.s…

Locality-sensitive hashing

Locality-sensitive hashing (LSH) reduces the dimensionality of high-dimensional data. LSH hashes input items so that similar items map to the same “buckets” with high probability (the number of buckets being much smaller than the universe of possible inp…

localStorage 简介

localStorage是全局的公共对象 浏览器关闭了后不丢失,是永久存在的。(runoob.com上Window localStorage 属性里的笔记很清晰) // localStorage.user"sky"; console.log(localStorage.user);能够看出,存储过localStora…

localStroage

一、什么是localStroage、sessionStroage 在HTML5中,新加入了一个localStorage特性,这个特性主要是用来作为本地存储来使用的,解决了cookie存储空间不足的问题(cookie中每条cookie的存储空间为4k),localStorage中一般浏览器支持的…

localstorage用法

一、什么是localStorage、sessionStorage 在HTML5中,新加入了一个localStorage特性,这个特性主要是用来作为本地存储来使用的,解决了cookie存储空间不足的问题(cookie中每条cookie的存储空间为4k),localStorage中一般浏览器支持的…

Locality Sensitive Hashing

今天介绍Locality Sensitive Hashing(LSH)。不同以往,这次我先放参考文献,因为本文都是基于这些参考文献的个人理解和消化,强烈推荐先看我的再去看参考文献,以便能更好的理解参考文献。 文章目录 ReferencesIntroductionChalleng…

thread_local

一、介绍 thread_local这个关键字的是C11之后的产物,主要适用的场景是:本线程这个生命周期里面修改和读取,不会与别的线程相互影响。 在C中全局变量和static变量一般都是针对与整个进程里面共享的,一旦声明之后,所有的…

localStorage是什么???

一、什么是localStorage、sessionStorage 在HTML5中,新加入了一个localStorage特性,这个特性主要是用来作为本地存储来使用的,解决了cookie存储空间不足的问题(cookie中每条cookie的存储空间为4k),localStorage中一般浏览器支持的…

什么是localStorage?

一、什么是localStorage、sessionStorage 在HTML5中,新加入了一个localStorage特性,这个特性主要是用来作为本地存储来使用的,解决了cookie存储空间不足的问题(cookie中每条cookie的存储空间为4k),localStorage中一般浏览器支持的…

Locale 及Locale.getDefault()

1.什么是Locale? Locale对象表示了一个特定的地理,政治或文化区域。需要使用到Locale执行其任务的操作称为区域设置敏感,并使用Locale为用户定制信息。 例如显示一个数字就是一个区域设置敏感的操作–该数字应根据用户所在国家,…

LocalStorage

目录 1.什么是Web存储? 2.localStorage、sessionStorage、Cookie和Session 3.Storage接口 4.localStorage基本操作 5.storage事件 参考书籍:《JavaScript 权威指南----ECMAScript5HTML5DOMHTML5BOM》编著:张亚飞 1.什么是Web存储&…

在net core npoi导入excel 所遇到的问题PublicKeyToken=0df73ec7942b34e1

在vs中测试一切正常 发布到iis,是使用的是***独立发布,x64***,部署好之后,执行nopi导入读取数据功能,提示 PublicKeyToken0df73ec7942b34e1,找不到系统文件 尝试过修改nopi的版本,由2.51.变成…

.net 查看程序集(*.dll)的PublicKeyToken

1.运行>powershell ([system.reflection.assembly]::loadfile("C:\Users\wangbinbin\Desktop\bin\log4net.dll")).FullName 2.使用vs的Tools Command Prompt命令行工具,输入SN -T "path",就会显示这个dll 的PublicKeyToken SN -…

查看PublicKeyToken和生成PublicKeyToken

http://hi.baidu.com/honfei/item/7777500b20d8ff8a02ce1bd2

未能加载文件或程序集“Newtonsoft.Json,Version = 13.0.0.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed“..

未能加载文件或程序集"Newtonsoft.Json,Version 13.0.0.0,Culture neutral,PublicKeyToken 30ad4fe6b2a6aeed"或它的某一个依赖项.找到的程序集清单定义与程序集引用不匹配.(异常来自HRESULT:0x80131040) 今天把生成的exe文件&a…