想象你是一家小餐馆的学徒,大厨很忙,只肯手把手教你三道菜:红烧肉、清蒸鱼、蒜蓉时蔬。这三道菜就是“少量标注样本”——每一道都有标准答案。但你面前还堆着满厨房的食材:成箱的排骨、整条鲜鱼、各式青菜。它们没有菜谱,就像没有标签的原始数据。笨学徒只会把三道成品菜背得滚瓜烂熟,一遇到新食材就抓瞎;聪明学徒则先领悟“做菜的套路”,再拿满厨房食材反复试手:先凭印象给食材贴上初步标签(“这堆排骨适合红烧”),炒出来尝一口,再用口感修正自己的判断。几轮下来,他不仅掌握了三道招牌菜,面对从没见过的食材也能举一反三。 这正是“半监督学习 + 小样本学习”结合的精髓:少量标注样本提供骨架,海量无标注样本提供血肉。半监督学习擅长从无标注数据中榨取规律(伪标签、一致性正则化),小样本学习擅长从少量标注中学会“如何学习”本身(元学习、原型网络)。两者合璧,就能在标注极度稀缺时依然练出好模型。

岗位关联

学完本节,你将掌握数据稀缺场景下“半监督 + 小样本”的组合拳,能在标注不足的真实项目中设计更稳健的建模方案——这是 AI 从业者解决冷启动与长尾问题的核心技能。

目录
  1. 可视化演示
  2. 数据稀缺难题
  3. 半监督学习原理
  4. 小样本学习原理
  5. 结合策略设计
  6. 混合训练框架
  7. 实战效果对比
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示伪标签生成扩充训练集、一致性正则化约束预测一致性、以及半监督方法在小样本场景的效果对比。

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

伪标签生成与扩充流程 模型为无标注数据生成预测标签 高置信样本加入Support Set扩充训练 Support = Labeled + PseudoLabel(Unlabeled) 伪标签方法通过高置信预测扩充小样本训练集

数据稀缺难题

大厨不是不想教,是真的没时间——一道菜从备料、下锅到摆盘,至少半小时,他能示范的次数屈指可数。这正是今天 AI 项目中最头疼的困境:请专家给数据打标签,就像请大厨一道菜一道菜地示范,成本极高,时间极长。一张医疗影像需要主任医师几分钟判读,年薪百万的专家不可能为十万张图逐一标注。于是我们看到一个奇特的食堂:满地食材(无标注数据)堆积如山,能吃的好菜(有标签数据)却只有几盘。

这个矛盾逼出了一个思路:能不能别只盯着那几盘菜?让学徒同时从“示范菜”和“食材库”两边吸取营养。技术上说,就是令模型在有标注数据上学习显式监督信号,同时在无标注数据上构造自监督信号,把两个目标揉进同一个损失函数,协同优化。

具体做法是给总损失设计成“两股绳”:一股拴着有标注样本的交叉熵,让模型老实模仿大厨;另一股拴着无标注样本的一致性约束,让模型在自由探索中也不跑偏。最终目标函数写为:

回到食堂的比喻:监督损失是学徒对照大厨成品反复纠错,无监督损失是学徒在食材库中自己摸索规律。两股绳一起拉,模型才能在“只有几盘菜 + 满仓食材”的窘境里站稳脚跟。数据稀缺的破局点,就藏在这两个信号的巧妙组合里。

Ltotal=Ls+λLu\mathcal{L}_{total} = \mathcal{L}_{s} + \lambda \mathcal{L}_{u}
总损失 = 有标注部分的监督损失 + 经系数 λ 调节的无标注部分损失。λ 就像学徒的“信任配比”:调大 λ,更相信厨房食材的自我探索;调小 λ,更相信大厨示范的标准答案。
  1. 监督损失 L_s只在大厨示范过的菜上计算误差,模型预测错了就按交叉熵惩罚,把“标准答案”牢牢刻进参数里。
    Ls=1∣Dl∣∑(xi,yi)∈Dl−log⁡pθ(yi∣xi)\mathcal{L}_{s} = \frac{1}{|D_l|} \sum_{(x_i, y_i) \in D_l} -\log p_\theta(y_i \mid x_i)
  2. 无监督损失 L_u对没有标签的食材构造学习信号,它不需要人工答案,只要求模型的预测满足某种自洽性质(如一致性)。
    Lu=1∣Du∣∑xj∈Duℓu(xj;θ)\mathcal{L}_{u} = \frac{1}{|D_u|} \sum_{x_j \in D_u} \ell_u(x_j; \theta)
  3. 平衡系数 λ调节两种损失的相对权重,工程上常从 0.1 热身到 1.0,防止无监督损失前期噪声过大把监督信号淹没。
    λ∈[0.1,1.0]\lambda \in [0.1, 1.0]

