想象你是一名刚入行的年轻侦探。案发现场只留下三张模糊的照片,你需要在街对面的人群中锁定嫌疑人。你当然不会先背下全城所有人的长相,再回去慢慢比对——你只会立刻举起照片,在人群里一张张地看:左边那个人卷发,很像照片一;穿蓝外套的那个,五官轮廓接近照片二;照片三里的帽子好像和路口那个小伙子戴的是同款……你一边比对,一边在心里给每个路人打分,最后把“最像”的几个人请回来进一步确认。 Matching Networks(匹配网络)干的就是这件事。它不费力训练一个“认识所有类别”的全局分类器,而是现学现比:拿到几个标好类别的支持样本(support set),就像侦探手里的模糊照片;遇到一个待分类的查询样本(query sample),它逐个计算查询样本与每个支持样本的相似度,再用注意力机制按相似度加权投票,决定查询样本属于哪一类。整个过程不需要微调,真正的“看一张图就能分类”。 这正是元学习(Meta-Learning)与少样本学习(Few-shot Learning)领域的经典之作。它的本质,是用注意力机制在支持集上做加权匹配。接下来,我们就顺着侦探破案的思路,把 Matching Networks 的每个零件拆开来看。

岗位关联

学懂 Matching Networks,你就掌握了少样本学习的核心套路:如何用注意力机制在极少量样本上做出可靠分类。这是从“见过再多努力学”转向“经验越攒越会学”的关键一步。

目录
  1. 可视化演示
  2. 小样本困局
  3. 注意力匹配
  4. 双塔嵌入
  5. 全上下文
  6. 训练策略
  7. 对比原型
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示Matching Networks核心机制:注意力匹配分类(支持集→嵌入→注意力加权→Softmax)、全上下文嵌入FCE(双向LSTM增强嵌入)、与原型/关系网络方法对比。

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

注意力匹配机制 支持集样本→嵌入向量→注意力加权 查询样本与支持集计算相似度→Softmax分类 P(y|x,S) = Σ a(x,x_i) · y_i 注意力匹配无需微调,即看即分

小样本困局

侦探出警时,手上的照片往往只有三五张,现场却可能有几百号人。人脸的类内差异巨大:一个嫌疑人在不同光线、不同角度下看起来很不一样。如果侦探非要等档案馆送来“每个路人各一百张照片”再破案,案早就凉了。小样本困局正是如此:类别很多,但每个类别的标注样本少得可怜。传统的深度分类器习惯于“喂几万张猫图才认得猫”,面对每类只有 1~5 张图的小样本任务,训练集太小,模型很快就陷入过拟合——把训练样本背得滚瓜烂熟,换一张稍微不一样的图就认错。

少样本学习(Few-shot Learning)要解决的就是这种“样本少、类别多、还得快”的难题。在标准的任务设定中,我们事先有一个带标签的训练集,里面有很多类别;测试时,新类别出现,每个新类别只给 K 个标记好的样本(K 通常为 1 或 5),叫作 K-shot。模型要在这些极少量样本上把新类别学明白。为了评估,通常还要附加 N 个类别的约束,构成 N-way K-shot 任务:N 个新类别、每类 K 个样本。

我们用公式定义训练集的样子:

侦探解决问题的关键,不在于手里照片够多,而在于比对方法足够聪明。Matching Networks 的思路是:不训练一个“认识全城的人”的模型,而是训练一个“会拿着照片比对”的模型。这个模型对一个陌生类别的分类能力,来自它在训练中形成的“怎么在少量样本间找相似”的经验——这正是元学习思想的核心:学会如何学习。

