0. 摘要

在类别增量学习(Class Incremental Learning, CIL)中,模型需要能够持续学习新的类别。然而,标准的深度神经网络(DNNs)会遭受灾难性遗忘的问题。最近的研究表明,类别不平衡是导致 CIL 中灾难性遗忘的关键因素。本文从基于能量的模型(Energy-Based Model, EBM)的角度出发,理论上证明了类别的自由能量与标签分布是对齐的,因此在追求“平衡”性能时,不同类别的能量应接近。然而,我们发现 CIL 训练的模型中存在严重的能量偏差现象。为了消除这种偏差,我们提出了一种简单而有效的方法,称为能量对齐(Energy Alignment),该方法仅通过在输出的 logits 上添加计算出的偏移标量来实现,且不需要(i)修改网络架构,(ii)干预标准的学习范式。实验结果表明,能量对齐在多个 CIL 基准测试中取得了良好的性能。

关键词:类别增量学习,能量,不平衡

1. 引言

在类别增量学习(CIL)中,理想的智能系统应能够从流式数据中学习新类别,而不会忘记已经掌握的旧类别。当新数据到来时,CIL 中大部分或全部的旧数据无法再次被访问。在这种情况下,深度神经网络(DNNs)会遇到一个严重的问题,称为灾难性遗忘 [1,2],即 DNNs 在学习新知识后很难回忆起旧知识。

当训练数据能够代表评估数据时,即观察到的训练数据分布 $p_o(x,y)$ 与测试数据分布 $p_t(x,y)$ 一致时($x$ 表示数据变量,$y$ 表示标签变量),标准的 DNNs 通常是可靠且强大的。然而,在 CIL 中,理想条件 $p_o(x,y) = p_t(x,y)$ 并未满足。即使使用回放策略(使用极少量的旧数据补充训练数据),旧类别与新类别之间的数据量不平衡问题仍然严重。分布偏移 $p_o(y) \neq p_t(y)$ 会导致模型偏向多数类,这被证明是 CIL 中灾难性遗忘的关键因素 [3,4,5]。

本文从基于能量的模型(EBMs) [6] 的理论视角出发,致力于纠正 CIL 中的偏差模型,提出了一种简单而有效的方法,称为能量对齐(Energy Alignment)。EBMs 通过为每个变量配置(例如,$(x,y)$ 对)分配一个标量能量来捕捉兼容性——通常,低能量表示变量配置高度兼容(当 $y$ 适合 $x$ 时),而高能量表示变量配置高度不兼容(当 $y$ 不适合 $x$ 时)。本工作中,我们揭示了特定类别的自由能量在理论上与类别的概率密度对齐。因此,在追求“平衡”性能的目标下,不同类别的自由能量应相似,因为目标标签分布 $p_t(y)$ 实际上对每个类别是均匀的。然而,对于在非平衡数据上训练的模型,我们发现自由能量中存在严重的偏差:少数类通常具有更高的自由能量,而多数类通常具有更低的自由能量。因此,我们提出了能量对齐(EA)算法来对抗这种偏差。EA 试图将少数类的自由能量与多数类的自由能量对齐,这通过使用理论计算的偏移标量校正预测的 logits 来实现。我们表明,能量对齐可以应用于纯判别分类模型,意味着无需修改网络架构或改变标准训练过程即可轻松获得校正后的模型。我们通过提出的能量对齐方法改进了 CIL 中严重偏差的模型。基于回放 [7] 和蒸馏 [8,9] 策略,我们在每个增量步骤训练后使用能量对齐校正当前模型。实验结果表明,能量对齐在类别增量学习中的有效性。

我们的主要贡献总结如下:

  • 我们从基于能量的模型的角度出发,通过解决类别不平衡问题来缓解类别增量学习中的灾难性遗忘。
  • 我们从能量值的角度解释了在非平衡数据上训练的模型中的偏差。基于这一观察,我们提出了能量对齐来校正偏差模型,这既简单又具有理论依据。
  • 我们在类别增量学习基准测试中展示了能量对齐的有效性。

2. 相关工作

类别增量学习:为了缓解增量学习中的灾难性遗忘,最近提出了许多策略。一组方法通过参数控制 [10,11,12] 来缓解灾难性遗忘,试图保持对旧知识重要的参数不变。知识蒸馏 [9,7,13] 也被用来缓解灾难性遗忘。然而,大多数方法难以处理类别增量学习的场景 [14],而简单的回放策略已被证明在 CIL 中有效 [14,15]。基于回放策略,另一系列研究,如 BiC [4]、IL2M [16]、WA [5] 和 ScaIL [17],将类别不平衡视为导致 CIL 中灾难性遗忘的关键因素,并提出了不同的解决方案。本工作也基于回放策略和蒸馏策略,但尝试从基于能量的模型的角度纠正 CIL 中的偏差。

