🌈 个人主页:十二月的猫-CSDN博客
🔥 系列专栏: 🏀论文精读_十二月的猫的博客-CSDN博客💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光
目录
1. Abstract
2. Introducing
3. Related Work
4 The Proposed Method
4.1 Gradient Imbalance Problem in LT Learning
4.2 LT Problem as Multi-Objective Optimization
4.2.1 定义 1(帕累托最优性)
4.2.2 基于梯度的类别分组
4.2.3 解决组级 MOO 问题
5. 结论
1. Abstract
现实世界的数据极不平衡,呈长尾分布,导致模型偏向于样本充足的类别,而在稀有类别上表现不佳。最近的方法提出了重新平衡类别的建议,但这些方法面临着 “跷跷板困境”(对尾部类别的性能提升可能会降低头部类别的性能,反之亦然)。在本文中,我们认为跷跷板困境源于不同类别的梯度不平衡,在这种情况下,不适当类别的梯度被设置为更新的重要梯度,因此容易造成对尾部类别的过度补偿或补偿不足。为了实现理想的补偿,我们将长尾识别表述为一个多目标优化问题,同时公平地尊重头部和尾部类别的贡献。为了提高效率,我们提出了梯度平衡分组(GBG)策略,将梯度方向相似的类集中在一起,从而使每次更新都近似于帕累托下降方向。我们的 GBG 方法能促使梯度方向相似的类形成更具代表性的梯度,并为尾部类提供理想的补偿。此外,我们在长尾学习的常用基准上进行了大量实验,证明了我们的方法优于现有的 SOTA 方法
1、把长尾问题归纳到不同类别的梯度不平衡,提出梯度平衡分组
2、将长尾问题归结为一种多目标优化问题
2. Introducing
深度学习已取得重大进展,并被广泛应用于许多领域(Li et al 2022; Tan et al2020). 这些卓越成就大多依赖于大型且相对平衡的数据集,如 ImageNet(Deng 等,2009 年)和 MS-COCO(Lin 等,2014 年)。然而,现实世界的数据往往极不平衡,呈现长尾分布。在长尾数据上进行训练通常会导致严重偏向于样本充足的类别(头部类别),而在稀有类别(尾部类别)上表现不佳,这就产生了长尾学习领域。为了解决长尾分布中的学习问题,最近在长尾学习方面取得的进展可分为三类。首先,类平衡方法(Zhang 等,2021b)通过重采样或直接加权来提高尾类的重要性。
为了解决长尾分布的学习问题,最近在长尾学习方面取得的进展可分为三类。首先,类平衡方法(Zhang 等 2021b)直接通过重采样或重加权来提高尾类的重要性。其次,解耦方法(Zhou 等 2020)使用两阶段训练方案来平衡分类器。第三,代表方法(Cao 等人,2019 年)设计了特定的损失函数,以实现类间稀疏性和更均衡的特征分布。总之,这些方法的主要共识是在长尾训练中提高尾类的重要性。然而,现有的旨在提高尾类梯度重要性的再平衡方法(Zhang 等 2021b;Kang 等 2019;Shu 等 2019)可能会受到 seearXiv:2310.20490v2 [cs.CV] 1 Nov 2023 的影响。也就是说,提高尾类的性能可能会降低头类的性能,反之亦然。
1、长尾现象普遍存在
2、三个方法针对长尾问题:
- 类平衡(重采样、重加权);
- 解耦训练(goole的最优解);
- 设定特定损失函数(例如balanceLoss论文,通过对loss的调整,提高尾部数据在loss中的影响) 除了这三个方法还有没有其他的思路?
本文从长尾学习中梯度不平衡的角度研究了跷跷板困境,发现尾类梯度被头类梯度所抑制。在这种情况下,不恰当的加权方案可能会导致对尾类梯度的过度补偿或补偿不足。一般来说,补偿不足指的是偏向头部类别的学习,补偿过度指的是过度偏向尾部类别的学习。以不平衡的两类分类为例,我们在图 1 中说明了不同补偿的效果。通过从参数空间到损失空间的投影,我们发现补偿不足可能会导致尾类学习不足(图 1(a)),而过度补偿可能会阻碍头类的学习(图 1(b))。理想情况下,长尾问题中可行的梯度补偿应保持帕累托下降方向(Harada、Sakuma 和 Kobayashi,2006 年),这绝不应损害不平衡分布中的任何类别,如图 1(c)所示。
类重平衡、设定特定损失函数方法本质:提升尾部数据的重要性,从而在loss反向传播时,对模型参数影响更大
本文从长尾学习中梯度不平衡的角度研究了跷跷板困境,发现尾类梯度被头类梯度所抑制。在这种情况下,不恰当的加权方案可能会导致对尾类梯度的过度补偿或补偿不足。一般来说,补偿不足指的是偏向头部类别的学习,补偿过度指的是过度偏向尾部类别的学习。以不平衡的两类分类为例,我们在图 1 中说明了不同补偿的效果。通过从参数空间到损失空间的投影,我们发现补偿不足可能会导致尾类学习不足(图 1(a)),而过度补偿可能会阻碍头类的学习(图 1(b))。理想情况下,长尾问题中可行的梯度补偿应保持帕累托下降方向(Harada、Sakuma 和 Kobayashi,2006 年),这绝不应损害不平衡分布中的任何类别,如图 1(c)所示。
为了在 “跷跷板 ”困境中实现可行的补偿,我们建议将长尾学习表述为一个多目标优化问题(MOO),其中每个类别都有其类别级的训练经验损失。这样,我们的目标就是从一组类级梯度中找到一个折中梯度,在每次更新时不损害任何损失。此外,由于两个原因,在每次迷你批训练中独立提取每个类的梯度是不切实际的。一方面,更多的类会导致更多的计算时间,还可能造成内存不足的问题。另一方面,有限的批次规模无法保证对每个类的访问,尤其是尾类,从而导致每个优化步骤的目标不完整。
因此,在本文中,我们开发了一种梯度平衡分组(GBG)算法,在长尾学习中实现批量级梯度平衡。具体来说,我们首先计算所有类的梯度,得到类之间的梯度相似度,从而建立相似度矩阵。然后,我们根据相似性矩阵对梯度相似的类进行分组学习。为了获得平衡梯度以保证帕累托下降,受经典多梯度下降算法(Sener 和 Koltun,2018 年)的启发,我们将各组的捆绑梯度作为最小规范优化,通过二次方程编程即可轻松求解。
我们的主要贡献有三方面:
- 据我们所知,这是我们首次将长尾识别表述为一个多目标优化问题,以解决以往方法中头部和尾部类别的跷跷板困境。-
- 我们提出了一种基于梯度相似性的分组方法,可在不影响准确性的前提下高效解决多目标优化问题。
- 经过验证,我们的方法在 CIFAR10/100-LT、ImageNet-LT 和 INaturalist2018 等广泛使用的基准上优于最先进的方法
1、多目标优化:解决头尾部在优化过程中可能优化目标不一致的情况
2、分组优化:将梯度相似的分为一组,认定其优化目标相一致
3. Related Work
通过类再平衡进行长尾学习。类再平衡包括再采样和再加权。重采样策略旨在获得均衡的训练数据分布。它们使用过度采样(Buda、Maki 和 Mazurowski,2018 年)来增加尾部类的实例数量,或使用低度采样(He 和 Garcia,2009 年)来减少头部类的实例数量。但这些方法存在过度拟合尾类或损害模型泛化的风险。类重权(ClassReweighting)方法为每个类的损失函数分配与其样本量负相关的权重,旨在平衡不同类的梯度贡献(Jamal 等,2020 年)。然而,重新加权方法中使用的不恰当权重可能会导致模型拟合不足或拟合过度等问题。通过分组策略进行长尾学习。分组策略将长尾分类问题分解为多任务问题或多层次识别问题,方法是根据特定规则对标签集进行分组(Yang 等,2022 年),例如根据类的实例数进行分组(Li 等,2020 年)。虽然目前的分组策略可以在一定程度上避免尾类被压制,但无法解决不同分组之间知识交互阻塞的问题(Yang 等,2022 年)。深度学习中的多目标优化。多目标优化(MOO)是指优化优化问题中可能相互冲突的多个目标函数。
4 The Proposed Method
4.1 Gradient Imbalance Problem in LT Learning
让 D = {(xi , yi), - - - ,(xN , yN )} 表示一个长尾训练集,共有 N 个样本和 K 个类别。长尾分类的目的是学习一个带有参数 θ 的函数 f (θ),以正确预测每个测试样本。对于一个数据点 (xi , yi),xi 代表训练集中的第 i 个数据点,yi 代表其地面实况标签。通常,模型将使用经验风险损失进行训练,具体如下:
为了探索长尾学习中的梯度不平衡问题,我们将训练损失分为头部损失和尾部损失,具体如下:
其中,我们用 Nhead 和 Ntail 表示迷你批次中头部样本和尾部样本的数量。因此,参数 θ 的梯度可以表示为:
整体损失函数求导=头部类损失函数求导+尾部类损失函数求导
在下图中,我们测量了不同历时中每个批次的类梯度和整体梯度之间的平均梯度相似度。相似度衡量了不同类别的梯度对梯度下降过程的贡献。相似度越大,说明贡献越大。从图中不难看出,头部和尾部(图中以点表示)的梯度明显不平衡,在每个历时中,∇尾部 θ < ∇头部 θ。我们认为,长尾分布中梯度不平衡的原因是头部样本在大多数批次中占多数,导致头部样本的梯度在大小和方向上都大于尾部样本,可以表示为∇⊤ θ∇head θ >∇⊤ θ∇tail θ。最后,它导致模型无法从尾类数据中获得足够的知识。同时,图 2(a)中的不平衡现象是由于每个 bactch 中的数据分布不平衡造成的,这也会引起混淆。我们使用重采样策略进行了类似的实验。如图 2(b) 所示,梯度不平衡现象在使用重采样策略时变得更加严重,这表明梯度不平衡并不是由各批次内的不平衡分布造成的,而是由数据集的不平衡分布造成的。
图b:为了排除随机分批次导致的批次内类不平衡,在分批次时对批次内采用重采样。
这里的重采样不能改变整体的数据量(头部、尾部比例),只能改变数据的批次位置
对每个批次进行重采样的实施方式通常包括:
- 在每个epoch开始时,从原始训练集随机选择样本,形成新的批次。这意味着每个批次的样本可能会不同,有助于模型更好地泛化。
- 使用特定算法来确保每个批次中的样本数量是平衡的。例如,确保每个批次中少数类样本和多数类样本的比例大致相同。
为了解决这个问题,以往的方法通过再平衡策略提高尾类损失的权重来补偿尾类梯度(Lin 等人,2017 年;Wu 等人,2020 年)。然而,如图 1 所示,直观的再平衡方法会遇到 “跷跷板 ”困境,即解决方案可能存在补偿过度或补偿不足的问题。过度补偿是指过度强调尾部类别,而低估头部类别,导致头部类别的学习受到过度抑制。补偿不足相当于没有补偿。在本文中,我们试图在长尾学习的每次训练迭代中找到一种理想的补偿方式,即更新不应损害长尾分布中的任何类别。为了实现这一目标,我们首次将长尾学习表述为一个多目标优化问题,如下一小节所示。
4.2 LT Problem as Multi-Objective Optimization
多目标优化(MOO)是指同时优化多个目标。在给定 T 个不同目标的情况下,采用 MOO 的深度模型可得出以下多目标经验风险最小化公式:
由于目标之间存在冲突,MOO 的目标是通过训练实现帕累托最优。
D是整个长尾训练集;DT是指对应目标下的长尾训练集
4.2.1 定义 1(帕累托最优性)
(1) (帕累托优势)设 θa、θb 是问题 (4) 的两个解,当且仅当 Li(θa) ≤ Li(θb) 对于任意i成立,称 θa 优势于 θb (θa ≺ θb)、 且∃i∈ {1, 2, - - - , T}使得 Li(θa) < Li(θb)成立
(2) (帕累托临界值)如果θ 的邻域中没有其他解在所有目标函数中都有更好的值,则称θ 为帕累托临界值。
(3) (帕累托下降方向)如果θ1 不是帕累托临界值,并且可以通过梯度 g 更新为θ2,如果θ2 ≺ θ1,则称 g 为帕累托下降方向。
一个 MOO 问题可能有多个解决方案,由一个帕累托集合组成,其在损失空间中的投影称为帕累托前沿(Pareto Front)。为了在长尾分布中接近所有类别在损失空间中的帕累托前沿,我们需要在帕累托下降方向下进行每次更新,以避免损害任何类别的性能。为此,我们将公式 (1) 中的单目标损失函数转换为多目标优化问题,从而得到每个类别的损失函数集合:
其中,Lk (θ; Dk) 和 Dk ⊆ D 分别代表类别 k 和来自类别 k 的样本的损失函数。
让我们回顾一下 MOO 设置下的跷跷板困境。拆分训练损失后,我们有 K 个不同的损失,分别涉及K 个类别。随后,我们通过推导获得特定任务梯度 {∇1, - - - ,∇K} ,其中 ∇i =∇ Li θ 仅更新一次。也就是说,我们需要将所有梯度汇总为一个梯度。一种简单的聚合方法是设置权重并求和类级梯度。在迭代 n 时,问题可重新表述如下:
1、给予不同的目标梯度下降时不同的权重、
2、求解多目标条件下的最小值(min)
3、具体什么样算是整体最优(最小值)需要自行定义(看你的目标)
为了避免对所有类别造成损害,我们倾向于在任意 i∈[1, K] 条件下,都要满足帕累托最优。因为多个梯度在大小和方向上可能会有很大的冲突。不恰当的加权可能会导致过度补偿和补偿不足,从而使某些类别的数据减少。相比之下,多目标优化的目标是在每一步都实现帕累托下降方向,这将不会损害任何类别。
从直观上看,将各类损失作为优化目标可以获得更好的性能。但事实上,目标越多并不一定意味着性能越好。多目标优化问题会带来巨大的挑战,因为随着目标数量的增加,搜索空间的维度和帕累托前沿的复杂性也会增加。因此,直接求解问题(6)以获得准确的帕累托下降方向是不切实际的,尤其是当标签空间维度较大时。此外,批量大小受到硬件内存大小的限制,很难覆盖所有类别并将所有类别的梯度存储到内存中。在下一小节中,我们将提出一种简单而有效的梯度平衡分组策略,以获得近似的帕累托下降方向。
1、目标多后,帕累托前沿非常难以确定
2、目标多后,存储所有目标的梯度对于内存来说是非常大的挑战
Figure 3: Illustration of our proposed method. At the first stage, we use GBG to gather the classes with high gradient similarity
together. At the second stage, we use an averaging strategy to merge the gradients of the categories in the same group, and then
solve a MOO problem to obtain an approximate Pareto descent direction in each iteration.
4.2.2 基于梯度的类别分组
类别分组(Li 等人,2020 年)是长尾学习的有效解决方案之一。然而,它们大多依赖于启发式思想,无法保证良好的补偿效果。在本文中,我们提出了梯度平衡分组(GBG)策略来解决梯度冲突,并获得近似的帕累托下降方向。GBG 将梯度方向相似的类分配到一个组中,使它们的梯度形成一个结果力,这个结果力代表组中所有对应类的近似无冲突方向。具体来说,给定一个批次中的类别梯度 {∇1, - - - ,∇c} ,其中 c 表示该批次所包含的类别编号。假设类别集为 C = {1, - - - , K}。我们首先计算一个相似性矩阵 A 来衡量任意两个梯度之间的相似性,元素 Ai,j 的计算公式为:
1、头部类和尾部类的优化目标上肯定存在冲突
2、多目标优化里面,头尾部类将是两个优化目标 猜猜作者是将类分为头尾部分,然后进行分别优化吗?
在训练中,一个批次里面,我们不可能知道此时训练的是头部类还是尾部类。因此,无法将头尾部类区分;在训练前,我们也不可能事先就将头部类和尾部类分开。
当然,你可以说,我们能够提前做标记,将头尾部分组,分别计算loss,在进行多目标优化。其实这个方法是理论上可行的,但是非常消耗资源(一个暴力解法)
转念一想:
- 1、只要判断loss梯度的方向本质上就可以知道类别所在的组
- 2、或者说,我们根本不需要判断它是头部组还是尾部组。只要分为两个组/三个组(加上中部类)就可以了
根据相似性矩阵 A,我们建立一个图 G = {V, E}。V 表示图中的节点集,每个节点代表一个类别。E = {Ai,j}, i ≤ j ≤ K 表示边的集合,每条边代表类别 i 和类别 j 之间的梯度相似性。我们的目标是找到一种类别分组的方法,以便将更新习惯上相似性高的类别归入同一组。那么,我们对组间亲和度的定义如下:
其中,Vm、Vn ⊂ V 代表两个不同的组,Vm∩Vn = ∅, ∀m ̸= n
类相似度:两个类中每两个向量相似度求和
受频谱聚类(Ng、Jordan 和 Weiss,2001 年)的启发,我们的目标等同于找到一个图切割 P = {V1, V2, - - , VG},最小化组之间的亲和力总和,其中 G 是组的数量。我们将问题表述如下:
1、组的相似程度==组的亲和力
2、V在这里是我们要优化的组对象
3、V‘在这里指的是其他所有组
4、-a(v’,v‘):防止量级影响下,相似度值非常大
其中 P 是可能分组策略的搜索空间。然后,我们使用 NCut(Shi 和 Malik,2000 年)将优化问题转化为最小化瑞利熵的形式,从而得到分区结果 P。
如果了解谱聚类以及NCut就不难知道,这里有一个强假设:
将向量投影到高维度空间后,如果两个向量所在得位置相似(分为一类),那么这两个向量一定是在同一组,在同一组那么其方向也就一定相同.
想要详细了解谱聚类可以看我的另一篇文章:【经典机器学习算法】谱聚类算法及其实现(python)-CSDN博客
通过上述方法得到的分组结果 P 确保了同一组中的类别具有相似的更新习惯。然后,在模型训练过程中,我们每批得到的每一组的梯度都相当于其对应组内类别梯度的平均值,如图 3(阶段 2)所示。换句话说,从每个组中获得的梯度与组内任何类别的梯度都尽可能相似,这使得每个组内的梯度在训练过程中能够共同发挥作用,并隐性地提高尾部类别的贡献率。
算法 1 总结了 GBG 在 LT 问题中的整体分组过程。首先,我们固定初始化或预训练模型 f (θ) 的参数。接着,我们计算每个类的平均梯度,并通过相似度函数(7)得到每个类之间的梯度相似度,从而建立一个对称的梯度相似度矩阵 A。最后,我们求解图切割问题公式(9),得到最终的分组结果 P。下面,我们将展示如何解决组级 MOO 问题。
4.2.3 解决组级 MOO 问题
根据之前的研究(Zhou 等人,2020 年),我们的方法分为两个阶段,如图 3 所示。在第一阶段,我们计算每个类别的平均梯度,形成梯度相似性矩阵。然后,我们根据梯度相似度将类别分为 G 组。
这里用了前面提到的聚类算法(分组都是在批次中进行)
在第二阶段,我们将每批中每个组的梯度进行捆绑,形成一个 MOO 问题。然后,我们求解 MOO 问题,逼近帕累托下降方向,在每次迭代中实现所有组的优化。
1、每一组形成作为一个优化目标。从而保证组与组之间的优化不会冲突。
2、这里假设:同一组间的优化目标一定不会冲突
基于类分组 P ∗ = {V1, V2, - - - , VG},长尾问题的优化目标可转换为 G 组的训练损失
1、利用谱聚类方法将梯度分为G组(梯度就是loss将要优化的方向)
2、梯度分为G组的目的就是把类进一步整合,有些类看似相同,可能梯度下降方向不同;有的类看似不同,可能在梯度下降时处在相似地位
为了高效解决 MOO 问题,我们采用了多梯度下降算法(MGDA)(Sener 和 Koltun,2018 年),该算法利用了 Karush-Kuhn-Tucker(KKT)条件,将 MOO 问题转化为最小规范单目标优化,具体如下:
作为一个最小规范的单一目标优化问题,这个问题可以很容易地通过二次编程来解决。有了这个优化问题的解,我们就得到了长尾学习的最终梯度。
1、利用多梯度下降算法,来处理多目标优化问题
2、多目标优化问题同样可以用遗传算法等优化算法解决
3、目前业界无法断定哪个优秀
根据 Sener 和 Koltun (2018),向量 d∗ 要么为零,要么是所有组的可行帕累托下降方向。我们在算法 2 中展示了基于梯度下降的多目标优化步骤。具体来说,在每次迭代中,我们计算每组的损失,并对每个损失的模型参数进行反向计算,得到∇θLi (θ)。然后,我们通过求解 11 得到权重 {α1, - - - , αG},并利用它进行加权求和滑 G i=1 αi∇θLi (θ) 以得到最终梯度,用于更新模型参数。
此外,我们还提出了一种简单而有效的重采样方法--GAC(Group-Aware Completion)采样器,以保证每个批次都包含来自所有组的样本,即每个迷你批次都有来自所有组的数据。在每次迭代中,如果迷你批次中某个组的数据缺失,我们会根据类平衡项(Cui et al 2019)从缺失组的训练数据中以概率进行采样,从而使样本数量达到批次规模的 1/10。这样可以确保每个批次都包含来自所有组的样本,并在一定程度上提高尾类样本的贡献率。
1、利用在每个批次中进行重采样,从而实现在每个批次中尾部类也能得到很好的训练
2、这与一开始在批次中重采样来做判断有相互呼应的感觉
与包含大量目标的原始优化问题相比,我们的方法大大减少了优化目标的数量,能够相对高效地完成训练。
中间实验的部分这边就先跳过不做翻译和分析
5. 结论
在本文中,我们发现训练过程中的梯度不平衡是导致长尾学习性能低下的一个重要问题。我们深入分析了对不同类别梯度的不恰当补偿导致了以往方法的跷跷板困境。为了解决这个问题,我们将长尾识别问题表述为 MOO 问题,并提出了一种 GBG 算法来平衡头部和尾部类别的梯度贡献。然后,GBG 使梯度方向相似的类形成更具代表性的梯度。通过 GBG,我们近似地在帕累托下降方向下进行了每次模型参数的更新,并为尾类提供了理想的补偿。在常用基准上的实验结果证明,我们的方法取得了新的一流性能,这证明了我们提出的方法的优越性。未来,我们计划进一步研究如何自适应地调整分组数量。
总图大家再好好体会一下:
如果想要学习更多深度学习论文,大家可以点个关注并订阅,持续学习、天天进步
你的点赞就是我更新的动力,如果觉得对你有帮助,辛苦友友点个赞,收个藏呀~~~