焦点损失是一种用于深度学习中训练神经网络的损失函数,特别针对类别严重不平衡的任务,例如图像中的目标检测。它通过添加一个调制因子来修改标准的交叉熵损失,该因子降低了已正确分类样本的损失贡献,从而使模型能够专注于难以分类的样本。这一方法由Tsung-Yi Lin、Priya Goyal、Ross Girshick、Kaiming He和Piotr Dollár于2017年在论文《用于密集目标检测的焦点损失》中提出。
焦点损失所解决的核心问题是密集预测任务中前景与背景类别之间的不平衡。在典型的目标检测图像中,绝大多数候选位置属于背景,只有少数包含目标。标准的交叉熵损失可能会被大量易分类的背景样本所主导,导致模型偏向于预测背景,而忽略了罕见的目标类别。
数学公式
焦点损失基于二元交叉熵(CE)损失构建。对于真实类别的预测概率p,CE定义为CE(p) = -log(p)。焦点损失引入了聚焦参数gamma(γ)和权重因子alpha(α),公式如下:
FL(p) = -α(1 - p)^γ log(p)
其中,(1 - p)^γ是调制因子。当p接近1(即易分类的正确样本)时,该因子趋近于0,大幅降低损失;当p较小(即难分类的样本)时,该因子接近1,保留损失。参数γ控制易分类样本的降权速率,典型值为2.0,而γ=0时对应标准交叉熵。参数α用于平衡正负样本的重要性,通常设置为类别频率的倒数或通过验证集调优。
在目标检测中的应用
焦点损失的主要动机是使单阶段目标检测器能够达到两阶段检测器的精度。两阶段检测器(如Faster R-CNN)通过区域提议网络过滤候选框,自然减少了类别不平衡。而单阶段检测器(如YOLO和SSD)直接对所有位置进行评估,面临更大的不平衡问题。焦点损失使单阶段检测器(特别是RetinaNet)在保持速度的同时达到了先进的精度。RetinaNet在论文中结合了特征金字塔网络和焦点损失,在COCO数据集上超越了之前的单阶段检测器,并与两阶段检测器相当或更优。
扩展与变体
自提出以来,焦点损失已被应用于多个领域和问题。在机器学习研究中,针对多类分类、语义分割和医学影像等任务提出了多种变体。例如,在密集预测任务中,损失可以按类别分别计算后求和。一些工作探索了自适应调整gamma或alpha参数的方法,在训练过程中学习这些参数。焦点损失也被应用于自然语言处理任务,如类别不平衡的文本分类,以及大语言模型中的命名实体识别,其中稀有实体往往被低估。
与其他技术的关系
焦点损失在概念上与难例挖掘相关,后者在训练过程中显式选择困难样本。然而,焦点损失是一种平滑、可微的近似方法,对所有样本连续加权,避免了显式选择启发式的需要。它也与代价敏感学习相关,后者按类别调整误分类代价。alpha参数提供了一种代价敏感的形式,而gamma则增加了对困难样本的聚焦。在实践中,焦点损失常与数据增强和其他正则化技术结合使用,以进一步提升泛化能力。
实际考虑
实现焦点损失需要仔细调整gamma和alpha参数。常见的起始值是gamma = 2和alpha = 0.25,如原始RetinaNet论文中所用。在实际应用中,当p非常小时,损失可能不稳定,因此实现中通常会在log参数中添加一个小epsilon值。焦点损失在主要的深度学习框架(如PyTorch和TensorFlow)中均有提供,既可通过内置函数使用,也可自定义实现。当类别不平衡程度极端时(例如图像中每张包含数千个背景框),焦点损失尤为有效;但在不平衡程度较轻时,其收益可能有限。
参见
参考文献
Lin, T. Y., Goyal, P., Girshick, R., He, K., & Dollár, P. (2017). 用于密集目标检测的焦点损失。见《IEEE国际计算机视觉会议论文集》(第2980-2988页)。