半监督学习原理

学徒面对一厨房食材时,最先想做什么?他会先大胆猜测:这堆排骨大概率可以做红烧,那把青菜应该适合蒜蓉。猜完自己炒一锅,尝一口,对则强化,错则修正。这种“先猜后验”的本事,在机器学习里叫伪标签:让模型先对无标注样本输出一个预测,挑出置信度最高的那批,把预测结果当作标签回填进训练集,再用它们参与下一轮训练。

除了“先猜后验”,学徒还会用另一种自我约束:同一把青菜,无论切成段还是撕成片,炒出来都该是同一道菜的味道。这就是一致性正则化——同一个样本经过不同随机增强(旋转、裁剪、加噪声),模型对它的预测输出应当保持一致。两个版本的预测差异越小,说明模型学到了稳定的、而非仅对某种输入形式过拟合的特征。逻辑如下:

此外还有一个通俗的“果断原则”——熵最小化:做菜要么咸要么甜,不能又咸又甜让人尝不出味道。模型对无标注样本的预测概率分布也应如此,逼近某个类别的 one-hot 分布,而不是在各种类别之间暧昧不清。

把三者放在一起看:伪标签负责“敢猜”,一致性正则化负责“稳住”,熵最小化负责“果断”。它们共同把没有标签的食材变成了可以反复练习的“模拟题”,这正是半监督学习能从无标注数据中榨取价值的根本原因。

Lu=Ex∈Du[∥fθ(x)−fθ(x~)∥22]\mathcal{L}_{u} = \mathbb{E}_{x \in D_u} \left[ \| f_\theta(x) - f_\theta(\tilde{x}) \|_2^2 \right]
对无标注样本 x 施加随机增强得到 x̃,要求模型对两者的预测向量尽可能一致,差异用 L2 距离度量。这就是“同一道菜,怎么切都该是同一口锅的味道”。
  1. 随机增强 x̃对同一输入做随机裁剪、翻转或加噪,相当于学徒把同一种食材换着切法、换着火候练手。
    x~=Augment(x)\tilde{x} = \text{Augment}(x)
  2. 预测之差 Δ模型在两个版本上的输出向量相减,差值越大说明模型被表面形式牵着鼻子走。
    Δ=fθ(x)−fθ(x~)\Delta = f_\theta(x) - f_\theta(\tilde{x})
  3. L2 范数平方把差向量逐维平方求和再开方,对任何不一致都给予二次方级别的惩罚,逼模型做到“换汤不换药”。
    ∥Δ∥22=∑d=1DΔd2\|\Delta\|_2^2 = \sum_{d=1}^{D} \Delta_d^2

小样本学习原理

学徒学会了红烧肉,现在大厨丢来一道从没见过的“糖醋小排”。为什么学徒能快速上手?因为他已经从红烧肉、清蒸鱼里提炼出一套共通的做菜套路:先腌、再煎、后调味、收汁。小样本学习的本质就是这个——不执着于学会某一道菜,而是学会“如何学新菜”的方法。技术上的代表路线有两条:元学习和原型网络。

原型网络的思路非常直白:每类样本的特征取平均,得到该类的一个“风味记忆点”(原型)。新样本来了,问它离哪个原型最近,就归到哪类。它不要求见过很多样本,只需要每类有那么几个示范,就能搭出一个像模像样的分类器。数学上,对支持集 $S_k$ 计算原型,再看新样本与各原型的距离:

元学习则更进一步,它训练模型时不断切换“菜系”——每个菜系是一个小任务(N-way K-shot),模型在每个任务上先快速学几步,再看这些步骤是否真的提高了在验证集上的表现,据此调整自己的“学习率直觉”。用做菜的话说,它学的是“看到新食材如何下刀、如何调味”的元策略,而不是背下某道菜的固定配方。

