ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

小样本学习全解析:从元学习到基础模型的少样本适应指南

小样本学习全解析:从元学习到基础模型的少样本适应指南 说是“总结综述论文”其实更像是我自己啃完一堆文献之后做的梳理笔记。去年在工业视觉项目里踩了个大坑产线上某个型号的零件只有十几张缺陷样本常规分类网络怎么训都过拟合最后硬着头皮去翻小样本学习Few-Shot Learning的论文从早期的孪生网络一路看到最新的基础模型范式前后读了十几篇综述和几十篇核心论文才算把这条技术路线彻底理顺。这篇博文就是那段阅读笔记的公开版聚焦小样本学习到底解决什么问题、主流方法怎么组织、评测和落地有哪些坑、未来往哪走适合刚入门这个方向的研究生、准备做算法选型的工程师以及所有被“数据不够”折磨过的从业者。1. 小样本学习在解决什么问题1.1 从直觉到形式化定义N-way K-shot小样本学习的核心场景一句话概括就是每个类别只有极少量标注样本甚至只有1张模型还得学会识别这个类。人类的类比很直观——小孩子看了三五张猫的图片之后见到猫基本都能认出来但深度学习模型要做到这一点传统做法至少需要每类几百上千张图。学术上通常用 N-way K-shot 来形式化一个任务。N-way 表示测试阶段有 N 个类别需要区分K-shot 表示每个类别给了 K 个标注样本作为支撑集support set。比如 5-way 5-shot 就是 5 个类别、每类 5 个支撑样本模型要根据这 25 张图学会分辨查询集query set里的样本。这里面有个容易被忽略的细节训练的类别集合和测试的类别集合是严格不相交的。也就是说模型必须学会“怎么从少量样本中学习”这件事本身而不是记住训练集里的固定类别。这也是小样本学习和传统分类任务最本质的区别——传统分类的类别是封闭的测试类别永远来自训练集小样本学习面对的是开放类别训练时根本看不到测试类别。1.2 为什么这个问题值得专门研究数据永远是深度学习的命门而现实世界里“每类样本充足”恰恰是奢侈品。首先是标注成本问题。在医疗影像、法医鉴定、古籍识别这些专业领域标注需要专家投入一张医学影像的标注费可能就是几十上百块几百个类别都来够几千张预算直接爆炸。其次是长尾分布的现实。电商商品识别、生物物种鉴定、故障类型诊断这些场景里头部类别样本很多但尾部的长尾类别可能一年都凑不齐几张图。第三是动态类别问题比如工业产线隔三差五换型号、安全场景不断出现新物体每次新增类别都重新做数据标注和模型训练周期和成本都扛不住。更深层的动机来自对“智能”本身的追求。人类幼儿时期见过的事物数量远少于深度学习模型的训练数据量但概念泛化能力却强得多。小样本学习研究的终极命题就是怎么让模型像人类一样利用先验知识实现概念的快速泛化。这个命题在学术上催生了元学习Meta-Learning、度量学习、数据增强等分支在工程上也直接关系到大模型时代“少样本提示”这类范式的效果边界。1.3 和几个相近概念的边界刚接触这个方向的人很容易把迁移学习、元学习、小样本学习混在一起我梳理一下自己的理解。迁移学习是最宽泛的概念强调的是把源领域学到的知识用到目标领域目标领域样本多少不是关键约束。元学习指的是“学会学习”的框架训练对象从模型参数变成了学习算法本身小样本学习经常拿元学习来解决但元学习的应用范围更广比如也可以用在强化学习里的快速适应。小样本学习更偏向问题定义目标域的标注极少。日常用语里这几个词经常交替出现但读论文时看方法本质就知道它们不是一回事——一篇论文叫“few-shot learning”可能是纯迁移加微调另一篇可能是优雅的元学习算法。另外还要区分 few-shot、one-shot 和 zero-shot。one-shot 是 K1 的特例zero-shot 更极端测试类一个标注样本都没有只能靠类别名称、属性描述、知识图谱这类辅助语义信息来识别。zero-shot 和小样本常常共享方法尤其是在引入外部知识这个方向上后面会细说。2. 小样本学习主流方法体系梳理这十几年小样本学习的方法论文浩如烟海但学术界基本形成了脉络清晰的几大路线。我按照“数据、表征、优化、知识”四个维度来拆解这个分法也是多数综述采用的组织方式。2.1 数据增强与样本合成路线最直觉的思路样本少那就把样本变多。这条路线细分为三个层次。第一个层次是传统图像增强比如随机裁剪、旋转、色彩抖动、Mixup、CutMix。这些方法在传统分类里只是锦上添花在小样本里却是保底操作几乎所有论文的训练流程都离不开。但增强不能乱做我在实验里发现过度增强比如大幅度旋转对数字识别这类方向敏感的任务反而有害需要根据任务特性挑选增强策略。第二个层次是特征空间增强。既然图像空间生成难控制就在深度特征空间里做文章。代表思路是 Feature Hallucination用基类样本估计类内方差再在新类少量样本的特征上加噪声合成新特征。这有点像传统机器学习里的 SMOTE 过采样只不过从像素空间搬到了语义特征空间。实测这类方法计算开销小、稳定性相对好但前提是特征提取器本身得足够强。第三个层次是生成模型合成典型是用 VAE 或 GAN 为新类生成额外样本。这个方向听起来美好实际有个“鸡生蛋”问题生成模型训练本身需要大量数据新类只有几张图多半还得靠基类数据做迁移或预训练生成样本的质量和真实性很难保证。我的经验是在小样本场景里直接用 GAN 生成像素级样本十个项目有八个效果不如特征空间增强因为生成模型的分布偏差会直接污染分类器。2.2 基于度量的方法度量学习这条线是当前的主流核心思想很简洁不直接学分类边界而是学一个嵌入空间让同类样本靠近、异类样本远离测试时根据距离或相似度来判断类别。最早的代表是孪生网络Siamese Network2015 年用在 Omniglot 手写字符的小样本识别上。它的做法是把两张图分别送进两个共享权重的网络输出一个相似度分数训练时用正负样本对拉近拉远距离。孪生网络的问题在于训练和测试的任务形式不完全对齐泛化能力受限。之后出现的 Matching Networks 引入了注意力机制把支撑集样本通过注意力加权的方式“匹配”查询样本。真正把度量学习推到主流地位的是 Prototypical Networks原型网络。它的想法极简每个类别用支撑集样本的均值向量作为“原型”查询样本跟所有原型算距离哪个近就归哪类。2020 年前后很多工作发现在 miniImageNet 上原型网络配合强骨干网络性能甚至能超过一大票看起来很复杂的后续方法。我在实际复现中也觉得原型网络是最值得优先尝试的 baseline——简单、稳定、好调参。再往后还有 Relation Network它不再用固定的欧氏距离或余弦距离而是让网络自己学一个“关系分数”模块来度量样本和类原型的相似度。这个思路在小规模数据集上有优势但关系模块本身要额外训练容易过拟合。度量学习路线里有一个很多人忽略的关键结论距离度量的选择比想象中更重要。原型网络原文对比过欧氏距离和余弦距离欧氏距离在多数设置下更好。为什么高频经验解释是余弦距离只衡量方向、忽略了特征的模长信息而特征的模长往往携带类别可分性的线索。所以调参的时候别上来就换距离先用默认的欧氏距离跑通整套流程再说。2.3 基于优化的方法这条线的哲学是与其想尽办法用好少量样本不如让模型天生就“容易适应少量样本”核心代表就是 MAMLModel-Agnostic Meta-Learning。MAML 的做法是学一个“好的初始化参数”。测试时模型从这个初始化出发在支撑集上只走几步梯度下降就能达到很好的效果。训练过程是双层优化内层在多个小样本任务上做梯度更新外层根据内层更新后的表现来优化初始参数。这个思路非常优雅但代价也很明显——二阶导数计算开销大训练不稳定对骨干网络结构敏感。后来很多人做了改进比如 Reptile 用一阶近似简化计算Meta-SGD 顺带学出每维度的更新步长LEO 则先在低维潜在空间做优化再去生成参数。从我自己的实践看MAML 家族在标准 small-scale benchmark 上还能打但一旦换到真实分布漂移明显的场景效果经常不如强预训练加微调。原因也很简单MAML 学的初始化高度依赖训练任务的分布如果测试任务和训练任务差异太大内层几步更新根本拉不回来。近几年的论文里纯优化路线的新作明显减少更多是跟其他范式结合比如用 MAML 做明细模块的初始化。2.4 基于语义知识与多模态引导这条线在早期被低估但近两年随着 CLIP 这类大规模图文预训练模型的出现地位急速上升。核心思路是小样本缺的是视觉标注但类别本身有大量免费的外部信息——类别名称、属性描述、知识图谱、词向量等用这些语义信息来弥补视觉样本的不足。早期代表工作是把类别名的 Word2Vec 或 GloVe 词向量作为“语义原型”训练视觉特征向语义空间对齐测试时用语义原型分类。还有一类工作用属性标注比如鸟类的颜色、翅膀形状等结构化属性再结合视觉特征推理。知识图谱则提供类别之间的关联信息比如“金毛”和“拉布拉多”都是犬科这种关系可以作为先验约束。CLIP 出现之后这个方向迎来质变。CLIP 用海量图文对预训练天然构建了视觉和文本的联合嵌入空间。做小样本分类时只需要把测试类别的文本描述作为分类器权重就能实现 zero-shot如果每类给少量图还可以对文本特征和视觉特征做融合调优。最重要的一点是CLIP 的预训练分布极广泛化能力是那些只在 ImageNet 上预训练的模型无法比的。所以现在很多小样本论文的backbone都换成了CLIP方法和结论都要重新审视。2.5 四条路线的横向对比方法路线核心思想代表工作优点局限性数据增强从数据层面扩充样本特征增强、GAN合成思路简单可与任意方法叠加增强策略敏感生成质量难以保证度量学习学嵌入空间使同类近异类远孪生网络、原型网络实现简单、训练稳定、解释性强对骨干网络和距离度量敏感优化学习学更好的初始化或更新规则MAML、Reptile、LEO方法普适可迁移到多种任务计算开销大、分布漂移时容易失效语义知识用外部语义信息补足视觉样本CLIP、属性嵌入可到 zero-shot泛化上限高依赖外部数据的质量和对齐效果实际工程选型的时候我通常的建议是先把强预训练ImageNet 或 CLIP 特征 逻辑回归或原型分类作为基线然后根据数据规模、算力预算、场景分布漂移程度决定往哪条路线深挖。大多数项目里这个朴素基线就已经能打败很多花哨算法。3. 评测基准、训练范式与实验细节3.1 经典数据集与它们的设计意图小样本学习有一套约定俗成的评测数据集每个数据集都是特定设计意图的缩影。Omniglot 是最早的经典包含 50 个字母体系、1623 类手写字符每类只有 20 个样本。它和 MNIST 类似识别难度低现在的模型基本都刷到接近满分作为 sanity check 还可以反映不出方法差距。miniImageNet 是小样本学习公认的“入门级考场”从 ImageNet 里选了 100 个类每类 600 张图按 64/16/20 划分基类/验证类/新类。绝大多数论文都会报这个数据集上的结果但来自 ImageNet 的类别本身区分度较高模型容易在“大类判别”上取巧。tieredImageNet 是对 miniImageNet 的重要修正。它按 ImageNet 的语义层级来划分类别保证基类和新类在语义上不重叠。举个例子基类里可以有各种犬类但新类里不会再出现犬类迫使模型真正学会泛化而不是靠类间相似性作弊难度明显高于 miniImageNet。CUB-200 是细粒度场景的代表2011 年的鸟类数据集200 个鸟种测试任务要求区分极其相似的鸟种对局部特征提取能力要求高。FC100 是从 CIFAR-100 演化来的图像分辨率低语义区分更细能更好地区分方法优劣。Meta-Dataset 则是多数据集组合的综合评测混合了 ImageNet、Omniglot、CUB 等来源评测跨域泛化能力是目前最有参考价值的 benchmark 之一。3.2 episode 训练范式是怎么运作的理解小样本学习必须理解 episode 训练机制。整个流程模仿了测试时的场景每次从训练集中随机抽 N 个类别每类 K 个样本作为支撑集再抽若干样本作为查询集构成一个“任务”episode在这个任务上计算损失、更新模型。反复抽任务训练让模型见惯了“从少量样本快速学习”的场景。为什么这么做因为训练和测试的任务分布保持一致模型学到的不是“图片叫什么”而是“怎么用支撑集判断查询集”这和小样本测试的目标完全对齐。实现这个机制有几个细节会影响最终效果。way 数、shot 数和 query 数量都是超参数。训练时通常用 5-way 或 10-wayquery 每类 5~15 张。有一个多次踩到的坑训练和测试的 way/shot 最好保持一致。如果用 5-way 5-shot 训练测试时变成 5-way 1-shot性能会明显下降因为模型从没见过“1 个支撑样本”这么极端的情形。另外支撑集和查询集的采样要避免重叠否则会高估性能。3.3 归纳设置 vs 转导设置被忽视的公平性问题很多刚读论文的人没注意到一个关键区别归纳inductive设置和转导transductive设置。归纳设置下模型每次对查询样本做预测时只能看支撑集不能看其他查询样本。这是最符合真实在线推理场景的设置。转导设置则允许模型在预测时利用整批查询样本的整体分布——比如统计查询特征的均值和方差做归一化或者用查询样本之间的相似度做标签传播。转导设置通常比归纳设置高出 5 到 10 个准确率点因为多用了“测试集分布”这个额外的免费信息。问题在于很多论文用了转导设置却不明确标注对比表格里混在一起极容易误导。实际部署的时候如果请求是一个一个来的转导设置根本用不上但如果能做到批量离线推断转导就能带来实打实的提升。读论文、对比 result table 时第一件事就是确认对方用的是归纳还是转导否则对比毫无意义。3.4 复现和横向对比时最容易踩的坑小样本学习论文复现最大的坑不在算法本身而在那些没写进论文的工程细节。骨干网络的选择是效果差异的最大来源。同一篇论文用 ResNet-12 和用 WideResNet-28 可能差出 5 个点以上。很多早期论文用的是 ResNet-12后来大家发现 WideResNet 更强于是纷纷换将。对比时如果 backbone 不一致结果完全不可比这一点比算法本身的差异影响大得多。训练策略同样影响巨大。图像增强策略有没有开、学习率怎么调度、用不用 label smoothing、预训练权重从哪里初始化任何一个变了结果都可能波动好几个点。还有一个非常容易被忽略的点测试时是否做了 TTAtest-time augmentation。做了 TTA查询样本通过多种增强得到多个预测再投票通常能提升 1~2 个点。论文里如果 TTA 开了而对比方法没开性能差异就有了水分。诚实的做法是统一这些设置并在论文里写清楚。我自己做对比实验的时候一定会固定住 backbone、优化器、增强策略、随机种子这几个变量确保差异只来自方法本身。另外小样本评测方差很大同一个模型换随机种子重训一次结果可能波动 1.5 个点以上所以要认真做多次采样取平均并带上标准误而不是运气好跑出一个高点就发出来。4. 落地场景与真实世界里的问题4.1 医疗影像与生物学医疗影像天然是小样本的高发区。一种罕见疾病的影像可能全国只有几十例医院不可能等数据凑齐再训练模型。小样本学习在这里的典型用法是做病灶识别、病理切片分类和多模态辅助诊断。比如用胸部 X 光识别罕见肺炎类型用皮肤镜图片区分罕见皮肤病基类用常见病训练新类遇到罕见病时每类给三五张图做支撑。医疗场景还有一个特点类别不是静态的新的病毒亚型、新的病变分型不断出现模型必须支持在线扩展新类这正好是小样本增量学习的应用场景。不过落地时最大的拦路虎不是算法而是数据隐私——医院数据不能出院只能做联邦式的小样本学习这在学术上还是一个相对空白的交叉方向。4.2 工业质检与智能制造这是我亲历过的场景感触最深。产线上的缺陷种类极其长尾常见的划痕、脏污样本很多但某些罕见缺陷可能一个月才出现几次。传统做法是积累几个月数据再训模型期间不良品全靠人工目检漏检率很高。小样本学习的作用是当新型缺陷第一次出现时现场工程师拍几张照片就能快速建立新的检测能力。实际操作中有几个现实问题。第一现场拍照的光照、角度和训练数据差异很大导致域漂移严重学术方法在标准 benchmark 上的优势到这里经常失效。第二产线上缺陷样本往往不是纯净的单目标图而是复杂背景里的小目标与 Omniglot 那种居中图差距很大。第三流式新增类别会带来灾难性遗忘今天学了新缺陷明天把旧缺陷忘了需要搭配增量学习或经验重放机制。我的体会是在工业质检场景里数据预处理和图像质量统一的重要性甚至高于选择哪种小样本算法先把成像条件控制住再谈算法。4.3 安防、遥感与自然语言处理安防领域的应用主要是人脸识别中的少样本注册和新人员识别。传统人脸识别需要每个人录很多张照片小样本设置下每人一两张照片就要完成注册和识别度量学习方法在这个场景有天然优势LFW 和 MegaFace 等基准上有一批工作专门研究这个设定。遥感领域稀有地物分类、灾害变化检测经常面临标注样本不足的问题卫星影像标注需要专业遥感解译人员成本高周期长。航拍图像里的小样本分割也是热门研究方向比如只有几个标注像素点也要分割出特定地物类别。NLP 里的文本分类、意图识别是小样本学习的另一个主场。新上线的业务会有新的意图类别收集标注数据的成本很高用现有的预训练语言模型配合少量标注样本做分类器已经成为很多团队的标准做法。尤其是在大模型时代用 ChatGPT 或开源大模型做 few-shot 文本分类效果远超之前专门设计的小样本 NLP 方法方法体系正在被重写。4.4 落地时不得不面对的算法之外的问题真实业务场景里小样本学习算法只是链条的一环还有很多算法之外的因素决定成败。数据质量是头号问题。学术 benchmark 里的支撑集都是干净标注真实场景里支撑集本身可能标错一张错误标注支撑样本足以让性能明显崩盘。我在项目里被迫开发了一套支撑集清洗流程先用预训练模型给所有支撑样本打分人工复核低置信度样本过滤噪声之后再喂给算法这个预处理比换更复杂的算法有效得多。推理时延也不能忽视。很多度量学习方法需要在线计算支撑集的特征原型当类别数特别多、支撑集特别大时存储和检索开销都会上涨。如果系统延迟要求 100 毫秒以内就得考虑特征缓存、向量检索这些工程手段。最后是模型可解释性和置信度输出问题。业务方经常问“你凭什么认为这个是新缺陷”小样本学习的预测依据本身就很抽象再加上领域差距说服力往往不足。落地时我通常会在模型之外增加一个人工复核环节置信度低的样本自动转人工审核累积到一定量再回流到支撑集形成数据飞轮。这套业务流程设计得好比单纯优化算法指标更管用。5. 当前挑战与未来方向5.1 跨域小样本评测百科全书之外的残酷现实学术界评论 benchmark 是同一数据源划分基类和新类但现实场景常常是整个数据分布都变了训练数据是自然光下的商品图测试数据是暗光工业相机图训练数据是常规影像测试数据是另一种设备型号的图像。这种跨域小样本Cross-domain Few-Shot Learning场景比同域设置难得多核心问题是基类学到的表示在新域里还有多少可迁移性。目前比较有希望的方向是借助大规模预训练模型的泛化能力以及利用目标域的无标注数据做 transductive 适配。但整体还是一个难题。做项目规划时我建议先评估训练数据和目标数据的相似度如果域差异很大先把钱花在收集少量目标域数据上多收集两三百张图比什么小样本算法都有效。5.2 噪声标注与开放集问题小样本学习的支撑集样本如果存在噪声标注影响是灾难性的。因为支撑集样本数量极少一张错标就会导致类别原型偏移进而污染所有相关预测。未来一个重要方向是设计对噪声支撑集鲁棒的算法比如自动剔除异常支撑样本、给支撑样本学习置信度权重。开放集问题同样是隐忧真实场景里查询样本可能根本不属于支撑集中的任何一个类别。当前大部分小样本学习算法是封闭集假设强制把样本分到 N 个已知类之一陌生类也会被硬塞进某个类。工业质检里这个问题特别致命——如果新型缺陷模型没见过又不得不分到“已知缺陷”里就等于漏检。开放集小样本识别即同时判断“是不是已知类别”和“属于哪一类”会是工程落地的刚需方向。5.3 从专用算法到基础模型范式这两年小样本学习领域发生了一个洗牌级变化大规模预训练基础模型CLIP、GPT、DINOv2、SAM的崛起改变了游戏规则。以前小样本学习的核心是设计精巧的元学习算法因为模型从零开始训练确实需要特殊机制才能在少量样本上快速适应。但现在大家发现直接用 CLIP 的冻结特征加一个简单的逻辑回归分类器就能在众多小样本 benchmark 上超过很多专门设计的方法。原因很简单CLIP 在数亿图文对上见过海量视觉概念它的特征空间本身就具备良好的类别可分性少量样本只是用来定位类别在特征空间里的位置而不再需要从头学知识。这个趋势可能意味着花三年时间设计一个新奇的元学习算法性价比正在越来越低。真正有价值的方向变成了如何更好利用基础模型的先验提示调优Prompt Tuning、适配器模块、文本辅助的支撑集扩展、跨模态信息融合。我个人的预感是小样本学习未来会逐步与模型微调、上下文学习、多模态对齐融合成为一个更宽泛的“少样本适应”议题。学术界的小众算法如果不能在基础模型加持下体现优势它会逐渐边缘化。5.4 评测体系的重构基础模型的加入也暴露了现有评测体系的缺陷。miniImageNet 和 tieredImageNet 上的部分 benchmark 已经很接近饱和方法间的差距不足以支撑结论而且这些数据集大多基于自然图像无法反映目标检测、分割、点云、视频等多模态任务中的小样本能力。未来评测应该更强调跨域难度、真实数据噪声、开放集检测、样本效率这几个维度。Meta-Dataset 这类综合 benchmark 会更受青睐同时业界也需要一套能在基础模型时代公平比较不同适应策略的评测标准统一设置预训练权重、是否冻结骨干、提示长度、数据增强等超参数才能让论文结果有真实参考价值。5.5 小样本以外的扩展任务小样本学习的方法论还在向更多任务形态延伸。小样本目标检测Few-shot Object Detection要在只给少量标注框的情况下检测出新的目标类别除了分类还要解决定位问题难度比图像分类高不少。小样本分割Few-shot Segmentation要求对每类只有几张图的类别做像素级分割常利用基类的 mask 先验做泛化。小样本异常检测则更实用正常样本多异常样本极少目标是找出跟正常分布不同的样本在工业质检里已经有一批落地案例。少样本生成可以用少量图像生成同一类别的新样本本质是数据增强路线的生成式扩展MetaGAN、FigGAN 这些工作都在探索。这些扩展任务共享小样本的核心挑战但评价指标、骨干网络、评测流程都有显著差异入坑前要先看好自己具体要解决的是哪一种。聊到这儿再分享一点个人的实际体会。看综述的时候最大的感受是别被花哨的方法名词吓到把“四条主线加两种评测设置加一个数据陷阱”这个框架搭起来再看任何一篇小样本论文都能快速归类知道它在解决什么问题、跟谁对比、可能在哪些地方有坑。另外想给做工程的朋友一个实用建议遇到小样本项目第一版别急着上复杂算法先用强预训练特征加逻辑回归跑一个基线再根据基线的错误模式决定要不要上度量学习或者跨域适配。我自己踩过不少次坑之后才发现很多项目的问题根本不在算法层面而是数据收集策略和评测口径没摆正。希望这份梳理能帮你少走一段弯路。
返回列表