☰
小样本学习全景解析:从度量学习到预训练适配的论文导航与实战经验
2026/9/30 4:38:51 网站建设 项目流程

我刚入坑小样本学习(Few-shot learning)那会儿,最头疼的不是读不懂论文,而是没人告诉我哪些论文值得精读、哪些只需要看摘要、哪些所谓的“创新点”其实只是换了套数据划分方式。网上搜到的整理贴要么停在2019年,要么就是一堆标题堆砌,连分类都没有。这个领域从度量学习到优化学习,再到预训练模型时代的各种玩法,分支已经多到让人眼花缭乱。

这篇整理收藏贴我会一直维护更新,初衷很简单:帮后来的人节省筛选论文的时间。我把读过的论文按技术流派和应用场景做了归类,每篇标注了核心思路和我的评价,附带一些复现和对比实验时的实际经验。内容上不求全(也不可能求全),但求把每个分支的代表作和最新进展讲清楚,适合刚入门的研究生、准备做小样本方向的工程师,以及想快速了解这个领域版图的人。

1. 小样本学习到底在研究什么:三个典型问题先对齐

在整理具体论文之前,有必要把问题定义对齐,否则后面谈方法容易产生歧义。

1.1 场景一:只有一个正样本,怎么训练分类器

最直觉的小样本场景是:你有一个分类任务,但每个类别只给了极少量的标注样本,比如一个类别一张图(one-shot),或者每个类别五张图(five-shot)。传统的深度学习方法在这时候会严重过拟合,因为模型参数动辄百万、千万级别,数据量却是几十上百张。

这个场景对应到数学上是这样的优化困境:给定支撑集(support set)S = {(x_i, y_i)},其中每个类别的样本数 K 非常小,目标是学到一个分类器 f,使得在查询集(query set)Q 上泛化误差最小。当 K 趋近于 1 时,监督信息不足以约束高维参数空间,模型只能记住训练样本而非学到可泛化的决策边界。

1.2 场景二:识别从未见过的类别(N-way K-shot)

更常见的小样本设定是 N-way K-shot 分类:训练阶段有大量类别的数据(基类集合),测试阶段遇到全新的类别,每个新类别只有 K 个标注样本。模型需要在没有重新训练(或仅有极少量梯度更新)的情况下,对新类别做出正确分类。

这类设置是大多数论文的标准评测协议。以 5-way 5-shot 为例:每个任务从测试类别中随机抽 5 个类,每类 5 个支撑样本,再从剩余数据中抽查询样本,要求模型在这 5 个类上做分类。整个评测过程需要数百乃至上千个随机任务取平均,以此降低偶然性。

这里的核心假设是“训练和测试任务的分布一致”——基类上能迁移的归纳偏置(inductive bias)要被复用到新类别上。这也是为什么很多方法在 domain shift 下性能崩塌的根源。

1.3 场景三:跨域迁移的小样本

还有一类问题是跨域小样本(cross-domain few-shot learning):比如在自然图像(miniImageNet)上训练,但测试时换成医学影像、卫星图、手绘草图,或者工业质检图像。这种情况比同域小样本更贴近真实业务,但也难得多,因为低级特征差异太大,基于局部纹理的度量方法大概率失效。

针对跨域问题的论文通常会引入domain adaptation或domain alignment组件。比如在特征提取时加入域对抗训练,或在度量空间中做域无关性约束。这已经是小样本学习与迁移学习、域适应的交叉地带。

1.4 三大技术分支的划分视角

把小样本学习的所有方法归档,最省力也最常用的切法是按“知识怎么被迁移”来分:

  • 基于度量(metric-based):学一个距离函数或嵌入空间,让同类样本靠近、异类样本远离。代表是孪生网络、匹配网络、原型网络。
  • 基于优化(optimization-based):让模型拥有快速适应能力,通过对初始化、学习率或更新规则做元学习。代表是 MAML 及其变体。
  • 基于数据增强/表示学习(hallucination / representation-based):通过合成样本、特征增强或预训练表示来弥补数据不足。

