【论文精度——长尾问题】Long-Tailed Learning as Multi-Objective Optimization

news2024/10/2 19:19:35

🌈 个人主页:十二月的猫-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 年)的启发,我们将各组的捆绑梯度作为最小规范优化,通过二次方程编程即可轻松求解。

我们的主要贡献有三方面:

  1. 据我们所知,这是我们首次将长尾识别表述为一个多目标优化问题,以解决以往方法中头部和尾部类别的跷跷板困境。-
  2. 我们提出了一种基于梯度相似性的分组方法,可在不影响准确性的前提下高效解决多目标优化问题。
  3. 经过验证,我们的方法在 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 代表其地面实况标签。通常,模型将使用经验风险损失进行训练,具体如下:

L\left(\mathbf{x},\mathbf{y}\right)=\frac{1}{N}\sum_{i=1}^{N}L\left(x_{i},y_{i}\right)=-\frac{1}{N}\sum_{i=1}^{N}\log\left(\frac{e^{z_{y_{i}}}}{\sum_{j=1}^{K}e^{z_{j}}}\right)\quad(1)

为了探索长尾学习中的梯度不平衡问题,我们将训练损失分为头部损失和尾部损失,具体如下:

L\left(\mathbf{x},\mathbf{y}\right)=\frac{1}{N}\left[\sum_{i=1}^{N_{\mathrm{tail}}}L\left(x_{i},y_{i}\right)+\sum_{j=1}^{N_{\mathrm{tead}}}L\left(x_{i},y_{i}\right)\right],\quad(2)

 其中,我们用 Nhead 和 Ntail 表示迷你批次中头部样本和尾部样本的数量。因此,参数 θ 的梯度可以表示为:

\nabla_{\boldsymbol{\theta}}=\frac{\partial L\left(\boldsymbol{x},\boldsymbol{y}\right)}{\partial\boldsymbol{\theta}}=\nabla_{\boldsymbol{\theta}}^{\mathrm{tail}}+\nabla_{\boldsymbol{\theta}}^{\mathrm{head}},\quad(3)

 整体损失函数求导=头部类损失函数求导+尾部类损失函数求导

 在下图中,我们测量了不同历时中每个批次的类梯度和整体梯度之间的平均梯度相似度。相似度衡量了不同类别的梯度对梯度下降过程的贡献。相似度越大,说明贡献越大。从图中不难看出,头部和尾部(图中以点表示)的梯度明显不平衡,在每个历时中,∇尾部 θ < ∇头部 θ。我们认为,长尾分布中梯度不平衡的原因是头部样本在大多数批次中占多数,导致头部样本的梯度在大小和方向上都大于尾部样本,可以表示为∇⊤ θ∇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 的深度模型可得出以下多目标经验风险最小化公式:

\begin{array}{rcl}{\operatorname*{min}_{\boldsymbol{\theta}}}&{\left\{L_{i}\left(\mathcal{D}_{i}\right),\cdots,L_{T}\left(\mathcal{D}_{T}\right)\right\},}&{(4)}\end{array}

由于目标之间存在冲突,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) 中的单目标损失函数转换为多目标优化问题,从而得到每个类别的损失函数集合:

\boxed{\mathcal{L}\left(\boldsymbol{\theta};\mathcal{D}\right)=\left\{L_{1}\left(\boldsymbol{\theta};\mathcal{D}_{1}\right),\cdots,L_{K}\left(\boldsymbol{\theta};\mathcal{D}_{K}\right)\right\},\quad(5)}

其中,Lk (θ; Dk) 和 Dk ⊆ D 分别代表类别 k 和来自类别 k 的样本的损失函数。

让我们回顾一下 MOO 设置下的跷跷板困境。拆分训练损失后,我们有 K 个不同的损失,分别涉及K 个类别。随后,我们通过推导获得特定任务梯度 {∇1, - - - ,∇K} ,其中 ∇i =∇ Li θ 仅更新一次。也就是说,我们需要将所有梯度汇总为一个梯度。一种简单的聚合方法是设置权重并求和类级梯度。在迭代 n 时,问题可重新表述如下:

\operatorname*{min}_{\{\alpha_{1},\cdots,\alpha_{K}\}}\quad\left\{L_{i}\left(\boldsymbol{\theta}^{(n-1)}-\tau\sum_{i=1}^{K}\alpha_{i}\nabla_{i} ; \mathcal{D}_{i}\right)\left|\forall i\right\}.\right.

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 的计算公式为:

A_{i,j}=\frac{\nabla_{\theta}^{i}\nabla_{\theta}^{j}}{\|\nabla_{\theta}^{i}\|\|\nabla_{\theta}^{j}\|}.\quad(7)

1、头部类和尾部类的优化目标上肯定存在冲突

