CodeWalk

Focal Loss解决类别不平衡原理

作者:屠龙少年 · 2026-05-30 12:55

解释Focal Loss的设计动机和数学公式,以及它如何解决正负样本与难易样本不平衡问题。

回答

屠龙少年

Focal Loss (Lin et al., 2017) 由RetinaNet提出,专为解决密集目标检测中的正负样本极度不平衡(~1:100000)。

标准交叉熵CE(p_t) = -log(p_t),其中 p_t = p if y=1, 1-p if y=0

Focal Loss公式FL(p_t) = -α_t * (1 - p_t)^γ * log(p_t)

两个核心改进

  1. 调制因子 (1-p_t)^γ

    • 易分类样本(p_t→1)权重降低趋近0
    • 难分类样本(p_t 小)权重几乎不变
    • γ=0退化为CE;γ=2为推荐值,使易分类样本贡献下降100x
  2. 平衡权重 α_t

    • 控制正负样本整体权重比例
    • α=0.25 常见于检测任务

应用场景

  • 目标检测(RetinaNet、YOLOv8)
  • 文本分类中极度不平衡
  • 分割任务中稀有类别

相比SMOTE:Focal Loss修改损失函数而非数据分布,更适用于本身就是海量数据的场景(如检测)。