Dtrain={(xi,yi)}i=1N,N 远小于模型可容纳的参数\displaystyle \mathcal{D}_{train} = \{(x_i, y_i)\}_{i=1}^{N}, \quad N \text{ 远小于模型可容纳的参数}
这个式子用集合的语言说明了小样本训练的困境:数据量 N 很小,小到模型根本无法通过常规训练掌握足够稳定的规律。
  1. 训练集符号$\mathcal{D}_{train}$ 表示训练时能看到的全部数据,由若干个样本-标签对组成
    Dtrain={(xi,yi)}i=1N\displaystyle \mathcal{D}_{train} = \{(x_i, y_i)\}_{i=1}^{N}
  2. 样本与标签$x_i$ 是第 $i$ 个样本(比如一张图片),$y_i$ 是对应的类别标签(比如“猫”或“狗”)
    (xi,yi)\displaystyle (x_i, y_i)
  3. 数量约束$N$ 代表样本总数,它小于模型参数量级,说明数据严重不足
    N≪参数量\displaystyle N \ll \text{参数量}

注意力匹配

侦探站在路口,手里举着三张照片。他先看左边那个戴帽子的路人,咦,这顶帽子和照片C里那顶很像,他在心里默默给这位路人记上一票;再看右边那个卷发的姑娘,发型和照片A有七分神似,也记上一票。每比对一张照片,侦探都会根据相似程度决定这票的分量——越像,票越重。最终,路人被归到获得票数总和最大的那个类别。注意力匹配就是这套“边比对边投票”的数学化。

形式化地,我们有一个支持集 $S = \{(x_i, y_i)\}_{i=1}^{k}$,包含 k 个已标记样本;一个待分类的查询样本 $\hat{x}$。Matching Networks 预测 $\hat{x}$ 的标签 $\hat{y}$ 时,不再使用任何全局分类器,而是直接对支持集中的标签做加权求和:

这个公式的核心组件是权重 $a$,也就是侦探手上的那杆“相似度秤”。在 Matching Networks 中,$a(\hat{x}, x_i)$ 由一个注意力函数计算得到。下一节我们就来看看这杆秤是怎么造的。

p(y^∣x^,S)=∑i=1ka(x^,xi) yi\displaystyle p(\hat{y} \mid \hat{x}, S) = \sum_{i=1}^{k} a(\hat{x}, x_i) \, y_i
这个公式是说:查询样本的预测类别概率,等于支持集所有样本标签的加权平均。权重 $a(\hat{x}, x_i)$ 由查询样本与每个支持样本的相似度决定,越相似的样本权重越大。
  1. 条件概率$p(\hat{y} \mid \hat{x}, S)$ 表示在给定待分类样本 $\hat{x}$ 和参考支持集 $S$ 时,预测标签为 $\hat{y}$ 的概率
    p(y^∣x^,S)\displaystyle p(\hat{y} \mid \hat{x}, S)
  2. 求和符号$\sum_{i=1}^{k}$ 表示把支持集中第 $1$ 个到第 $k$ 个样本的贡献逐一累加起来,k 是支持集的样本总数
    ∑i=1k\displaystyle \sum_{i=1}^{k}
  3. 注意力权重$a(\hat{x}, x_i)$ 是一个介于 0 到 1 之间的权重,表示“查询样本 $\hat{x}$ 有多像支持样本 $x_i$”。所有支持样本的权重之和恰好为 1
    a(x^,xi)\displaystyle a(\hat{x}, x_i)
  4. 标签累加$y_i$ 是支持样本的独热编码标签,例如“猫=1 狗=0”,加权重叠后得到的是对每个类别的支持度分数
    a(x^,xi) yi\displaystyle a(\hat{x}, x_i) \, y_i

双塔嵌入

照片和真人是两个世界的东西:照片是像素,真人是现场的视觉信息,没法直接比较。侦探的做法,是在脑海里把两者都“翻译”成一组可比的线索——发型、脸型、衣着颜色、步态——然后逐条对照。在 Matching Networks 中,也有两个“翻译官”,称为嵌入函数:一个负责翻译查询样本,记作 $f$;一个负责翻译支持样本,记作 $g$。两个函数把各自的输入映射到同一个特征空间里。特征空间就像侦探脑海里的“线索表”,每一列代表某个特征维度,这样一来,照片和真人终于能在同一张表上比较。