这个分类并不完美,因为近两年的工作常常混合多种思路,尤其预训练模型兴起后,很多方法的核心变成“如何更好地利用预训练特征”,和传统三类不完全兼容。但作为文献管理的初始索引,这个切法足够好用。

2. 度量学习分支:让“距离”承担分类任务

度量学习是小样本学习里最直观也最容易上手的分支,核心思路是:不做多复杂的参数更新,而是在特征空间定义好合适的距离度量,然后直接最近邻分类。这类方法训练速度快、对小样本任务的适配性好,非常适合用来建立基线(baseline)。

2.1 原型网络:每个类算一个“平均脸”就行

Prototypical Networks(Snell et al., 2017)是度量学习里最具代表性的工作之一,思路非常朴素:每个类别用支撑样本的嵌入向量的均值来表示原型(prototype),查询样本的嵌入和所有原型做欧氏距离,输出距离最近的类。

这个设计精妙在,它给“类别表示”一个几何上的合理性:原型是支撑集样本嵌入的质心,而嵌入空间通过训练被优化成“同类样本围绕质心紧凑分布”。对比匹配网络那种基于注意力加权全体支撑样本的方式,原型网络省掉了注意力权重,训练和推理都更轻。

实际复现时有个细节影响很大:嵌入空间的归一化。原论文并没有强求对特征做 L2 归一化,但很多后续工作发现,对嵌入向量做归一化后,欧氏距离和余弦相似度的效果差异会缩得很小。如果不做归一化,欧氏距离会被特征模长主导,测试时容易出现分布外的极端值。我在 miniImageNet 上对比过,加了 L2 norm 的 5-way 1-shot 准确率能差 2 到 3 个百分点。

原型网络的另一个特性是可以天然扩展到半监督场景:对支撑集和大量无标注数据一起做聚类,用聚类中心作为更稳健的原型。这个变体叫 Semi-Prototypical Networks,在实际工程里往往比纯监督版本更能扛住 K 很小的情况。

2.2 匹配网络:注意力机制开山之作

Matching Networks(Vinyals et al., 2016)是最早把“支持集和查询集的匹配”纳入端到端训练的框架之一。它不像原型网络那样把支撑集压缩成单个向量,而是用注意力机制让查询样本与支撑集每个样本做加权最近邻。

这篇论文在历史上很重要,因为它明确了 episode training(任务化训练)范式:每次训练迭代随机抽取一个 N-way K-shot 任务,并构造支撑集和查询集,让模型的训练过程与推理设定完全一致。这个设计后来几乎成为整个领域的标配。

有一个在论文里不算起眼但对复现影响巨大的细节:匹配网络在训练和测试时分别对嵌入函数做了不同设置。训练时两个嵌入网络(支撑集和查询集各一个)是分开的,测试时则共享参数。如果你在实现中偷懒直接全程共享参数,精度会有小幅下降;反之如果完全不共享,又会过拟合基类。最佳实践是先训练共享版本,再在微调阶段放开一个额外的特征适配层。

2.3 关系网络:距离函数本身也可学习

Relation Networks(Sung et al., 2018)的思路更进一步:既然特征可以学,那距离函数为什么不能学?它把“查询样本和支撑样本拼接后的特征”输入一个小网络,直接回归一个关系分数,而不是固定使用欧氏距离或余弦距离。

这个思路的优点是灵活,复杂相似度(比如“形状相同但颜色不同”的情况)可以被关系模块捕捉到。但反过来也有代价:关系模块增加了参数量,在 K 非常小(如 one-shot)时反而可能过拟合。我在几个数据集上都观察到,one-shot 时关系网络的方差比原型网络大不少,五次随机评测的波动能到 1.5% 左右,对论文里那些“我们涨了 0.3%”的说法要打个问号。

2.4 度量进化:从全局距离到深度匹配

