类别不平衡时 Class Weight 和 Focal Loss 怎么选?
简化版
类别权重通过放大少数类或高成本样本的损失改变整体贡献;Focal Loss 额外用 (1-p_t)^γ 压低易样本权重,集中学习难样本。二者可组合,但会改变概率含义,需在原始分布上重新校准和选阈值。
详细版
-
class weight 解决类别总贡献失衡,Focal Loss 解决大量易样本主导梯度。
-
γ=0时 Focal Loss 退化为交叉熵,γ 越大越强调低置信样本。 -
α 是类别平衡项,γ 是难度调制项,不能混为一个参数。
-
噪声标签也常是难样本,过大的 γ 会持续放大它们。
-
用 PR-AUC、召回、成本和校准联合评估,不能只看准确率。
完整版教学
一、两种方法作用在不同的权重维度
普通交叉熵中每个样本都贡献 -log p_t。
类别权重只按标签缩放,Focal 因子则随当前预测置信度动态变化。
这意味着同一正类内部,已正确预测的样本会逐渐降权,边界样本继续产生较大梯度;但模型无法自动区分真正困难与错误标注。
二、底层机制与公式
weighted CE = -alpha_y * log(p_t)
focal = -alpha_y * (1-p_t)^gamma * log(p_t)
三、带数字的推演
取 γ=2:易样本 p_t=0.9 的调制因子为 0.01,难样本 p_t=0.2 为 0.64,仅调制项就相差 64 倍。
若 γ=0,两者都回到普通交叉熵。
四、方案对比
| 方案/对象 | 核心特点 | 代价或边界 |
|---|---|---|
| Class weight | 按类别/成本固定缩放 | 简单但不区分难易 |
| Focal Loss | 动态压低易样本 | 对噪声与 γ 敏感 |
| 阈值移动 | 只改决策操作点 | 不改变表征学习 |
五、执行流程
定义业务成本与原始比例 -> 建 CE 基线 -> 加权或 focal 消融
-> 训练折内调 α/γ -> 原始验证分布选阈值 -> 检查概率校准
六、边界条件与工程代价
若通过过采样又使用 inverse-frequency 权重,少数类可能被重复补偿,导致过度预测。
所有权重都应在同一有效采样分布下计算。
Focal Loss 常改善检测中的前景/背景失衡,却不保证分类概率可靠;用概率做风险决策时需单独校准。
记忆钩子:先分清“哪个类别重要”与“哪个样本困难”:α 或 class weight 回答前者,
(1-p_t)^γ回答后者。
七、常见误区与追问
-
误区:类别不均衡就一定需要 Focal Loss。 可分性强时普通 CE 加阈值已经足够。
-
追问:α 和 γ 分别控制什么? α 控类别或成本,γ 控易难样本调制强度。
-
误区:γ 越大越关注真正有价值的难例。 标签噪声也会获得大权重。
-
追问:加权后为什么要重选阈值? 训练目标改变后输出分数和先验不再保持原含义。
-
追问:如何公平比较? 固定采样与训练预算,在原始分布报告 PR 和成本曲线。
八、加强记忆
先分清“哪个类别重要”与“哪个样本困难”:α 或 class weight 回答前者,(1-p_t)^γ 回答后者。
组合越强,越要检查噪声放大与校准偏移。