基于能量的模型与判别模型:考虑一个具有两组变量 $x$(例如,图像)和 $y$(例如,标签)的模型($x \in X$, $y \in Y$, $X$ 和 $Y$ 分别表示 $x$ 和 $y$ 的整个空间),基于能量的模型(EBMs)通过为每个变量配置分配一个非概率的标量能量来捕捉兼容性 [6]。通常,EBMs 构建一个能量函数 $E_\theta(x,y)$,将每个配置 $(x,y)$ 映射到一个能量值,其中 $\theta$ 是可训练的参数集。通常,小能量表示变量配置高度兼容(当 $y$ 适合 $x$ 时),而大能量表示变量配置高度不兼容(当 $y$ 不适合 $x$ 时)。在模型将与其他模型结合使用的场景中,通常需要对能量进行归一化。最常见的归一化方法是利用玻尔兹曼分布将能量值集合转化为概率密度:
$$
p_\theta(y|x) = \frac{e^{-E_\theta(x,y)}}{\int_{y’ \in Y} e^{-E_\theta(x,y’)}}. \tag{1}
$$
最近,一个具有 $C$ 个类别的分类任务通常通过判别深度神经网络 $f_\theta(x)$ 进行优化,其中 $\theta$ 表示可学习的参数集,通过它将输入变量 $x$ 映射到 $C$ 个标量值,称为 logits。然后,这些 logits 通过 softmax 函数用于参数化 $C$ 个类上的后验概率分布:
$$
p_\theta(y|x) = \frac{e^{f_\theta(x)[y]}}{\sum_{y’=1}^C e^{f_\theta(x)[y’]}}, \tag{2}
$$
其中 $f_\theta(x)[y]$ 表示 $f_\theta(x)$ 的第 $y$ 个索引。

比较公式(2)与公式(1),EBMs 与判别模型本质上紧密相关 [18,19]。在不改变神经网络 $f_\theta(\cdot)$ 的参数化的情况下,我们可以重新使用 logits 来表示配置 $(x,y)$ 的能量 [19]:
$$
E_\theta(x,y) = -f_\theta(x)[y]. \tag{3}
$$
实际上,负 logit $-f_\theta(x)[y]$ 确实反映了 $x$ 和 $y$ 之间的兼容性程度——小的 $-f_\theta(x)[y]$ 值对应于“好”的配置,而大的 $-f_\theta(x)[y]$ 值对应于“坏”的配置,这正是基于能量的模型所要求的。

3. 能量对齐

能量中的偏差:类似于公式(1),对于 EBMs,$x$ 和 $y$ 的联合分布可以再次使用玻尔兹曼分布表示为:
$$
p_\theta(x,y) = \frac{e^{-E_\theta(x,y)}}{Z_\theta}, \quad Z_\theta = \int_{x’ \in X, y’ \in Y} e^{-E_\theta(x’,y’)}. \tag{4}
$$
然后,通过对联合分布公式(4)关于 $x$ 进行边缘化,我们得到:
$$
p_\theta(y) = \int_{x’ \in X} \frac{e^{-E_\theta(x’,y)}}{Z_\theta} = \frac{e^{-E_\theta(y)}}{Z_\theta}, \tag{5}
$$
其中亥姆霍兹自由能量 $E_\theta(y) = -\log \int_{x’ \in X} e^{-E_\theta(x’,y)}$。

