设想你第一天搬进一个新小区,邻居热心地指给你看:“那边穿灰外套的是李家奶奶,抱着猫的是李家妈妈,戴帽子的是李家儿子。”你只看了这三个人,就隐隐约约在心里冒出一个“李家印象”——不是某一张具体的脸,而是一种说不清道不明的眉眼气质。几天后,一个陌生人走进小区,你几乎脱口而出:“他是李家的吧?”为什么你能做到?因为你从几个例子中提炼出了一个抽象的原型,再用“新人和这个原型像不像”来判断归属。 原型网络(Prototypical Network)就是把这种“认亲能力”教给机器的算法。它不需要成千上万张图片,只需要每个类别提供少量样本,就能构建出每个类别的“家族脸谱”——也就是原型;新样本来了,就看它离哪张“家族脸谱”最近,把它归到那一族。这个过程中,模型还需要一个强大的“气质测量仪”(嵌入空间),以及一套专门模拟小样本场景的训练方法(episodic training)。本文会用“认亲识族”这条故事线,带你逐步看懂原型网络的每一个零件。

岗位关联

对 AI 从业者而言,原型网络是理解小样本学习与元学习的入门必修课;掌握它,你就知道在标注数据稀缺的真实项目中,如何用几十张样本也能构建一个可用的分类器。

目录
  1. 可视化演示
  2. 小样本困境
  3. 原型核心思想
  4. 嵌入空间
  5. 支撑查询集
  6. 距离度量
  7. 情节训练
  8. 数学原理
  9. 应用局限
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

展示Prototypical Network核心机制:embedding空间中支持集样本聚合成类别原型、查询样本按距离分类、Episodic Training训练范式,交互式探索小样本学习原理。

本节配有交互动效(进入视口后自动加载,约 3KB)。

Embedding空间与原型构造 支持集样本经编码器映射到embedding空间 每类原型=该类所有支持样本特征的均值向量 c_k = (1/|S_k|) Σ f(x_i) 查询样本按最近原型分类

小样本困境

世界上确实有一种人叫“认亲小能手”。你把他领到陌生家族的聚会上,只给他看两三张照片,他转一圈就能指出谁是那个家族的人。可是传统计算机分类器完全没有这个本事。它更像一位“背菜谱的厨师”:红烧肉必须吃过三百次,才能信誓旦旦地说出“这是红烧肉”;如果只给他尝三口,他立刻就语塞了。这种“必须靠大量重复才能学会”的困境,就是小样本学习的出发点。

在真实工作中,标注数据往往贵得吓人:罕见病影像、新型号零件的缺陷照片、冷门物种的野外抓拍,能凑出几十张干净样本就算万幸。如果沿用传统深度学习的思路,用几十张图训练一个几十层深的神经网络,模型会进入“死记硬背”模式——它把训练样本的细节当作规律,测试时稍微有点变化就认错,这就是过拟合。

小样本学习换了一个思路:不再要求模型“从很多样本中总结规律”,而是要求模型“从任务结构中获得能力”。就像“认亲小能手”并不是背下了每个家族的全部成员照片,而是通过长期锻炼,学会了如何快速抓住家族气质。这种“学习如何学习”的框架,就是元学习。原型网络正是元学习家族里最直观、最优雅的一员。

把“背菜谱”换成“练味觉”,把“记脸”换成“抓气质”,你就能理解:原型网络要学的不是某个特定类别的长相,而是怎样从少量信息里提炼出可用的归类依据。

原型核心思想

假设你只见过李家三个人:奶奶、妈妈、儿子。三个人五官各不相同,但眉眼的间距、颧骨的轮廓、笑起来的神态,总有一种说不清的共同感。你脑子里并不会存三张照片,而是会不自觉地把他们“叠”成一个平均印象——这就是原型。

原型网络的核心思想正是如此:每个类别,用它的支持样本在嵌入空间中的平均值来表示,这个平均值就叫“原型”(prototype)。分类时,查询样本不再和每一个支持样本逐一比较,而是只和每个类别的原型比较,离哪个原型最近,就属于哪个类。这样做最大的好处是:分类过程不需要任何额外的训练,也没有可调参数,直接靠距离计算就能完成。