传统度量方法在 5-way 1-shot 上做到 60% 左右准确率之后就很难往上走了,主要瓶颈在于全局池化丢掉了空间细节。后续代表性工作包括:

  • DeepEMD(Zhang et al., 2020):用最优传输(optimal transport)计算两张图的结构化距离,把图像看成空间上的“土堆”,距离就是搬运成本。这种思路在处理精细分类(鸟的种类、车的型号)时优势明显,但计算量巨大,我不建议在算力有限的场景直接上。
  • FRN(Few-shot Learning with Global Matching, 2020):用双向匹配解决“查询样本的某个局部特征找不到对应支撑特征”的问题,在跨域场景下比原型网络稳健很多。
  • Deep Nearest Neighbor(2021):简单粗暴,在训练好的特征空间里做 k-NN,把小样本准确率拉高到当年 SOTA。这个框架太朴素以至于不少审稿人会质疑 novelty,但它验证了一个重要结论:预训练特征的质量有时比复杂算法更关键。

度量学习这边最容易踩的坑是“特征和度量不匹配”:换了一个预训练 backbone 后,原来设计的距离度量不再有效。遇到这种情况,先别急着改度量函数,试试在嵌入后加一层线性适配器(linear adapter),效果往往立竿见影。

3. 优化学习分支:让模型学会快速适应

如果说度量学习是“换个测距方式”,优化学习就是“换一套更新参数的策略”。这个分支的核心思想来自元学习(meta-learning):模型不是直接学一个分类器,而是学一个“能够快速适应新任务”的初始化,或者学一组更新的超参数。

3.1 MAML:模型无关的元学习算法

Model-Agnostic Meta-Learning(Finn et al., 2017)是优化学习分支的基石。它的目标非常优雅:找到一个初始化参数,使得在这个初始化基础上,只需要几步梯度下降,就能在新任务上获得很好的表现。

训练过程中,每个任务先执行几步内循环(inner loop)更新,然后在查询集上计算最终损失,再通过二阶导(或近似)更新初始参数。这个“为快速微调而优化”的框架不关心模型结构,因而叫 model-agnostic。

MAML 在论文中报告的数字很好,但复现难度在 Few-shot 领域是出了名的。主要问题在二阶导数:完整计算 Hessian 矩阵的代价极高,大多数实现都用一阶近似(FOMAML)来替代,这会导致精度明显下降。实际中我建议先用 FOMAML 快速验证 pipeline,再考虑用 implicit MAML(iMAML)或直接上 Mokey 等高效近似。

3.2 一阶方法家族:Reptile 到底行不行

Nichol et al.(2018)提出的 Reptile 属于一阶元学习算法,和 FOMAML 类似但实现更简单:每个任务更新几步后,直接把初始参数向任务更新后的参数方向挪一小步,不需要计算任何二阶导数。

Reptile 的代码简洁到令人感动,但它在 Few-shot 分类上的性能普遍低于 MAML 系方法。原因在于 Reptile 的更新方向既包含适应新任务的分量,也包含让参数在任务间更稳健的分量,两者的比例不可控。相比之下,MAML 的损失函数对“查询集表现”的针对性更强。

如果你的目标是用最少的代码跑通一个元学习基线,Reptile 是好的选择;但如果你想冲实验指标,MAML 系或 LEO 更靠谱。

3.3 基于隐空间的元优化:LEO

Latent Embedding Optimization(Rusu et al., 2019)主要解决 MAML 在高维参数空间直接优化带来的不稳定问题。它通过一个编码器把任务信息压缩到低维隐空间,在隐空间里做几步梯度下降,再把隐向量解码为分类器参数。

LEO 明显比 MAML 稳健,尤其在 miniImageNet 上,训练时损失曲线非常好看。但它在实现上引入了更多组件(编码器、解码器、关系网络辅助损失),每个组件都有自己的超参数,整体调参成本不低。如果算力有限,我建议用 LEO 开源的官方代码跑,尽量不要自己从零实现。

3.4 优化学习中容易被论文掩盖的大坑

