[arxiv 2020] Few-Shot Class-Incremental Learning via Feature Space Composition

本文探讨了小样本类别增量学习的问题,该问题涉及模型在新数据集上学习新样本同时保持旧样本知识的能力。主要难点包括灾难性遗忘和新数据过拟合。提出使用嵌入网络和NCM分类器,通过正则化项保持旧知识,以缓解这两个问题。在每个数据集学习阶段,使用固定的基础模型保留旧知识,而新模型则不断学习新知识。

paper
[1] CVPR 2020: Semantic Drift Compensation for Class-Incremental Learning
[2] CVPR 2020: Few-Shot Class-Incremental Learning

什么是小样本类别增量学习?

流程:
1)模型在大规模基础数据集 D ( 1 ) D^{(1)} D(1) 上训练
2)模型在不断增加的新数据集 D ( t ) ( t > 1 ) D^{(t)} (t>1) D(t)(t>1)上学习。 D ( t ) 与 D ( 1 ) D^{(t)}与D^{(1)} D(t)D(1)类别不重叠,且样本数量较少。要求模型学习新样本,同时不忘记旧样本

关键两个难题:
1)对旧数据灾难性遗忘
2)对新数据过拟合

动机

增量学习过程中,base tasks 学习base knowledge,new tasks学习new (lifelong) knowledge。用两个组件base和life-long learning,分别保持旧知识和学习新知识。如图所示,Base Model学习旧知识,其参数保持不变。Model t(t>1)学习新知识,融合上一个模型的知识。

session D ( t ) D^{(t)} D(t)表示第t个数据集的学习阶段。

嵌入网络

小样本类别增量学习的图像分类框架主要有两种,特征提取器+softmax分类器,特征提取器+NCM分类器。由于用softmax分类器的挑战性及面对长任务序列的困难性[1],本选择第二种框架。

特征提取
特征提取网络使用嵌入网络。损失函数如下:

L = L M L + L R (1) \mathcal{L} = \mathcal{L}_{ML} + \mathcal{L}_{R} \tag{1} L=LML+LR(1)
其中, L M L \mathcal{L}_{ML}

### 关于Prototypical Networks for Few-Shot Learning论文 Prototypical Networks 是一种针对小样本学习Few-Shot Learning)设计的方法,旨在通过构建类别原型来完成新类别的快速识别[^1]。该方法的核心思想是在嵌入空间中为每个类别定义一个原型向量,并利用这些原型向量计算输入样本与各个类别的相似度。 #### 论文下载方式 Prototypical Networks 的原始论文《Prototypical Networks for Few-shot Learning》可以在以下链接找到并下载: - 原始论文地址:[https://arxiv.org/abs/1703.05175](https://arxiv.org/abs/1703.05175) 如果无法直接访问上述链接,可以尝试通过其他学术资源网站获取PDF版本,例如Google Scholar 或者 ResearchGate。此外,一些开源项目也提供了对该论文的解读和实现细节说明[^2][^3]。 #### 可视化的实现 对于可视化部分,作者展示了在嵌入空间中的 t-SNE 图像,其中类别原型用黑色表示,而错误分类的字符则用红色高亮显示[^4]。要实现类似的可视化效果,可以通过以下步骤: 1. **提取嵌入特征** 使用训练好的模型对测试数据进行前向传播,得到每张图像对应的嵌入向量。 2. **应用t-SNE降维** 利用 `sklearn.manifold.TSNE` 将高维嵌入向量投影到二维或三维空间以便绘制图形。 3. **绘图展示** 使用 Matplotlib 或 Seaborn 绘制散点图,在图中标记出不同类别的原型位置以及误分类的数据点。 以下是基于PyTorch实现的一个简单代码示例: ```python import torch from sklearn.manifold import TSNE import matplotlib.pyplot as plt def visualize_embeddings(embeddings, labels, prototypes): """ embeddings: 测试样本的嵌入向量 (NxD) labels: 对应的真实标签 (Nx1) prototypes: 类别原型向量 (KxD) """ all_data = torch.cat([embeddings, prototypes], dim=0).cpu().numpy() tsne = TSNE(n_components=2, random_state=42) embedded_data = tsne.fit_transform(all_data) # 提取样本点和原型点的位置 sample_points = embedded_data[:len(embeddings)] prototype_points = embedded_data[len(embeddings):] # 绘制散点图 plt.figure(figsize=(8, 6)) unique_labels = set(labels.cpu().numpy()) colors = plt.cm.rainbow(np.linspace(0, 1, len(unique_labels))) for i, color in zip(unique_labels, colors): idx = np.where(labels == i)[0] plt.scatter(sample_points[idx, 0], sample_points[idx, 1], c=color, label=f'Class {i}') # 添加原型点标记 plt.scatter(prototype_points[:, 0], prototype_points[:, 1], marker='*', s=200, c='black', label='Prototypes') plt.legend() plt.title('t-SNE Visualization of Embedding Space') plt.show() ``` 此函数接受嵌入向量、真实标签以及类别原型作为输入参数,并生成相应的t-SNE可视化图表。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值