ck=1∣Sk∣∑(xi,yi)∈Skfϕ(xi),p(y=k∣x)=exp⁡(−d(fϕ(x),ck))∑k′exp⁡(−d(fϕ(x),ck′))c_k = \frac{1}{|S_k|} \sum_{(x_i, y_i) \in S_k} f_\phi(x_i), \quad p(y=k \mid x) = \frac{\exp(-d(f_\phi(x), c_k))}{\sum_{k'} \exp(-d(f_\phi(x), c_{k'}))}
先对每类少量样本的特征取平均得原型 c_k,再用“距离越近概率越大”的 Softmax 形式对查询样本分类。
  1. 支持集 S_k第 k 类仅有的几个标注样本,相当于大厨对这道菜示范的那一两遍。
    Sk={(xi,yi):yi=k}S_k = \{ (x_i, y_i) : y_i = k \}
  2. 原型 c_k支持集样本经过特征提取网络 f_φ 后的平均向量,代表这类别的“标准风味画像”。
    ck=1∣Sk∣∑(xi,yi)∈Skfϕ(xi)c_k = \frac{1}{|S_k|} \sum_{(x_i, y_i) \in S_k} f_\phi(x_i)
  3. 距离度量的负指数查询样本与原型距离 d 越小,exp(-d) 越大,直觉上是“越像哪个菜系就越可能是哪道菜”。
    exp⁡(−d(fϕ(x),ck))\exp(-d(f_\phi(x), c_k))
  4. Softmax 归一化把所有类的相似度做归一化,让输出变成合法的概率分布,所有类别概率之和为 1。
    ∑k′exp⁡(−d(fϕ(x),ck′))\sum_{k'} \exp(-d(f_\phi(x), c_{k'}))

结合策略设计

现在学徒两样本领都学了:半监督能利用无标签食材,小样本能从少量示范举一反三。但真正的挑战是——怎么把两套心法合在一套拳法里?直接简单拼接像左手画圆右手画方,必须设计巧妙的协同接口。常见策略有四条,它们像四座桥梁,把两个世界连起来。

第一座桥:伪标签融合元学习。 元学习的每个任务都需要一个支持集,但支持集的标注太少了,模型学得很吃力。于是用半监督的伪标签去“补充食材”:把高置信度的无标注样本贴上伪标签,塞进支持集,让这个任务原本只有 1-shot 的示范扩充成 3-shot、5-shot 的效果。(见公式)

第二座桥:共享特征编码器。 特征提取部分(编码器)同时服务两个目标:一边用半监督损失在海量无标注数据上预训练,学到通用的表示;另一边把该编码器的输出作为小样本分类的特征空间。这样无标注数据不仅喂饱了半监督,还为小样本分类提供了更高质量的特征底座。

第三座桥:元学习初始化。 用元学习在多个任务上练出一个“好的起点参数”,再把这组参数作为半监督模型的初始权重,让后续伪标签阶段的收敛更快更稳。

第四座桥:跨任务迭代优化。 构造多个 N-way K-shot 任务,每个任务先用本身少量标注初始化原型,再用半监督伪标签扩充,扩充后的任务互相校验,形成跨任务的正向循环。

四条桥梁对应到做菜:伪标签扩增是“给每道菜多配几份试吃品”,共享编码器是“练就一副好舌头(通用味觉)”,元学习初始化是“带着成熟刀工入职新厨房”,跨任务迭代是“把各家菜系交叉对照着练”。它们不改变两种方法的内部逻辑,而是在接口处互相成就。

S~k=Sk∪{(xj,y^j)∣pmax⁡(xj)>τ, y^j=k}\tilde{S}_k = S_k \cup \{ (x_j, \hat{y}_j) \mid p_{\max}(x_j) > \tau,\ \hat{y}_j = k \}
伪标签扩增支持集:只有模型置信度超过阈值 τ 的无标注样本才有资格加入支持集,为元学习任务“加餐”。
  1. 原始支持集 S_k任务中每一类只提供极少的手工标注样本,是元学习训练的“种子”。
    Sk={(xi,yi)}i=1NkS_k = \{ (x_i, y_i) \}_{i=1}^{N_k}
  2. 伪标签候选筛选模型对无标注样本的预测置信度超过 τ 才被采纳,低置信度的宁可不要,避免给元学习喂错题。
    1[pmax⁡(xj)>τ]\mathbb{1}[p_{\max}(x_j) > \tau]
  3. 扩增并集原始支持集与伪标签集合并,得到信息量更充足的新支持集,元学习就像多了很多“半成品示范”。
    S~k=Sk∪{(xj,y^j)}\tilde{S}_k = S_k \cup \left\{ (x_j, \hat{y}_j) \right\}