用公式表示,第 \(k\) 类的原型 \(\mathbf{c}_k\) 就是该类所有支持样本的嵌入向量的均值:

原型是抽象的“家族脸谱”,有了它,我们不需要把每个家族成员都记在脑中,只需要记住一张合成的中心画像。这既节省了内存,也让分类规则变得极其简单、可解释。

ck=1∣Sk∣∑(xi,yi)∈Skfϕ(xi)\displaystyle \mathbf{c}_k = \frac{1}{|S_k|} \sum_{(\mathbf{x}_i, y_i) \in S_k} f_{\phi}(\mathbf{x}_i)
原型的本质:支持样本的“气质平均值”。它不是任何一个真实样本,而是一个抽象的中心点,代表这个家族在特征空间里的典型位置。
  1. 支持集 \(S_k\)第 \(k\) 类的所有支持样本组成的集合,它们是我们“见过的那几位家族成员”。
    Sk={(xi,yi)∣yi=k}\displaystyle S_k = \{ (\mathbf{x}_i, y_i) \mid y_i = k \}
  2. 嵌入函数 \(f_{\phi}\)把原始图片变成特征向量的神经网络,相当于“面部尺码测量仪”。
    fϕ:X→Rd\displaystyle f_{\phi}: \mathcal{X} \to \mathbb{R}^{d}
  3. 平均操作把该类的所有特征向量逐维相加再除以个数,得到中心点。
    ck=1∣Sk∣∑i=1∣Sk∣fϕ(xi)\displaystyle \mathbf{c}_k = \frac{1}{|S_k|} \sum_{i=1}^{|S_k|} f_{\phi}(\mathbf{x}_i)

嵌入空间

要给家族成员“量气质”,第一步是定义一套尺子。你不能直接用照片的像素比大小,因为像素是杂乱的颜色块,和“眉眼气质”没有直接关系。原型网络的做法是:训练一个神经网络作为嵌入函数,把每个样本映射成一个固定长度的特征向量,所有特征向量所在的高维空间就叫嵌入空间。

可以这样想象:在“气质空间”里,李家的三个成员虽然坐标不同,但因为共享基因,它们的坐标点会落在一个相近的区域内;王家的人则聚在另一片区域。训练得好的嵌入空间,会让同类样本像磁铁一样吸附成一簇,不同类的簇之间保持距离。这正是“语义聚类”的含义——空间的几何距离,反映了样本之间的语义相似度。

在原型网络的实现中,嵌入函数通常用卷积神经网络(CNN)承担。图片经过多层卷积和池化,被压缩成紧凑的特征表示。在小样本场景里,这个嵌入网络往往先在大型数据集上预训练,再通过情节训练微调。它学到的特征具有“空间迁移”能力:在新类别上即使只见过几个样本,也能有效区分。

可以说,嵌入空间是原型网络的“风水宝地”:家族气质能不能被准确刻画,完全取决于这张特征地图画得好不好。尺子准了,后面所有的距离计算才有意义。

支撑查询集

现在我们来设计一场“认亲考试”。考卷需要两部分材料:一部分是参考资料,告诉你李家、王家、赵家各有哪几位代表成员;另一部分是考题,让你判断一个陌生面孔属于哪一家。在原型网络的术语里,参考资料叫支撑集(support set),考题叫查询集(query set)。

支撑集的构造规则是:从若干个类别中,每类抽取少量带标签样本。这些样本专门用来计算原型。查询集则从同样的类别中抽取另一批样本,它们不参与原型计算,只用来检验分类效果并计算损失。这种把数据按“支撑/查询”划分的方式,就是任务划分。

任务规模通常用 \(N\)-way \(K\)-shot 来描述:\(N\) 表示任务中有几个类别,\(K\) 表示每个类别提供几个支撑样本。比如 5-way 3-shot,就是每次考试有 5 个家族、每家给你看 3 位代表成员,总共 15 个参考样本。查询样本的数量一般也是固定的,比如每类 3 个。