然后,对公式(5)两边取对数,我们得到:
$$
\log p_\theta(y) = -E_\theta(y) - \log Z_\theta. \tag{6}
$$
如公式(6)所示,负自由能量 $-E_\theta(y)$ 与 $\log p_\theta(y)$ 线性对齐,即 $-E_\theta(y) \propto \log p_\theta(y)$。对于判别神经网络 $f_\theta(\cdot)$,结合公式(3),我们得到模型的负自由能量:
$$
-E_\theta(y) = \log \int_{x’ \in X} e^{f_\theta(x’)[y]}.
$$
由于类别不平衡,观察到的训练集的标签分布与目标(测试)集的标签分布不同,分别记为 $p_o(y)$ 和 $p_t(y)$。尽管观察到的训练数据是非平衡的,但在测试时仍期望获得平衡的预测和优异的整体结果,这意味着目标标签分布 $p_t(y)$ 对所有感兴趣的类别实际上是均匀的。理想情况下,参数为 $\theta$ 的模型应反映目标标签分布,即 $p_\theta(y) \approx p_t(y)$。因此,我们希望:
$$
p_\theta(y=i) = p_\theta(y=j), \quad 1 \leq i \leq C, \quad 1 \leq j \leq C, \quad i \neq j. \tag{7}
$$
进一步结合公式(6),我们期望:
$$
-E_\theta(y=i) = -E_\theta(y=j), \quad 1 \leq i \leq C, \quad 1 \leq j \leq C, \quad i \neq j. \tag{8}
$$
不幸的是,在非平衡数据上训练的模型实际上往往反映训练数据集的标签分布,即 $p_o(y)$ 而不是 $p_t(y)$。我们在 CIFAR10 的非平衡版本上进行了实验,其训练数据的标签分布如图 1a 所示。基于学习到的模型,我们估计了十个类别的自由能量,揭示了多数类往往具有较低的能量,而少数类通常具有较高的能量,如图 1a 所示。这一现象与公式(8)不符,从基于能量学习的角度揭示了训练模型中的偏差。

能量对齐:上述分析指出,目标中隐藏的先验标签分布 $p_t(y)$ 实际上对感兴趣的类别是均匀的。然而,在非平衡数据上训练的模型的自由能量 $E_\theta(y)$ 与先验知识(公式(8))不匹配。我们提出了一种简单而有效的方法,称为能量对齐(EA),直接纠正偏差模型,而不干预 $f_\theta(\cdot)$ 的训练过程。在 EA 中,对 logits 进行修正,以使能量满足公式(8)。

在不失一般性的情况下,考虑第 $i$ 和第 $j$ 类($1 \leq i \leq C$, $1 \leq j \leq C$, $i \neq j$)的自由能量,我们将第 $i$ 类视为“锚定类”,并通过偏移标量 $\alpha_j$ 重新平衡两个自由能量,其公式为:
$$
-E_\theta(y=i) = -E_\theta(y=j) + \alpha_j \Rightarrow \log \int_{x’ \in X} e^{f_\theta(x’)[i]} = \alpha_j + \log \int_{x’ \in X} e^{f_\theta(x’)[j]} \Rightarrow \alpha_j = \log \frac{\int_{x’ \in X} e^{f_\theta(x’)[i]}}{\int_{x’ \in X} e^{f_\theta(x’)[j]}}. \tag{9}
$$
现在,假设偏移标量 $\alpha_j$ 已被计算(将在后面描述),公式(9)的右侧可以重新表示为:
$$
-E_\theta(y=j) + \alpha_j = \alpha_j + \log \int_{x’ \in X} e^{f_\theta(x’)[j]} = \log \int_{x’ \in X} e^{f_\theta(x’)[j] + \alpha_j}. \tag{10}
$$
如公式(10)所示,对于任何输入数据点,第 $j$ 个 logit 可以通过添加一个非学习的标量 $\alpha_j$ 进行调整,从而使得第 $i$ 类和第 $j$ 类的负自由能量 $-E_\theta(y=i)$ 和 $-E_\theta(y=j)$ 能够相等。直观地,当 $\int_{x’ \in X} e^{f_\theta(x’)[i]} > \int_{x’ \in X} e^{f_\theta(x’)[j]}$ 时,$\alpha_j$ 为正,则 logit $f_\theta(x’)[j]$ 被 $\alpha_j$ 增强;如果 $\int_{x’ \in X} e^{f_\theta(x’)[i]} < \int_{x’ \in X} e^{f_\theta(x’)[j]}$,$\alpha_j$ 为负,则 logit $f_\theta(x’)[j]$ 被 $\alpha_j$ 减弱。

对于任何其他类别 $j$($j \neq i$),我们可以用相应的标量 $\alpha_j$ 调整第 $j$ 个 logit,以类似地满足公式(8),因此具有能量对齐的模型将平等对待所有类别,并使公式(7)和公式(8)成立。校正后的模型记为 $f_{\theta; {\alpha_j}_{j=1}^{C-1}}$。所提出的能量对齐策略如图 2 所示。例如,对于上述实验,校正模型的负自由能量如图 1b 所示,表明能量对齐确实能够平衡能量。