既然有了统一的特征表示,就可以计算相似度了。Matching Networks 采用余弦相似度来衡量两个特征向量的相似程度——它只关心方向的夹角,而不受向量长度影响,这避免了样本整体明暗差异带来的干扰:

得到了相似度分数之后,还需要把它变成概率形式的权重。Matching Networks 用 softmax 完成这一步:相似度越高,指数放大越明显,最终经归一化后变成“票数”。两个嵌入函数 $f$ 和 $g$ 的参数,连同注意力计算一起,通过训练端到端地学习出来——也就是说,“翻译官”的技能不是人肉设计的,而是通过大量小任务练出来的。

c(f(x^),g(xi))=f(x^)⋅g(xi)∥f(x^)∥  ∥g(xi)∥\displaystyle c\bigl(f(\hat{x}), g(x_i)\bigr) = \frac{f(\hat{x}) \cdot g(x_i)}{\|f(\hat{x})\| \; \|g(x_i)\|}
余弦相似度把两个向量夹角的余弦值当作相似度分数:夹角越小、方向越一致,分数越接近 1。就像侦探关注“发型轮廓”而不是“照片是在白天还是晚上拍的”。
  1. 点积运算$f(\hat{x}) \cdot g(x_i)$ 把查询特征和支持特征逐位相乘后求和,值越大说明两个向量方向上越接近
    f(x^)⋅g(xi)\displaystyle f(\hat{x}) \cdot g(x_i)
  2. 范数归一化$\|f(\hat{x})\|$ 和 $\|g(x_i)\|$ 分别是两个向量的长度,除以它们可以消除向量模长的影响
    ∥f(x^)∥  ∥g(xi)∥\displaystyle \|f(\hat{x})\| \; \|g(x_i)\|
  3. 余弦值计算整个分式的值域是 $[-1, 1]$,越接近 1 表示越相似,越接近 -1 表示越相反
    f(x^)⋅g(xi)∥f(x^)∥  ∥g(xi)∥\displaystyle \frac{f(\hat{x}) \cdot g(x_i)}{\|f(\hat{x})\| \; \|g(x_i)\|}

全上下文

侦探比对照片时有一个容易被忽视的细节:他不仅看人像本身,还会看照片的背景和周边环境。如果三张照片都是在同一个地铁站拍的,他就会重点怀疑出现在那个地铁站附近的人。这就是上下文信息。Matching Networks 的注意力匹配虽然巧妙,但每个支持样本的特征是独立抽取的——相当于侦探孤立地看每张照片,忽略了“这三张照片都来自同一个时间段、同一个街区”这样的整体信息。

全上下文嵌入(Full Contextual Embedding, FCE)就是为了解决这个问题而设计的。核心思想很简单:在计算相似度之前,先让支持集内部的所有样本“互相打个招呼”,让每个样本的最终表示都携带整个支持集的语境信息。具体来说,支持集的样本经过基础嵌入后,送入一个双向 LSTM 进行编码。因为支持集样本之间没有天然的顺序,双向结构让每个位置都能同时看到左右两侧的信息,从而学到“自己在这个集合中的相对位置和角色”。

查询样本的嵌入同样受支持集整体影响。用公式表示,查询样本在支持集语境下的嵌入为:

有了语境感知的表示,查询样本不再是“孤零零的一张脸”,而是被置于支持集这个“人群环境”中理解的。回到侦探的故事:如果三张照片都在说明嫌疑人身穿红色外套,那么红色外套这个特征在最终判断中的权重就会被放大——这就是全上下文嵌入带来的好处。