把支撑集想象成“家族代表合影”,查询集就是“需辨认的陌生人”:考试时,模型先通过合影算出每家的原型,再用距离判断每个陌生人该回哪个家。支撑集和查询集的任务结构必须一致,这样模型在训练时练什么,考试时就考什么。

距离度量

有了家族脸谱,接下来需要一把好用的“相似度尺子”。最自然的做法是:把陌生人和每家的原型都放到嵌入空间里,然后量一量它们之间的直线距离。距离越小,说明这个陌生人越像这一家的人。这把尺子就是欧氏距离。

给定查询样本的特征向量 \(f_{\phi}(\mathbf{x})\) 和原型 \(\mathbf{c}_k\),欧氏距离的计算公式为:

为什么原型网络偏爱欧氏距离而不是余弦相似度?关键原因有两点:第一,欧氏距离在嵌入空间中对应着“到中心的直线长度”,几何含义直观稳定;第二,当特征向量做过归一化后,欧氏距离和余弦相似度其实是单调相关的——距离小等价于方向更接近,但欧氏距离的计算更简单,梯度的数值也更平稳。所谓“空间校准”,就是让距离数值真正反映语义差异。

在分类时,模型会计算查询样本到所有原型的距离,然后选择最近的那个原型作为预测类别。这个规则简洁、无参数,还非常便于调试——如果预测错了,你可以看到它究竟是被哪个家族“拐走”的。

选对尺子,认亲才准。一把经过校准的欧氏距离尺子,能让原型网络在嵌入空间里画出清晰的决策边界。

d(fϕ(x),ck)=∑j=1d(fϕ(x)j−ck,j)2\displaystyle d(f_{\phi}(\mathbf{x}), \mathbf{c}_k) = \sqrt{\sum_{j=1}^{d} \left( f_{\phi}(\mathbf{x})_j - \mathbf{c}_{k,j} \right)^2}

情节训练

人类认亲能手不是天生的。他大概经历过无数次“遇到陌生家族→观察几个成员→下次认出他们”的循环。原型网络也采用类似的训练方式,这就是情节训练(episodic training)。普通深度学习把数据分成一个个 batch 来优化分类器;原型网络则把每一次迭代变成一个完整的“小型认亲任务”,行业黑话叫 episode。

每一个 episode 的流程是:先从训练集中随机抽取 \(N\) 个类别,再从每个类别中随机抽取支撑样本和查询样本,搭建成一个 \(N\)-way \(K\)-shot 的小任务。模型在这个小任务上计算原型、预测查询样本、得到损失,然后反向传播更新嵌入网络。下一次迭代,再重新抽取一批类别,重复同样的流程。

这种训练范式的高明之处在于:训练时经历的“考题结构”和测试时完全一致。模型从来不会面对“几十万张图同时分类”的宏大任务,它每次只需要应对一个 5-way 3-shot 的小关卡。反复练习之后,嵌入网络学会了快速适应新类别的通用能力,而不是死记某几个类的特征。这种能力就是元学习意义上的“快速适应”与“泛化能力”。

如果把传统训练比作“一次背完整本家族图鉴”,情节训练就是“每天换一批临时家庭做角色扮演”。练多了,模型自然成了认亲老手。

数学原理

现在我们把“认亲比赛”的完整计分流程写成数学公式。整个过程分为三步:先求每家的原型,再算陌生人和每个原型的距离,最后把距离转成概率并计算损失。

第一步已经介绍过原型公式。第二步,把距离转化为“属于某个家族”的概率,使用的是 softmax:距离越近,概率越大。设查询样本为 \(\mathbf{x}\),它属于第 \(k\) 类的概率为:

第三步,训练目标是让正确类别的概率尽可能大,因此定义损失函数为负对数概率:

公式是裁判的手账,每一步都有明确含义:相似度决定相信谁,softmax 把相信程度规范化,交叉熵告诉我们哪里做得不够好,反向传播则把“不够好”翻译成网络参数的修正方向。