偏移标量 $\alpha_j$ 的近似:为了获得 $\alpha_j$,剩下的关键问题是如何计算项 $\int_{x’ \in X} e^{f_\theta(x’)[i]}$ 和 $\int_{x’ \in X} e^{f_\theta(x’)[j]}$。为了避免直接计算不可行的积分,本工作中我们使用蒙特卡罗积分 [20,21] 来估计这些积分。具体来说,对于第 $i$ 类,积分通过 $\int_{x’ \in X} e^{f_\theta(x’)[i]} \approx \int_{x’ \in X’} e^{f_\theta(x’)[i]} \approx \frac{1}{S} \sum_{s=1}^S \frac{e^{f_\theta(x_s)[i]}}{q(x_s)}$ 来近似,其中 $X’ \subset X$ 是感兴趣类别的输入空间。由于 $e^{f_\theta(x)[i]}$ 在训练后的 $\theta$ 下通常对与感兴趣类别几乎无关的样本输出非常低的响应,因此在子空间 $X’$ 上估计积分就足够了。数据点 ${x_s}{s=1}^S$ 从提议分布 $q(x)$ 中采样,假设 $q(x)$ 对输入空间 $X’$ 中的样本分配均匀值(即 $q(x)$ 是均匀分布)。对于另一个积分 $\int{x’ \in X} e^{f_\theta(x’)[j]}$ 也是如此。然后,我们有:
$$
\alpha_j \approx \text{LSE}{s=1}^S (f\theta(x_s)[i]) - \text{LSE}{s=1}^S (f\theta(x_s)[j]), \tag{11}
$$
其中 $\text{LSE}{s=1}^S (z_s) = \log \sum{s=1}^S e^{z_s}$。为了减少近似误差,我们根据每个类别的训练样本数量将类别分为 $M$ 个簇,每个簇共享相同的偏移标量。具体来说,对于分别具有 $C_i$ 和 $C_j$ 个类别的簇 $O_i$ 和 $O_j$,类似于公式(9)、公式(10)和公式(11),我们将簇 $O_i$ 视为“锚定簇”,并通过共享的偏移标量 $\alpha_j$ 重新平衡两个簇的平均能量。$\alpha_j$ 的估计由下式给出:
$$
\alpha_j \approx \frac{1}{C_i} \sum_{i \in O_i} \text{LSE}{s=1}^S (f\theta(x_s)[i]) - \frac{1}{C_j} \sum_{j \in O_j} \text{LSE}{s=1}^S (f\theta(x_s)[j]). \tag{12}
$$
此外,对于任何输入数据,仍然可以通过共享的 $\alpha_j$ 直接调整簇 $O_j$ 中的类别的 logits,以获得校正后的模型,记为 $f_{\theta; {\alpha_j}_{j=1}^{M-1}}$。

带有能量对齐的类别增量学习:我们在算法 1 中展示了带有能量对齐的类别增量学习过程。假设来自不同类别的 $B$ 批训练数据 ${D^{(b)}}{b=1}^B$ 逐渐可用,其中在第 $b$ 个增量步骤中,新的训练数据 $D^{(b)}$ 来自 $C^{(b)}$ 个新类别,而回放数据 $D^{(b)}{\text{old}}$(从前面的数据 ${D^{(1)}, \cdots, D^{(b-1)}}$ 中选择)来自 $C^{(b)}{\text{old}}$ 个旧类别,其中 $C^{(1)}{\text{old}} = 0$ 且 $C^{(b)}{\text{old}} = \sum{k=1}^{b-1} C^{(k)}, b > 1$。每个增量步骤中的回放样本数量(除第一步外,因为初始步骤中没有旧数据)是恒定的,即 $|D^{(1)}{\text{old}}| = 0$, $|D^{(2)}{\text{old}}| = |D^{(3)}{\text{old}}| = \cdots = |D^{(B)}{\text{old}}|$,因此随着遇到更多类别,每个旧类别的回放样本数量逐渐减少,类别不平衡问题变得更加严重。模型 $f_\theta(\cdot)$ 通过复合损失进行训练:
$$
L_{\text{CIL}}(x, y^) = (1 - \lambda) L_{\text{CIL-CE}}(x, y^) + \lambda L_{\text{CIL-KD}}(x), \tag{13}
$$
其中 $y^$ 表示真实标签,$(x, y^) \in D^{(b)} \cup D^{(b)}{\text{old}}$,$\lambda$ 用于平衡两个损失,设置为 $\lambda{\text{base}} \cdot \frac{C^{(b)}{\text{old}}}{C^{(b)} + C^{(b)}{\text{old}}}$,其中 $\lambda_{\text{base}}$ 是一个超参数。交叉熵损失定义为:
$$
L_{\text{CIL-CE}}(x, y^) = \sum_{i=1}^{C^{(b)} + C^{(b)}{\text{old}}} -I{i = y^} \log(p_\theta(i|x)), \tag{14}
$$
其中 $(x, y^) \in D^{(b)} \cup D^{(b)}{\text{old}}$,$I{i = y^}$ 是指示函数,$p_\theta(i|x)$ 是第 $i$ 类的预测概率,定义为公式(2)。知识蒸馏损失定义为:
$$
L_{\text{CIL-KD}}(x) = \sum_{i=1}^{C^{(b)}{\text{old}}} -\hat{q}{\theta_t; \alpha}(i|x) \log(q_\theta(i|x)), \tag{15}
$$
其中 $\hat{q}{\theta_t; \alpha}(i|x) = \frac{e^{f{\theta_t; \alpha}(x)[i]/T}}{\sum_{j=1}^{C^{(b)}{\text{old}}} e^{f{\theta_t; \alpha}(x)[j]/T}}$,$q_\theta(i|x) = \frac{e^{f_\theta(x)[i]/T}}{\sum_{j=1}^{C^{(b)}{\text{old}}} e^{f\theta(x)[j]/T}}$,$x \in D^{(b)} \cup D^{(b)}_{\text{old}}$,$T$ 表示温度。