f(x^,S)=∑i=1ka(x^,xi) g(xi)\displaystyle f(\hat{x}, S) = \sum_{i=1}^{k} a\bigl(\hat{x}, x_i\bigr) \, g(x_i)
这个公式表达的是:查询样本的“语境化表示”不是孤立地看自己长什么样,而是以支持集样本特征为依据做加权求和。注意力权重由查询样本与支持集的关系决定,因此查询表示会随着支持集内容的变化而变化。
  1. 上下文感知符号$f(\hat{x}, S)$ 表示查询样本 $\hat{x}$ 在支持集 $S$ 条件下的嵌入,它与普通的 $f(\hat{x})$ 不同,多了下标条件 $S$
    f(x^,S)\displaystyle f(\hat{x}, S)
  2. 注意力权重$a(\hat{x}, x_i)$ 复用之前定义的注意力权重,表示支持样本 $x_i$ 在解释查询样本时的贡献程度
    a(x^,xi)\displaystyle a\bigl(\hat{x}, x_i\bigr)
  3. 支持集特征$g(x_i)$ 是支持样本经过嵌入后的原始特征向量,它作为加权求和的“物料”
    g(xi)\displaystyle g(x_i)
  4. 加权求和把每个支持样本的特征向量乘以对应的权重后相加,得到的就是查询样本的语境感知表示
    ∑i=1ka(x^,xi) g(xi)\displaystyle \sum_{i=1}^{k} a\bigl(\hat{x}, x_i\bigr) \, g(x_i)

训练策略

侦探在成为侦探之前,一定做过无数次模拟演练:教官每次给他 3 张照片、一群临时演员扮演的路人,让他快速指认。每次演练的照片和人群都不同,但“比对—打分—决策”的动作反复强化。经过几百次这样的模拟出警,侦探连“新目标长得完全陌生”也不怕了——因为他练的是比对的能力,而不是背熟某几张脸。Matching Networks 正是用类似的思路训练的,这种方式被称为情景式训练(Episodic Training)。

在训练阶段,我们不把所有数据一次性交给模型学一个分类边界,而是反复从训练集里“抽小任务”。每个任务模拟一次测试:随机挑出 N 个类别、每个类别挑出 K 个样本构成支持集,再从这 N 个类别里另外挑几个样本构成查询集。模型在支持集上做注意力匹配,预测查询样本的标签,然后计算梯度更新嵌入函数的参数。这样一来,模型练的就是“面对陌生类别的少量样本时,如何利用特征空间做出正确匹配”。

训练目标的数学形式很直接——最大化正确标签的预测概率,等价于最小化负对数似然:

训练结束后,面对全新的类别,模型不再需要任何梯度更新——直接执行“支持集比对 + 加权投票”即可完成分类。这就像侦探从警校毕业,以后每次出警都只靠那套反复锤炼的比对手法,不需要临场重新学“怎么认出每一种新衣服”。无需微调,正是小样本场景最渴求的性质。

L=−log⁡p(y∗∣x∗,S)\displaystyle \mathcal{L} = -\log p\bigl(y^{*} \mid x^{*}, S\bigr)
这个损失函数衡量的是:模型给正确标签 $y^{*}$ 分配的预测概率有多高。概率越高,损失越小;如果模型把正确标签的概率压得很低,损失就会急剧变大,督促模型改正。
  1. 损失符号$\mathcal{L}$ 表示损失函数值,训练的目标就是让这个值越来越小
    L\displaystyle \mathcal{L}
  2. 负对数$-\log$ 是单调递减函数,概率越大、负对数越小,这让“更高的正确概率”直接对应“更低的损失”
    −log⁡(⋅)\displaystyle -\log(\cdot)
  3. 正确标签$y^{*}$ 是查询样本 $x^{*}$ 的真实标签,是训练过程中的监督信号
    p(y∗∣x∗,S)\displaystyle p\bigl(y^{*} \mid x^{*}, S\bigr)

对比原型

Matching Networks 并非元学习家族中唯一的小样本分类方法。另一类经典方法——Prototypical Networks(原型网络)——在思路上与它形成有趣的对照。简单来说,原型网络的做法是:把每个类别当作一个代表点,先对支持集中同一类别的所有样本取平均,得到该类别的“原型”,然后查询样本看自己离哪个原型最近,就归入哪个类别。