优化学习分支论文的复现难度普遍高于度量学习,主要有三个原因:

  • 内循环步数不可过大,否则训练不稳定;过小则任务适应不充分。常见的默认值是 5 步,但到底几步最优和数据集的难度强相关,需要单独调。
  • 内循环学习率通常是固定值,但也有不少论文会学出来一个逐参数的学习率向量,这会让参数量暴增,对显存非常不友好。
  • 任务批量大小(meta-batch size)决定了每次更新的任务数。很多论文只写了 total steps,不说每个 step 用几个任务。如果你用 Task = 4 跑出来的结果去对比 Task = 1 的论文数字,对比是不公平的。

经验法则:先跑通小规模 ablation(如 1-shot 只在 5 个类别上),再放大到完整 benchmark。直接上完整设置很容易被各种崩溃和 OOM 打击到怀疑人生。

4. 数据增强和表示学习:没有新类样本,就“制造”或“借用”知识

第三大分支的基本思路很直接:既然小样本的“小”是问题的根源,那就想办法把数据变“多”,或者让特征表示变得足够强,使得即便数据少也能把分类问题解决。

4.1 传统图像变换与特征增强

最朴素但有效的方法是构造性数据增强:随机裁剪、翻转、色彩抖动、CutMix、MixUp 等。这些操作在小样本场景下尤其有效,因为样本少意味着数据分布覆盖不足,简单增强就能显著提升泛化性。

特征层面的增强则更进一步:比如在嵌入特征向量上做插值(类似 SMOTE),或者在特征空间中加入噪声作为隐式正则。有一篇发表于 2019 年前后的工作专门做了系统实验,结论是特征增强的下限很高:即使只加最简单的高斯噪声,也能在 5-way 1-shot 上带来 1 到 2 个百分点的提升。DeepSMOTE 系列将其发挥到极致,是对特征空间做合成过采样。

4.2 基于生成模型的数据合成

用 GAN 或 VAE 直接合成新类别的训练图像,是很多早期工作尝试过的路线。但实际效果并不理想:图像级生成在小样本下极其不稳定,GAN 会崩溃,VAE 会产生模糊样本。原因很好理解——生成模型本身就依赖大规模数据,让它从 K 个样本里学会生成一个类别的新样本,难度不比分类本身小。

近两年这个方向被扩散模型(diffusion model)带起来了。稳定扩散模型可以在少量样本的基础上进行微调,生成高质量的增广图像。Brain-diffusion 等一系列工作在这个方向上陆续出现。把扩散模型作为数据增强器而不是分类器,是当前比较实用的一种组合方式。

4.3 自监督与预训练表示:近代小样本的“隐藏主旋律”

2021 年之后,小样本学习最核心的变量变成了预训练表示。大型模型在超大规模数据上学习到的特征,天然具有很强的可迁移性。许多新的小样本方法本质上是在探索“如何从预训练特征中提取任务相关信息”。

这里有一篇绕不开的论文:Baseline++(Chen et al., 2019)。它的核心观点非常解构:用一个标准分类网络在基类上预训练,然后在测试时用简单的逻辑回归或最近质心分类,效果已经可以打败大多数复杂的元学习方法。这篇论文的价值在于帮领域“祛魅”——很多花哨的元学习算法并没有真正学到可迁移的归纳偏置,只是隐式地在做表示学习。

后续有一系列工作沿着这个方向推进,比如将特征做白化(whitening)、加入通道注意力等。近期的 SOTA 几乎都离不开大规模预训练模型,这也是为什么我会将这类方法单独划为“预训练+适配”的范式。

4.4 多模态与基础模型时代的 Few-shot

当 CLIP、GPT-4V 这样的多模态基础模型出现后,小样本问题的解题方式又变了:你不再需要从零训练一个骨干网络,而是通过提示词或少量示例来“对齐”模型已有的知识。

比如 CoOp 系列将上下文学习变成可学习的连续向量,通过对任务数据进行几十步优化来调整文本端的提示。还有一类做法直接利用 CLIP 的图像-文本联合嵌入空间,将支撑集样本嵌入映射到类别文本嵌入周围,在 1-shot 场景下能达到不错的零样本效果。