2、多目标优化里面,头尾部类将是两个优化目标 猜猜作者是将类分为头尾部分,然后进行分别优化吗?

在训练中,一个批次里面,我们不可能知道此时训练的是头部类还是尾部类。因此,无法将头尾部类区分;在训练前,我们也不可能事先就将头部类和尾部类分开。

当然,你可以说,我们能够提前做标记,将头尾部分组,分别计算loss,在进行多目标优化。其实这个方法是理论上可行的,但是非常消耗资源(一个暴力解法)

转念一想:

  • 1、只要判断loss梯度的方向本质上就可以知道类别所在的组
  • 2、或者说,我们根本不需要判断它是头部组还是尾部组。只要分为两个组/三个组(加上中部类)就可以了

 根据相似性矩阵 A,我们建立一个图 G = {V, E}。V 表示图中的节点集,每个节点代表一个类别。E = {Ai,j}, i ≤ j ≤ K 表示边的集合,每条边代表类别 i 和类别 j 之间的梯度相似性。我们的目标是找到一种类别分组的方法,以便将更新习惯上相似性高的类别归入同一组。那么,我们对组间亲和度的定义如下:

a(\mathcal{V}_{m},\mathcal{V}_{n})=\sum_{i\in\mathcal{V}_{m},j\in\mathcal{V}_{n}}A_{i,j},\quad(8)

其中,Vm、Vn ⊂ V 代表两个不同的组,Vm∩Vn = ∅, ∀m ̸= n

 类相似度:两个类中每两个向量相似度求和

受频谱聚类(Ng、Jordan 和 Weiss,2001 年)的启发,我们的目标等同于找到一个图切割 P = {V1, V2, - - , VG},最小化组之间的亲和力总和,其中 G 是组的数量。我们将问题表述如下:

\operatorname*{min}_{\mathcal{P}\in\mathbb{P}} \sum_{\mathcal{V}^{\prime}\in\mathcal{P}}a\left(\mathcal{V}^{\prime},\mathcal{V}\right)-a\left(\mathcal{V}^{\prime},\mathcal{V}^{\prime}\right),\quad(9)

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 组的训练损失

\operatorname*{min}_{\boldsymbol{\theta}}\left(L_{1}\left(\boldsymbol{\theta}\right),\cdots,L_{G}\left(\boldsymbol{\theta}\right)\right).\quad(10)

1、利用谱聚类方法将梯度分为G组(梯度就是loss将要优化的方向)

2、梯度分为G组的目的就是把类进一步整合,有些类看似相同,可能梯度下降方向不同;有的类看似不同,可能在梯度下降时处在相似地位

为了高效解决 MOO 问题,我们采用了多梯度下降算法(MGDA)(Sener 和 Koltun,2018 年),该算法利用了 Karush-Kuhn-Tucker(KKT)条件,将 MOO 问题转化为最小规范单目标优化,具体如下:

 \begin{aligned}\min_{\alpha_{1},\cdots,\alpha_{G}}&\left\|\sum_{i=1}^{G}\alpha_{i}\nabla_{\boldsymbol{\theta}}L_{i}\left(\boldsymbol{\theta}\right)\right\|^{2},\\&&\text{(11)}\\\mathrm{s.t.}&\sum_{i=1}^{G}\alpha_{i}=1 \mathrm{and} \alpha_{i}\geq0,\forall i.\end{aligned}

作为一个最小规范的单一目标优化问题,这个问题可以很容易地通过二次编程来解决。有了这个优化问题的解,我们就得到了长尾学习的最终梯度。

1、利用多梯度下降算法,来处理多目标优化问题

2、多目标优化问题同样可以用遗传算法等优化算法解决

3、目前业界无法断定哪个优秀

根据 Sener 和 Koltun (2018),向量 d∗ 要么为零,要么是所有组的可行帕累托下降方向。我们在算法 2 中展示了基于梯度下降的多目标优化步骤。具体来说,在每次迭代中,我们计算每组的损失,并对每个损失的模型参数进行反向计算,得到∇θLi (θ)。然后,我们通过求解 11 得到权重 {α1, - - - , αG},并利用它进行加权求和滑 G i=1 αi∇θLi (θ) 以得到最终梯度,用于更新模型参数。 

d^{*}=\sum_{i=1}^{G}\alpha_{i}\nabla_{\boldsymbol{\theta}}L_{i}.\quad(12)

此外,我们还提出了一种简单而有效的重采样方法--GAC(Group-Aware Completion)采样器,以保证每个批次都包含来自所有组的样本,即每个迷你批次都有来自所有组的数据。在每次迭代中,如果迷你批次中某个组的数据缺失,我们会根据类平衡项(Cui et al 2019)从缺失组的训练数据中以概率进行采样,从而使样本数量达到批次规模的 1/10。这样可以确保每个批次都包含来自所有组的样本,并在一定程度上提高尾类样本的贡献率。 