用公式表示,类别 $c$ 的原型为:

两个方法的核心差异在于粒度:Prototypical Networks 先做类内平均,丢掉个体差异,然后以类为中心判断;Matching Networks 则保留每个支持样本的个体身份,逐个算注意力。比喻一下:原型网络像一位“人像合成师”,把同一个人多张照片叠成一张模糊的标准像,再拿标准像比对现场;Matching Networks 像一位“执证侦探”,手里揣着每张原始照片,逐一对照,让最像的那张照片拥有最大发言权。

这两种风格各有胜负。原型网络的计算更轻、对噪声更有鲁棒性,在支持集样本质量较好时效果好;Matching Networks 则更能保留样本内的丰富信息,尤其在每类样本差异较大或存在多样化外观时更灵活。实际任务中应该选择哪种方法,取决于支持集中样本的一致性和任务的精细程度。

pc=1∣Sc∣∑(x,y)∈Scg(x)\displaystyle p_c = \frac{1}{|S_c|} \sum_{(x, y) \in S_c} g(x)
这个公式说:一个类别的原型,就是该类所有支持样本特征的平均向量。它像侦探把同一嫌疑人的多张照片叠加成一张“合成画像”,拿这张画像去和现场比对。
  1. 原型符号$p_c$ 表示类别 $c$ 的代表性特征向量,即“该类别的平均长相”
    pc\displaystyle p_c
  2. 平均操作$\frac{1}{|S_c|}$ 表示除以该类样本数量,相当于对特征取均值
    1∣Sc∣∑(x,y)∈Sc\displaystyle \frac{1}{|S_c|} \sum_{(x, y) \in S_c}
  3. 集合遍历$(x, y) \in S_c$ 表示逐个取出属于类别 $c$ 的所有支持样本,累加它们的嵌入 $g(x)$
    g(x)\displaystyle g(x)

AI 应用场景

工业质检中的新型缺陷识别

阶段:模型推理与冷启动

解决的问题:工厂产线上新出现的缺陷种类通常只有几张现场照片,传统分类器无法快速纳入新类别。利用 Matching Networks,当新缺陷样本出现时,只需将它加入支持集,无需重新训练即可对后续产品进行缺陷分类。

具体案例:一家手机屏幕生产商在调试新工艺时,发现了一种从未见过的“彩虹纹”缺陷,现场只有 5 张标注照片。工程师用预训练好的嵌入网络搭配 Matching Networks 的注意力匹配模块,把 5 张照片作为支持集,当天就对产线上新拍摄的屏幕图像完成分类,准确率达到 90% 以上。

医疗影像中的罕见病辅助诊断

阶段:小样本分类

解决的问题:罕见病患者数量少,影像数据难以积累。传统诊断模型需要大量训练数据,而 Matching Networks 可以将已有的少量典型病例作为支持集,对新患者的影像进行快速匹配,为医生提供参考判断。

具体案例:某医院积累了 30 例罕见肺纤维化的 CT 影像,远不够训练常规深度网络。研究团队用 Matching Networks 框架,将 30 例影像按“每类 5 张”的组织方式构建支持集,对 40 例疑似患者进行判别,辅助医生把诊断时间缩短了三分之二。

个性化语音命令识别

阶段:快速自适应

解决的问题:每位用户的发音习惯不同,新用户不能要求其提供大量录音。Matching Networks 能把每条支持录音视为一个“样本”,通过注意力匹配快速适配新用户的语音特征,实现几句话就解锁个性化命令。

具体案例:智能家居助手的语音团队为“打开窗帘”“关闭空调”等指令各录制了几条新用户样本,利用 Matching Networks 在端侧完成小样本分类,用户仅需说出 3 条命令即可实现 95% 以上的唤醒识别率。

Python 演示