pϕ(y=k∣x)=exp⁡(−d(fϕ(x),ck))∑k′exp⁡(−d(fϕ(x),ck′))\displaystyle p_{\phi}(y = k \mid \mathbf{x}) = \frac{\exp\left(-d(f_{\phi}(\mathbf{x}), \mathbf{c}_k)\right)}{\sum_{k'} \exp\left(-d(f_{\phi}(\mathbf{x}), \mathbf{c}_{k'})\right)}
L(ϕ)=−log⁡pϕ(y=k∣x)\displaystyle \mathcal{L}(\phi) = -\log p_{\phi}\left(y = k \mid \mathbf{x}\right)
两个公式合起来看,就是一个“距离越近越自信”的打分器。模型最希望看到的结果是:查询样本距离正确原型的距离很小,而距离其他原型的距离很大。
  1. 距离 \(d\)衡量查询样本与原型之间的欧氏距离,距离越大,\(\exp(-d)\) 越小,说明越不像。
    d(fϕ(x),ck)=∥fϕ(x)−ck∥2\displaystyle d(f_{\phi}(\mathbf{x}), \mathbf{c}_k) = \left\| f_{\phi}(\mathbf{x}) - \mathbf{c}_k \right\|_2
  2. 指数归一化(softmax)把每个原型的距离分数 \(\exp(-d)\) 除以所有分数的总和,得到和为 1 的概率分布。
    exp⁡(−dk)∑k′exp⁡(−dk′)\displaystyle \frac{\exp(-d_k)}{\sum_{k'} \exp(-d_{k'})}
  3. 负对数概率损失取正确类别的概率的对数并加负号,概率越接近 1,损失越小;概率越小,损失越大。
    L(ϕ)=−log⁡pϕ(y=k∣x)\displaystyle \mathcal{L}(\phi) = -\log p_{\phi}(y = k \mid \mathbf{x})
  4. 反向传播对损失函数关于嵌入网络参数 \(\phi\) 求梯度,用梯度下降更新网络,让空间逐渐更适合原型分类。
    ϕ←ϕ−α∇ϕL(ϕ)\displaystyle \phi \leftarrow \phi - \alpha \nabla_{\phi} \mathcal{L}(\phi)

应用局限

再厉害的认亲高手也有盲区:遇到同卵双胞胎、童年照片和成年照片差距巨大、或者只给一张磨皮过度的自拍时,照样会认错。原型网络同样有它的边界。它的核心假设是“每个类别的特征分布可以用一个均值点来代表”——当类内变化太大,或者支撑样本选得不巧时,平均值可能落在两拨趋势的中间,反而谁都不像,这就是原型偏差。

在应用侧,原型网络最适合那些“类别多、每类样本少”的识别任务。图像分类是它的主战场:比如区分不同动物的物种、识别不同人的笔迹风格;医学影像中,医生可能只有几十张某种罕见病变的 CT 图像,原型网络可以快速为它建立分型器;工业质检中,新生产线上某类缺陷刚出现,还没来得及攒大量照片,原型网络也能顶上。医疗影像和工业缺陷场景的核心共同点,就是标注极度稀缺、类别分布不均衡。

要缓解原型偏差,一方面可以尽量选择代表性强的支撑样本,避免极端照片;另一方面可以改进原型构造方式,比如用加权均值或子类原型来替代简单平均。说到底,原型网络给我们的启示是:小样本分类不一定要复杂的技巧,“找准每个家族的脸谱中心,然后量距离”这种朴素方法,往往比想象中更强大。

AI 应用场景

罕见病影像辅助分型

阶段:小样本分类模型训练与部署

解决的问题:罕见病亚型的 CT/病理影像数据极少,传统模型需要数千例标注才能训练,而临床上能获取的阳性病例往往只有几十例。原型网络利用支撑集构建每个疾病亚型的原型,用少量影像就能完成分型判断,辅助医生快速筛查。

