【论文阅读笔记】iCaRL: Incremental Classifier and Representation Learning
iCaRL: Incremental Classifier and Representation Learning
1. 背景
本文提出的符合增量学习算法的三条基本属性(as class-incremental):
- 能学习不同时间到达的新类别数据
- 能够对所有现有的类别数据,训练出一个有效的多类分类器
- 对计算存储资源的消耗有一个上限(时空复杂度有上界),或增长得比较慢
目前(2017年前)没有一种方法能够满足这三个条件
2. 本文提出的方法
为了满足上述提到的三个基本属性,本文提出的方法 iCaRL(Incremental Classifier and Representation Learning)的创新点主要有三个:
- classification by a nearest-mean-of-exemplars rule
- prioritized exemplar selection based on herding
- representation learning using knowledge distillation and prototype rehearsal
下面介绍这三个模块的细节
2.1 增量分类器的学习模块(class-incremental classifier learning)
主要有几个要点:
- 模型需要确保保存的采样数据量有个上限K。每增加新类的时候,会修改各个旧类别数据在存储容器中的占比
- 模型结构。模型的特征提取器在增加新类的时候结构不改变,但会在分类器中动态的增加输出层的神经元个数。(即分类器只有一个,并非像LWF那样多头)
.png)
2.2 样本最近-均值分类模块(nearest-mean-of-exemplars classification)
本文提出的模型会如何进行分类(推断or预测)呢?
首先,会计算当前已知所有各个类别数据的对应的平均特征向量。例如有一个类别a在样本容器中的数据量为n,那么类别a的平均特征向量为,所有a类样本特征向量求和除以n;
然后,计算需要推断数据的特征向量与各个类别平均特征向量的距离,以距离最小对应的类别为预测类别。
.png)
2.3 表征学习模块(representation learning)
表征学习模块主要功能是更新特征提取器(即卷积层),需要使用到新类数据以及存储的旧类样本数据。它是怎么更新的呢?其步骤如下:
a) 对新类数据及存储的旧类数据进行数据增广
b) 将增广后的所有数据输入网络,得到数据在旧模型中的特征向量,并存储下来
c) 最后训练更新网络参数,最小化损失函数。对于新类数据而言,会通过训练使网络倾向于得到正确的新类别分类标签;对于旧类数据而言,将生成保存在上一步存储空间中的蒸馏损失
.png)
此处有点像 fine-tune ,但不同之处在于本文的网络会输入新旧类数据,在新类数据训练使网络能够正确分类新类别的同时,也能够不丢失旧类的部分知识。
注意旧类容器中保存的旧类的照片数据,而非其特征向量,因为此时特征提取器参数在不断的更新
2.4 采样器管理(examplar management)
采样器需要思考该保存哪些旧样本的数据?(该存哪些,该丢掉哪些)每一类该保存多少?
iCaRL 的采样器对于每一类该保存多少数据的问题,按照平均来分配,即 每一类的容量m=容器总容量/当前已知类别个数。容器一般都会存储满(不多不少),各类别中的样本有存储优先次序。
对于该保存哪些数据的问题,iCaRL 的样本管理可以分为两部分:取样器 和 剔除器
取样器将计算同一个类别中(指在存储容器中的数据),当前样本特征向量与样本平均特征向量的距离(其实讲不太准确),对距离从小到大排序,将距离最小的前m个确定为需要存储的
.png)
剔除器,将剔除前m个样本后面的数据
.png)
本文实现的采样器实际上仅在当前类别第一次到达时,即作为新类时,会调用取样器,之后不会再调用。此后,仅会调用剔除器去根据类别允许容量剔除样本。
3. 实验结果
.png)
.png)
.png)
.png)
4. 个人思考
我觉得本文的核心创新点是引入了旧类数据采样回放的机制,使得网络中旧类的关键权重能够在一定程度上得以保留。
同时本文的方法缺点也是很明显的,即由于存储空间大小固定为K,其他类别能够存储数据的数量仅为 K/n 不能动态变化,因此当n趋向于一个很大的数时,每个类能够存储的回放样本数据将变得非常小,会严重影响模型的分类性能,因此只适用于已知新类上限的情况下。
缺陷:出现新类-旧类之间样本不均衡的问题,使得模型偏向于预测未知类别为新类
参考链接
本文作者:空口吃大蒜
本文链接:https://www.cnblogs.com/yujun273/p/17307501.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步