【深度学习】(附录)常见的损失函数
损失函数
损失函数(Loss Function) 是机器学习和深度学习的“指挥棒”——它用来衡量模型的预测结果与真实标签之间的差距。它在深度学习中的作用如下:
- 量化误差:把抽象的“准不准”变成一个具体的数值(比如 0.5 或 3.2),为模型优化提供明确目标。
- 提供梯度:在神经网络中,损失函数的值通过反向传播计算出梯度,这个梯度就是模型参数更新的方向和幅度(是调大还是调小权重)。
- 决定模型性格:选择不同的损失函数,模型会关注不同的侧重点(比如更看重整体准确率,还是更看重避免把“癌症”误诊为“健康”)。
常见的损失函数
1 多分类交叉熵 CrossEntropyLoss
交叉熵损失(Cross-Entropy Loss) 用来衡量两个概率分布之间的差异。
在机器学习中,它通常用来比较:
- 真实分布(Ground Truth):样本的真实标签分布(例如,一张图片是“猫”的概率为 1,是“狗”的概率为 0)。
- 预测分布(Prediction):模型输出的概率分布(例如,模型预测是“猫”的概率为 0.8,是“狗”的概率为 0.2)。
通俗理解:如果模型的预测概率越接近真实情况(比如把猫预测为 0.99),交叉熵损失就越小;如果预测得越离谱(比如把猫预测为 0.1),交叉熵损失就越大。它本质上是在计算预测结果带来的“惊讶程度”(信息论中的信息量)。
假设共有 $ C $ 个类别,公式为:
L=−∑i=1Cyilog(pi) L = -\sum_{i=1}^{C} y_i \log(p_i) L=−i=1∑Cyilog(pi)
-
$ y_i $:第 $ i $ 个类别的真实标签(0 或 1,在独热编码中只有一个为 1)。
-
$ p_i $:模型预测第 $ i $ 个类别的概率(经过 Softmax 激活后的值,介于 0 和 1 之间)。
-
$ \log $:通常指自然对数(以 $ e $ 为底)。
-
优点:对概率分布差异敏感,梯度良好,适合端到端训练;在多分类任务中表现优异。
-
缺点:对标签噪声较敏感;预测概率过于自信时可能过拟合。
-
适用场景:图像分类、文本分类、多类别语义分割等绝大多数多分类任务。
2 二分类交叉熵 BCEWithLogitsLoss
这是交叉熵在二分类($ C=2 $)时的特例。通常用 $ y $ 表示真实标签(0 或 1),$ p $ 表示模型预测为正类的概率。公式简化为:
L=−[ylog(p)+(1−y)log(1−p)] L = -\left[ y \log(p) + (1-y) \log(1-p) \right] L=−[ylog(p)+(1−y)log(1−p)]
- 当真实标签 $ y=1 $ 时,损失为 $ -\log(p) $(预测越接近 1,损失越小)。
- 当真实标签 $ y=0 $ 时,损失为 $ -\log(1-p) $(预测越接近 0,损失越小)。
注意:
BCEWithLogitsLoss在 PyTorch 中是将 Sigmoid 激活与二分类交叉熵合并在一起的计算方式,数值稳定性更好,建议直接使用,而非分开调用Sigmoid + BCELoss。
- 优点:形式简洁,计算高效;对正负样本不平衡问题可配合
pos_weight参数进行缓解。 - 缺点:对类别极度不平衡的数据需要额外处理(如加权或重采样)。
- 适用场景:垃圾邮件检测、疾病筛查、点击率预测(CTR)等二分类任务。
3 均方误差 MSELoss
也叫 L2 损失,是最标准的回归损失。
L=1N∑i=1N(yi−y^i)2 L = \frac{1}{N} \sum_{i=1}^{N} (y_i - \hat{y}_i)^2 L=N1i=1∑N(yi−y^i)2
- 优点:处处可导,梯度形式简单;在大误差时梯度大,收敛较快;有明确的解析解(线性回归中)。
- 缺点:对离群点(异常大或小的值)非常敏感。因为误差被平方了,如果某个点预测差得很远,损失会急剧增大,迫使模型优先拟合这个异常点,从而牺牲整体性能。
- 适用场景:房价预测、温度估计、股票价格预测等连续值回归任务;以及部分信号重建任务(如自编码器)。
4 平均绝对误差 L1Loss
也叫 L1 损失。
L=1N∑i=1N∣yi−y^i∣ L = \frac{1}{N} \sum_{i=1}^{N} |y_i - \hat{y}_i| L=N1i=1∑N∣yi−y^i∣
- 优点:对离群点不敏感,比较稳健,不会因个别极端值导致模型偏离。
- 缺点:在误差很小的时候,梯度绝对值始终为 1(或 -1),不会随误差减小而减小,导致模型在接近最优解时难以精细调整,容易在最优值附近震荡,收敛精度不如 MSE。
- 适用场景:数据中存在较多异常值或噪声的回归任务;以及对鲁棒性要求高于精度的场景(如某些金融或传感器数据分析)。
5 平滑 L1 损失 Smooth L1 Loss
L={0.5(yi−y^i)2,if ∣yi−y^i∣<1∣yi−y^i∣−0.5,otherwise L = \begin{cases} 0.5 (y_i - \hat{y}_i)^2, & \text{if } |y_i - \hat{y}_i| < 1 \\ |y_i - \hat{y}_i| - 0.5, & \text{otherwise} \end{cases} L={0.5(yi−y^i)2,∣yi−y^i∣−0.5,if ∣yi−y^i∣<1otherwise
- 优点:结合了 MSE 和 MAE 的优势——当误差较小时,表现得像 MSE(梯度平滑,收敛精度高);当误差较大时,表现得像 MAE(梯度饱和,防止梯度爆炸,对离群点鲁棒)。
- 缺点:引入了一个额外的超参数(阈值,通常设为 1 或可调),需要根据具体任务调整。
- 适用场景:目标检测中边界框回归(Bounding Box Regression)的首选损失;也适用于需要兼顾鲁棒性和精度的其他回归任务,如姿态估计中的坐标回归。
损失函数选择建议(速查表)
| 任务类型 | 推荐损失 | 理由 |
|---|---|---|
| 多分类 | CrossEntropyLoss | 标准选择,梯度稳定,效果最好 |
| 二分类 | BCEWithLogitsLoss | 数值稳定,可与不平衡处理结合 |
| 回归(无异常值) | MSELoss | 收敛快,精度高 |
| 回归(有异常值) | L1Loss / Smooth L1 Loss | 鲁棒性强,不受离群点干扰 |
| 目标检测边框回归 | Smooth L1 Loss | 平衡鲁棒性与收敛精度 |
| 多标签分类 | BCEWithLogitsLoss(逐标签) | 每个类别独立做二分类 |
补充说明:损失函数的选择并非一成不变,实际应用中常需结合任务特性、数据分布和模型结构进行实验验证。此外,还可根据需求设计自定义损失或组合损失(如分类损失 + 回归损失联合训练),以更好地驱动模型朝期望方向优化。
更多推荐

所有评论(0)