python57 行
import numpy as np np.random.seed(42)  def generate_task(n_way=3, n_shot=5, n_query=1, dim=8):    """随机生成一个小样本分类任务。"""    means = np.random.randn(n_way, dim) * 1.5    support_x = []    support_y = []    query_x = []    query_y = []    for c in range(n_way):        for _ in range(n_shot):            support_x.append(means[c] + np.random.randn(dim) * 0.4)            support_y.append(c)        for _ in range(n_query):            query_x.append(means[c] + np.random.randn(dim) * 0.4)            query_y.append(c)    return (np.array(support_x), np.array(support_y),            np.array(query_x), np.array(query_y))  def cosine_similarity(q, support_x):    """计算查询向量与所有支持向量的余弦相似度。"""    q_norm = q / (np.linalg.norm(q) + 1e-8)    s_norm = support_x / (np.linalg.norm(support_x, axis=1, keepdims=True) + 1e-8)    return np.dot(s_norm, q_norm)  def predict(query_x, support_x, support_y, temperature=10.0):    """Matching Networks 风格的注意力加权预测。"""    n_way = len(np.unique(support_y))    sim = cosine_similarity(query_x, support_x)    exp_sim = np.exp(sim * temperature)    weights = exp_sim / exp_sim.sum()    label_scores = np.zeros(n_way)    for w, label in zip(weights, support_y):        label_scores[label] += w    return int(np.argmax(label_scores)), weights  def main():    support_x, support_y, query_x, query_y = generate_task()    correct = 0    total = len(query_x)    for i, qx in enumerate(query_x):        pred, weights = predict(qx, support_x, support_y)        print("query {} 预测类别: {} 真实类别: {} 注意力: {}".format(            i, pred, query_y[i], np.round(weights, 3)))        if pred == query_y[i]:            correct += 1    print("小样本分类准确率: {}/{} = {:.2f}".format(correct, total, correct / total))  if __name__ == "__main__":    main()
目的:用 Python 实现一个极简 Matching Networks——通过余弦相似度加 softmax 计算注意力权重,在 3-way 5-shot 的小样本任务上做分类。
  1. means = np.random.randn(n_way, dim) * 1.5为每个类别生成一个随机“中心点”,模拟不同类别在特征空间中的分布
  2. support_x.append(means[c] + np.random.randn(dim) * 0.4)在每个中心点附近采样支持样本,模拟同类样本的类内波动
  3. q_norm = q / (np.linalg.norm(q) + 1e-8)对查询向量做归一化,加小常数防止除零,为余弦相似度做准备
  4. s_norm = support_x / (np.linalg.norm(support_x, axis=1, keepdims=True) + 1e-8)对支持矩阵按行归一化,向量化避免循环
  5. sim = cosine_similarity(query_x, support_x)用归一化后的点积快速得到所有支持样本与查询样本的相似度
  6. exp_sim = np.exp(sim * temperature)用温度系数放大相似度差异,让注意力更集中
  7. weights = exp_sim / exp_sim.sum()softmax 归一化,把所有相似度分数变成总和为 1 的概率权重
  8. label_scores[label] += w把每个支持样本的注意力权重投给它对应的类别,完成“加权投票”
  9. np.argmax(label_scores)取获得总权重最大的类别作为预测结果,等价于公式里的 argmax 决策

常见误区

误区Matching Networks 只要在测试时给几个支持样本就能分类,所以它根本不需要预训练。

正解虽然测试阶段不微调,但嵌入函数 $f$ 和 $g$ 以及注意力机制中的可学习参数都必须在大量“小任务”上训练过。模型训练的是“如何比对”的能力,而不是某个具体类别的分类能力。就像侦探虽然每次出警用现成的比对手法,但这些手法是警校里千百次演练练出来的。

为何常见:大家看到 few-shot 中“不用微调”的字眼,误以为整个模型毫无参数、一线可直接用,忽略了元学习训练阶段的存在。

误区注意力权重不就是两个样本距离越近权重越高吗?直接用欧氏距离不就行了吗?