在类别增量学习中,每个增量步骤中,旧类别形成“旧簇”,被视为“锚定簇”,新类别形成“新簇”(即簇的数量 $M = 2$),然后可以为“新簇”计算一个偏移标量 $\alpha$。我们使用偏移标量进行能量对齐,并获得校正后的模型 $f_{\theta_t; \alpha}(x)$,该模型也作为下一个增量步骤中的教师模型,如算法 1 所示。

4. 实验

实验在 ImageNet ILSVRC 2012 [24] 上进行。ImageNet ILSVRC 2012 包含大约 120 万张训练图像和 5 万张验证图像,提供了两种设置——ImageNet100 包含 100 个随机选择的类别,ImageNet1000 包含全部 1000 个类别。我们的实现基于 Pytorch [25]。使用 ResNet-18 [26,27] 作为骨干网络。

为了公平比较,根据之前工作 [4,7,22,5] 提出的常规实验设置,将 ImageNet100 和 ImageNet1000 分别划分为 10 个增量步骤,每个步骤包含 10 个和 100 个类别。此外,在 ImageNet100 和 ImageNet1000 的实验中,分别为旧类别存储了 2000 和 20000 张图像。我们随机选择回放样本。图 3 展示了一些频率分布,表明训练数据严重不平衡。随着新类别的到来,每个类别的样本数量逐渐减少。因此,类别不平衡问题变得更加严重,而目标标签分布始终对每个类别保持均匀。

在每个增量步骤中,训练模型在所有已见类别上进行评估,并报告准确率。最终,计算所有增量步骤(除第一步外)的平均准确率(Avg),因为第一步实际上与“增量”无关。

能量对齐的效果:如图 4(上)所示,EA 显著提高了性能(在最后一个增量步骤中,ImageNet100 的 top-5 准确率提高了超过 24%,ImageNet1000 提高了超过 29%)。我们进一步绘制了最后一个增量步骤中模型在 ImageNet100 上的混淆矩阵(经过对数变换)。从图 4(下)可以看出,普通方法(无 EA)倾向于将对象预测为新类别,即许多来自旧类别(190)的样本被错误分类为新类别(91100)。在 EA 的帮助下,模型公平地对待新类别和旧类别。这些结果直观地表明,EA 能够有效缓解 CIL 中的类别不平衡问题。

与最先进方法的比较:在 ImageNet100 和 ImageNet1000 上与竞争性和代表性方法的比较结果分别列于表 1 和表 2 中,这些结果明显证实了我们提出的算法在性能上优于许多最先进的方法,再次证明了 EA 的有效性。

5. 结论与未来工作

在本文中,我们提出了一种简单而有效的算法来处理类别增量学习中的模型偏差问题。从基于能量的模型的角度出发,我们系统地分析了类别的自由能量与标签分布之间的关系。基于理论计算,我们提出了能量对齐(EA)方法,通过调整不同类别的输出能量来实现更好的整体性能。在类别增量学习基准测试上进行的综合实验表明,该方法优于许多最先进的方法。

6. 参考文献

[参考文献部分无需翻译]