图像分类里的小样本学习(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 头往往是既好用又稳定的选择。

相关推荐
wuweijianlove8 分钟前
算法的平均复杂度建模与性能回归分析的技术7
算法·数据挖掘·回归
程序猿乐锅40 分钟前
【Tilas|第三篇】多表SQL语句
数据库·经验分享·笔记·学习·mysql
徐某人..1 小时前
基于i.MX6ULL平台的智能网关系统开发
arm开发·c++·单片机·qt·物联网·学习·arm
AOwhisky1 小时前
Kubernetes 学习笔记:集群管理、命名空间与 Pod 基础
linux·运维·笔记·学习·云原生·kubernetes
高洁011 小时前
大模型部署资源不足?轻量化部署解决方案
python·深度学习·机器学习·数据挖掘·transformer
光影少年2 小时前
大屏页面,一次多个请求,请求加密导致 点击 全局时间选择器 时出现卡顿咋解决(面板收起会延迟1~2秒)
前端·javascript·vue.js·学习·前端框架·echarts·reactjs
sakiko_3 小时前
UIKit学习笔记2-组件嵌套、滚动视图等
笔记·学习·objective-c·swift·uikit
知识分享小能手3 小时前
R语言入门学习教程,从入门到精通,R语言类别比较数据可视化- 完整知识点与案例代码(4)
学习·信息可视化·r语言
蛋白界小百灵3 小时前
纳米抗体技术全解析:从文库构建到亲和力成熟的关键策略
经验分享·科技·学习·健康医疗·业界资讯·卡梅德生物
我是发哥哈4 小时前
主流AI框架生产环境性能对比:5大关键维度深度评测
大数据·人工智能·学习·机器学习·ai·chatgpt·ai-native