1. 为什么需要"小样本学习"?
我们人类学新东西很快:比如你第一次见到一种新水果,可能只看过一两张照片,下次再看到就能认出来。
但传统深度学习做图像分类往往不行:
-
你想让模型学会"新类别A",通常得给它很多张标注图片(几十到上千张)。
-
如果每个新类别只有 1~5 张图,模型很容易"背题"而不是"学会"。
小样本学习(Few-shot Learning)研究的就是:
当每个类别只有很少的标注图片时,模型还能不能可靠地学会分类?
2. 小样本学习到底在做什么?(N-way K-shot)
在小样本图像分类里,经常用一句话描述一个任务:N-way K-shot。
-
N-way:这次要分多少类(比如 5 类)
-
K-shot:每类给多少张"参考图"(比如每类 1 张或 5 张)
同时还有两种集合:
-
Support set(支持集):给模型"学习/参考"的少量样本
-
Query set(查询集):用来测试模型是否学会(类似考试题)
举个最常见的例子:5-way 1-shot
-
支持集:5 个类别,每类 1 张图(总共 5 张)
-
查询集:每类再拿几张图,让模型去判断属于哪一类
你可以这样理解:
支持集 = "教科书上的例题",查询集 = "考试题"。
3. 为什么传统分类器在小样本下容易失败?
传统分类网络最后一步是一个固定的分类头(Softmax 分类器)。这在大数据时很强,但小样本时会遇到两个典型问题:
-
过拟合:样本太少,模型容易记住支持集那几张图的"细节噪声"。
-
泛化差:新类别的外观变化(角度、光照、背景)一多,模型就不稳。
所以小样本学习通常会想办法让模型别"死记硬背",而是学到更通用的判别方式。
4. 小样本学习最经典的思路:先学"会比较",再去分类(度量学习)
4.1 分类 ≈ "看起来更像谁"
假设你要判断一张新图属于 5 个类别中的哪一个,而每个类别你只有 1~5 张参考图。最自然的方法就是:
-
把新图与每个类别的参考图比一比
-
看"更像谁",就判为谁
这就是小样本学习里非常主流的路线:度量学习(Metric-based)。
5. 原型网络(Prototypical Networks):最像"人类做分类"的 few-shot 方法
原型网络的核心想法可以一句话讲完:
每个类别用一个"代表向量"(原型)来概括,新图离哪个原型最近,就属于哪个类。
5.1 它怎么做?
-
用一个"特征提取器"(比如 ResNet/ConvNet)把图片变成向量(可以理解为"图片的指纹")。
-
对每个类别,把该类的 K 张支持图的向量求平均,得到这个类的原型(prototype)。
-
来了一张查询图,就计算它和每个类别原型的距离,离谁近就预测为谁。
5.2 为什么它适合小样本?
-
K 很小的时候,你没法训练一个复杂的分类器,但"每类一个中心"这个思路非常稳。
-
新类别来了,不需要重新训练大模型:只要把支持集算出原型,就能分类。
6. 让模型学"怎么快速学会"(MAML)
-
MAML 的目标不是直接学分类,而是学一个"很好的起点参数"。
-
当遇到新类别时,用支持集做几步快速微调,就能适配新任务。
可以用一句话类比:
原型网络像"拿尺子比相似度";MAML像"学一套快速补课的方法"。
7. 现代实践的一句总结:预训练很重要
近几年在工程里常见的事实是:
-
如果你有一个在大数据上预训练过的视觉模型(比如 ImageNet 训练过的 ResNet,或自监督训练过的 ViT),
-
那么 few-shot 的效果会大幅提升。
因为预训练模型已经学会了大量通用视觉特征(边缘、纹理、形状、结构),小样本阶段只是在"少量数据下做适配"。
8. 小样本图像分类最常见的坑
-
过拟合:样本少,训练分类头时别训练太久;增强要开足。
-
数据分布变化:训练集是自然图片,测试是工业/医学图,效果会掉很多,这叫域偏移。
-
评估波动大:因为 episode 随机抽样,结果会有方差,论文常用"平均准确率 ± 置信区间"。
9. 小结:一句话带走核心
你可以用这段做结尾:
小样本学习的目标,是让模型在"每类只有几张图"的条件下仍能可靠分类。最经典的方法是度量学习:先学一个好的特征空间,再用"原型/最近邻"按相似度完成分类;元学习方法则试图让模型学会"如何快速适配新任务"。在现代实践中,强预训练 + 简单的 few-shot 头往往是既好用又稳定的选择。