当前理解
二元交叉熵(Binary Cross-Entropy,BCE)是二分类任务中常见的损失函数。它比较两个东西:真实标签 ,以及模型预测类别 的概率 。
这个公式可以分成两种情况理解:
- 当真实标签 时,损失是 。
- 当真实标签 时,损失是 。
也就是说,它只关心模型分给“正确类别”的概率。这个概率越接近 ,损失越接近 ;越接近 ,损失就越大。
| 真实标签 | 类别 1 概率 | 正确类别概率 | 损失 | 直觉 |
|---|---|---|---|---|
| 0.105 | 自信地答对 | |||
| 2.303 | 自信地答错 | |||
| 0.105 | 自信地答对 | |||
| 2.303 | 自信地答错 |
为什么我关心
只统计“分类对了多少次”不足以指导模型学习。预测 和预测 在阈值为 时都算答对,但它们表达的确信程度明显不同;同样,预测 与预测 虽然都答错,错误程度也不一样。
二元交叉熵保留了这种差别,并且是连续、可导的,因此优化算法可以根据损失的变化方向更新参数。
观察角度
- 作为评分规则:检查模型给正确答案分配了多少概率。
- 作为训练目标:把每条样本的预测质量变成一个可以最小化的数。
- 作为置信度约束:正确且自信时损失小,错误且自信时损失大。
- 作为似然:最小化二元交叉熵,等价于最大化伯努利模型对观测标签给出的似然。
连接
二元交叉熵经常与 Sigmoid 配合:Sigmoid 把任意分数转换成类别 的概率,二元交叉熵再用真实标签评价这个概率。
线性分数 z → Sigmoid → 概率 p → 二元交叉熵 → 损失 L
TEXT
两者组合后,对线性分数 的梯度会简化为:
这正是逻辑回归以及使用 Sigmoid 输出的单个神经元中常见的误差信号。
实际框架通常提供“直接接收 logits”的实现,例如把 Sigmoid 与二元交叉熵合并计算。这样可以避免先得到非常接近 或 的概率后再取对数,数值上更加稳定。
张力与取舍
二元交叉熵适合互斥的二分类,也可以用于每个标签独立成立的多标签分类,但不应直接套用到所有预测任务。多类别单选任务通常使用分类交叉熵,回归问题则需要其他损失函数。
当类别极度不平衡时,整体 BCE 下降也不一定意味着少数类表现良好。此时还需要观察精确率、召回率等指标,或根据任务使用类别权重、重采样等方法。
未解问题
- 为什么对数能把多个样本概率的乘积变成损失之和?
- 交叉熵与最大似然估计之间具体怎样对应?
BCEWithLogitsLoss为什么比手动计算 Sigmoid 再取对数更稳定?- 类别不平衡时,应该怎样调整损失或采样策略?
演化
- 2026-08-21: 初始 seed,在学习单个神经元与逻辑回归时建立。