POLYLOSS: A POLYNOMIAL EXPANSION PERSPEC-TIVE OF CLASSIFICATION LOSS FUNCTIONS
论文链接:PolyLoss: A Polynomial Expansion Perspective of Classification Loss Functions | OpenReviewhttps://openreview.net/forum?id=gSdSJoenupI
在训练深度神经网络进行分类问题时,交叉熵损失和焦点损失是最常见的选择。然而,一般来说,一个好的损失函数可以采用更灵活的形式,并且应该针对不同的任务和数据集进行定制。出于如何通过泰勒展开近似函数的目的,我们提出了一个名为PolyLoss的简单框架,以将损失函数视为多项式函数的线性组合并设计。PolyLoss可以根据目标任务和数据集来轻松调整在不同多项式的重要性,同时自然地将上述cross-entropy loss(交叉熵损失)和focal loss包含为特殊情况。大量的实验结果表明,PolyLoss 中的最优选择取决于任务和数据集。只需引入一个额外的超参数并添加一行代码,我们的Poly-1公式就可以在2D图像分类,实例分割,对象检测和3D对象检测任务上胜过交叉丢失和焦点丢失,有时会大大提高。
下表1是在各种模型和任务上,PolyLoss的性能与交叉熵和焦点损失的对比。
损失函数在训练神经网络过程中很重要。原则上,损失函数可以是将预测和标签映射到标量的任何(可微分)函数。因此,由于其设计空间大的问题,设计一个好的损失函数通常是具有挑战性的,并且设计一个适用于不同任务和数据集的损失函数则更具挑战性,比如:L1/L2损失函数通常用于回归任务,但很少用于分类任务;focal loss通常用来缓解交叉熵函数在不平衡的目标检测数据集中产生过拟合问题,但它并没有应用到其他任务。最近的研究中还通过元学习、集成或合成来探索不同新的损失函数。
在本文中,我们提出了 PolyLoss:一种用于理解和设计损失函数的新框架。我们的主要见解是将常用的分类损失函数 (例如交叉损失和焦点损失) 分解为一系列加权多项式基。他们分解的形式是,其中是多项式系数是目标类标签的预测概率。每个基础多项式 由相应的多项式系数 加权,这使我们能够轻松地针对不同的应用调整不同基础多项式。当所有j都是时,我们的PolyLoss等效于常用的交叉熵损失,但是此系数分配可能不是最佳的。
我们的研究表明,为了获得更好的结果,有必要针对不同的任务和数据集调整多项式系数 。由于不可能调整无限数量的,我们探索了具有小自由度的各种策略。令人惊讶的是,我们观察到简单地调整前几个多项式的单个系数,我们表示为,足以达到超过常用交叉熵损失和focal loss的显著改善。总的来说,我们的贡献可以总结为:
常见损失的见解:我们重新考虑和重新设计损失函数并提出一个统一的框架,名为PolyLoss。该框架有助于将交叉熵损失和焦点损失解释为 PolyLoss 系列的两个特例(通过水平移动多项式系数),这在以前是不被公认的。这一新发现促使我们研究垂直调整多项式系数的新损失函数。如图1所示。
新损失公式:我们评估了垂直操纵多项式系数的不同方法,以简化超参数搜索空间。我们提出了一个简单有效的Poly-1 loss公式,它只引入一个超参数和一行代码。
新发现:我们确定,尽管focal loss对许多检测任务有效,但对于不平衡的ImageNet-21K数据集而言是次优的。我们发现前几个多项式在训练过程中贡献了很大一部分梯度,并且其系数与预测置信度相关。此外,我们还提供了一个直观的解释:说明如何利用这种相关性来设计出适合不平衡数据集的polyloss。
实验:我们在不同的任务、模型和数据集上评估我们的PolyLoss。结果表明,PolyLoss在所有方面都始终如一地提高了性能,总结在表1中,其中包括最先进的分类器EfficientNetV2和检测器RSN。
交叉熵损失用于流行和当前最先进的模型,用于感知任务,例如分类,检测和语义分割。并提出了各种损失来改善交叉熵损失。与先前的工作不同,本文的目标是提供一个统一的框架,用于系统地设计更好的分类损失函数。
类别不平衡的损失 由于类别不平衡问题,在训练检测模型,尤其是单级检测器时会很困难。通常的方法例如困难样本挖掘和重新加权的方法来解决类别不平衡问题。focal loss作为其中一种方法,旨在通过关注困难样本来缓解类别不平衡问题,并用于训练最先进的 2D 和 3D 检测器。在我们的工作过程中,我们发现对于不平衡的ImageNet-21K数据集来说focal loss是次优的。使用 PolyLoss 框架,我们发现了一个更好的损失函数,它的作用与焦点损失相反。我们进一步直观地理解了为什么使用 PolyLoss 框架给不同的、不平衡数据集设计不同的损失函数很重要。
标签噪声的鲁棒损失 另一个研究方向是设计对标签噪声的鲁棒性损失函数。一种常用的方法是将噪声鲁棒损失函数 (例如平均绝对误差 (MAE)) 合并到交叉熵损失中。特别是,提出了泰勒交叉熵损失,以通过扩展多项式基中的交叉熵损失来统一MAE和交叉熵损失。通过截断高阶多项式,它们显示出截断的交叉熵损失函数更接近MAE,这对于具有合成标签噪声的数据集上的标签噪声更具鲁棒性。相比之下,我们的PolyLoss提供了一个更通用的框架,通过操纵多项式系数来设计不同数据集的损失函数,其中包括删除中提出的高阶多项式。我们在 4.1 小节中的实验显示了 Feng 等人提出的损失在干净的 ImageNet 数据集上的表现比交叉熵损失差。
学习损失函数 最近的几项研究展示了通过梯度下降或元学习在训练期间学习损失函数。值得注意的是,TaylorGLO利用cma-es优化了训练过程中损失函数和学习率时间表的多元泰勒参数化。由于具有多项式阶的搜索空间尺度,本文证明了使用三阶参数化(8 个参数),学习到的损失函数调度在 10 类分类问题上优于交叉熵损失。另一方面,我们的论文(图2a)显示,对于1000个类别分类任务,需要数百个多项式。这导致搜索空间过大。 我们提出的 Poly-1 公式减轻了大型搜索空间的问题,并且不依赖于先进的黑盒优化算法。 相反,我们展示了对一个超参数的简单网格搜索可以显着改善我们研究的所有任务。
下图1是 ,交叉熵损失、焦点损失和多损失的统一视图。
PolyLoss提供了一个框架,用于理解和改进常用的交叉熵损失和焦点损失,如图1所示。它的灵感来自 的交叉熵损失 (等式1) 和focal loss (等式2) 的泰勒展开:
式中,是目标地面真值类别的模型预测概率。
Cross-entropy loss as PolyLoss 使用梯度下降法来优化交叉熵损失,需要取关于的梯度。在 PolyLoss 框架中,一个有趣的现象,系数 1/j 正好抵消了多项式基的 j 次方,请参见公式 1。因此,交叉熵损失的梯度只是多项式 的总和 ,如公式 3 所示。
梯度展开式中的多项式项对Pt具有不同的灵敏度。前导梯度项为1,它提供了恒定的梯度,而与的值无关。相反,当j1时,当Pt接近1时,第j个梯度项被强烈抑制。
Focal loss as PolyLoss 在PolyLoss框架中,等式2中,很明显,focalloss只是简单地将j次幂移动调制因子的次幂。这相当于将所有多项式系数水平移动,如图1所示。为了从梯度角度理解focalloss,我们采用焦点损失(等式 2)相对于 Pt 的梯度:
对于,在交叉损失中,焦点损失的梯度下降了恒定的前导梯度项1,参见公式3。如上一段所述,这个恒定的梯度项使模型强调大多数类,因为它的梯度只是每个类的样本总数。通过将所有多项式项的幂移位,第一项变为 ,它被 的幂抑制,以避免过度拟合到已经自信的 (意味着接近1) 多数类。
Connection to regression and general form 在 PolyLoss 框架中损失函数体现了与回归的直观联系。分类任务中,对于y=1时真实标签的有效概率多项式基 可以表示为 。因此,交叉熵损失和焦点损失都可以解释为预测和标签到第j次方之间距离的加权集合。然而,这些损失中的一个基本问题是:回归项前面的系数是最优的吗?
一般来说,PolyLoss 是 [0, 1] 上的单调递减函数 ,可以表示为 ,并提供了一个灵活的框架来调整每个系数 。PolyLoss可以推广到非整数j,但为简单起见,本文仅关注整数幂 (j ∈ Z)。在下一节中,我们将研究通过操纵 αj 在 PolyLoss 框架中设计更好的损失函数的几种策略。
下表2是,比较 PolyLoss 框架中的不同损失
在上一节中,我们建立了PolyLoss框架,并证明了交叉熵损失和焦点损失只是对应于不同的多项式系数,其中焦点损失水平移动了交叉熵损失的多项式系数。
在本节中,我们提出了制定的最终损失函数---Poly-1。如图1所示我们深入研究了垂直调整多项式系数如何影响训练。具体来说,我们探讨了分配多项式系数的三种不同策略:放弃高阶项;调整多个主导多项式系数;调整第一个多项式系数,如上表2所示。我们发现,调整第一多项式系数(Poly-1公式)可以获得最大增益,同时需要最小的代码更改和超参数调整。
在这些探索中,我们尝试了1000类ImageNet分类。我们将其缩写为ImageNet-1K,以区别于包含21K类的完整版本。我们使用ResNet-50及其训练超参数而无需修改。
以前的研究已经表明,删除高阶多项式并调整领先的多项式可以提高模型的鲁棒性和性能。我们采用Feng et al. (2020)中提到的相同的损失公式,并将它们的性能与 ImageNet-1K 上的基线交叉熵损失进行比较,如图2a所示。我们需要总结 600 多个多项式项来匹配交叉熵损失的准确性。值得注意的是,去除高阶多项式不能简单地解释为调整学习率。为了验证这一点,图 2b 比较了不同学习率和不同截止值的性能:无论我们从0.1的原始值增加或减少学习率,准确性都会变差。
下图2是在 ImageNet-1K 上训练 ResNet-50 需要数百个多项式项才能重现与交叉熵损失相同的准确度。
为了理解为什么高阶项很重要,我们考虑从交叉熵损失中去除前N个多项式项后的残差和:因此,从损失和损失导数的角度来看,需要取一个大的 N 以确保 一致地接近 [δ, 1]。 对于固定的 ζ,随着 δ 接近 0,N 迅速增长。 我们的实验结果与定理一致。 高阶 (j > N + 1) 多项式在训练的早期阶段发挥重要作用,此时 Pt 通常接近于零。 例如,当 Pt ∼ 0.001 时,根据式 3,第 500 项的梯度系数为 0.999499 ∼ 0.6,相当大。 与上述先前的工作不同,我们的结果表明,我们不能通过排除高阶多项式来轻松减少多项式系数 αj 的数量。 丢弃高阶多项式相当于在 PolyLoss 框架中将所有高阶 (j > N+1) 多项式系数 αj 垂直推至零。 由于简单地将系数设置为零对于训练 ImageNet-1K 不是最理想的,因此在以下部分中,我们将研究如何在 PolyLoss 框架中将多项式系数设置为零之外。 特别是,我们的目标是提出一个简单有效的损失函数,需要最少的调整。
在本文中,我们提出了一种在 PolyLoss 框架中设计新损失函数的替代方法,其中我们调整了每个多项式的系数。 一般来说,有无数个多项式系数αj需要调整。 因此,优化最一般的损失是不可行的:
上一节(第4.1小节)表明,培训中需要数百个多项式才能在ImageNet-1K分类等任务中表现出色。如果我们天真地将方程5中的无穷和截断为前几百个项,那么调整这么多多项式的系数仍然会导致极大的搜索空间。此外,集体调整许多系数也不会优于交叉熵损失。
为了应对这一挑战,我们建议扰乱交叉熵损失中的主要多项式系数,同时保持其余部分不变。我们将建议的损失公式表示为 Poly-N,其中 N 代表将被调整的前导系数的数量。
在这里,我们将交叉损失1/j中的第j个多项式系数替换为1/j j,其中 j ∈ [− 1/j,∞) 是扰动项。这使我们可以精确定位前N个多项式,而无需担心无限多个高阶 (j > N 1) 系数,如等式5所示。
图三表示第一个多项式在ImageNet1K上训练ResNet-50时起着重要作用。
如上一节所示,我们发现调整第一个多项式项会导致最显着的增益。在本节中,我们将进一步简化 Poly-N 公式并重点评估 Poly-1,其中仅修改了交叉熵损失中的第一个多项式系数。
我们研究了不同的第一项缩放对精度的影响,并观察到增加第一个多项式系数可以系统地提高 ResNet-50 的精度,如图 3a 所示。该结果表明,就多项式系数值而言,交叉熵损失是次优的,并且增加第一个多项式系数会导致持续改进,这与其他训练技术相当。
图3b示出了在大部分时间内,前导多项式在训练期间贡献了超过一半的交叉熵梯度,这突出了第一多项式项 (1 − Pt) 与无限多项的其余部分相比的重要性。因此,在本文的其余部分中,我们采用了LPoly-1的形式,主要侧重于调整前导多项式系数。从等式7中可以明显看出,它仅通过一行代码 (在交叉熵损失之上添加a项) 来修改原始损失实现。
请注意,所有训练超参数都针对交叉熵损失进行了优化。即使这样,对Poly-1公式中的第一个多项式系数进行简单的网格搜索也可以显着提高分类精度。我们发现为LPoly-1优化其他超参数会导致更高的准确性。
在本文中,我们提出了 PolyLoss 框架,它为分类问题的常见损失函数提供了统一的视图。我们认识到,在多项式展开下,焦点损失是多项式系数与交叉熵损失相比的水平偏移。这种新的洞察力促使我们探索另一个维度。即垂直修改多项式系数。
我们的 PolyLoss 框架提供了通过调整多项式系数来更改损失函数形状的灵活方法。在这个框架中,我们提出了一种简单有效的 Poly-1 配方。通过仅用一个额外的超参数简单地调整主导多项式系数,我们展示了我们简单的 Poly-1 改进了跨多个任务和数据集的各种模型。我们希望 Poly-1 公式的简单性(多行代码)和有效性将导致更多分类应用的采用,而不是我们设法探索的分类。
更重要的是,我们的工作强调了常见损失函数的局限性,即使在成熟的最先进模型上,简单的修改也可能带来改进。我们希望这些发现将有助于探索和重新思考损耗函数设计,超越常用的交叉熵和焦点损耗,以及本研究中提出的最简单的Poly-1损耗。