混合训练框架

桥梁有了,还缺一张施工图。真正生产级的做法是把两套方法卷进同一个训练流程里,按照精心设计的节奏交替推进,这个整体方案就叫混合训练框架。

第一阶段:半监督预训练。 先用全部无标注数据 + 少量标注数据训练特征提取器。这一阶段的目标不是分类有多准,而是让特征空间初步“有结构”——同一类的样本在特征空间里靠近,不同类的分开。此时的模型像一个刚尝过三道示范菜、开始在厨房里到处试味的学徒,对食材有了模糊但正确的直觉。

第二阶段:元学习微调。 在预训练好的特征空间上,构造多个小样本任务。每个任务用支持集算原型、做分类,并用交叉熵损失更新网络。同时把无标注数据的伪标签也合成一个辅助损失,与元学习损失加权求和,一并反传。损失函数合成如下:

第三阶段:循环自举。 两个阶段不是只跑一次,而是循环:用当前模型生成更准的伪标签 → 伪标签扩充支持集 → 重新训练元学习 → 得到更准的模型 → 产生更准的伪标签。每一轮循环,模型中“自信”的区域都会在特征空间中向外扩张一圈,这与可视化演示中信任圈逐渐变大的过程完全一致。

混合框架的关键设计原则是“节奏感”:预训练阶段放宽阈值多探索,微调阶段收紧阈值保质量,自举阶段动态调节 λ 和 τ。就像学徒先大刀阔斧试错,再精细调整火候,最后形成肌肉记忆。

L=Lmeta+λ∑xj∈Du1[pmax⁡(xj)>τ]⋅Lce(fθ(xj),y^j)\mathcal{L} = \mathcal{L}_{meta} + \lambda \sum_{x_j \in D_u} \mathbb{1}[p_{\max}(x_j) > \tau] \cdot \mathcal{L}_{ce}(f_\theta(x_j), \hat{y}_j)
总损失 = 元学习监督损失 + 带置信度门控的伪标签损失。只有模型“自信满满”的伪标签才参与训练,避免噪声标签污染特征。
  1. 元学习损失 L_meta在每个小样本任务上评估分类效果,把所有任务的平均损失作为主优化目标。
    Lmeta=1T∑t=1TLce(t)\mathcal{L}_{meta} = \frac{1}{T} \sum_{t=1}^{T} \mathcal{L}_{ce}^{(t)}
  2. 置信度门控指示函数只在最大预测概率超过阈值 τ 时取 1,相当于学徒只在“很有把握”时才敢给食材贴标签。
    1[pmax⁡(xj)>τ]\mathbb{1}[p_{\max}(x_j) > \tau]
  3. 伪标签交叉熵把模型自己的高置信预测当作目标,最小化输出与伪标签的交叉熵,实现“自己教自己”。
    Lce(fθ(xj),y^j)=−log⁡pθ(y^j∣xj)\mathcal{L}_{ce}(f_\theta(x_j), \hat{y}_j) = -\log p_{\theta}(\hat{y}_j \mid x_j)

实战效果对比

这套组合拳在真实厨房里到底能打几分?不能光看理论,要明明白白对照实验。研究者通常在标准小样本基准(如 miniImageNet、CIFAR-FS)上做验证:每类只保留 1 个或 5 个标注样本(1-shot / 5-shot),额外给一批无标注数据,比较三种设置——纯小样本(只用标注)、纯半监督(只做一致性正则化)、半监督+小样本结合。

实验结果有一个非常稳定的规律:数据越稀缺,结合策略的相对增益越大。在 1-shot 设置下,结合方法比纯小样本平均高出 10~20 个百分点;当 shot 数增加到 5 时,优势收窄到 3~8 个百分点。这个规律符合直觉:标注越少,无标注数据能提供的边际价值就越高——示范菜越少,食材库的练习价值就越被放大。

