导语
PolyLoss是ICLR 2022的一篇工作,它主要从泰勒展开的角度出发改进了loss函数。
- 会议:ICLR 2022
- 链接:arxiv.org/abs/2204.12…
1 简介
损失函数对于神经网络训练至关重要,设计一个对于不同任务和数据集都适用的通用损失函数是一件非常困难的事情。本文提出了一个新框架“PolyLoss”,通过分解交叉熵损失和Focal loss等常用分类损失函数为一系列加权多项式基函数,能够更加灵活地调整多项式基函数的重要性,实现针对不同任务和数据集的优化。
实验表明,在多项式系数垂直调整的策略下,仅调整主导多项式的单个多项式系数即可获得显著的性能提升。此外,作者在不平衡数据集方面对该框架进行了改进,设计了一种基于预测概率的调整策略。实验结果表明,PolyLoss在不同的任务、模型和数据集上都能显著提高性能。
2 相关工作
略
3 PolyLoss
PolyLoss为理解和改进常用的交叉熵损耗和Focal loss提供了一个框架,如图1所示。它的灵感来自于(1−Pt)j(1−P_t)^j基底中交叉熵损失(式1)和Focal loss(式2)的泰勒展开式:
其中ptp_t为模型对ground-truth类的预测概率。
Cross-entropy loss as PolyLoss
使用梯度下降法优化交叉熵损失需要取关于Pt的梯度。在PolyLoss框架中,一个有趣的观察是系数1/j正好抵消了多项式基的第j次幂,参见公式1。因此,交叉熵损失的梯度就是多项式(1−Pt)j(1−P_t)^j的和,如式3所示。
梯度展开中的多项式项对Pt有不同的灵敏度。最前面的梯度项是1,它提供了一个恒定的梯度,不管pt的值是多少。相反,当j > 1时,当Pt趋近于1时,第j个梯度项被强烈抑制。
Focal loss as PolyLoss
在PolyLoss框架中(公式2),Focal loss只是通过调制因子γ的幂次来改变j。这相当于将所有多项式系数水平移动γ,如图1所示。为了从梯度角度理解Focal loss,取Focal loss的相对于Pt的梯度(式2):
当γ为正时,focal loss是通过γ调节的,并且没有常数项1。
4 理解PolyLoss中的系数
3中建立了PolyLoss框架,并展示了CE loss和Focal loss仅对应于不同的多项式系数,其中Focal loss水平位移了CE loss的多项式系数。在本节中,作者提出了最终的损失函数Poly-1并深入研究了如何垂直调整多项式系数可能会影响训练的问题。
具体而言,作者探索了三种不同的策略来分配多项式系数:舍弃高阶项;调整多个主导多项式系数;调整第一个多项式系数,总结如表2所示。作者发现,调整第一个多项式系数(Poly-1公式)可导致最大收益,同时需要最小的代码更改和超参数调整。在这些探索中,使用ImageNet分类进行了实验。并将其简写为ImageNet-1K以区别于包含21K类别的完整版本。使用ResNet-50和其训练超参数。
5 实验结果
本节将PolyLoss与各种任务、模型和数据集上常用的CE loss和Focal loss进行比较。Poly-1公式比默认损失函数具有一致的优势,其代价是简单的网格搜索。
6 总结
本文提出了PolyLoss框架,它为分类问题提供了一个统一的常见损失函数视图。在多项式展开下,与CE loss相比,Focal loss是多项式系数的水平位移。这种新的见解促使作者去探索另一个维度。即垂直修改多项式系数。
PolyLoss框架提供了通过调整多项式系数来改变损失函数形状的灵活方法。在此框架下,本文提出了一个简单有效的Poly-1公式。通过简单地用一个额外的超参数调整前导多项式系数的系数,改善了跨多个任务和数据集的各种模型。更重要的是,本文强调了普通loss函数的局限性,简单的修改甚至可以导致对最先进的模型的改进。作者希望这些发现将鼓励探索和重新思考loss函数的设计,而不是常用的CE loss和Focal loss,以及本工作中提出的最简单的Poly-1 loss。