具体案例:某三甲医院收集到 3 种罕见肺部间质病变的 CT 影像,每种仅 20~40 例。工程师把每种疾病视为一个“家族”,用原型网络以 5-way 3-shot 的方式训练嵌入网络,最终在查询集上达到 82% 的分类准确率,显著优于直接用小型 CNN 训练的 61%。

工业缺陷在线检测

阶段:模型快速迁移与冷启动

解决的问题:工厂换产线后,新产品的外观缺陷(划痕、脏污、压伤)刚出现时仅有少量样品,难以训练传统检测模型。原型网络让质检系统“看几个新缺陷样本”就能更新分类器,无需重新训练整个模型。

具体案例:手机壳生产线上,一种新型阳极氧化色斑缺陷在首周只积累了十几个样本。工程师用原型网络的嵌入网络对新类别的支持集求解原型,立刻将其加入质检分类器,当天就拦截了 90% 以上的该类缺陷流出。

野生动物个体识别

阶段:增量学习与新类别注册

解决的问题:野生动物保护中,研究人员拍到某个新个体往往只有几张照片,且今后可能不再出现。传统方法需要为每个新个体重新训练分类头,而原型网络只需把新个体的支持样本投影到嵌入空间、求均值加入原型库即可。

具体案例:某自然保护区用原型网络识别川金丝猴个体,每次新拍摄到一只猴子,录入 3 张照片就能完成“注册”。巡护员在野外拍到的猴子照片,系统能在秒级给出身份匹配结果。

Python 演示

python66 行
import torchimport torch.nn as nn torch.manual_seed(0)  def make_data(n_classes=20, dim=4, pts_per_class=100):    X, y = [], []    for c in range(n_classes):        mu = torch.randn(dim) * 2        X.append(torch.randn(pts_per_class, dim) + mu)        y.append(torch.full((pts_per_class,), c, dtype=torch.long))    return torch.cat(X), torch.cat(y)  X, Y = make_data()  class Embedder(nn.Module):    def __init__(self):        super(Embedder, self).__init__()        self.net = nn.Sequential(            nn.Linear(4, 32), nn.ReLU(),            nn.Linear(32, 16), nn.ReLU(),            nn.Linear(16, 4)        )     def forward(self, x):        return self.net(x)  model = Embedder()opt = torch.optim.Adam(model.parameters(), lr=1e-2)  def sample_task(n_way=5, k_shot=3, k_query=3):    classes = torch.randperm(Y.max().item() + 1)[:n_way]    xs, ys, xq, yq = [], [], [], []    for i, c in enumerate(classes.tolist()):        idx = (Y == c).nonzero(as_tuple=True)[0]        perm = idx[torch.randperm(len(idx))]        xs.append(perm[:k_shot])        ys.extend([i] * k_shot)        xq.append(perm[k_shot:k_shot + k_query])        yq.extend([i] * k_query)    return (X[torch.cat(xs)], torch.tensor(ys),            X[torch.cat(xq)], torch.tensor(yq))  def protos(z, y, n_way):    return torch.stack([z[y == i].mean(0) for i in range(n_way)])  for step in range(200):    xs, ys, xq, yq = sample_task()    zs = model(xs)    zq = model(xq)    p = protos(zs, ys, 5)    logits = -((zq[:, None] - p[None]) ** 2).sum(-1)    loss = nn.functional.cross_entropy(logits, yq)    opt.zero_grad()    loss.backward()    opt.step()    if step % 40 == 0:        acc = (logits.argmax(1) == yq).float().mean().item()        print("step %d loss=%.3f acc=%.2f" % (step, loss.item(), acc))
目的:用合成数据演示原型网络的完整训练闭环——每个 episode 采样 5 个类、每类 3 个支撑样本和 3 个查询样本,前向计算原型与距离,再用交叉熵反向传播更新嵌入网络。
  1. def sample_task(...)生成一个 5-way 3-shot 的小任务,对应“认亲考试的出题过程”。
  2. xs.append(perm[:k_shot])每类取前 3 个样本作为支撑集,用来“看家族代表”。
  3. xq.append(perm[k_shot:k_shot + k_query])紧接着取 3 个样本作为查询集,用来“考认人能力”。
  4. model(xs)支撑集和查询集都通过同一个嵌入网络,得到特征向量。
  5. protos(zs, ys, 5)对每一类的支撑特征求均值,得到 5 个原型,即“家族脸谱”。
  6. logits = -((zq[:, None] - p[None]) ** 2).sum(-1)计算查询样本到 5 个原型的负欧氏距离,距离越近分数越高。
  7. nn.functional.cross_entropy(logits, yq)用交叉熵计算损失,激励正确原型给出的分数最高。
  8. loss.backward()反向传播更新嵌入网络,让空间逐渐“同类聚拢、异类分离”。

