目录
[1. 少样本学习 (FSL) 的局限:无法聚类新类别](#1. 少样本学习 (FSL) 的局限:无法聚类新类别)
[2. 新类别发现 (NCD/GCD) 的局限:依赖直推式学习](#2. 新类别发现 (NCD/GCD) 的局限:依赖直推式学习)
[1. 缺乏"即时处理"能力(No Real-time Inference)](#1. 缺乏“即时处理”能力(No Real-time Inference))
[2. 无法处理"流式数据"(Data Stream / Incremental Learning)](#2. 无法处理“流式数据”(Data Stream / Incremental Learning))
[3. 严重的"存储负担"与"隐私挑战"](#3. 严重的“存储负担”与“隐私挑战”)
[3. 半监督学习 (SSL) 的局限:不支持全新类别](#3. 半监督学习 (SSL) 的局限:不支持全新类别)
[趋势:广义新类别发现 (GCD) 的兴起](#趋势:广义新类别发现 (GCD) 的兴起)
[1. 为什么传统的 FSL 会"乱塞"?](#1. 为什么传统的 FSL 会“乱塞”?)
[2. 论文是如何让它"不乱塞"的?(引入"非参数化"思想)](#2. 论文是如何让它“不乱塞”的?(引入“非参数化”思想))
[3. 关键:如何实现"聚成一簇"?](#3. 关键:如何实现“聚成一簇”?)
SSL (Semi-Supervised Learning, 半监督学习)
[2. NCD (Novel Category Discovery, 新类别发现)](#2. NCD (Novel Category Discovery, 新类别发现))
[3. GCD (Generalized Category Discovery, 广义新类别发现)](#3. GCD (Generalized Category Discovery, 广义新类别发现))
[4. FSL (Few-Shot Learning, 少样本学习)](#4. FSL (Few-Shot Learning, 少样本学习))
[5. FSNCD (你给出的论文新任务)](#5. FSNCD (你给出的论文新任务))
[1. 为什么 NCD 和 GCD 是 Transductive(直推式)?](#1. 为什么 NCD 和 GCD 是 Transductive(直推式)?)
[2. FSL 与 FSNCD 的 Inductive(归纳式)优势](#2. FSL 与 FSNCD 的 Inductive(归纳式)优势)
[标准 K-means(含 K-means++)的核心不足](#标准 K-means(含 K-means++)的核心不足)
[FSNCD 新策略的核心优势(对应你提供的图片内容)](#FSNCD 新策略的核心优势(对应你提供的图片内容))
[1. 统一高维特征空间建模](#1. 统一高维特征空间建模)
研究背景
少样本学习(FSL)、新类别发现(NCD/GCD)、半监督学习(SSL)各自的局限性(FSL 无法聚类新类别、NCD 依赖直推式学习、SSL 不支持全新类别);
1. 少样本学习 (FSL) 的局限:无法聚类新类别
痛点: FSL 是为了"识别",而不是"发现"。
为什么: FSL 的核心是分类任务。它要求模型在极少量的标注样本(Support Set)下,学会识别出这些特定类别的 Query。
深层原因: FSL 通常假设测试时出现的类别虽然是"未见过"的,但类别标签是给定的。模型的目标是计算样本与已知原型(Prototype)的相似度。它缺乏一种"自发聚类"的机制------如果给它一堆完全没有标签的混合数据,它只会尝试把这些数据往已有的几个类别里"硬塞",而不会意识到:"嘿,这可能是一个我不认识的新簇。"
固化的"分类空间" (Closed Hypothesis Space)
在 FSL 的典型设置(如 N-way K-shot)中,模型的目标是在 N 个给定的类别中做选择。
训练阶段: 模型学会了如何提取特征,以及如何计算样本之间的相似度。
测试阶段: 你给模型 5 个新类别的各 1 张图片(Support Set),然后给它 1 张待分类图片(Query)。模型会计算这张 Query 与这 5 个类别的相似度,并选出最高的一个。
局限所在: FSL 的输出层(或者原型比对层)是闭合的。如果 Query 实际上属于第 6 种类别,模型并没有一个"我不认识"或者"这是一个新聚类"的选项。它会强行从那 5 个已知候选中选出一个最像的。
2. 新类别发现 (NCD/GCD) 的局限:依赖直推式学习
痛点: 往往假设"全体新类别"在训练阶段的无标签集中共同出现(Transductive/Batch-based)。
为什么: NCD 的核心在于通过**聚类(Clustering)**来定义新类。为了聚得准,模型通常需要一次性看到大量新类别的样本,通过对比学习或相互信息最大化来建模数据分布。
深层原因: 很多 NCD 算法具有"闭环性"。它在无标签集上训练后,模型就固定了。如果你在推理阶段(Inference)突然给它一个全新的、孤立的样本,它很难在没有上下文参考(其他同类样本)的情况下,稳定地将其归入某个新簇。它更像是一个"批处理"过程,而非能够处理流式、动态增长数据的系统。
1. 缺乏"即时处理"能力(No Real-time Inference)
想象你在开发一个自动驾驶系统 或扫地机器人:
NCD 的逻辑: 机器人遇到一个从未见过的障碍物(新类 A),它不能立刻判断这是什么。它必须先攒够 1000 个这类障碍物的样本,然后把这 1000 个样本一起丢进聚类算法里"跑一遍",才能给它们贴上一个统一的代号。
痛点: 在攒够数据之前,它对眼前的这个物体是完全无知的。这种滞后性在需要实时决策的场景下是致命的。
2. 无法处理"流式数据"(Data Stream / Incremental Learning)
现实世界的数据是像流水一样源源不断的,而不是一个固定不动的"池子"。
NCD 的逻辑: 它是"闭环聚类"。如果你今天聚好了类 A 和 B,明天突然又出现了一个新类 C 的样本,传统的 NCD 往往需要把 A、B、C 所有的无标签数据重新倒在一起,重新跑一遍聚类。
3. 严重的"存储负担"与"隐私挑战"
NCD 的逻辑: 为了保证聚类效果,你必须在内存或硬盘里缓存大量的无标签测试数据。
存储: 如果是高分辨率视频数据,攒够能聚类的规模会占用巨大空间。
隐私: 在医疗或金融领域,数据往往阅后即焚,不允许你为了聚类而长期留存大量用户的原始数据。
痛点: 计算成本极高。模型没有一种"归纳(Inductive)"的规则,能让它在看到一个新样本时直接说:"根据我之前总结的规律,这个新来的家伙属于第 4 号新簇。"
3. 半监督学习 (SSL) 的局限:不支持全新类别
痛点: 强烈的"闭世界(Closed-world)"假设。
为什么: 传统 SSL 的目标是利用无标签数据来增强已知类别的分类器。它假设无标签数据的类别空间 {Y}(u) 与有标签数据的类别空间 {Y}(l)是完全一致的 {Y}(u) = {Y}(l)。
深层原因: SSL 的主流技术(如伪标签 Pseudo-labeling、一致性正则 Consistency Regularization)都是为了把无标签数据推向已知的决策边界。如果无标签数据中包含"全新类别"(Out-of-Distribution, OOD),模型会产生严重的模型坍塌或过拟合,强行将新类样本贴上旧类标签,导致分类器性能大幅下降。
核心差异对比表
领域 核心任务 对无标签数据的假设 致命短板 FSL 快速适配 (Adaptation) 极少,主要靠先验知识 遇到无标签新类时"两眼一抹黑",无法自主发现结构 NCD 结构挖掘 (Discovery) 包含大量待发现的新类别 泛化性差,往往需要整体聚类,难以处理增量新样本 SSL 边界增强 (Refinement) 与有标签数据类别完全相同 鲁棒性低,遇到新类别会产生"识别错觉"
趋势:广义新类别发现 (GCD) 的兴起
正因为你提到的这些局限,现在的研究正在向 GCD (Generalized Category Discovery) 演进。GCD 试图打破这些边界:它要求模型在一个包含"已知类"和"未知类"的混合无标签池中,既能通过 SSL 提升已知类性能,又能像 NCD 那样自动聚类出新类别,同时还要具备 FSL 的高效学习能力。
本文的核心解决思路:融合 FSL 和 NCD,提出新任务,用归纳式学习替代 NCD 的直推式学习,让模型仅靠少量支持样本完成「已知类识别 + 新类聚类」。
看论文之前,先提出一下问题(询问的大模型)
但是我不理解的,FSL他需要给定的类别标签进行聚类,NCD在无标签训练之后就固定了,但是假如来一个新的标签,你还是不知道啊
FSL:你不是说他会往已知的几个类里面塞吗,也不是把他们聚成一簇啊
Gemini回答:
这是一个非常关键的逻辑转折点。你的质疑非常敏锐:"如果模型只会往已知的坑里塞,那它凭什么能聚成新的一簇?"
这正是 FSL(少样本学习) 和 NCD/GCD(新类别发现) 之间最本质的冲突,也是你提到的这篇论文试图解决的核心技术矛盾。
我们可以从以下三个层面拆解,看看模型是如何从"乱塞"变成"聚类"的:
1. 为什么传统的 FSL 会"乱塞"?
传统的 FSL(如原型网络 ProtoNet)使用的是 Softmax 归一化。
逻辑: 概率总和必须为 1。如果已知类有"猫、狗",来了一只"袋鼠",模型计算相似度后发现:袋鼠和狗有 20% 像,和猫有 10% 像。
结果: 经过归一化,模型会说:"我有 66% 的把握它是狗"。这就是你说的**"往已知类里塞"**。因为它没有给"未知"留出空间。
2. 论文是如何让它"不乱塞"的?(引入"非参数化"思想)
要解决这个问题,这篇论文(以及 GCD 任务)通常会引入一个**"开放式原型"或"对比学习"**的机制,打破 Softmax 的闭环:
不再是"选一个",而是"看距离": 模型不再强制样本必须属于 A 或 B,而是计算它在特征空间里的绝对位置。
对比学习的功劳: 模型在训练时会被要求:"让相似的靠拢,不相似的推开"。
当一群"袋鼠"出现时,虽然模型不知道它们叫什么,但由于它们长得像,对比学习会强迫它们在特征空间里自发抱团。
此时,如果它们距离"猫"和"狗"的中心都很远,模型就会意识到:"这是一个新的密集区,我不应该把它往旧类里塞。"
3. 关键:如何实现"聚成一簇"?
你提到的这篇论文之所以能实现"聚类",通常是因为它改变了输出层的设计。它不再是一个固定的分类头,而是采用了以下两种策略之一:
策略 A:半监督聚类(Constrained Clustering)。 模型在处理无标签数据时,会参考已知类的分布。如果一个样本和所有已知类都不像,它会被丢进一个"待分配池"。通过 K-Means 或 Sinkhorn 算法,模型在这个池子里寻找新的中心点。
策略 B:双分支/多头结构。 一个头负责认"老朋友"(分类),另一个头负责找"新邻居"(聚类)。这两个头共享同一个特征提取器。特征提取器在识别老朋友的过程中学到了"如何分辨事物",并把这种能力迁移到新类别上,让新类别能够清晰地分簇。
图片说明
SSL (Semi-Supervised Learning, 半监督学习)
图示特征: 训练集里有带数字的实线圆圈(有标签),也有带问号的虚线圆圈(无标签)。
核心逻辑: 它的目标是**"利用无标签数据来画好已知类的边界"**。
局限: 你看 Test 框里,所有的问号最终都指向了已知的 ①②③。它假设世界只有这三个类,无标签数据只是用来帮你把这三个类认得更准。它不支持全新类别。
2. NCD (Novel Category Discovery, 新类别发现)
图示特征: 训练和测试是在一起的(Train + Test),这叫直推式学习。
核心逻辑: 它的训练集只有已知类 ①②。但在测试/训练混合池里,出现了一堆完全不属于 ①② 的新样本。模型的目标是**"在已知类的启发下,把新类 ④⑤ 聚出来"**。
局限: 它通常假设已知类和新类是完全分开处理的(Disjoint),而且往往需要一次性看到所有新类样本才能聚类。
3. GCD (Generalized Category Discovery, 广义新类别发现)
图示特征: 注意看那个大圈,里面混合了已知类(①②)的无标签样本和全新类(问号)的无标签样本。
核心逻辑: 这是 NCD 的升级版。它不再假设无标签数据全是新类。模型必须同时做两件事:
把属于 ①② 的无标签样本归位(类似 SSL)。
把不属于 ①② 的样本聚成新类(类似 NCD)。
一句话总结: 它面对的是一个真实且混乱的无标签池。
4. FSL (Few-Shot Learning, 少样本学习)
图示特征: 训练集只有 ①②③。但在测试时,突然给了你 ④⑤ 的极少量样本(带箭头的 Support Set)。
核心逻辑: 它的目标是**"快速迁移"**。模型利用在 ①②③ 上学到的特征提取能力,仅看一眼 ④⑤,就能在测试集里认出它们。
局限: 就像你之前说的,如果测试集里出现了图中没给标签的"红色问号",FSL 会选择无视或者强行归类,它没有聚类能力。
5. FSNCD (你给出的论文新任务)
这是这张图的终点,也是最强的形态:
它融合了 FSL 的灵活性(能通过少量样本认出 ④⑤);
同时也保留了 NCD 的探索欲(能自动把没见过的红色问号聚成一簇)
实验样本说明

Yu包含Ys,Yn,因此,他会最后实验结果是Test
1. 为什么 NCD 和 GCD 是 Transductive(直推式)?
看表中的 Test 这一列:
-
NCD 和 GCD 在 Test 下面是横杠
-。这意味着它们没有独立的测试阶段。 -
含义: 它们把要识别的新类数据({Y}U)在训练阶段就一股脑全丢进去了。模型是边练边聚类。这就印证了你之前的疑问------它们必须"一次性看到所有样本"才能得出结果,没法处理训练结束后突然蹦出来的新样本。
2. FSL 与 FSNCD 的 Inductive(归纳式)优势
看这两行的 Test 和 Query 列:
-
它们都有明确的 Test 目标({Y}U),即训练时完全不出现的类别。
-
关键差异在最后一列 Query:
-
FSL: Query 是 {Y}S。意思是:我给你几张"袋鼠"的参考图(Support),你只需要在测试集(Query)里把"袋鼠"认出来就行。
-
FSNCD(这篇论文): Query 是 {Y}S U {Y}N。这简直是"地狱难度"。意思是:我给你几张"袋鼠"的参考图,但在测试集里,不仅有袋鼠({Y}(s),还有一大堆我连参考图都没给你的"考拉"、"鸵鸟"({Y}(N), Novel classes)。
-
分类构建器
| 逻辑手段 | 对应方法 | 代码里的"判断句" | 结果 |
|---|---|---|---|
| 合并限制 | SHC | if 两个簇包含不同已知原型: 不要合并 |
保护已知类的边界,留出新类空间 |
| 拆分触发 | UKC | if 某个簇样本数 > 平均值 * 阈值: 必须拆分 |
发现隐藏在旧类阴影下的新类别 |
标准 K-means(含 K-means++)的核心不足
必须预先指定簇数量 K
- 真实场景(如新类发现)中,新类数量未知,无法提前确定 K,依赖人工先验,不切实际。
- 合成数据集上的 K 设定是基于 "人类感知" 的假设,无法泛化到复杂真实任务。
对初始质心选择高度敏感
- 随机初始化易陷入局部最优,导致聚类结果不稳定、差异大。
- K-means++ 虽通过 "远距优先" 策略优化了质心初始化,但仍未解决 K 未知的核心问题,只是提升了收敛稳定性。
无法处理不确定性场景
- 小样本新类发现中,特征空间存在不确定性(如样本少、噪声多、新类边界模糊),标准 K-means 缺乏对不确定性的建模,无法自适应调整簇结构。
FSNCD 新策略的核心优势(对应你提供的图片内容)
1. 统一高维特征空间建模
- 假设支持集(已知类)和查询集(未知新类)共享同一个高维特征空间,让已知类原型(prototypes)与未知查询样本在同一空间内聚类,充分利用支持集的监督信息。
- 利用该空间的不确定性估计 ,辅助自动选择新类对应的质心数量,摆脱对人工指定 K 的依赖。
代码解读
- Test Acc All: 0.8793, Old: 0.9535, New: 0.8051



