小样本的目标:
小样本学习的目标不是让机器识别训练集里的图片并泛化到测试集,而是让机器自己学会学习。
举个例子,拿一个很大的数据集来训练神经网络,学习的目的不是让模型知道什么是大象什么是老虎,并不是让模型学会识别没见过的大象和老虎,学习的目的是让模型理解事物的异同,学会区分不同的事物。给两张图片不是让模型识别出两张图片是什么,而是让模型知道两张图片里面是相同的东西还是不同的东西。
在小样本图像分类(few-shot image classification)任务中,训练集、验证集和测试集的类别通常不重合。这种设置称为跨任务(cross-task)评估,它旨在评估模型在见过的类别之外泛化到新类别的能力。这种任务一般使用元学习(meta-learning)方法来训练模型。
小样本学习的“小”并不是体现在数据量小。而是体现在小样本学习这一特殊任务设定,即每个类别(n-way)只有少量的标记图片(k-shot),也就是我们的支持集,要求我们的模型能根据这几张少量的图片,判断查询集图片的类别。
小样本图像分类的典型设置
- 训练集(Base Classes):包含大量类别和每个类别的大量样本。用于训练元学习模型,帮助模型学会如何学习。
- 验证集(Validation Classes):包含一些与训练集不重合的类别,用于调整模型的超参数和选择最佳模型。(其实在学习中,很多论文直接将验证集也放入训练集中一起训练了,并未使用)
- 测试集(Novel Classes):包含与训练集和验证集都不重合的类别,用于评估模型在未见过的新类别上的表现。
为什么类别不重合?
- 评估泛化能力:小样本学习的核心目标是评估模型在见过少量样本后快速适应新类别的能力。通过使用不重合的类别,可以更真实地模拟模型在实际应用中遇到新类别时的表现。
- 避免数据泄露:确保训练过程中模型没有见过验证集和测试集中的类别,从而避免数据泄露,提供更公平的性能评估。
- 挑战性:要求模型在见过少量新样本的情况下识别新类别,这对于模型的泛化能力提出了更高的要求。
Support Set与Query Set:
- Support Set:在少样本学习任务中,support set是用来训练模型的一组有标签的样本,这些样本代表了任务中的类别。他是从训练集(Base Classes)中随机抽取的,在训练过程中,每个类别只有少量样本(例如,在N-way K-shot任务中,每个类别有K个样本,总共有N个类别)。
- Query Set:query set包含了用来测试或调整模型的样本,这些样本同样来自于任务中的类别,但不包含在support set中。模型需要利用在support set上学到的知识来正确分类query set中的样本。
具体来说
-
训练阶段:
- 类别已知:在训练阶段,模型在训练集(base classes)上进行训练,训练集中的类别是已知的,并且模型在这些类别上进行学习。
- 任务生成:在训练过程中,多个 N-way K-shot 任务从训练集中的类别中生成,这些任务用于训练模型如何快速学习新类别。
-
测试阶段:
- 类别已知但模型未见过:测试阶段的类别对于评估者是已知的,但这些类别在训练过程中模型没有见过。这些类别来自测试集(novel classes),它们与训练集和验证集的类别不重合。
- 任务生成:在测试阶段,多个 N-way K-shot 任务从测试集中的类别中生成,这些任务用于评估模型在未见过的新类别上的表现。
小样本学习的训练和传统机器学习不太一样,他是以episode为单位进行训练的,每一个episode里都有一个support set和一个query set进行训练和测试。传统的机器学习是找到一个f,例如一个猫狗分类器,而元学习是找一个可以找f的F。
小样本学习是目标,元学习是手段。
01.Meta Learning (一) - 元学习和机器学习一样也是三個步骤_哔哩哔哩_bilibili
Support Set和训练集的区别:
训练集数据规模很大,每一类下面都有很多张图片,由于训练集足够大,所以可以用来训练一个深度神经网络。
相比之下Support Set很小,每一类下面只有一张或者几张图片,不足以训练一个大的神经网络,支持集只能在做预测的时候提供一些额外的信息。
常用的数据划分方法
- N-way K-shot:N表示新任务中的类别数量,K表示每个类别的样本数量。例如,5-way 1-shot任务意味着在测试时,模型需要从5个类别中,基于每个类别的1个样本进行分类。
- 元训练(Meta-training):在训练集上创建多个N-way K-shot任务,训练模型学习如何快速适应新任务。
- 元验证(Meta-validation):在验证集上创建类似的N-way K-shot任务,调整模型的超参数。
- 元测试(Meta-testing):在测试集上创建N-way K-shot任务,评估模型的最终性能。
示例
假设我们有以下类别:
- 训练集类别:猫、狗、鸟、鱼
- 验证集类别:马、牛
- 测试集类别:狮子、老虎
在训练过程中,模型会在猫、狗、鸟和鱼的不同组合上进行训练。训练过程中,模型会学习如何从这些类别中进行分类。在验证过程中,模型会在马和牛的组合上进行调优。
在测试阶段,评估者知道测试集中的类别是“狮子”和“老虎”,但对于模型来说,这些类别在训练过程中从未见过。在测试时,会生成例如“5-way 1-shot”任务,从“狮子”、“老虎”等类别中抽取少量样本,评估模型的泛化能力。
常用数据集:
常用的是粗粒度数据集,细粒度数据集也有,可以进行跨域实验比如先在粗粒度上面做一个实验得到一个模型,然后再把这个模型用于细粒度数据集上的一个测试,验证模型的泛化性,也是丰富实验的一个手段。
结论,
在小样本图像分类任务中,为了有效评估模型的泛化能力,训练集、验证集和测试集的类别通常是不重合的。这种设置挑战了模型在见过少量新样本后快速适应新类别的能力,是小样本学习的重要特征。
关于准确率:
类别越多准确率越低
原因:
每个类别的样本数量越多准确率越高
原因:
用同样的方法计算query与每一张图片的相似度,就能找出最相似的卡片从而做出分类
Baseline++: A Closer Look at Few-shot Classification
一篇经典的具有里程碑意义的论文,提出了新的小样本的训练方式,将基类全部用于训练,现在很多研究会将此方法与元学习方法相结合,先使用基类做预训练,再使用元学习的方式去训练。