常见误区

误区我以为原型就是支持集里看起来最典型的那张图,比如一家人里“长得最像家族传人”的那位,模型会把它存下来当代表。

正解原型是支持样本的特征向量取平均后得到的合成点,它不是任何一张真实的图。就像“家族气质”不是某个人的脸,而是把全家人叠影后浮现的共同轮廓。均值操作让原型比任何单个样本都更抗噪声,但也让它变成了一个看不见摸不着的抽象向量。

为何常见:因为“原型”这个中文词容易被理解成“典型实例”,再加上很多可视化会用一个点代表原型,初学者很容易误以为它就是选出来的某张图。

误区原型网络分类时只是算距离,没有可训练的分类层,所以我觉得这个模型根本不需要训练,直接加载就能小样本分类。

正解原型计算确实没有参数,但嵌入函数 \(f_\phi\) 是需要大规模训练的。嵌入空间好不好,直接决定原型有没有区分度。如果空间乱成一团,算出的原型毫无意义。原型网络训练的不是分类器,而是“特征地图”本身。

为何常见:因为论文里总是强调“无参数分类”“最近邻规则”,让人误以为整个模型都免训练,忽略了背后的网络仍然要靠梯度下降打磨。

误区如果 1-shot 准确率低,那就把 K 从 1 加到 10,样本多了原型一定更准,模型效果肯定一直提升。

正解支撑样本增多确实能让均值更稳定,但收益边际递减,而且支撑样本的质量更重要。如果支撑样本没覆盖类内的真实变化,比如李家的代表全是男性,均值就会偏向男性特征,查询集中的女性成员反而认不出来。样本数量不能弥补采样偏差。

为何常见:直觉上“数据越多越好”是深度学习的普遍经验,但小样本场景下“怎么选样本”比“有多少样本”更关键。

误区我觉得元学习就是先在大数据集上预训练一个网络,再在新的小数据集上微调一下,原型网络也是这样。

正解预训练加微调是迁移学习,它一般不改变任务结构;而元学习要求训练阶段和测试阶段用完全一致的小样本任务结构。原型网络训练时每个 episode 都刻意构造少量样本的支撑集和查询集,让模型专门练习“如何在少样本条件下快速归纳”,这才是元学习的本质。

为何常见:因为两者都涉及“先学通用特征再用到新任务”,表面流程看起来相似,但任务设计和优化目标差别很大。

面试题

Q1. 原型网络中一个类的“原型”是指什么?

单选题 · easy

  • A.支持样本特征向量的平均← 正确答案
  • B.支持集中最典型的图片
  • C.查询样本的均值结果
  • D.嵌入网络的最后一层权重

答案:A。原型是所有支持样本经过嵌入函数后取平均得到的合成向量,不是具体的某张图,也不是查询样本的产物。这个平均向量代表类别的“中心气质”。

Q2. 5-way 1-shot 任务中共有多少个支撑参照样本?

单选题 · easy

  • A.1 个参照样本
  • B.5 个参照样本← 正确答案
  • C.6 个参照样本
  • D.15 个参考样本

答案:B。5-way 表示有 5 个类别,1-shot 表示每个类别提供 1 个支撑样本,因此支撑集总共有 \(5 \times 1 = 5\) 个样本。

Q3. 原型网络判断查询样本属于哪一类,主要依据是什么?