1、利用在每个批次中进行重采样,从而实现在每个批次中尾部类也能得到很好的训练

2、这与一开始在批次中重采样来做判断有相互呼应的感觉

与包含大量目标的原始优化问题相比,我们的方法大大减少了优化目标的数量,能够相对高效地完成训练。

中间实验的部分这边就先跳过不做翻译和分析

5. 结论

在本文中,我们发现训练过程中的梯度不平衡是导致长尾学习性能低下的一个重要问题。我们深入分析了对不同类别梯度的不恰当补偿导致了以往方法的跷跷板困境。为了解决这个问题,我们将长尾识别问题表述为 MOO 问题,并提出了一种 GBG 算法来平衡头部和尾部类别的梯度贡献。然后,GBG 使梯度方向相似的类形成更具代表性的梯度。通过 GBG,我们近似地在帕累托下降方向下进行了每次模型参数的更新,并为尾类提供了理想的补偿。在常用基准上的实验结果证明,我们的方法取得了新的一流性能,这证明了我们提出的方法的优越性。未来,我们计划进一步研究如何自适应地调整分组数量。

总图大家再好好体会一下:

如果想要学习更多深度学习论文,大家可以点个关注并订阅,持续学习、天天进步

你的点赞就是我更新的动力,如果觉得对你有帮助,辛苦友友点个赞,收个藏呀~~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2184903.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python数据分析篇--NumPy--进阶

人有一种天生的、难以遏制的欲望&#xff0c;那就是在理解之前就评判。 -- 米兰昆德拉 多维数组 1. 一维数组只有行&#xff0c;二维数组相比一维数组多了列这个维度&#xff0c;而三维数组则类似多个二维数组堆叠在一起&#xff0c;形如一个立方体。 二维数组的创建 1. 二…

Java中的顺序控制、分支控制、嵌套分支if-else

if-else 顺序控制分支控制if-else单分支1.基本语法2.说明&#xff1a;3.案例说明4.流程图 双分支1.基本语法2.说明&#xff1a;3.案例说明4.流程图5.练习 多分支1.基本语法2.说明&#xff1a;3.流程图4.练习 嵌套分支1.基本介绍2.基本语法3.练习 顺序控制 1.介绍&#xff1a;程…

CMake所学

向大佬lyf学习&#xff0c;先把其8服务器中所授fine 文章目录 前言一、CMakeList.txt 命令1.1 最外层CMakeLists1.1.1 cmake_minimum_required&#xff08;&#xff09;1.1.2 project&#xff08;&#xff09;1.1.3 set&#xff08;&#xff09;1.1.4 add_subdirectory&#xf…

小红书制作视频如何去原视频音乐,视频如何去原声保留背景音乐?

在视频编辑、音乐制作或个人娱乐中&#xff0c;有时我们希望去掉视频中的原声&#xff08;如对话、解说等&#xff09;&#xff0c;仅保留背景音乐。这种处理能让观众更加聚焦于视频的氛围或节奏&#xff0c;同时也为创作者提供了更多创意空间。选择恰当的背景音乐&#xff0c;…

【tower-boot 系列】开源RocketMQ和阿里云rockerMq 4.x和5.x集成 (一)

RocketMQ 简单介绍 阿里云rockerMq 4.x和5.x集成 一、云平台创建实例 参考文档&#xff1a; 阿里云api 阿里云 创建实例 二、skd集成思路 公司用的RocketMQ一般是自建开源apache的RocketMQ和上阿里云的RocketMQ&#xff0c;目前阿里云支持4.x和5.x版本 项目集成思路&…

【MAUI】CollectionView之 垂直网格

App主页或者导航页面中动态按钮的垂直网格布局 在 XAML 中,CollectionView 可以通过将其 ItemsLayout 属性设置为 VerticalGrid,在垂直网格中显示其项: <CollectionView ItemsSource="{Binding Monkeys}"ItemsLayout

链表面试编程题

1. 删除链表中等于给定值 val 的所有节点。 203. 移除链表元素 - 力扣&#xff08;LeetCode&#xff09; 2. 反转一个单链表。206. 反转链表 - 力扣&#xff08;LeetCode&#xff09; 3. 给定一个带有头结点 head 的非空单链表&#xff0c;返回链表的中间结点。如果有两个中间…

FOCShield v2.0.4原理图

1.FOCShield v2.0.4原理图,开源原文件用AD制作。用 AD09可以打开。 主要部分为 1.电机驱动芯片部分 2.电流采样部分

2024 全新体验:国学心理 API 接口来袭

