从零样本到少样本学习:AI如何用极少量数据快速掌握新技能

📅 2026/8/12 17:43:37
从零样本到少样本学习:AI如何用极少量数据快速掌握新技能
1. 从“零”到“有”理解少样本学习的核心范式最近在跟进一些前沿的论文和项目发现“zero-shot”、“one-shot”、“few-shot”这几个词出现的频率越来越高尤其是在大语言模型和计算机视觉的一些新工作中。很多朋友包括一些刚入行的同学常常会问我这几个概念听起来很酷但到底是什么意思它们之间有什么区别为什么现在这么重要今天我就结合自己读论文和做实验的体会来聊聊这几个“shot”背后的门道。简单来说它们描述的是模型在学习新任务或识别新类别时需要多少“例子”。这直接关系到模型的泛化能力、适应性和数据效率是当前AI从“实验室玩具”走向“实用工具”的关键门槛。我们可以把模型想象成一个刚入职的新员工。“zero-shot”就是老板直接扔给他一份全新的、从没接触过的工作说明书比如用梵文写一份市场分析要求他立刻完成。这听起来很离谱但如果这个员工知识面极广、逻辑推理能力超强他或许能根据对“市场分析”和“梵文字符”的已有知识勉强拼凑出点东西。“one-shot”则是老板给了他一个完美的范例比如一份英文的市场分析报告然后说“照这个格式和逻辑用梵文写一份新的”。“few-shot”就更友好了老板给了他三五个不同风格的范例让他从中总结规律再完成新任务。显然给的例子越多任务完成得可能越好但对员工自身“举一反三”能力的要求也越低。在AI领域我们追求的就是那个“知识面极广、逻辑超强”的员工让它在例子极少甚至为零的情况下也能出色工作。2. Zero-Shot Learning无例可循的“开卷考试”Zero-Shot Learning的核心思想是让模型能够识别或处理它在训练阶段从未见过的类别或任务。这听起来像是“无中生有”但实际上它依赖于一个关键的桥梁语义空间或知识库。2.1 核心原理从特征到语义的映射模型在训练时并没有见过“斑马”的图片但它见过“马”和“老虎”。同时我们有一个先验的语义描述比如通过词向量Word Embedding或知识图谱知道“斑马”的语义是“一种有黑白条纹的、像马的动物”。训练过程不仅仅是学习区分“马”和“老虎”的视觉特征更重要的是学习视觉特征空间到语义属性空间的映射关系。举个例子模型学会了“有条纹”这个视觉特征对应着语义属性中的has_stripesTrue“体型像马”对应着shapeequine。当测试时出现一张斑马图片模型提取出“黑白条纹”和“马形体型”的特征然后将其映射到语义空间。在语义空间中它发现这个组合最接近“斑马”的语义描述has_stripesTrue,shapeequine,colorblackwhite从而推断出这是“斑马”。注意这里的“语义”不一定非得是人类语言。它可以是任何形式的、能够描述类别特性的辅助信息比如属性向量、类别的文本描述、甚至其他模态的数据如音频。关键在于这些语义信息在训练和测试阶段是共享的为模型提供了跨类别的推理基础。2.2 典型应用场景与挑战场景一开放词汇目标检测在自动驾驶或机器人视觉中世界上的物体种类无穷无尽不可能在训练集中穷举。ZSL使得模型能够检测出训练时未标注的物体只要我们能提供这些物体的文本描述例如“一个正在玩滑板的人”。模型将图像区域的特征与文本描述的特征进行匹配从而定位并识别出新物体。场景二基于文本描述的图像生成如DALL-E或Stable Diffusion等模型用户输入“一只穿着宇航服、正在弹吉他的柯基犬”模型就能生成对应的图像。模型从未在训练集中见过如此组合的图片但它理解“柯基犬”、“宇航服”、“弹吉他”这些概念的视觉特征并能将它们组合起来。这本质上是一种条件生成式的Zero-Shot任务。主要挑战语义鸿沟模型学习到的视觉-语义映射可能是不精确或不完整的。语义空间中的相似性如“马”和“斑马”的词向量很接近不一定对应视觉上的相似性反之亦然。领域偏移训练时见过的类别如家养动物和测试时未见的类别如野生动物可能分布在不同的数据域中导致映射函数失效。偏见问题模型倾向于将未知类别的样本预测为已知类别中语义最相似的这被称为“枢纽点问题”。在实际操作中要成功应用ZSL精心设计语义表示如使用大规模预训练语言模型获取高质量文本特征和采用鲁棒的映射学习算法如使用生成对抗网络为未见类别合成视觉特征至关重要。3. One-Shot Learning见微知著的“范例学习”如果说ZSL是“开卷考”那One-Shot Learning就是给了你一道极其相似的“例题”。它的目标是通过单个示例让模型学会一个新的类别或任务。这比ZSL多了一点信息但依然是对模型泛化能力的巨大考验。3.1 核心原理度量学习与相似性比较One-Shot Learning通常不依赖显式的语义描述而是依赖于一个学习好的度量空间。在这个空间里相同类别的样本彼此靠近不同类别的样本彼此远离。模型的核心能力不再是分类而是计算相似度。经典的Siamese Network孪生网络就是为此而生。它由两个共享权重的相同子网络组成。训练时输入一对样本可能同类可能不同类网络提取特征后计算二者的距离如欧氏距离、余弦相似度。损失函数鼓励同类样本距离小异类样本距离大。经过大量“样本对”的训练后网络学会了如何抽取能够有效区分不同类别的特征。当遇到一个新类别只有一个支持样本Support Sample时我们将待查询样本Query Sample与这个支持样本输入训练好的Siamese Network计算特征相似度。如果相似度超过某个阈值就判定为同一类。3.2 从One-Shot到Few-Shot原型网络的力量One-Shot是Few-Shot的特例。更通用的Few-Shot Learning如N-way K-shot通常采用“原型网络”或“匹配网络”的范式。以“5-way 1-shot”为例任务是从5个新类别中识别样本每个类别只提供1个示例。原型网络的工作流程非常直观支持集提供5个类别的5个样本每个类别1个。原型计算将每个类别的那个唯一样本通过特征提取网络得到的特征向量就直接作为该类的“原型”。在K1的情况下原型就是该类所有支持样本特征向量的均值。查询与分类对于一个待分类的查询样本同样提取其特征向量然后计算它与5个原型在特征空间中的距离如欧氏距离。Softmax归一化将这些距离取负后输入Softmax函数得到查询样本属于每个类别的概率。距离原型越近概率越高。这个过程就像一个“最近邻分类器”但核心在于特征提取网络是经过精心设计的使得它提取的特征在空间中的分布具有上述“同类相近、异类相远”的性质。这个网络的训练是在一个包含大量类别和样本的“元训练集”上完成的通过大量随机构建的Few-Shot任务来模拟测试时的场景从而学习到通用的、可迁移的特征表示能力。3.3 实操心得与数据构造陷阱在实际搭建原型网络进行Few-Shot图像分类实验时有几个坑很容易踩数据集的划分是重中之重。必须严格区分“元训练集”、“元验证集”和“元测试集”的类别。例如使用MiniImageNet数据集100个类别每类600张图。常见的做法是元训练集64个类别。元验证集16个类别用于调参如学习率、网络深度。元测试集20个类别用于最终评估。绝对不能让测试集的类别出现在训练集中哪怕是一张图片。否则就变成了传统的监督学习失去了Few-Shot的意义。在代码中这通常通过一个EpisodeSampler来实现它每次随机从类别池中抽取N个类别再从每个类别中随机抽K个样本作为支持集外加一批查询样本构成一个训练/测试任务。特征提取网络的选择通常使用在ImageNet等大型数据集上预训练好的卷积神经网络如ResNet-12, ResNet-18作为特征提取器。直接使用其预训练权重进行初始化然后在元训练阶段进行微调比从头训练收敛快得多效果也好得多。我的经验是冻结前面的卷积层只微调最后两个全连接层或原型网络中的映射层是一个不错的起点。4. Few-Shot Learning小样本下的快速适应Few-Shot Learning是One-Shot的扩展提供了少量通常为1-5个最多不超过20个示例。它已经成为评估模型泛化能力和数据效率的标准范式尤其是在大模型时代。4.1 与大语言模型的结合In-Context Learning2020年Brown等人的论文《Language Models are Few-Shot Learners》真正让Few-Shot Learning出圈。他们发现超大规模的语言模型如GPT-3具有惊人的“上下文学习”能力。你不需要微调模型只需要在输入提示Prompt中给出几个任务描述和示例模型就能照葫芦画瓢地完成新任务。例如你想让模型将英文翻译成法文Translate English to French: sea otter loutre de mer peppermint menthe poivrée plush girafe girafe peluche cheese 模型很可能会输出fromage。这里我们提供了3个示例3-shot模型就学会了翻译任务。这本质上是一种基于序列生成的、隐式的Few-Shot Learning。模型利用其从海量文本中学习到的模式匹配和推理能力在给定的上下文Context中快速适应。这种能力的强弱与模型规模、提示工程的质量密切相关。在实践中示例的选择、顺序、格式都显著影响效果。这就是为什么“提示词工程师”成了一个热门岗位。4.2 基于优化的元学习MAML算法除了基于度量的方法如原型网络和基于上下文的方法另一个重要的Few-Shot流派是基于优化的元学习其代表作是模型无关元学习算法。MAML的核心思想是“学习如何快速学习”。它旨在为模型找到一组优秀的初始化参数。这组参数的特点是当面对一个新任务时只需要在这个参数基础上进行少量一步或几步的梯度更新就能在该任务上取得很好的性能。它的训练过程同样是在大量元任务上进行的采样一个任务Ti例如一个5-way 1-shot的分类任务。用当前模型参数θ在任务Ti的支持集上计算损失并进行一步或多步梯度更新得到任务特定的参数θ’i。用更新后的参数θ’i在任务Ti的查询集上计算损失。关键一步这个查询集上的损失反向传播回最初的参数θ。也就是说我们优化的目标是“让模型在经过少量更新后在新任务上的表现更好”。重复这个过程最终得到的初始参数θ就具备了快速适应新任务的能力。MAML的数学推导有点绕但直观理解就是它不是在学一个固定的分类器而是在学一个“适应性超强”的起点。这个起点可能不是一个在任何单一任务上最优的点但它位于一个“平坦”的区域朝任何一个新任务的方向稍微走几步就能到达一个不错的局部最优点。4.3 在现实项目中的权衡该用哪种“Shot”在实际项目中选择ZSL、One-Shot还是Few-Shot取决于你的数据状况、任务需求和计算资源。方法所需新类别示例数核心依赖适用场景挑战Zero-Shot0高质量的语义/属性描述或强大的跨模态对齐模型开放世界识别、创意生成、冷启动推荐语义鸿沟、领域偏移、结果不可控One/Few-Shot (度量学习)1~20学习一个良好的通用特征度量空间工业缺陷检测新缺陷种类少、生物识别、个性化设置对基础特征提取网络要求高同类差异大时效果差Few-Shot (上下文学习)1~20超大规模预训练模型基于大模型的快速应用开发、无需训练的分类/生成任务依赖大模型API提示工程敏感计算成本高Few-Shot (元学习如MAML)1~20大量相关元任务用于训练机器人快速学习新技能、游戏AI适应新关卡训练过程复杂且不稳定容易过拟合到元训练任务我的经验是永远优先考虑数据。如果你能为新类别收集到哪怕几个样本Few-Shot方法通常比Zero-Shot更稳定、效果更好。如果连一个样本都没有但你能清晰定义该类别的属性文本、关系等那么可以尝试Zero-Shot。现在拥有强大In-Context Learning能力的大模型如GPT-4、Claude已经成为处理Few-Shot任务的“瑞士军刀”在很多非视觉任务上直接设计精妙的Prompt可能比训练一个专门的元学习模型更快、更有效。5. 前沿动态与实战中的深层思考从最新的研究趋势和网络热词中我们可以看到Few-Shot Learning正在向更复杂、更实用的场景深化。多模态与少样本的结合是一个明确的方向。例如Target-aware Dual Adversarial Learning and a Multi-scenario Multi-modality Benchmark这类工作关注如何在多模态如图像文本且多场景的少样本设置下进行学习。这要求模型不仅能处理每种模态内的小样本问题还要能有效融合跨模态的信息实现112的效果。在实战中这可能意味着我们需要为图像和文本分别设计特征提取器然后在一个共享的语义空间中对齐它们最后在这个对齐的空间中做Few-Shot度量或生成。从静态到动态环境的少样本学习是另一个挑战。像DRL-VO: Learning to Navigate Through Crowded Dynamic Scenes Using Velocity Obstacles这样的研究将深度强化学习与少样本概念结合让智能体在只有少量示例如几种动态障碍物的运动模式的情况下学会在复杂动态环境中导航。这启示我们Few-Shot Learning不仅关乎感知识别也关乎决策和控制。在机器人项目中我们可能先用Few-Shot方法快速教会机器人识别几种新物体再结合强化学习让机器人学会与这些物体互动。对模型内部机制的探索也在加强。Confused or Not: Decoding Brain Activity and Recognizing Confusion in Reasoning Learning Using EEG虽然研究的是脑电但其思路——通过解码信号来识别学习过程中的“困惑”状态——同样适用于AI模型。我们能否设计一种方法监测模型在进行Few-Shot推理时是否对某个支持样本“感到困惑”或“不确定”这可以帮助我们筛选高质量的支持样本或者动态调整推理策略提升Few-Shot学习的鲁棒性。在工程实践上我最大的体会是Few-Shot Learning的成功一半靠算法一半靠数据工程。即使你采用了最先进的元学习算法如果你的“元训练集”与你的目标领域差异太大效果也会大打折扣。例如用自然图像训练的模型直接用于医学图像的Few-Shot分类效果通常不好。一个实用的技巧是进行领域适配预训练先在大规模的自然图像数据集上预训练然后在目标领域如医学影像的一个较大但类别不相关的数据集上进行二次预训练最后再用Few-Shot学习算法在小样本新类别上微调。这能显著拉近元训练和元测试之间的分布差距。另一个常被忽视的细节是损失函数的选择。对于基于度量的Few-Shot学习对比损失Contrastive Loss、三元组损失Triplet Loss和原型网络使用的交叉熵损失各有优劣。三元组损失对难例挖掘非常敏感实现不好容易导致训练不稳定。我的建议是先从简单的交叉熵损失配合原型网络开始它通常能提供一个稳定的基线。如果想进一步提升可以尝试加入注意力机制让模型在计算查询样本与原型距离时能关注到特征图中更重要的区域而不是所有区域平等对待。