模型损失函数详解
·
目录
- 1. 分类任务损失函数
- 2. 回归任务损失函数
- 3. 多任务学习损失函数
- 4. 对比学习损失函数
- 5. 目标检测专用损失
- 6. 分割任务损失函数
- 7. 生成任务损失函数
- 8. 损失函数选择指南
- 9. 常见问题与技巧
1. 分类任务损失函数
| 损失函数 | 公式 | 主要优点 | 主要缺点 | 关键参数 | 适用场景 | 使用技巧 |
|---|---|---|---|---|---|---|
| 交叉熵 Cross-Entropy |
L = − ∑ i y i log ( y ^ i ) L = -\sum_{i} y_i \log(\hat{y}_i) L=−∑iyilog(y^i) | • 理论基础扎实 • 收敛快、梯度稳定 • 应用广泛成熟 |
• 对类别不平衡敏感 • 简单样本仍有损失 • 异常标注影响大 |
无 | • 平衡分类任务 • 标准图像/文本分类 • 需要概率输出 |
• 不平衡时加权 • 使用logits版本 • 配合标签平滑 • 多分类用CE,二分类用BCE |
| Focal Loss | F L = − α t ( 1 − p t ) γ log ( p t ) FL = -\alpha_t(1-p_t)^\gamma \log(p_t) FL=−αt(1−pt)γlog(pt) | • 自动降低简单样本权重 • 处理极度不平衡 • 无需采样平衡 |
• 需调优γ和α • 平衡数据不一定更优 • 可能关注噪声样本 |
γ=2.0 α=0.25 |
• 目标检测 • 极度不平衡(1:100+) • 困难样本学习 |
• γ从0.5-5调整 • 监控难样本占比 • 可初期CE后期Focal • 适合one-stage检测器 |
| 标签平滑 Label Smoothing |
y s m o o t h = y ( 1 − ϵ ) + ϵ / K y_{smooth} = y(1-\epsilon) + \epsilon/K ysmooth=y(1−ϵ)+ϵ/K | • 防止过拟合 • 减少过度自信 • 对标注噪声鲁棒 |
• 降低训练准确率 • 影响置信度 • 可能影响下游任务 |
ε=0.1 | • 大规模分类 • Transformer训练 • 标注噪声数据 |
• ImageNet常用0.1 • 小数据集用0.05 • 推理时用原始概率 • 与其他损失可组合 |
| Hinge Loss SVM损失 |
L = max ( 0 , 1 − y ⋅ y ^ ) L = \max(0, 1 - y \cdot \hat{y}) L=max(0,1−y⋅y^) | • 间隔最大化 • 已正确样本无损失 • 稀疏支持向量 |
• 收敛慢于CE • 无概率输出 • 深度学习较少用 |
margin=1.0 | • 二分类任务 • 度量学习 • 嵌入空间学习 |
• 归一化输出范围 • 配合L2正则 • 间隔通常设为1.0 |
2. 回归任务损失函数
| 损失函数 | 公式 | 主要优点 | 主要缺点 | 关键参数 | 适用场景 | 使用技巧 |
|---|---|---|---|---|---|---|
| MSE / L2 | L = 1 n ∑ i ( y i − y ^ i ) 2 L = \frac{1}{n}\sum_{i}(y_i - \hat{y}_i)^2 L=n1∑i(yi−y^i)2 | • 数学性质好 • 收敛快 • 理论基础扎实 |
• 对异常值极敏感 • 需要归一化 • 梯度可能爆炸 |
无 | • 一般回归 • 图像重建 • 高斯分布数据 |
• 输出归一化 • 配合梯度裁剪 • 有异常值改用MAE • 监控损失异常 |
| MAE / L1 | $L = \frac{1}{n}\sum_{i} | y_i - \hat{y}_i | $ | • 对异常值鲁棒 • 梯度稳定(常数) • 中位数估计 |
• 零点不可导 • 收敛较慢 • 对小误差不敏感 |
无 |
| Huber Loss 平滑L1 |
$L = \begin{cases} 0.5(y-\hat{y})^2 & | y-\hat{y} | \leq \delta \ \delta( | y-\hat{y} | - 0.5\delta) & \text{其他} \end{cases}$ | • 结合MSE和MAE优点 • 快速收敛 • 处处可导 |
| Log-Cosh | L = ∑ i log ( cosh ( y ^ i − y i ) ) L = \sum_i \log(\cosh(\hat{y}_i - y_i)) L=∑ilog(cosh(y^i−yi)) | • 二阶可导 • 平滑过渡 • 鲁棒性介于MSE和MAE |
• 计算开销大 • 文献较少 • 可能数值不稳定 |
无 | • 需平滑损失函数 • 二阶优化算法 • XGBoost自定义 |
• Huber的平滑替代 • 注意大值稳定性 • 配合梯度裁剪 |
| Quantile Loss 分位数损失 |
L τ = ∑ i ( τ − 1 y i < y ^ i ) ( y i − y ^ i ) L_\tau = \sum_i (\tau - \mathbb{1}_{y_i < \hat{y}_i})(y_i - \hat{y}_i) Lτ=∑i(τ−1yi<y^i)(yi−y^i) | • 预测任意分位数 • 不对称惩罚 • 不确定性估计 |
• 单次训练单分位数 • 解释相对复杂 |
τ=0.5 (中位数) |
• 预测区间 • 不确定性量化 • 时序/需求预测 |
• τ=0.5是MAE • 预测多个分位数(0.1,0.5,0.9) • 适合风险不对称 |
3. 多任务学习损失函数
| 方法 | 公式 | 主要优点 | 主要缺点 | 关键参数 | 使用技巧 |
|---|---|---|---|---|---|
| 加权和损失 | L = ∑ i w i L i L = \sum_i w_i L_i L=∑iwiLi | • 简单直接 • 灵活控制 • 无额外参数 |
• 权重难确定 • 需大量实验 • 训练不平衡 |
权重wi | • 归一化各损失到相似量级 • 监控损失曲线动态调整 • 网格搜索最优权重 • 考虑业务优先级 |
| 不确定性加权 Uncertainty Weighting |
L = ∑ i 1 2 σ i 2 L i + log σ i L = \sum_i \frac{1}{2\sigma_i^2}L_i + \log\sigma_i L=∑i2σi21Li+logσi | • 自动学习权重 • 理论基础扎实 • 端到端训练 |
• 额外参数σ • 需特殊初始化 • 可能退化 |
σ初始=1.0 | • log空间初始化为0 • 监控σ变化 • 任务差异大时效果好 • Kendall 2018论文 |
| GradNorm 梯度归一化 |
动态平衡梯度范数 | • 动态平衡梯度 • 考虑学习速度 • 防止任务主导 |
• 实现复杂 • 额外超参数 • 计算开销增加 |
α=0.12-0.25 | • 定期更新权重(100-500 iter) • 监控任务学习速率 • 可与不确定性加权组合 |
多任务损失平衡建议:
- 简单场景:从均匀权重(w=1)开始 → 网格搜索
- 复杂场景:使用不确定性加权或GradNorm自动平衡
- 关键原则:归一化损失量级 + 监控各任务指标 + 验证集评估
4. 对比学习损失函数
| 损失函数 | 公式 | 主要优点 | 主要缺点 | 关键参数 | 适用场景 | 使用技巧 |
|---|---|---|---|---|---|---|
| Triplet Loss 三元组损失 |
L = max ( d ( a , p ) − d ( a , n ) + m , 0 ) L = \max(d(a,p) - d(a,n) + m, 0) L=max(d(a,p)−d(a,n)+m,0) | • 学习判别性嵌入 • 直接优化相似度 • 清晰几何解释 |
• 采样策略复杂 • 收敛慢 • 对margin敏感 |
margin =0.2-0.5 |
• 人脸识别/验证 • 图像检索 • 度量学习 |
• hard negative mining • 半困难负样本挖掘 • 批次>=64 • L2归一化嵌入 • 考虑Angular/N-pair改进 |
| NT-Xent InfoNCE |
L = − log exp ( s i m ( z i , z j ) / τ ) ∑ k exp ( s i m ( z i , z k ) / τ ) L = -\log \frac{\exp(sim(z_i, z_j)/\tau)}{\sum_{k}\exp(sim(z_i, z_k)/\tau)} L=−log∑kexp(sim(zi,zk)/τ)exp(sim(zi,zj)/τ) | • 对比学习标准 • 批内负样本充分利用 • 理论基础扎实 |
• 需要大批次 • τ需调优 • 对假负样本敏感 |
τ=0.07-0.5 batch>=256 |
• 自监督预训练 • SimCLR/MoCo • 视觉表示学习 • 多模态(CLIP) |
• 批次越大越好(4096+) • τ小→尖锐分布 • momentum encoder • 强数据增强 • Projection head提升 |
| Contrastive Loss 对比损失 |
L = y ⋅ d 2 + ( 1 − y ) ⋅ max ( m − d , 0 ) 2 L = y \cdot d^2 + (1-y) \cdot \max(m - d, 0)^2 L=y⋅d2+(1−y)⋅max(m−d,0)2 | • 简单直观 • 孪生网络经典 • 易实现 |
• 只考虑成对样本 • 信息利用少 • 不如Triplet高效 |
margin =1.0-2.0 |
• 孪生网络 • 签名验证 • 相似度判断 |
• 平衡正负样本比例 • margin根据特征空间调整 • 可用余弦距离 |
| Supervised Contrastive | 利用标签,同类作正样本 | • 利用标签信息 • 优于自监督 • 更好表示学习 |
• 需要标签 • 计算开销大 |
τ=0.07-0.1 | • 有标签预训练 • 替代CE预训练 • 鲁棒性要求高 |
• 结合分类头 • 温度0.07-0.1 • 大批次训练 |
5. 目标检测专用损失
5.1 IoU Loss系列对比
| 损失函数 | 公式要点 | 主要特点 | 优势 | 劣势 | 推荐度 |
|---|---|---|---|---|---|
| IoU Loss | L = 1 − I o U L = 1 - IoU L=1−IoU | 直接优化IoU | • 尺度不变 • 直接优化指标 |
• 无重叠时梯度为0 • 无法学习 |
⭐⭐ |
| GIoU Loss | 考虑最小包围框 | 解决无重叠情况 | • 有梯度 • 考虑相对位置 |
• 收敛慢 • 水平/垂直框效果有限 |
⭐⭐⭐ |
| DIoU Loss | 增加中心点距离项 | 直接最小化中心距离 | • 收敛更快 • 不重叠处理好 |
• 未考虑长宽比 | ⭐⭐⭐⭐ |
| CIoU Loss | 增加长宽比一致性 | 最完整的IoU变体 | • 考虑重叠+中心+长宽比 • 效果最优 • 收敛最快 |
• 计算稍复杂 • 长宽比项可能不稳定 |
⭐⭐⭐⭐⭐ |
5.2 检测任务损失组合
| 组件 | 损失函数 | 权重建议 | 说明 |
|---|---|---|---|
| 分类 | Focal Loss | 1.0 | 处理正负样本不平衡 |
| 置信度 | BCE Loss | 1.0 | 预测框是否包含物体 |
| 边界框 | CIoU/DIoU | 5.0 | 边界框回归,权重更高 |
总损失: L t o t a l = L c l s + L o b j + 5.0 × L b o x L_{total} = L_{cls} + L_{obj} + 5.0 \times L_{box} Ltotal=Lcls+Lobj+5.0×Lbox
使用技巧:
- 现代检测器优先用CIoU/DIoU,不再用L1/L2坐标回归
- YOLOv5/v7等默认使用CIoU
- 小目标效果提升明显
- 配合分类损失和置信度损失使用
6. 分割任务损失函数
| 损失函数 | 公式 | 主要优点 | 主要缺点 | 关键参数 | 适用场景 | 使用技巧 |
|---|---|---|---|---|---|---|
| Dice Loss | $L = 1 - \frac{2 | X \cap Y | }{ | X | + | Y |
| Tversky Loss | 可调FP/FN权重的Dice扩展 | • 灵活控制精确率/召回率 • 处理极度不平衡 |
• 需调优α和β • 参数选择影响大 |
α+β=1 α,β控制FP/FN |
• 需控制FP/FN权衡 • 医疗诊断 • 小目标检测 |
• 重视召回: α=0.3, β=0.7 • 重视精确: α=0.7, β=0.3 • 医疗通常重召回(不漏诊) |
| Focal Tversky | ( 1 − T v e r s k y ) γ (1 - Tversky)^\gamma (1−Tversky)γ | • 进一步聚焦困难样本 • 极度不平衡小目标好 |
• 超参数更多 | γ=1.0-3.0 | • 极小目标 • 极度不平衡 |
• 先调Tversky参数再调γ • γ通常1-3 |
| Boundary Loss | 关注边界精度 | • 改善边界质量 • 提升细节 |
• 需与区域损失配合 | 权重0.1-0.3 | • 需要精确边界 • 配合Dice/CE |
• 权重较小(0.1-0.3) • 与区域损失组合使用 |
分割损失组合建议:
- 一般分割:交叉熵(处理边界) + Dice(处理不平衡) =
0.5*CE + 0.5*Dice - 医疗影像:Tversky(强调召回) + Focal(困难样本)
- 精细边界:CE + Dice + Boundary Loss
7. 生成任务损失函数
7.1 GAN损失对比
| GAN类型 | 损失函数 | 主要特点 | 稳定性 | 训练技巧 |
|---|---|---|---|---|
| 标准GAN | min G max D E [ log D ( x ) ] + E [ log ( 1 − D ( G ( z ) ) ) ] \min_G \max_D \mathbb{E}[\log D(x)] + \mathbb{E}[\log(1-D(G(z)))] minGmaxDE[logD(x)]+E[log(1−D(G(z)))] | • 原始GAN • 简单但不稳定 |
⭐⭐ | • D:G训练比例1:1 • 容易模式崩塌 • 梯度消失 |
| WGAN | Wasserstein距离 | • 更稳定 • 有意义损失曲线 |
⭐⭐⭐⭐ | • D:G训练比例5:1 • 需权重裁剪 • 训练较慢 |
| WGAN-GP | WGAN + 梯度惩罚 | • WGAN改进 • 最稳定 |
⭐⭐⭐⭐⭐ | • 梯度惩罚λ=10 • 取代权重裁剪 • 当前主流 |
7.2 生成任务损失组合
| 任务 | 损失组合 | 权重比例 | 说明 |
|---|---|---|---|
| 超分辨率 | L1 + Perceptual + Adversarial | 1.0 : 0.01 : 0.001 | L1保证像素,Perceptual保证语义,Adv保证真实感 |
| 图像修复 | L1 + Perceptual + Style | 1.0 : 0.01 : 0.01 | 修复缺失区域,保持风格一致 |
| 风格迁移 | Content + Style + Total Variation | 1.0 : 1000 : 0.01 | 平衡内容和风格 |
| 图像生成 | WGAN-GP + Perceptual | 主导 : 0.01 | GAN为主,感知损失辅助 |
7.3 重建损失选择
| 损失 | 特点 | 适用场景 |
|---|---|---|
| L1 | 生成清晰图像 | 图像生成、超分辨率(优于L2) |
| L2 | 生成模糊图像 | 不推荐单独用于图像生成 |
| SSIM | 考虑结构相似性 | 图像质量评估,与L1组合 |
| Perceptual | 语义相似性 | 超分辨率、风格迁移、修复 |
使用建议:
- 图像生成优先L1 > L2
- 组合使用:
L = L1 + 0.01*Perceptual + 0.001*Adversarial - 多尺度损失捕捉不同层次细节
8. 损失函数选择指南
8.1 按任务选择
| 任务类型 | 数据特点 | 推荐损失函数 | 备选方案 |
|---|---|---|---|
| 分类 | 平衡数据 | Cross-Entropy | + Label Smoothing |
| 分类 | 极度不平衡 | Focal Loss | Weighted CE |
| 回归 | 无异常值 | MSE | - |
| 回归 | 有异常值 | MAE 或 Huber | Log-Cosh |
| 回归 | 需要不确定性 | Quantile Loss | 多分位数 |
| 检测-分类 | 正负样本不平衡 | Focal Loss | - |
| 检测-定位 | 边界框回归 | CIoU / DIoU | GIoU |
| 分割 | 平衡数据 | Cross-Entropy | - |
| 分割 | 不平衡/小目标 | Dice Loss | CE + Dice |
| 分割 | 极度不平衡 | Tversky / Focal Dice | - |
| 对比学习 | 自监督预训练 | InfoNCE | - |
| 对比学习 | 度量学习 | Triplet Loss | Angular Loss |
| 生成-GAN | 图像生成 | WGAN-GP | - |
| 生成-重建 | 超分辨率 | L1 + Perceptual | + Adversarial |
8.2 按问题选择
| 问题 | 原因分析 | 解决方案 |
|---|---|---|
| 类别不平衡 | 多数类主导训练 | Focal Loss / 加权CE / Dice Loss / 重采样 |
| 异常值多 | 大误差影响训练 | MAE / Huber Loss / 鲁棒损失 |
| 小目标检测 | 正负样本极不平衡 | Focal Loss + CIoU / Dice Loss |
| 需要概率校准 | 模型过度自信 | Label Smoothing / 温度缩放 |
| 多任务不平衡 | 某任务主导训练 | 不确定性加权 / GradNorm / 归一化损失 |
| 训练不稳定 | 梯度爆炸/消失 | 梯度裁剪 / Warm-up / BN / 调整学习率 |
| 收敛慢 | 梯度不够强 | MSE > MAE / 增大学习率 / 检查数据 |
| 过拟合 | 模型太复杂 | L1/L2正则 / Dropout / 数据增强 / Label Smoothing |
9. 常见问题与技巧
9.1 损失平衡技巧
| 技巧 | 方法 | 代码示例 |
|---|---|---|
| 归一化量级 | 除以初始损失或移动平均 | loss = loss / loss.detach() |
| 动态权重 | 根据验证性能调整 | w = adjust_weight(val_metric) |
| 监控曲线 | 分别记录各组件 | log(loss_cls, loss_box, loss_obj) |
9.2 数值稳定性技巧
| 问题 | 解决方案 | 代码示例 |
|---|---|---|
| exp溢出 | LogSumExp技巧 | c = x.max(); log(sum(exp(x-c))) + c |
| log(0) | 添加小常数 | loss = -log(pred + 1e-7) |
| 除零 | 添加eps | dice = (2*inter + eps) / (union + eps) |
| 梯度爆炸 | 梯度裁剪 | clip_grad_norm_(params, max_norm=1.0) |
9.3 超参数调优建议
| 超参数 | 搜索范围 | 调优策略 | 经验值 |
|---|---|---|---|
| Focal γ | 0.5 - 5.0 | 对数空间搜索 | 2.0 |
| Focal α | 0.25 - 0.75 | 线性搜索 | 0.25 |
| Label Smoothing ε | 0.05 - 0.2 | 小步长搜索 | 0.1 |
| Huber δ | 0.5 - 2.0 | 基于数据分布 | 1.0 |
| InfoNCE τ | 0.05 - 0.5 | 对数空间 | 0.07 |
| Triplet margin | 0.2 - 1.0 | 基于特征维度 | 0.5 |
| 损失权重 | 0.1 - 10 | 对数空间网格搜索 | 任务相关 |
调优原则:
- 由粗到细:先大范围对数搜索,再精细调整
- 验证集评估:关注最终任务指标,不只看训练损失
- 记录实验:使用WandB/MLflow等工具
- 参考经验:查论文和开源实现的参数设置
9.4 常见组合方案
| 任务 | 推荐组合 | 权重比例 |
|---|---|---|
| 图像分类(不平衡) | CE + Label Smoothing + Class Weights | - |
| 图像分类(噪声) | Focal Loss + Label Smoothing | - |
| 医疗分割 | CE + Dice | 0.5 : 0.5 |
| 小目标分割 | Focal Loss + Tversky | 0.5 : 0.5 |
| 目标检测 | Focal + CIoU + BCE | 1.0 : 5.0 : 1.0 |
| 超分辨率 | L1 + Perceptual + GAN | 1.0 : 0.01 : 0.001 |
| 多任务学习 | Uncertainty Weighting | 自动学习 |
| 对比学习预训练 | InfoNCE | - |
| 度量学习 | Triplet + Center Loss | 1.0 : 0.1 |
9.5 调试检查清单
损失不下降:
- 检查数据加载是否正确(可视化样本和标签)
- 降低学习率(尝试1/10)
- 简化模型(用小网络验证可学习性)
- 检查损失函数实现(是否有bug)
- 过拟合小批次数据(验证训练流程正确)
- 检查标签是否匹配(分类任务0-based还是1-based)
损失变NaN/Inf:
- 降低学习率
- 添加梯度裁剪(max_norm=1.0)
- 检查数据异常值(是否有inf或nan)
- 添加数值稳定项(eps=1e-7)
- 检查权重初始化
- 使用混合精度训练(可能是溢出)
训练不稳定(损失震荡):
- 使用Batch Normalization
- 学习率Warm-up(前N个epoch线性增长)
- 梯度裁剪
- 减小学习率
- 增大批次大小
- 检查数据质量和标注一致性
9.6 性能优化技巧
| 优化目标 | 技巧 | 说明 |
|---|---|---|
| 加速收敛 | 使用MSE而非MAE | 大误差时梯度更大 |
| 提升泛化 | Label Smoothing | 防止过拟合 |
| 处理不平衡 | Focal Loss / Dice Loss | 自动平衡样本 |
| 多任务平衡 | Uncertainty Weighting | 自动学习权重 |
| 稳定训练 | 梯度裁剪 + Warm-up | 防止梯度爆炸 |
| 精细定位 | CIoU > GIoU > IoU | 逐步改进 |
| 边界质量 | CE + Dice组合 | 互补优势 |
| 生成质量 | L1 + Perceptual | 像素+语义 |
10. 参考资源
论文参考
| 损失函数 | 经典论文 |
|---|---|
| Focal Loss | Lin et al., “Focal Loss for Dense Object Detection”, ICCV 2017 |
| Uncertainty Weighting | Kendall et al., “Multi-Task Learning Using Uncertainty to Weigh Losses”, CVPR 2018 |
| GradNorm | Chen et al., “GradNorm: Gradient Normalization for Adaptive Loss Balancing”, ICML 2018 |
| InfoNCE | Oord et al., “Representation Learning with Contrastive Predictive Coding”, 2018 |
| CIoU | Zheng et al., “Distance-IoU Loss: Faster and Better Learning for Bounding Box Regression”, AAAI 2020 |
| Dice Loss | Milletari et al., “V-Net: Fully Convolutional Neural Networks for Volumetric Medical Image Segmentation”, 3DV 2016 |
| WGAN-GP | Gulrajani et al., “Improved Training of Wasserstein GANs”, NeurIPS 2017 |
代码实现
- PyTorch官方:
torch.nn模块包含基础损失函数 - Segmentation Models PyTorch:
segmentation_models.pytorch- 分割损失函数 - MMDetection:目标检测框架,包含各种检测损失
- PyTorch Metric Learning:对比学习和度量学习损失
- TensorFlow Addons:额外的损失函数实现
最后更新时间:2026年6月10日
使用建议:
- 从简单损失开始建立baseline(CE、MSE)
- 根据数据特点选择专用损失(不平衡、异常值等)
- 组合使用多个损失函数获得更好效果
- 充分调优超参数(权重、温度等)
- 持续监控训练过程,及时调整策略
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)