Open yaoyz96 opened 1 year ago
问题:
问题:
- EM是他们独创的还是所有incremental learning都有的?看起来像是memory bank/ database之类的东西,分类的时候直接query/retrieval这个database?这个东西是在内存里面的还是dump到本地然后eval的时候再load然后query?
- 看起来contribution 1单纯是提点的一个操作,1和2之间是并列关系还是递进关系?2的tradeoff和1有关吗?
- contribution 1让我想起来diffusion中VQ-VAE的codebook操作了,不确定是类似操作还是截然不同,可以参考阅读 https://sunlin-ai.github.io/2022/06/02/VQ-VAE.html
EM是Incremental Learning (IL)里普遍使用的一个东西。IL由于不断学习new classes,就会遗忘old classes,所以缓解遗忘问题最有效的方法就是replay-based method,也就是回放old data,这需要一个memory来存储一些精选的old data。但是后续工作认为replay-based仍然对memory耗费过大,所以提出在memory存放每个类别的prototype作为回放数据。另外,普遍认为回放prototype的做法由于不需要访问old data,所以是一种old data-free(好像叫这个名字)的方法。
Contribution 1是从CV传统分类任务里拿过来的,作用就是提点
diffusion VQ-VAE
大概看了 diffusion VQ-VAE,和这里的高维计算差别还是有的。codebook 原理没有细看,但是这里高维计算本质上就是一个 FC,故事包装而已,技术上远没有 codebook 复杂。
一些改进的思路:
C-FSCIL (CVPR 2022)
Constrained Few-shot Class-incremental Learning, CVPR 2022. [paper][code]
Institution & Author
Motivation
从 supervised classification task 借鉴过来的方法:利用 hyper-dimensional computing 生成 quasi-orthogonal vectors,提高分类任务表现。方法优势:
Contribution
提出 C-FSCIL 框架,用于 Few-shot Incremental Learning 任务:
Preliminaries
FSCIL 任务即 Few-shot Class Incremental Learning,结合了增量学习及小样本学习。FSCIL 顺序提供 $S$ 个训练集 (session) $\mathcal{D}^{(1)}, \mathcal{D}^{(2)}, ..., \mathcal{D}^{(s)}, ..., \mathcal{D}^{(S)}$,其中:
第一个 session $\mathcal{D}^{(1)}$ (s=1) 称作 base session,提供较大的数据集(相对于后续 session 的 few-shot 来说),用于 pre-training 和 meta-training。后续 session $\mathcal{D}^{(s)}$ (s > 1) 的训练样本数量为 $|\mathcal{D}^{(s)}| = c \times k$, $c = |\mathcal{C}^{(s)}|$ 为 class 数量(few-shot ways), $k$ 为每个 class 包含的有标签样本(few-shot shots),c-way k-shot task。
C-FSCIL 模型
模型包含三部分:
FE:
FE $f_{\theta_1}$ 将输入数据从 input domain $\mathcal{X}$ 映射到 feature space $\mathbb{R}^{d_f}$:
$$ f_{\theta_1}: \mathcal{X} \rightarrow \mathbb{R}^{d_f} $$
其中, $\theta1$ 为 $f{\theta_1}$ 的可学习参数。
FCL:
(contribution)为了形成 hyper-dimensional distributed representation, $f_{\theta1}$ 与一个 FCL $g{\theta_2}$ 相连,将 feature 从 $\mathbb{R}^{d_f}$ 映射到 $\mathbb{R}^{d}$:
$$ g_{\theta_2}: \mathbb{R}^{d_f} \rightarrow \mathbb{R}^{d}, d < 512 $$
其中, $\theta_2 \in \mathbb{R}^{d \times df}$ 为 $g{\theta_2}$ 的可学习参数。可训练参数 $\theta_1$ 和 $\theta_2$ 联合定义为 embedding network $\theta = (\theta_1, \theta_2)$。
EM:
mode 1:embedding network (FE + FCL) 为每个样本输出一个 feature vector,每个类别所有样本的 feature vector 取平均,得到该类的 prototype,存储在 EM。
mode 2/3:FE 为每个样本输出 feature,每个类别所有样本的 feature 求平均后(存储在 GAAM)再经过 FCL,输出该类别的 prototype,存储在 EM。
在 session $s$,EM 中存储所有已见类别的 prototype: $P^{(s)}=(p_1, p2, ..., p{|\widetilde{\mathcal{C}}^{(s)}|})$, $P^{(s)} \in \mathbb{R}^{d \times |\widetilde{\mathcal{C}}^{(s)}|}$
GAAM(mode 2/3):
(contribution)在 mode 2 和 mode 3 中,FE 的 output feature 在进入 FCL 前,对每个类别所有样本的 feature 求平均,得到每个类别的 globally averaged activations(实际上就是 few-shot 常规做法里的 prototype),存储在 GAAM。但是,这里不将 GAAM 的内容作为类别的 prototype,而是仅用于后续 FCL retrain 阶段的特征对齐。
prototype 的计算:
给出任意一个 query 样本 $x \in \mathcal{E}^{(s)}$ 和 EM 中的 prototype set $\textbf{P}^{(s)} = (p_1, p2, ..., p{|\widetilde{\mathcal{C}}^{(s)}|})$,样本 $x$ 属于类别 $i$ 的得分 $l_i$ 为:
$$ li = \text{cos}(\text{tanh}(g{\theta2}(f{\theta_1}(x))), (\text{tanh}(p_i))) $$
其中, $\text{tanh(·)}$ 为 hyperbolic tangent function(双曲正切函数), $\text{cos(·)}$ 为 cosine similarity(余弦相似度)。最后,score $l_i$ 通过 soft absolute sharpening function $\epsilon(·)$ 进行准正交化 quasi-orthogonality。
3 Update Mode
为了提高 inter-class separation 能力,C-FSCIL 提供了 3 种 update mode,以 memory 和 compute cost 为代价提升 accuracy。
Mode 1: Averaged Prototypes
(step 1)pre-training on base session:(FE + FCL) + FCL_aux 进行预训练,这里 FCL 作为 embedding network 的一部分,将 FE 提取的 feature 映射到高维空间(d=512),而 FCL_aux 是用于预测类别的全连接层,其输出维度等于 base session 的类别个数
(step 2)meta-training on base session:将预训练阶段的 FCL_aux 直接扔掉(和 few-shot learning 的做法一样),对 embedding network (FE + FCL) 进行 meta-train,将 base session 的所有类别 prototype 都存储在 EM 中。embedding network 通过 meta-training 学习为不同 class 赋予近似 quasi-orthogonality 的 vector,使得在 hyperdimensional space 中不同 class 远离彼此。
(step 3~x)learning on session:从 base session (s=1) 到 novel session (s>1),FE 和 FCL 的参数均冻结,仅对 EM 进行更新,将所有已见 class 的 prototype 存储在 EM 中。
mode 1 在连续学习阶段(setp 3~x)没有可训练的模块,单纯依靠前两阶段训练好的 FE 和 FCL 对 novel class 进行特征提取。
Mode 2: Retraining on Bipolarized Prototypes
Motivation:随着 new session 增多,类间(inter-class)区分度会逐渐下降,Mode 2 则通过调整 EM 中的 prototype 表示,解决类间区分度下降的问题。
方法:
Mode 2 的训练策略包括两个阶段,首先对 EM 中的 prototypes 加噪声,然后使用 GAAM 中保存的 averaged activation 对 FCL进行 retain,最大化 FCL output 与加噪后 prototype 的相似度,retrain 结束后 averaged activation 再次通过 FCL,得到最终的 prototypes 保存在 EM 中。
stage 1:调整 EM 中的 prototypes,减小相近类别 prototype 的相似度
stage 2:对齐 embedding network 的输出,使其 align 到 bipolarized prototypes
对 FCL 的 retain 迭代地执行 $T$ 次,最大化 GAAM 中 averaged activation 与 bipolar prototypes 的 cosine similarity
最后一次 retrain 后,再次将 GAAM 中的 averaged activations 输入到 FCL,得到最终的 prototype。此时 FCL 已经在 quasi-orthogonal bipolarized prototypes 上进行了 fine-tune,因此产生的 prototypes 也是 quasi-orthogonal 的
Mode 3: Retraining on Nudged Prototypes
Motivation:与 Mode 2 的出发点相同,仍然是为了解决类间区分下降的问题。但与 Mode 2 不同的是,Mode 3 基于优化问题提出 prototype alignment 策略,而非简单地对 prototype 加噪声。整个过程和 Mode 2 类似,分为两个阶段:先对 EM 中的 prototype 进行调整,再利用 GAAM 对 FCL 进行 retrain,retrain 结束后 averaged activation 再次通过 FCL,得到最终的 prototypes 保存在 EM 中。
方法:
Mode 3 的训练策略包括两个阶段,首先对 EM 中的 prototypes 进行优化,获得 nudged prototypes,然后和 Mode 2 一样,retrain FCL 对齐到 nudged prototypes
stage 1:通过两个 loss function 迭代优化 EM 中的 prototypes,使其满足下面两个性质
stage 2:embedding network 与 nudged prototypes 进行对齐(与 Mode 2一样),对 FCL retrain $T$ 次
与 Mode 2 类似,最后一个 retrain 后,再次将 GAAM 中的 averaged activations 输入到 FCL,得到最终的 prototype
Experiments
Datasets
Exp. Setup
mini-ImageNet 和 CIFAR100(自然图像)
Omniglot(手写字体)
问题 & 思考