资讯动态

小样本学习论文收藏:核心路线、经典模型与复现经验指南

发布时间:2026/9/30 6:10:14 来源:尧图企业网站定制
我最早接触小样本学习Few-shot learning是在一个工业质检的项目里。某个缺陷类别当时只收集到二十几张真实样本常规分类模型训练到第三轮就开始过拟合测试集准确率一路往下掉。后来换成基于Prototypical Network的做法用同类别的少量样本做原型嵌入效果才勉强能用。那时候我就意识到Few-shot learning不是一篇论文里的概念玩具而是很多实际项目绕不开的硬需求。这篇博文的定位不是带你从头复现某个模型而是以论文整理和收藏为主线把小样本学习领域最值得读的论文、最核心的技术路线、最常踩的坑整理成一份可以持续更新的收藏夹。适合三类人刚接触Few-shot learning的研究生想在业务里用少量样本解决问题的工程师以及想快速了解这个方向全貌、找论文做调研的从业者。我尽量用自己做实验、看论文、复现代码时积累的实际经验来讲不会只做干巴巴的论文列表。1. 先搞清楚Few-shot learning到底在解决什么问题1.1 问题定义N-way K-shot的真正含义小样本学习的目标很好理解让模型在见过极少样本的情况下学会区分新的类别。但里面有个细节经常被新手忽略——Few-shot learning的少样本不是指训练数据总量少而是指新类别上的标注样本少。通常我们用N-way K-shot来描述一个任务假设你现在要做一个5类分类任务每个类别只给你1张或5张标注样本这就是5-way 1-shot或5-way 5-shot。这些少量标注数据叫支撑集support set用来教会模型识别新类别另外还有一组查询集query set用来评估模型对新类别的判别能力。训练和测试阶段采用同样的任务构造方式但测试阶段出现的类别必须和训练阶段完全不相交。这一点特别重要模型不是见过狗的照片后学会认猫而是在训练时见过几百个不同的小任务学会了一套快速适应任何新任务的能力。这种问题设定一开始会让很多从传统监督学习转过来的人不习惯。传统分类里训练集和测试集共享类别空间模型学的是从图片到固定类别标签的映射Few-shot learning里每个task的类别都在变模型实际学到的是如何在一个新任务里快速建立分类能力。所以看论文时如果看到某个方法在miniImageNet上表现很好先别急着惊叹要确认它的实验设置是不是标准的学习算法设置否则结果很可能不可比。1.2 四个维度理解Few-shot learning的难点我把小样本学习的难点归纳为四个维度这样在看论文、选方向时更有针对性。第一是经验风险最小化失效。样本量太少时标准监督学习的经验风险无法逼近期望风险模型很容易退化成记忆训练样本而不是学到通用特征。很多早期论文会专门验证模型在训练集上是不是过拟合这个细节值得关注。第二是类别缺口。训练阶段和测试阶段的类别完全不同意味着模型必须学习类别的迁移能力而不是类别的固定表征。这正是度量学习和元学习能派上用场的原因。第三是领域漂移。训练域和测试域如果差异较大比如训练用自然图像、测试用医疗影像小样本问题会被进一步放大。这也是Meta-Dataset这类跨域benchmark出现的原因。第四是评估方差。随机采样的task会导致结果起伏很大不同随机种子下的准确率可能差好几个点。所以论文里不看多次实验的均值等于白看。理解了这四点你再去看论文里的方法设计就会明白很多机制不是为了炫技而是在解决有限样本下的边界问题。1.3 三个常见的错误理解很多刚入门的同学会把小样本学习和数据增强划等号认为只要把样本翻几倍就能解决问题。实际上数据增强只解决样本多样性不足的问题对小样本学习中类别不可见这一核心矛盾帮助有限。第二个常见误区是觉得预训练模型加微调就够了。直接微调在大模型时代某些场景下确实效果不错但在标准Few-shot benchmark上传统微调方式往往跑不过专门设计的元学习算法除非你加入特殊的正则化和调参策略。第三个误区更隐蔽把transductive和inductive搞混。inductive设置下模型只能利用当前任务的支撑集和查询集测试时对每个样本逐个预测transductive设置下模型能利用整个查询集的分布信息来辅助预测。很多论文会声称自己比别的方法高出几个点但你仔细看实验设置会发现它用的是transductive而这个信息往往藏在实验细节的小字里。我在整理论文时养成了一个习惯先看实验设置再看方法最后才看结果。2. 核心技术路线从四条主线梳理经典论文小样本学习发展到现在方法多到让人眼花缭乱。但如果按底层思路来分类其实可以分成四条主线数据增强线、度量学习线、元学习线、优化方法线。每条线都有各自的经典论文和代表性工作下面逐一展开。2.1 数据增强与样本生成线给模型无中生有的能力这条线的最直接想法是样本不够那就生成更多样本。早期代表性工作有使用GAN和VAE做样本生成的方案但这些方法有个致命问题——在极度稀缺样本条件下生成模型自己也很难训练好。后来大家开始用语义信息来辅助生成比如通过类别属性的语义嵌入来合成特征而不是直接合成图片。这在我整理的论文里算一个分支方向。更实用的是基于图像变换和特征增强的方法。例如把同一类的不同图片做mixup、cutout或者在特征空间内做插值这类方法虽然朴素但实现简单、加成稳定经常被用作baseline的上界参考。需要注意数据增强方法很少单独作为主力方法出现更多是和其他框架尤其是度量学习结合起来用起到叠加buff的作用。我在实际复现中体会很深的一点是增强策略的选择要和你所用的backbone、数据集强相关ImageNet上有效的策略在医学图像上不一定有效。2.2 度量学习线把分类问题变成距离比较问题度量学习是Few-shot learning里最经典、最容易被理解的一条线。核心思想特别朴素把样本映射到嵌入空间后通过比较样本间的距离来判断类别相似性。最早期的代表是Siamese Network孪生网络发表于2015年当时主要解决的是one-shot手写字符识别问题。它用共享权重的双分支网络分别编码两张图片再用对比损失让同类图片距离近、异类图片距离远。思路简单但现在回头看来它的能力上限不高因为模型只学会比较成对样本没有充分利用整个支撑集的结构信息。随后Vinyals等人在2016年提出Matching Networks这是真正意义上定义现代Few-shot learning框架的工作之一。它引入注意力机制让查询样本通过与支撑集样本的相似度加权和来获得预测结果还提出了在训练时使用与测试时一致的task采样策略也就是episodic training。这篇论文奠定了后来很多工作的范式基础。如果说Siamese Network是比一对那Matching Networks就是比一组。2017年Snell等人提出Prototypical Networks把这一思路推向简洁极致。它对每个类别的所有支撑样本嵌入取均值得到该类别的原型prototype然后计算查询样本与各类别原型的欧氏距离用softmax做分类。实验证明在大多数benchmark上Prototypical Networks的表现不逊于Matching Networks甚至更好而且结构更简单、更稳定。可以说它是目前性价比最高的Few-shot baseline工业界落地时我会优先考虑它。再往后有Relation Network2018思路是距离度量不是固定的而是学习出来的。它不直接使用欧氏距离或余弦相似度而是把查询样本和支撑样本的特征拼接起来丢给一个关系网络输出一个关系分数。这个设计让模型可以学习到更复杂的相似性模式但也增加了过拟合风险。之后还有DeepEMD这类将最优传输理论引入度量学习的论文把距离度量问题建模成一个分布匹配问题效果很好但计算开销大。总体来看度量学习线的核心演进逻辑就是从简单固定的距离到可学习的距离再到更复杂的分布匹配距离。2.3 元学习线让模型学会如何学习元学习Meta-learning是Few-shot learning里理论深度更高的一个分支。它不再直接学一个分类器而是学一个能快速学习分类器的学习器。这一方向最出圈的论文当属Finn等人在2017年提出的MAMLModel-Agnostic Meta-Learning。MAML的核心思想是用双层优化内层在支撑集上快速微调模型参数外层在查询集上评估微调后的表现并更新初始参数。最终学到的是一个好的初始参数这个初始参数能让模型在只见过少量样本后几步梯度下降就能快速适应新任务。类比一下它不是在教学生做这道题而是在给学生一套快速掌握任何新题型的思维方式。MAML之后一系列变体陆续出现。Reptile简化了MAML的推导直接通过多次梯度更新后把参数拉回初始点实现更简单但效果接近Meta-SGD在MAML基础上学习更新方向和更新步长进一步增强了适应能力LEO则引入隐空间和变分推断让MAML在高维参数空间里更容易优化。元学习确实浪漫但在实际工程落地时有个绕不开的问题计算开销很大。MAML涉及二阶梯度计算显存占用和时间消耗都很高。后来虽然有一阶近似方案如FOMAML也牺牲了一部分效果。我个人的观点是如果你要快速落地小样本分类优先尝试度量学习如果你的场景是RL或其他复杂任务且计算资源充足再考虑MAML系方法。Where strong generalization is needed元学习仍然是最好的选择之一。2.4 优化方法线调整参数而非调整损失第四条线是从优化算法角度切入代表工作是Ravi和Larochelle在2017年发表的Optimization as a Model for Few-Shot Learning。这篇论文观察到传统的梯度下降优化器在小样本场景下很不稳定样本少梯度噪声大很容易陷入局部最优。于是他们提出用LSTM作为元学习器来学习优化更新规则相当于用一个元模型来指导主模型的参数更新。这条线和MAML在形式上很像但出发点不同MAML学的是一个好的初始参数LSTM优化器学的是一个好的更新策略。简单说MAML告诉你从哪出发优化方法告诉你每步怎么走。可惜LSTM优化器的训练复杂度高泛化能力也有限后来逐渐被更简洁的meta-learning框架超越。不过它的思想对后来的很多工作都有启发比如一些基于学习率调度和梯度校正的方法都可以追溯到这篇论文。除了上面四条主线还有两条值得留意的支线。一是基于图网络的方法把整个task建模成图用GNN做标签传递和分类代表作是2018年的Few-Shot Learning with Graph Neural Networks这种思路在处理样本间复杂关系时很有效。二是基于生成模型和半监督思想的方案用未标注数据辅助小样本学习代表如LaplacianShot在transductive设置下表现很亮眼。整理论文时我建议以四条主线为骨架把支线挂到对应的主线上这样知识结构才清晰。3. 收藏夹里的经典论文阅读路径与复现价值论文整理最难的不是把论文放进列表而是让列表有梯度、有逻辑。下面给出一条我推荐的阅读路径和收藏优先级按难度和基础性分层。3.1 入门五篇论文怎么读怎么选如果只让我从收藏夹里挑五篇必读论文我会选Matching Networks、Prototypical Networks、MAML、Relation Network、A Closer Look at Few-shot Classification。Matching Networks和Prototypical Networks是理解episodic training和task构造的钥匙读完它们你就知道Few-shot learning的数据流是什么样。MAML让你理解元学习的核心思想。Relation Network会让你看到度量学习流的多样性。而A Closer Look这篇论文极为重要它是很多人容易忽略的定海神针——作者对比了各种baseline后发现只要在标准backbone上做简单的距离度量效果就已经能匹敌很多复杂元学习算法。这篇论文让我重新思考了很多刷点工作的可信度强烈建议在读完前四篇之后立刻读。读这五篇的顺序也有讲究先读Prototypical Networks理解基础再读Matching Networks理解注意力版本接着读Relation Network扩展对度量学习的想象然后读MAML进入元学习最后用A Closer Look收束建立对baseline的清醒认知。这样读完你在跟别人聊Few-shot learning时就不会只停留在名词层面。3.2 必备的baseline和重新审视类论文我整理论文时会单列一个baseline与审视分类因为做实验没有靠谱baseline等于没有坐标系。A Closer Look at Few-shot Classification2019是这个分类里的第一优先级。它明确了几种baselineRegular Fine-tuning、Baseline用特征提取器加分类器、Baseline加入余弦分类器。论文的核心结论是预训练特征提取器的质量在很大程度上决定了Few-shot性能方法本身的增益没有想象中大。这给我们一个提醒别急着上复杂的元学习先确认你的backbone够不够强。另一篇值得关注的审视类论文是Rethinking Few-Shot Image Classification: a Good Embedding Is All You Need?2022年ECCV。作者发现一个精心训练的嵌入模型配合简单的距离分类器就能在多个benchmark上达到SOTA水平。这再次印证了特征质量的重要性。读到这类论文后我会刻意在自己的实验里多设计强backbone 简单分类器的对照实验而不是一上来就堆复杂模块。这类审视类论文对研究方向的影响非常深远。它们能帮你筛掉大量实质贡献有限、只是通过复杂模块刷点的论文。我的经验是任何新方法要想说服我至少要能回答一个问题——你的复杂设计比同样backbone下的简单baseline强多少如果只强1-2个点那要打个问号。3.3 关于benchmark和数据集的选择论文刷榜离不开数据集但很多新人不知道如何选数据集。我把常用benchmark整理成一张表方便收藏时对照使用。数据集类别数单类样本量特点适用场景Omniglot162320字符集任务简单适合快速验证验证算法可行性的首选miniImageNet100600小规模ImageNet子集使用最广泛标准对比绝大多数论文的擂台tieredImageNet608约1000按WordNet层级划分类别间语义gap更大测试类别泛化能力CIFAR-FS100600从CIFAR-100采样分辨率低快速实验资源受限时FC100100600从CIFAR-100按层级划分比CIFAR-FS更接近真实场景CUB-200200平均约30细粒度鸟类识别测试细粒度小样本能力Meta-Dataset多域不固定跨域多任务benchmark评测模型跨域泛化能力Omniglot虽然是入门必备但它的任务难度偏低很多在Omniglot上效果惊艳的方法在miniImageNet上可能直接翻车。其原因我在前面强调过字符图像类别之间差异较大且背景干净、多样化程度低模型容易学到捷径。所以看论文时如果对方只在Omniglot上做实验那参考价值有限。我自己最快的验证流程是先在miniImageNet上跑通再在CUB上用细粒度数据压测一次最后如果业务场景和自然图像差异大再补Meta-Dataset。对于细粒度场景CUB-200是很好的压力测试。它是细粒度识别的经典集类别之间的差异非常小能暴露出方法是否真的理解了类别间的细微差别。很多在miniImageNet上表现不错的度量学习方法在CUB上反而掉点原因就是它们只学到了大类间的区分特征没有学到细粒度判别特征。4. 我在论文整理和复现中踩过的坑这个部分是我最想写的因为网上教程很少讲细节。我整理论文、复现代码的过程里踩了不少坑有的坑浪费了我一整周时间。4.1 评估协议的坑随机采样还是固定划分Few-shot learning最常见的坑出现在评估协议上。早期很多论文使用随机采样的task来测试即从测试类里随机选5个类构成task做大量episode后取平均。这种做法的缺点是不同随机种子下结果波动大很可能把某个运气好的结果当成方法有效。现在的标准做法是使用固定seed或固定划分并且报告多次seed的均值方差。还有更隐蔽的坑训练时的task采样分布和测试时不一致。有些论文在训练时使用更多的way类别数测试时使用更少的way这虽然是一种正则化手段但会让结果不公平。我在复现某篇论文时发现它训练时用10-way测试时用5-way而对比方法都用5-way训练这就成了一个不公平竞争。复现前一定要确认task配置完全一致。4.2 代码复现的坑transductive/inductive很容易混这是我在复现时最头疼的坑。有些论文只写in the transductive setting但代码里已经把整个query set传给模型做批标准化统计量计算而这个细节在正文里根本不会细说。如果你用同样的超参数跑inductive版本结果会差很多但你以为方法失效了其实只是设置不同。建议在整理论文时对每一篇方法打一个标签inductive还是transductive。这直接决定了它能否在你的业务场景上使用——比如在线推理场景是典型inductive你不可能等到一批query凑齐了再预测。另一个常见问题是数据划分泄露。miniImageNet的划分版本有很多啊Ravi版本、Vinyals版本、还有后来重新划分的版本不同版本之间的模型性能差异非常大。整理代码时要先确认它用的是哪套划分文件最好直接使用论文作者提供的train.csv、val.csv、test.csv自己手动重排很容易出错。4.3 论文整理的工具与流程说了这么多论文相关的内容最后分享一个实操性强的工具流和方法。我目前使用的论文整理方案是GitHub仓库 Notion数据库 Zotero文献管理三管齐下。GitHub仓库放的是markdown格式的论文列表每条记录包含标题、会议/期刊、年份、代码链接、一句话说明、我的阅读状态。Notion数据库用于日常阅读标记和笔记属性字段包括分类数据增强/度量/元学习/优化、数据集、是否transductive、我的复现难度评分。Zotero用来挂PDF正文和注释配合插件可以一键抓取论文元信息。我建议每条论文记录都要填一句话说明。这个说明不是论文摘要而是你的个人理解。比如对Prototypical Networks我写的是类原型均值欧氏距离极简但稳对MAML写的是学初始参数双层优化代价高。当你积攒到几十条之后回看自己的一句话说清楚整理效率会极大提升。最后分享一个我自己的整理习惯每个月我会翻一遍自己整理的论文列表把那些当时觉得有意思但没有深入的论文重新打开看一遍。我的经验是很多论文当时看不懂或者觉得没用等你在业务里遇到对应问题后回看反而会读出新的价值。小样本学习这个方向变化很快但核心问题和解法框架是稳定的。你把主干抓住每年产生的枝枝叶叶扫一遍就够了这也是我持续维护这份收藏夹的底层逻辑。提示如果你是从零开始建自己的Few-shot学习论文收藏库不要太追求全。先把我上面列的三条主线核心论文读透建立起baseline体系再按需扩展即可。别人的收藏夹永远代替不了自己动手做一遍实验论文整理只是第一步。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