正解Matching Networks 原论文中默认使用余弦相似度作为相似度度量,它关注的是特征向量的方向而非长度,然后还要经过 softmax 归一化。欧氏距离对特征向量的模长敏感,在特征空间里可能受整体亮度、样本尺度影响,结果不稳定。侦探不会因为照片放大了就认为人更高,余弦相似度正是这种“不看大小、只看形状”的度量。

为何常见:很多分类任务里“距离”这个概念深入人心,人们容易把“相似”直接等同于“欧氏距离近”,忽略了不同度量方式在不同嵌入空间中的适配性。

误区Prototypical Networks 和 Matching Networks 差不多,都是把支持集样本求个均值再比较距离,只是叫法不同。

正解两者有本质区别:原型网络先把同一类别所有样本特征平均成一个“原型向量”,再做最近邻判断;匹配网络则不做类内平均,而是对每个支持样本单独计算注意力权重,最后加权投票。原型网络丢失了个体差异信息,匹配网络则保留了每个样本的独立“发言权”。

为何常见:两个方法都基于嵌入空间和相似度计算,乍看流程相似,容易被理解成同一种套路,实际在是否有类内聚合这一步上分道扬镳。

误区只要注意力匹配用得对,支持集样本之间互相影响不重要,FCE 只是论文里包装出来的花架子。

正解原论文的实验清楚表明,FCE 对性能提升有显著贡献。支持集内部的信息共享能帮助模型理解“这一组样本的整体分布”,比如判断某个特征在该支持集下是否足够有区分度。没有 FCE,等于侦探只盯着单张照片的局部特征,放弃了对“这几张照片都拍摄于同一场景”的利用。

为何常见:FCE 涉及双向 LSTM 等额外结构,让人觉得复杂又多余,而少样本任务本身已经很小,人们容易误判小改动不会带来大变化。

误区训练时用什么 N-way K-shot 都行,测试时改成一个更大的 N 也没关系,反正模型只做一个匹配。

正解Matching Networks 的训练方式决定了它只擅长处理与训练设置一致的任务规模。如果训练时是 5-way 1-shot,测试时却要求 20-way 5-shot,注意力分布的特性和难度完全不同,模型泛化会明显下降。训练和测试的任务设置必须对齐,这正是情景式训练的核心纪律。

为何常见:初学者习惯把模型训练和测试分开看待,认为分类器总能泛化到任意输入规模,忽略了元学习模型对“任务形态”的敏感依赖。

面试题

Q1. Matching Networks 的核心分类思想是什么?

单选题 · easy

  • A.在支持集上做注意力加权匹配← 正确答案
  • B.直接训练一个全局线性分类器
  • C.对每个类别单独训练一个 SVM
  • D.用生成对抗网络扩充样本后分类

答案:A。Matching Networks 的核心是在支持集上计算查询样本与每个支持样本的相似度,用注意力权重做加权投票,实现小样本分类。B、C 都需要大量训练数据;D 与匹配网络的设计无关。

Q2. N-way K-shot 设定中,K 表示什么?

单选题 · easy

  • A.类别数量
  • B.每个类别的样本数量← 正确答案
  • C.特征向量的维度
  • D.训练轮数

答案:B。N-way 的 N 表示类别数量,K-shot 的 K 表示每个类别提供的标记样本数量。比如 5-way 1-shot 就是 5 个类别、每类只有 1 个样本。C、D 与任务设定无关。

Q3. Matching Networks 中注意力权重的计算默认使用哪种相似度度量?

单选题 · easy

  • A.曼哈顿距离
  • B.余弦相似度← 正确答案
  • C.欧氏距离
  • D.编辑距离

答案:B。原论文默认使用余弦相似度,它关注特征向量的方向一致性而非模长。欧氏距离和曼哈顿距离对向量长度敏感,编辑距离则用于字符串场景。

Q4. softmax 在注意力权重计算中起什么作用?