在当今快节奏的生活中&#xff0c;人们对于心理健康越来越重视。而研究发现&#xff0c;国学心理学乃至传统文化中的思想智慧&#xff0c;对于人们的心理健康有着独特且深远的影响。为了让更多人能够体验到国学心理的魅力&#xff0c;2024年全新推出的国学心理 API 接口&#x…

Efficient Knowledge Infusion via KG-LLM Alignment

文章目录 题目摘要引言相关作品方法论实验设置和结果分析结论局限性附录 题目 通过KG-LLM比对实现高效的知识注入 论文地址&#xff1a;https://aclanthology.org/2024.findings-acl.176.pdf 摘要 为了解决大型语言模型中特定领域知识匮乏的问题&#xff0c;知识图检索扩充方…

27 Vue3之unocss原子化

前置知识 什么是原子化 CSS 原子化 CSS 是一种 CSS 的架构方式&#xff0c;它倾向于小巧且用途单一的 class&#xff0c;并且会以视觉效果进行命名。 为什么使用 原子化 CSS 传统方案 制作原子化 CSS 的传统方案其实就是提供所有你可能需要用到的 CSS 工具。例如&#xff0c…

ES索引生命周期管理

基于如何 定时删除ES索引过期数据 而引发的一系列关于ES索引生命周期管理ILM(Index Lifecycle Management)的学习 快速上手 &#xff1a;定时删除ES索引中的过期数据 1. ILM解决什么问题&#xff1f; ES从6.7版本引入ILM&#xff0c;通过ILM可以解决哪些问题呢? 自动新建…

Python 课程22-Pillow

前言 Pillow 是一个 Python 图像处理库&#xff0c;是 Python Imaging Library (PIL) 的升级版。Pillow 提供了对常见图像文件格式&#xff08;如 PNG、JPEG、GIF 等&#xff09;的支持&#xff0c;并允许你进行图像裁剪、调整大小、旋转、滤镜应用、文本添加等操作。Pillow 广…

Applio:颠覆语音克隆的AI黑科技!

Applio&#xff1a;颠覆语音克隆的AI黑科技&#xff01; Applio是一个神奇的AI语音克隆工具✨&#xff0c;提供超过20,000种声音模型&#x1f3a4;&#xff0c;让你轻松创造独特音色&#x1f3b6;&#xff01;开源社区欢迎所有人参与&#xff0c;共同探索AI音频的无限可能&…

蓝桥杯备赛---2.新建工程

推荐根据视频进行工程建立 开发板资源简介&工程模板建立_哔哩哔哩_bilibili 目录 推荐根据视频进行工程建立 1.点击"File"下的"New Project"新建一个工程 ​编辑 2. 查看官方给的数据手册&#xff0c;选择对于的单片机型号 3. 查看原理图&#…

银河麒麟操作系统中设置进程堆栈大小的方法

银河麒麟操作系统中设置进程堆栈大小的方法 1、临时修改堆栈大小步骤一&#xff1a;查看当前堆栈大小步骤二&#xff1a;修改堆栈大小 2、永久修改堆栈大小步骤一&#xff1a;查看当前堆栈大小&#xff08;可选&#xff09;步骤二&#xff1a;编辑配置文件步骤三&#xff1a;注…

论文精读--Two-Stream Convolutional Networks for Action Recognition in Videos

对于单张图片&#xff0c;丢进卷积和全连接层直接得出分类结果就行 但对于视频&#xff0c;早期的一些工作把视频中的一些关键帧抽取出来&#xff0c;把一个个帧通过网络&#xff0c;最后把结果合并&#xff0c;或者把帧叠起来&#xff0c;一起丢进网络。在网络中进行early fu…

【C++】模拟实现红黑树

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:实战项目集 ⚙️操作环境:Visual Studio 2022 目录 一.了解项目功能 二.逐步实现项目功能模块及其逻辑详解 &#x1f4cc;实现RBTreeNode类模板 &#x1f38f;构造RBTreeNode类成员变量 &#x1f38f;实现RBTreeNode类构…

【数据结构】堆(Heap)详解----定义堆、初始化,删除、插入、销毁、判空、取堆顶

文章目录 一、堆的概念及其性质&#xff1a;堆的概念&#xff1a;堆的性质&#xff1a; 二、堆的定义及其基础操作的代码实现&#xff08;C语言版&#xff09;1.定义堆2.堆的初始化3.堆的销毁4.堆的插入5.堆的删除6.取堆顶的数据7.堆的数据个数8.堆的判空 总结&#xff1a; 提示…

Python开发环境配置(mac M2)

1. 前言 作为一名程序员&#xff0c;工作中需要使用Python进行编程&#xff0c;甚至因为项目需要还得是不同版本的Python如何手动管理多个版本的Python&#xff0c;如何给Pycharm&#xff08;IDE&#xff09;配置对应的interpreter等&#xff0c;都成为一个 “不熟练工” 的难…