从文献管理角度看,基础模型时代的 Few-shot 论文关键词通常是:prompt tuning、adapter、in-context learning、test-time adaptation。整理时最好和传统 Few-shot 分开目录,不然很容易造成“小样本分类”这一块技术栈的前后混乱。

5. 基准测试与数据集:选错评测方案等于白做

文献整理到最后总逃不开一个环节:拿 benchmark 验证。这个环节的坑比想象中多得多。

5.1 常用数据集一览与适用场景

以下是目前小样本分类用得最多的数据集,我按推荐度做个简要梳理:

数据集类别数领域适用场景备注
miniImageNet100(64/16/20划分)自然图像标准学术对比图片小(84x84),训练快,但已被刷爆
tieredImageNet608(351/97/160划分)自然图像(层级)验证跨类别泛化类间差异更大,更接近真实新类
CIFAR-FS / FC100100自然图像(细粒度)低分辨率快速实验FC100 的类间相似度更高,更难
CUB-200200细粒度鸟类细粒度小样本类别相似度高,适合度量方法检验
Meta-Dataset多数据集混合多域跨域小样本综合评测评测标准复杂,且官方代码库持续更新
CDFSL 系列多数据集跨域(医学/遥感等)实战跨域迁移常用 EuroSAT、ChestX-Ray 等

5.2 评测协议的隐藏差异

同一个 miniImageNet,不同论文的准确率可能直接对比性很低,原因就在于某些细节没写清楚:

  • 支撑集和查询集的采样方式是否固定随机种子;
  • 查询样本每类取多少个(常见是 15 或 16,但有的是 5);
  • 是否采用 transductive inference(测试时能否看到整个 batch 的未标注数据)。Transductive 方法(如利用查询集做聚类或正则化)通常比 inductive 方法高 2 到 4 个百分点,但两者在真实业务中的可应用性完全不同。

我见过很多“复现论文涨点”的案例最终查下来只是评测协议不一致。所以每读一篇论文,建议顺手记录它的评测设置:是否 transductive、查询集大小、数据增强列表、backbone 结构。

5.3 可复现性清单:录论文笔记时该记什么

记录小样本论文时,我通常会在表格里留这几列:算法名称、类别(度量/优化/增强/预训练)、backbone、评测协议(N-way/K-shot/是否 transductive)、数据集准确率、是否开源、代码质量(能否直接跑出论文报告数字)。这套表格如果从第一天就坚持维护,到后来写综述或者做横向对比时,效率会提升十倍。

6. 论文阅读路径与实用工具:从入门到系统化

面对一大堆论文,光收藏不整理等于没有整理。列一下我维护这个方向的文献管理方法,供参考。

6.1 按阶段排阅读顺序

给完全从零开始的人一个建议顺序:

  1. 先读三篇综述:可以看王晋东等学者在 B 站或知乎的综述视频提纲,或者读 2020 年前的 few-shot 综述 PDF,先建立整体框架。
  2. 再精读四篇奠基性论文:Matching Networks、Prototypical Networks、MAML、Relation Networks。这四篇分别对应匹配、原型、优化、关系四个核心思路,读完就有地图了。
  3. 然后读 Benchmark 性质论文:Baseline++、Meta-Dataset 等,了解评测的完整面貌。
  4. 最后按自己的具体任务去检索:图像分类相关找 transductive 方法,跨域场景找 domain-shift 方法,医学影像找低分辨率增强方法。

6.2 文献管理与检索工具

论文管理我用 Zotero 比较多,配合 ZoteroGPT 插件做摘要提取和标签自动分类。建立智能文件夹,按“度量学习”“优化学习”“数据增强”“预训练适配”“跨域小样本”这几个方向自动归类,比手工分类省力得多。

