1. 广义类别发现:当机器学习遇见未知世界
想象你正在整理一个杂乱无章的照片库,里面既有你熟悉的家人朋友(已知类别),也混入了从未见过的陌生人(未知类别)。传统机器学习就像个固执的图书管理员,只会给已知面孔贴标签,对陌生照片要么乱分类要么直接丢弃。这正是**广义类别发现(GCD)**要解决的核心问题——让AI系统在标记数据和未标记数据混合的场景中,自主识别新旧类别。
这项技术的突破性在于打破了传统图像识别的三大枷锁:第一,不再要求预先知道所有类别;第二,允许新旧类别同时存在;第三,无需预先确定未知类别的数量。在实际应用中,这种能力价值连城。比如电商平台每天新增的海量商品中,既包含已知品类的变体(如新款iPhone),也可能出现全新品类(如刚上市的智能眼镜)。传统方法需要人工标注每个新品类才能识别,而GCD系统可以自动发现并归类。
2. 对比学习:让AI学会"找不同"的秘诀
2.1 从婴儿学习到机器智能
人类婴儿通过对比来认识世界——区分猫和狗不是靠记忆特征清单,而是观察它们的不同。**对比学习(Contrastive Learning)**让AI获得了类似能力。具体来说,它通过构造正负样本对来训练模型:正样本是同一图像的不同视角(如裁剪、旋转后的版本),负样本则是其他随机图像。这样训练出的模型会将相似样本映射到特征空间邻近位置,不相似的则推远。
# 简化的对比损失函数示例
import torch
import torch.nn.functional as F
def contrastive_loss(features, temperature=0.1):
# features是经过L2标准化的特征向量
sim_matrix = torch.mm(features, features.T) / temperature
labels = torch.arange(features.size(0)).to(device)
return F.cross_entropy(sim_matrix, labels)
2.2 Vision Transformer的降维打击
传统CNN像用放大镜观察局部细节,而**Vision Transformer(ViT)**则像站在高处俯瞰全局。当配合对比学习时,ViT展现出惊人的"最近邻"特性——在特征空间中,同类样本会自然聚集成簇。论文中的实验显示,使用ViT骨干网络比传统ResNet在CIFAR-100上的聚类准确率直接提升18%,这相当于从业余选手跃升为专业运动员的水平。
3. 半监督k-means:当聚类遇上导航仪
3.1 传统聚类的困境
普通k-means就像蒙眼走迷宫,完全依赖数据分布。当新旧类别混杂时,常出现两类错误:要么把新类别强行归入已知类,要么把已知类拆分成多个无意义簇。在Stanford Cars数据集上的实验表明,传统方法在新类别上的准确率仅有13.8%,几乎相当于随机猜测。
3.2 带路标的聚类算法
半监督k-means的妙处在于利用少量标记数据作为"路标"。算法流程分三步走:
- 用标记数据初始化聚类中心
- 计算所有样本到中心的距离
- 通过匈牙利算法优化簇分配
# 半监督k-means核心步骤
from sklearn.cluster import KMeans
from sklearn.metrics import pairwise_distances_argmin_min
def semi_supervised_kmeans(labeled_data, unlabeled_data, n_clusters):
# 用标记数据初始化中心
init_centers = labeled_data.groupby('label').mean().values
kmeans = KMeans(n_clusters=n_clusters, init=init_centers)
kmeans.fit(unlabeled_data)
return kmeans.labels_
在Herbarium19植物数据集上,这种方法使新类别的识别准确率从12.8%飙升至27%,相当于给植物学家配了个专业助手。不过要注意,当已知类别样本过少时(<5%),算法可能会被"带偏",这时需要调整聚类权重。
4. 实战指南:构建自己的GCD系统
4.1 数据准备的金字塔
构建GCD系统就像盖房子,数据是地基。建议按以下比例划分数据:
- 标记数据(旧类别):20%-50%
- 未标记数据(新旧混合):50%-80%
- 验证集(用于调参):10%
特别注意避免数据泄露——确保验证集中的新类别不出现在训练标记数据中。就像教孩子认动物时,测试用的"鸭嘴兽"绝不能出现在教学图册里。
4.2 模型训练四步曲
- 预训练阶段:使用MoCo或SimCLR框架在无标签数据上训练ViT
- 微调阶段:在标记数据上添加监督对比损失
- 聚类阶段:运行半监督k-means
- 评估阶段:计算新旧类别的分离准确率
# 典型训练命令示例
python train.py \
--arch vit_small \
--data_path ./dataset \
--contrastive_method moco \
--temperature 0.2 \
--lr 0.03 \
--batch_size 256
4.3 超参数调优避坑指南
- 温度参数:控制对比学习的难易程度(建议0.1-0.5)
- 聚类数量:先用肘部法则估计,再根据轮廓系数调整
- 学习率:ViT通常需要较小学习率(1e-4到1e-3)
我在处理细粒度车型数据集时,发现温度参数设为0.15时,模型对车标细节的敏感度最佳。而学习率超过5e-4会导致特征空间过度收缩,反而降低聚类效果。
5. 突破与挑战:GCD的现在与未来
当前最优方法在CIFAR-10上达到91.5%的准确率,已经超越人类平均水平。但在细粒度场景(如不同型号跑车)中,性能仍会下降30%-40%。主要瓶颈来自三个方面:类间相似度高(如大众甲壳虫和保时捷911的经典造型)、类内差异大(同一款车的不同颜色)、以及长尾分布(稀有类别样本少)。
一个有趣的发现是,当新旧类别存在语义关联时(如智能手机→折叠屏手机),模型表现会明显优于毫无关联的情况(如智能手机→智能手表)。这提示我们,未来可以引入层次化类别结构来进一步提升性能。另一个待突破的方向是动态类别数量估计——就像侦探破案时,不仅要识别已知嫌疑人,还要判断是否有未知凶手。


被折叠的 条评论
为什么被折叠?



