Focal Loss 是一种专为解决类别不平衡问题而设计的损失函数,最初由 Facebook AI 研究团队在 2017 年提出,特别用于物体检测任务(如 RetinaNet 模型)。在这些任务中,正负样本(即目标对象和背景)的数量常常极为不平衡,导致模型在训练过程中过度关注于简单的负样本,从而影响模型的性能。Focal Loss 在一定程度上解决了这一问题。
1. Focal Loss 的基本形式
Focal Loss 是对交叉熵损失(Cross Entropy Loss)的改进。传统的交叉熵损失函数在分类问题中表示为:
其中,ptp_tpt 是模型对实际类别的预测概率。
Focal Loss 在此基础上引入了两个新参数:调制因子(modulating factor) 和 缩放因子(scaling factor),具体形式为:
-
αt:平衡因子(balance factor),用于平衡正负样本的权重。它是一个介于 0 和 1 之间的系数,有时通过经验调整,或设置为各类样本的比例。其目的在于处理类别不平衡问题。
-
(1−pt)γ:调制因子(modulating factor),γ是一个大于等于 0 的超参数,用于降低容易分类样本对损失的贡献。 γ=0时,Focal Loss 退化为普通的交叉熵损失。
2. Focal Loss 的工作原理
Focal Loss 的关键在于引入的调制因子 (1−pt)γ,这一项使得模型在处理容易分类的样本时减少损失的权重,而对难分类的样本赋予更大的权重。当样本很容易被分类时(即 pt接近 1),(1−pt) 会很小,从而整体的损失也会很小,反之,如果样本很难被分类(即 pt接近 0),(1−pt)会较大,使得损失增加。
这样,Focal Loss 可以引导模型将更多的注意力集中在难分类的样本上,减小了简单负样本对损失的主导作用。
3. Focal Loss 的例子
假设在一个二分类问题中,我们有一个模型对某个样本的预测概率 pt是 0.9。以下是不同情况下 Focal Loss 的计算:
-
普通交叉熵损失:
-
Focal Loss, γ=0(即退化为交叉熵):
-
Focal Loss, γ=2:
在 γ=2的情况下,Focal Loss 对这个容易分类的样本的损失贡献减少到了 0.00105,相较于普通的交叉熵损失(0.105)显著减小。这样模型在训练时会更关注那些更难分类的样本,而非轻易就能正确分类的样本。
4. 应用场景
Focal Loss 广泛应用于不平衡数据集的分类任务,尤其是目标检测任务。例如,在自动驾驶中的行人检测、面部识别中的少见面孔检测等场景中,正样本数量远少于负样本,而 Focal Loss 可以显著提升模型在这些任务中的表现。
5. 总结
Focal Loss 是一种强大的工具,可以有效应对类别不平衡的问题。通过对容易分类的样本降低损失贡献,它使模型更专注于难分类的样本,提升整体的模型性能