单选题 · mid

  • A.增加嵌入向量的维度
  • B.将相似度分数归一化成概率分布← 正确答案
  • C.让相似度放大到任意范围
  • D.减少模型的过拟合风险

答案:B。softmax 先对相似度做指数放大,再除以总和,把任意实数范围的相似度分数转换成总和为 1 的概率权重。C 是部分理解,softmax 输出值域固定为 (0,1),并非任意范围。

Q5. 全上下文嵌入(FCE)主要解决什么问题?

单选题 · mid

  • A.让查询表示融合支持集的语境信息← 正确答案
  • B.减少支持集所需的样本数量
  • C.加速注意力机制的推理速度
  • D.降低嵌入向量的维度

答案:A。FCE 让支持集样本通过双向 LSTM 互相沟通,使每个样本的嵌入携带整体语境,查询嵌入也参考支持集表示。它不改变样本数量、推理速度和维度,而是增强表示的信息量。

Q6. Matching Networks 在测试新类别时,通常需要做什么操作?

单选题 · mid

  • A.在新类别上重新训练全部参数
  • B.只需用支持集做前向匹配,无需微调← 正确答案
  • C.必须微调最后一层全连接层
  • D.需要在支持集和查询集上交替训练

答案:B。Matching Networks 在训练阶段就模拟了测试场景,模型学会的是比对能力。测试时直接把少量标记样本作为支持集,执行前向注意力匹配即可,不需要任何梯度更新。

Q7. 一个 3-way 2-shot 任务中,支持集按类别排列为 [c0样0, c0样1, c1样0, c1样1, c2样0, c2样1],查询样本与各支持样本的余弦相似度为 [0.9, 0.2, 0.8, 0.1, 0.7, 0.1],温度趋近无穷大时预测为哪个类别?

单选题 · hard

  • A.类别 0← 正确答案
  • B.类别 1
  • C.类别 2
  • D.无法确定

答案:A。温度趋近无穷大时,softmax 趋近 one-hot,最大相似度对应的样本获得全部权重。最大相似度 0.9 属于索引 0 的样本,它属于类别 0,因此预测为类别 0。

Q8. 关于 Matching Networks 与 Prototypical Networks 的区别,以下说法正确的有?

多选题 · mid

  • A.匹配网络为每个支持样本独立计算注意力← 正确答案
  • B.原型网络先求类原型再做距离判断← 正确答案
  • C.匹配网络能够支持全上下文嵌入← 正确答案
  • D.匹配网络在少样本上性能总是更高

答案:ABC。匹配网络逐个样本计算注意力,原型网络先做类内平均再比较原型距离,匹配网络支持 FCE。D 过于绝对,原型网络在样本一致性高时可能更优,不存在“总是更高”。

Q9. Matching Networks 使用情景式训练,其关键特征包括哪些?

多选题 · mid

  • A.每个任务随机采样支持集和查询集← 正确答案
  • B.训练任务与测试任务设置一致← 正确答案
  • C.每个任务都需要更新全部类的原型
  • D.每个任务模拟一次少样本分类← 正确答案

答案:ABD。情景式训练每次从训练集采样一个 N-way K-shot 小任务,训练和测试的任务形态必须一致,模拟真实的小样本分类场景。C 描述的是原型网络的流程,匹配网络没有维护全局原型。

Q10. 关于 Matching Networks 训练损失函数,下列描述正确的有?

多选题 · hard

  • A.对预测正确标签的概率取负对数← 正确答案
  • B.鼓励模型在少量样本上快速适应← 正确答案
  • C.完全等价于常规交叉熵分类损失
  • D.损失越低说明注意力权重越均匀

答案:AB。损失为负对数似然,希望正确标签概率越高越好,且在支持集信息有限时仍能做出可靠预测,体现快速适应。它形式上与交叉熵一致,但作用对象是小任务而非全局分类;D 说法错误,损失低意味着权重集中在正确类别而非均匀分布。