评测指标除了常用的 N-way K-shot 分类准确率,还会额外关注校准误差(Expected Calibration Error, ECE),因为它反映“模型说 80% 置信时,是否真的 80% 可能正确”——在伪标签流程里,置信度校准直接决定了伪标签的质量。结合方法的 ECE 通常也更低,说明它不但更准,而且“知道自己知道什么”:

适用场景上,这组方法最擅长三类厨房:医疗影像(专家标注昂贵、影像数据海量)、工业质检(新缺陷类型样本少、产线图片管够)、冷启动推荐(新用户行为稀疏、但历史池庞大)。反过来说,如果已经拥有大量高质量标注,传统监督学习的威力仍然是最强的,不必舍近求远。核心心法:把有限的标注当作火种,把海量的无标注当作薪柴,火种虽小,方法得当也能燎原。

Gain=Accsemi-few−Accfew-shotAccfew-shot×100%\text{Gain} = \frac{\text{Acc}_{semi\text{-}few} - \text{Acc}_{few\text{-}shot}}{\text{Acc}_{few\text{-}shot}} \times 100\%
相对增益衡量结合方法相比纯小样本基线的准确率提升百分比。在 1-shot 场景下,这个值往往显著高于 5-shot 场景。
  1. 基线准确率 Acc_few-shot只靠每类 1~5 个标注样本训练的小样本模型在测试集上的准确率,是“只看示范菜”的学徒表现。
    Accfew-shot=1Ntest∑n=1Ntest1[y^n=yn]\text{Acc}_{few\text{-}shot} = \frac{1}{N_{test}} \sum_{n=1}^{N_{test}} \mathbb{1}[\hat{y}_n = y_n]
  2. 结合方法准确率 Acc_semi-few同一测试集上,“半监督+小样本”训练出的模型准确率,是“示范菜+食材库”双重练习后的表现。
    Accsemi-few=1Ntest∑n=1Ntest1[y^n′=yn]\text{Acc}_{semi\text{-}few} = \frac{1}{N_{test}} \sum_{n=1}^{N_{test}} \mathbb{1}[\hat{y}_n' = y_n]
  3. 相对增益归一化用基线做分母,把绝对提升转化为百分比,方便在不同数据集和任务之间横向比较。
    Accsemi-few−Accfew-shotAccfew-shot×100%\frac{\text{Acc}_{semi\text{-}few} - \text{Acc}_{few\text{-}shot}}{\text{Acc}_{few\text{-}shot}} \times 100\%

AI 应用场景

医疗影像辅助诊断

阶段:数据稀缺场景建模

解决的问题:肺结节 CT 影像的标注需要主任医师逐张判读,单张耗时数分钟且标注一致性难保证。传统监督学习要求上千张标注图才能训练出可靠模型,但现实中多数医院只有几十张高质量标注,同时积压了上万张未标注影像。AI 借助半监督+小样本框架,用几十张标注“火种”点燃上万张无标注影像,通过伪标签和一致性正则化让模型在标注不足时也能达到可用的筛查灵敏度。

具体案例:某三甲医院引入结合框架后,仅用 60 张专家标注 CT 和 8000 张历史无标注影像,训练出的肺结节检测模型在院内测试集上达到 0.91 的 AUC;作为对比,传统监督方法在同样标注数量下只有 0.78。模型还能在新增影像上持续自举,无需重新大规模标注。这一方案最终被整合进门诊预筛查流程,辅助放射科医生优先处理高风险病例。

工业质检新缺陷发现

阶段:小样本分类与持续学习

解决的问题:电子元器件产线上,已归类的缺陷(划痕、污渍)有大量标注,但一种新型缺陷“微裂纹”刚刚出现,只有 10 来个样例,标注师傅还没空批量标注。用半监督+小样本结合后,系统先用已知缺陷的标注数据预训练特征提取器,再对大量无标注产线图像生成伪标签,把疑似“微裂纹”的样本自动筛选出来扩展支持集,让新缺陷检测能力快速上线。

具体案例:某面板制造企业部署该方案后,新缺陷识别模型从收集样本到可用,耗时由 3 周压缩到 3 天;模型初版准确率为 82%,经过三轮伪标签自举迭代后提升至 93%,期间没有额外花费人工标注工时。

冷启动商品推荐

阶段:特征表示学习与少样本适配

解决的问题:跨境电商平台每天上新数万商品,新商品没有任何用户行为数据,传统推荐系统对它“零认知”。模型借助元学习在新旧商品间共享“如何根据商品描述和图片学习用户偏好”的经验,再对大量无行为数据的历史商品做自监督表示学习,让新商品一上架就能获得过得去的冷启动推荐效果。

具体案例:某电商平台对日均 3 万新品的冷启动点击率(CTR)做了对比,结合半监督+元学习的方案相比纯协同过滤方案 CTR 提升 18%,新品曝光 7 天内的转化率逼近成熟商品水平,大幅缓解了“新品无人问津”的马太效应。

Python 演示

python84 行
import numpy as npfrom sklearn.datasets import load_digits  def euclidean_dist(a, b):    """计算两个向量之间的欧氏距离"""    return float(np.sqrt(np.sum((a - b) ** 2)))  def compute_prototypes(support_x, support_y, classes):    """根据支持集计算每个类别的原型向量"""    return {c: np.mean(support_x[support_y == c], axis=0) for c in classes}  def predict_one(x, prototypes):    """将样本划分到距离最近的原型所代表的类别"""    return min(prototypes, key=lambda c: euclidean_dist(x, prototypes[c]))  def pseudo_label_pool(unlabel_x, prototypes, gate):    """筛选出与原型距离小于阈值的无标注样本并赋予伪标签"""    picked = []    for x in unlabel_x:        c = predict_one(x, prototypes)        if euclidean_dist(x, prototypes[c]) < gate:            picked.append((x, c))    return picked  def semi_few_shot_train(support_x, support_y, unlabel_x, classes,                        rounds=6, gate=32.0):    """交替训练主循环:原型 -> 伪标签 -> 扩充支持集 -> 更新原型"""    cur_sx, cur_sy = support_x, support_y    for _ in range(rounds):        protos = compute_prototypes(cur_sx, cur_sy, classes)        picked = pseudo_label_pool(unlabel_x, protos, gate)        if not picked:            break        cur_sx = np.vstack([cur_sx] + [p[0] for p in picked])        cur_sy = np.hstack([cur_sy] + [p[1] for p in picked])    return compute_prototypes(cur_sx, cur_sy, classes)  def main():    digits = load_digits()    X, y = digits.data, digits.target    mask = y < 5    X, y = X[mask], y[mask]    np.random.seed(42)    order = np.random.permutation(len(y))    X, y = X[order], y[order]     support_x, support_y, unlabel_x = [], [], []    test_x, test_y = [], []    for c in range(5):        xs = X[y == c]        support_x.append(xs[0])        support_y.append(c)        unlabel_x.append(xs[1:30])        test_x.extend(xs[30:])        test_y.extend([c] * len(xs[30:]))     support_x = np.stack(support_x)    support_y = np.array(support_y)    unlabel_x = np.vstack(unlabel_x)    test_x = np.array(test_x)    test_y = np.array(test_y)     classes = list(range(5))    protos_sup = compute_prototypes(support_x, support_y, classes)    acc_sup = np.mean([predict_one(x, protos_sup) == int(t)                       for x, t in zip(test_x, test_y)])    protos_full = semi_few_shot_train(        support_x, support_y, unlabel_x, classes, rounds=6, gate=32.0)    acc_full = np.mean([predict_one(x, protos_full) == int(t)                        for x, t in zip(test_x, test_y)])     print(f"仅靠标注样本(每类1个)准确率: {acc_sup:.3f}")    print(f"结合无标注池半监督扩增准确率: {acc_full:.3f}")    print(f"相对提升: {(acc_full - acc_sup) / acc_sup * 100:.1f}%")  if __name__ == "__main__":    main()
目的:在手写数字数据集上实现“原型网络 + 伪标签扩增”的半监督小样本分类,直观演示每类仅给 1 个标注样本时,利用无标注池能将准确率提升多少。
  1. compute_prototypes(support_x, support_y, classes)对每类支持集样本的特征取平均,得到该类“风味记忆点”(原型)。
  2. predict_one(x, prototypes)用最小欧氏距离判断新样本属于哪一类,这正是原型网络“离谁近就是谁”的思想。
  3. pseudo_label_pool(unlabel_x, prototypes, gate)给无标注样本贴伪标签,但只有距离原型小于阈值的才有资格入选。
  4. cur_sx = np.vstack([cur_sx] + [p[0] for p in picked])把伪标签样本堆叠进支持集,支持集越滚越大。
  5. if not picked: break没有高置信度样本时提前停止,防止把噪声伪标签持续灌入训练集。
  6. gate=32.0距离阈值相当于“信任圈”半径,调大则更多无标注样本入选但噪声上升,调小则更干净但扩增量有限。

常见误区

误区半监督学习就是靠无标注数据训练,既然无标注数据要多少有多少,那干脆一份标注都不要,全用无标注数据自主学习,效果应该差不多。

正解半监督学习的前提是“无标注数据 + 少量有标注数据”的协同。标注样本是大厨的示范菜,无标注数据只是没有菜谱的食材。没有示范菜,学徒连“红烧肉该是什么味道”都不知道,贴伪标签也失去了校准依据,完全无监督的聚类质量通常远低于有少量锚点的半监督方法。实操中 1% 的标注样本往往就能带来数十个百分点的提升。

为何常见:人们听到“利用无标注数据”时容易把它夸大为“离了标注也行”,忽视了半监督设计里标注样本作为“锚”的定向作用。

误区既然无标注数据免费,伪标签贴得越多,模型获得的信息就越多,训练效果自然越好。有些同学把全部无标注样本的预测结果都当作硬标签塞进训练集。

正解伪标签是有噪声的。低置信度样本的伪标签可能是错的,错误标签被当作正确答案回传,会让模型“学错菜”,且错误会随着循环自举不断放大。正确做法是设置信度阈值,只有 p_max 超过 τ 的样本才进训练集;还可以对伪标签样本降低损失权重,让它们只辅助、不主导。

为何常见:直觉上“数据多 = 效果好”在传统监督学习中成立,但伪标签场景下数据的“质量”同样关键,人们往往忽略了噪声标签的累积危害。

误区半监督学习和小样本学习都能解决标注不足问题,它们是可互相替代的方案,选一个用就行,没必要组合。

正解二者解决问题的维度不同:半监督解决的是“无标注数据怎么用”,小样本解决的是“标注极少时怎么学得动”。它们像“食材供应”与“学菜方法”——一个管资源,一个管能力,恰好互补。组合框架能同时获得资源利用的高效性和快速适应新任务的能力,在 1-shot 场景下相对单一方法优势显著。

为何常见:初学者容易按“方法目录”去背知识点,认为解决同一问题的技术就是互斥选项,而忽略了深度学习中不同机制经常是正交的、可以叠加的。

误区元学习听起来就是要准备多个训练任务,那它就是普通的多任务学习——把很多任务的数据混合起来训练一个模型,再用新任务微调一下就算元学习。

正解两者核心区别在于优化的目标。多任务学习优化的是“在所有任务上表现好”的单一参数;元学习(如 MAML)优化的是一个“容易在新任务上快速适应”的初始化参数,它显式模拟“先在小步更新、再评估效果”的双层过程。类比来说,多任务学习是“把所有菜谱背下来”,元学习是“练就一套拿到新菜谱就能上手的刀工火候”。

为何常见:元学习在实现层面确实包含多个任务的数据流动,与多任务学习表面相似,但其“学习如何学习”的双层优化语义才是本质,初学者容易被形式迷惑而忽略目标差异。

面试题

Q1. 半监督学习的核心优势是什么?

单选题 · easy

  • A.完全抛弃有标注的样本
  • B.用少量标注加大量无标注训练← 正确答案
  • C.仅仅依靠人工特征工程
  • D.只在大规模数据集上生效

答案:B。半监督学习的本质是“少量标注 + 大量无标注”的协同训练(B 正确)。A 与半监督的定义相悖,完全无标注是无监督学习;C 与特征工程无关;D 也不对,半监督恰恰在数据不足时更有价值。

Q2. 伪标签是指什么?

单选题 · easy

  • A.由专家人工标注的标签
  • B.模型自己预测并采信的标签← 正确答案
  • C.完全没有信息量的标签
  • D.只能用于测试阶段的标签

答案:B。伪标签是模型对无标注数据给出预测、并在满足置信度要求后当作训练标签使用的“自我批改答案”(B 正确)。A 是人工标签,与“伪”相对;C 和 D 都不符合伪标签的定义与用途。

Q3. 一致性正则化的直观含义是什么?

单选题 · mid

  • A.样本越相似预测方差越小
  • B.同一输入增强前后预测一致← 正确答案
  • C.所有样本预测概率完全相同
  • D.模型输出恒定不随输入变化

答案:B。一致性正则化要求同一输入经过不同随机增强后,模型的预测保持一致(B 正确)。A 描述的是样本间距离,不是增强不变性;C 和 D 都会让模型失去判别能力,是错误极端。

Q4. 元学习框架的核心思想包括哪些?

多选题 · mid

  • A.学习一组任务共同的训练方法← 正确答案
  • B.在多个任务间积累学习经验← 正确答案
  • C.只优化当前单任务的损失
  • D.完全不在新任务上做适配

答案:AB。元学习通过跨任务训练学到“如何快速学习”的元知识(A、B 正确)。C 只优化单任务正是元学习要避免的过拟合;D 否定了元学习对新任务的适配能力,与“快速适应”目标相反。

Q5. 原型网络中样本类别由什么决定?

单选题 · mid

  • A.以最近原型距离决定类别← 正确答案
  • B.以支持集样本数量决定
  • C.以训练轮数多少决定类别
  • D.以随机抽样的方式决定类别

答案:A。原型网络先为每类计算原型(特征均值),再按查询样本到各原型的最小距离分类(A 正确)。样本数量、训练轮数和随机抽样都不是分类依据,B、C、D 均错误。

Q6. 半监督与小样本结合的可行策略有哪些?

多选题 · mid

  • A.用伪标签扩充元学习的支持集← 正确答案
  • B.让特征提取器吸收无标注信息← 正确答案
  • C.训练时彻底忽略无标注数据
  • D.用元学习初始化半监督的起点← 正确答案

答案:ABD。伪标签扩增支持集(A)、共享特征编码器吸收无标注信息(B)、元学习初始化半监督起点(D)都是文中介绍的结合策略。C 忽略无标注数据等于退回纯监督,违背结合初衷。

Q7. 伪标签置信度阈值设置过高会导致什么?

单选题 · hard

  • A.伪标签的数目快速增加
  • B.可用无标注样本数量变少← 正确答案
  • C.模型参数量也会随之变大
  • D.训练时间反而大幅缩短

答案:B。阈值 τ 越高,能通过置信度门控的无标注样本越少(B 正确),伪标签池会缩水,可能导致训练信息不足。A 与高阈值的筛选方向相反;C 参数量由网络结构决定,与阈值无关;D 训练时间未必缩短,因为若伪标签太少还需重新调参。

Q8. 少样本学习中“支持集”是指什么?

单选题 · easy

  • A.每类仅少数标注样本的集合← 正确答案
  • B.所有历史训练样本的总和
  • C.专门用于测试的样本集合
  • D.完全没有标注的样本集合

答案:A。支持集是 N-way K-shot 任务中每类仅 K 个标注样本的小集合,用于构造原型或计算梯度(A 正确)。B 是全部训练集,C 是测试集,D 是无标注集,均与支持集定义不符。

Q9. 混合训练框架中循环自举机制包括哪些环节?

多选题 · hard

  • A.先产出伪标签再回填训练集← 正确答案
  • B.用更好的模型生成更准标签← 正确答案
  • C.只更新一次就停止迭代训练
  • D.标签质量随时间不断自我提升← 正确答案

答案:ABD。循环自举的核心链条是“模型 → 伪标签 → 扩充训练集 → 更优模型 → 更准伪标签”(A、B、D 正确)。C 只更新一次就停止违背“循环”本义,也无法体现自举带来的持续提升。

Q10. MAML 元学习优化的目标是什么?

单选题 · extreme

  • A.学习一组最终用于分类的参数
  • B.学习一个易在新任务微调的起点← 正确答案
  • C.学习一组只适配源任务的参数
  • D.学习一个无需任何训练的随机起点

答案:B。MAML 通过双层优化学习一个“元初始化参数”,使得在该参数基础上仅用几步梯度更新就能在新任务上取得好效果(B 正确)。A 描述的是普通监督学习的目标;C 只适配源任务会丧失泛化;D 无需训练的随机起点无法体现元学习学到的先验知识。