什么是 Few-shot Learning?Zero-shot、One-shot、Few-shot 有什么区别?
什么是 Few-shot Learning?Zero-shot、One-shot、Few-shot 有什么区别?
这道题考的是 Few-shot Learning 的核心概念,以及它和 Zero-shot、One-shot 之间的本质区别。面试官想看你能不能把"用很少样本训练模型"这件事讲清楚。
我从三个角度来讲:先说 Few-shot 在解决什么问题,再说三种学习范式的区别,最后聊一下核心原理。
Few-shot Learning 在解决什么
先问你个问题:你见过小孩子怎么认猫狗吗?给他看两三张猫的照片,再看两三张狗的照片,他就能分清了。简单吧?
但这事对传统深度学习来说,贼难。想训一个能认猫狗的模型,你得准备几万甚至几十万张图片。为什么?因为模型本质上是在"死记硬背",它没见过这么多样本就学不会。
Few-shot Learning 就是在解决这个矛盾。它的目标是:让模型用极少的样本就能学会识别新类别。
少到什么程度?通常说的是 1 到 10 个样本。这叫"少样本学习"。
场景很好理解:医疗影像里罕见病样本少,工业检测里缺陷品样本少,新产品上线时数据少。这些情况下 Few-shot 就很有用。
Zero-shot、One-shot、Few-shot 三者的区别
这块是面试必问,你得能说清楚。
Zero-shot Learning:训练阶段一个目标类别的样本都不给。比如模型从来没学过认熊猫,但你知道"熊猫是黑白两色的熊",模型就能猜出来。它靠的是任务描述或者语义信息来推理。
类比一下:考试给你一道完全没见过的题型,但告诉你"这道题考察的是哪种数学思想",你结合已有知识能答出来。
One-shot Learning:每个类别给你 1 个样本。比如认猫,给你 1 张猫的照片,然后给你一堆其他动物的照片,你得判断哪个是猫。
这个难度比 Zero-shot 低一点,因为至少有 1 个参考。
Few-shot Learning:每个类别给少量样本,通常少于 10 个。给 5 张猫的照片、5 张狗的照片,让你去认。
这三种范式本质上是递进关系:Zero-shot → One-shot → Few-shot。样本从 0 到 1 再到 N,难度递减,准确性递增。
Few-shot 的核心原理——原型网络
原理这块,面试里最常考的是原型网络(Prototypical Networks),你得能说清楚。
它的思路很简单:
第一步,把样本变成向量。 不管是图片还是文本,都通过一个编码器映射到一个向量空间里。每个样本在空间里就是一个点。
第二步,求每个类别的原型。 把同一类别的样本向量取个平均,这个平均值就是这类样本的"原型"。你可以理解成一个"中心点"或者"平均脸"。
第三步,分类靠最近邻。 来一个新样本,把它也映射成向量,然后计算它和各个类别原型的距离。离哪个近,就归为哪类。
举个例子:你有 5 张猫的照片、5 张狗的照片。把它们都变成向量,各自取平均得到两个原型——猫的原型和狗的原型。新来一张图片,也变成向量,计算它到猫原型和狗原型的距离,哪个近就判给哪个。
原理不复杂,但思想很巧妙:不直接记每个样本,而是记每个类别的"代表"。这样新样本来了,直接比就行了。
其他经典方法还有 MAML(模型无关元学习)、匹配网络(Matching Networks)。核心思想都是让模型学会"学习"本身,而不是死记硬背。这也是 Few-shot 和元学习(Meta-Learning)关系密切的原因。
面试怎么答
基础版(能过的回答):
Few-shot Learning 是指用极少量样本让模型学会识别新类别的方法。传统的 Zero-shot 完全不需要训练样本,靠语义描述推理;One-shot 每类给 1 个样本;Few-shot 每类给少量样本,通常少于 10 个。核心思想是把样本映射到向量空间,计算新样本与各类原型的距离来做分类。
加分版(让面试官眼前一亮):
Few-shot Learning 本质上是元学习的一种应用,目标不是让模型记住具体样本,而是让模型学会"学习"这件事本身。Zero-shot 靠语义信息迁移,One-shot 和 Few-shot 则通过支撑集样本进行快速适应。典型方法包括原型网络、MAML、匹配网络等。原型网络的核心是把同类样本映射到向量空间的中心点,用最近邻分类。这个思想在医疗影像、罕见病检测、零样本物体识别等场景都有落地。
一句话总结
Few-shot Learning 就是让模型用几个样本就能认新东西,Zero-shot/One-shot/Few-shot 的区别就在于给不给样本、给几个样本。
