图像分类里的小样本学习(Few-shot Image Classification)

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 分类器)。这在大数据时很强,但小样本时会遇到两个典型问题:

  1. 过拟合:样本太少,模型容易记住支持集那几张图的"细节噪声"。

  2. 泛化差:新类别的外观变化(角度、光照、背景)一多,模型就不稳。

所以小样本学习通常会想办法让模型别"死记硬背",而是学到更通用的判别方式。


4. 小样本学习最经典的思路:先学"会比较",再去分类(度量学习)

4.1 分类 ≈ "看起来更像谁"

假设你要判断一张新图属于 5 个类别中的哪一个,而每个类别你只有 1~5 张参考图。最自然的方法就是:

  • 把新图与每个类别的参考图比一比

  • 看"更像谁",就判为谁

这就是小样本学习里非常主流的路线:度量学习(Metric-based)。


5. 原型网络(Prototypical Networks):最像"人类做分类"的 few-shot 方法

原型网络的核心想法可以一句话讲完:

每个类别用一个"代表向量"(原型)来概括,新图离哪个原型最近,就属于哪个类。

5.1 它怎么做?

  1. 用一个"特征提取器"(比如 ResNet/ConvNet)把图片变成向量(可以理解为"图片的指纹")。

  2. 对每个类别,把该类的 K 张支持图的向量求平均,得到这个类的原型(prototype)。

  3. 来了一张查询图,就计算它和每个类别原型的距离,离谁近就预测为谁。

5.2 为什么它适合小样本?

  • K 很小的时候,你没法训练一个复杂的分类器,但"每类一个中心"这个思路非常稳。

  • 新类别来了,不需要重新训练大模型:只要把支持集算出原型,就能分类。


6. 让模型学"怎么快速学会"(MAML)

  • MAML 的目标不是直接学分类,而是学一个"很好的起点参数"。

  • 当遇到新类别时,用支持集做几步快速微调,就能适配新任务。

可以用一句话类比:

原型网络像"拿尺子比相似度";MAML像"学一套快速补课的方法"。


7. 现代实践的一句总结:预训练很重要

近几年在工程里常见的事实是:

  • 如果你有一个在大数据上预训练过的视觉模型(比如 ImageNet 训练过的 ResNet,或自监督训练过的 ViT),

  • 那么 few-shot 的效果会大幅提升。

因为预训练模型已经学会了大量通用视觉特征(边缘、纹理、形状、结构),小样本阶段只是在"少量数据下做适配"。


8. 小样本图像分类最常见的坑

  • 过拟合:样本少,训练分类头时别训练太久;增强要开足。

  • 数据分布变化:训练集是自然图片,测试是工业/医学图,效果会掉很多,这叫域偏移。

  • 评估波动大:因为 episode 随机抽样,结果会有方差,论文常用"平均准确率 ± 置信区间"。


9. 小结:一句话带走核心

你可以用这段做结尾:

小样本学习的目标,是让模型在"每类只有几张图"的条件下仍能可靠分类。最经典的方法是度量学习:先学一个好的特征空间,再用"原型/最近邻"按相似度完成分类;元学习方法则试图让模型学会"如何快速适配新任务"。在现代实践中,强预训练 + 简单的 few-shot 头往往是既好用又稳定的选择。

相关推荐
前进的李工3 小时前
Agent 学习笔记 05:系统提示词应该怎么写
笔记·学习·prompt·agent·个人开发·few-shot·ai应用开发
正在走向自律5 小时前
【3/5】人工智能训练师 三级/高级工 考证学习方向:从“独立执行”到“设计、归因与全链条负责”
人工智能·学习·人工智能训练师·注方案设计·数据质控负责人·模型评测与调优辅助·ai训练项目交付
CCIE-Yasuo6 小时前
网络安全-学习数据库-Mysql-2
数据库·学习·mysql
La Pulga7 小时前
【FreeRTOS源码学习笔记】任务切换
单片机·mcu·学习·嵌入式·freertos·实时操作系统
li星野8 小时前
【学习记录】逻辑分析仪完全入门:从品牌方案到采样率、存储深度的核心概念解析
学习
旖旎夜光8 小时前
【C++ 基础入门】类和对象(上):封装、对象模型与 this 指针
开发语言·c++·笔记·学习
奥惟斯8 小时前
GEO 上线前,先把这 3 类实体信号地基补上
人工智能·深度学习·机器学习·自然语言处理·数据挖掘·数据分析·知识图谱
WEI_YANG_JU9 小时前
初中数学教学中合作学习的研究与实践
学习
码农小韩9 小时前
FPGA学习(一)——LED点灯与开发流程
学习·fpga开发·入门·环境配置·仿真·点灯
李长渊哦10 小时前
Qoder 自定义子智能体(Subagent)学习笔记
chrome·笔记·学习