单选题 · mid

  • A.查询样本到各类原型的远近← 正确答案
  • B.查询样本的字节数大小
  • C.各支撑样本的排列顺序
  • D.原始图像的平均像素值

答案:A。原型网络把查询样本嵌入到特征空间,计算它到每个原型向量的距离,距离最近的那一类就是预测结果。顺序、字节数和像素均值都不作为分类依据。

Q4. 下列哪些说法符合原型网络的训练方式?

多选题 · mid

  • A.采用情节式小任务训练← 正确答案
  • B.使用交叉熵作为损失函数← 正确答案
  • C.每次只优化最后的分类层
  • D.训练时对原型做随机初始化

答案:AB。原型网络以 episode 为单位采样小任务,并用交叉熵损失驱动嵌入网络更新。原型不是随机初始化的可学习参数,而是由支持样本均值计算出来的;网络更新的是整个嵌入函数,而不是某个分类层。

Q5. 元学习与传统迁移学习的核心区别是什么?

单选题 · mid

  • A.元学习构造与测试同构的小任务← 正确答案
  • B.元学习不需要任何神经网络
  • C.迁移学习只能处理大数据集
  • D.迁移学习不使用梯度下降法

答案:A。元学习在训练阶段就模拟测试阶段的小样本任务结构,让模型练出“快速适应新任务”的能力;迁移学习通常只是把预训练特征搬到新任务上,训练时的任务结构并不刻意与测试对齐。

Q6. 原型网络为何常选用欧氏距离作为距离度量?

单选题 · mid

  • A.在嵌入空间中距离含义直观稳定← 正确答案
  • B.欧氏距离不需要嵌入函数
  • C.欧氏距离结果永远正确
  • D.余弦相似度不可求导

答案:A。欧氏距离对应特征空间中的直线长度,直接体现“离原型有多远”,几何意义清晰,梯度也稳定。它仍然需要嵌入函数,也不能保证永远正确;余弦相似度本身可导,只是受嵌入向量长度影响较大。

Q7. 下列哪些情况可能导致原型网络分类失败?

多选题 · hard

  • A.支撑样本对类内分布代表性差← 正确答案
  • B.嵌入空间没有把同类样本聚拢← 正确答案
  • C.查询样本的数量过多
  • D.使用了均值而不是最大值

答案:AB。如果支撑样本不能代表类内真实变化,原型会被带偏;如果嵌入空间没训练好,同类样本散落各处,均值无法描述类别。查询样本数量不是分类失败的原因,使用均值而不是最大值正是原型网络的标准设计,不是缺陷。

Q8. 支撑集在原型网络中的主要作用是什么?

单选题 · mid

  • A.用来计算各类的原型中心← 正确答案
  • B.用于计算损失的原始标签
  • C.用来初始化参考图像
  • D.决定嵌入空间的维度

答案:A。支撑集样本经过嵌入网络后求平均,得到每个类别的原型中心。查询集的标签才用于计算损失,参考图像无需初始化,嵌入空间的维度由网络结构决定,与支撑集无关。

Q9. "episodic training"可以简单理解为?

单选题 · easy

  • A.每个元批次模拟一次小分类任务← 正确答案
  • B.把一个长视频切成小片段
  • C.每次训练只让网络学习一个类
  • D.每批数据只包含查询样本

答案:A。episodic training 中每个训练批次都被构造成一个完整的小样本分类任务,包含支撑集和查询集,并且任务结构(N-way K-shot)与测试时保持一致。它不是视频切片,也不是单类学习或纯查询样本。

Q10. 当嵌入空间训练良好时,原型网络会表现出哪些特征?

多选题 · hard

  • A.同类样本聚集得更紧凑← 正确答案
  • B.不同类的原型中心远离← 正确答案
  • C.查询样本贴近所属类原型← 正确答案
  • D.所有特征向量完全相同

答案:ABC。良好的嵌入空间会让同类样本内聚、不同类原型彼此拉开间距,查询样本也因此落在正确原型附近。所有特征向量完全相同意味着空间完全坍缩,是训练失败的表现,而不是理想状态。