检索方面的关键词建议覆盖:few-shot learning、few-shot classification、episodic training、meta-learning、N-way K-shot、cross-domain few-shot、test-time training、prompt learning 等。在 arXiv 上设置 RSS 订阅,每天自动收邮件,能很大程度上避免漏掉新论文。

6.3 给自己的文献库建一个“快速筛查表”

每篇论文收藏时都顺手回答三个问题:它的方法是在哪个环节改进了流程(数据、特征、分类器、优化还是评测)?它对比的 baseline 是老方法还是和自己同源的方法?它有没有开源?这套筛查表虽然机械,但对于建立一个科技感十足的文献库非常关键。

7. 复现与扩展实战:论文不会写进 Methods 的细节

最后分享一些这几个月大量复现后攒下的实际经验。这些细节论文里基本不会写但影响巨大。

7.1 Baseline 先行:永远先搭一个简单可跑的基线

不管你要读哪篇论文,先把这个领域的 standard baseline 跑出来。在小样本分类里,最简单可靠的 baseline 就是:在基类上正常训练一个分类网络(用交叉熵),测试时把最后一层分类器扔掉,换成最近质心分类(或逻辑回归)。这个 baseline 在很多数据集上能超过 60% 到 70% 的已发表方法,但实现成本极低。

有了这个基线,你再去看那篇新论文,就能判断它的提升到底是方法本身带来的,还是因为它的 backbone 更强、输入分辨率更高、训练迭代更多。

7.2 超参数敏感性比模型结构更值得关注

在小样本分类中,学习率调度(cosine annealing 与否)、Weight decay 大小、支撑集/查询集的比例,对最终结果的影响往往不亚于算法本身。比如在 miniImageNet 上跑原型网络,调整类别内样本归一化方式就带来了接近 3% 的波动,这个幅度远大于一些方法之间 0.5% 的差异。

所以复现论文时,我强烈建议先花时间还原它的训练配置——数据增强列表尤其关键。有篇 2019 年的工作,模型结构摆在那,不加强增强 58%,加了最简单翻转裁剪直接变成 62%。这已经足以说明问题。

7.3 显存与速度优化:先验证后扩展

元学习方法通常占用显存极高,因为内循环的梯度需要跨任务累积。解决思路有两个:梯度累积(gradient accumulation)或者减少元任务批量大小。如果论文里用 4 个任务更新一次,你的卡跑不动,可以试试 2 个任务更新一次但学习率减半,效果往往接近。

另外一个很实用的 trick:对支撑集特征做缓存。在评测阶段,支撑集是固定的,可以先把支撑集所有图像的特征一次性提取出来,然后只对查询集做前向传播。这能省掉大约一半的推理时间。度量方法和优化方法都适用。

7.4 代码层面的常见踩坑

  • 数据加载器必须在每个 episode 中重置随机种子,否则同一个任务反复出现,评测结果会被高估。
  • 验证集和测试集不可混合做数据增强策略调参,否则会有数据泄漏。
  • 在使用预训练 backbone 时,确认它是否已经在目标数据集上训练过——比如是否用了 CIFAR 预训练的 ResNet 去测 CIFAR-FS,这种信息泄漏在早期论文里并不罕见。
  • 保存模型时不要只保存了最终权重,还要记录评测协议相关的配置参数,否则几周后回来根本不知道当时的准确率是怎么算出来的。

这套经验不光对你复现论文有用,对你将来自己投稿也至关重要。很多审稿人就是靠这些细节判断一个工作是否扎实。复现新论文时如果发现它比论文结果低了 2% 以上,先不要怀疑方法本身,优先检查它的数据增强、学习率策略和评测协议。

整理小样本学习的文献不是单纯收集 PDF。真正的整理是把问题分类、把方法归流、把实验结果做成可对比的表格、把复现过程中踩到的坑记录下来。这个领域发展太快,两年前的所谓 SOTA 在预训练模型面前可能已经不够看,但核心科学问题没有变:如何用极少的标注样本完成可靠的学习和推理。带着这个问题意识去看论文,才能在一堆术语和指标中找到真正有价值的方向。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询