目录


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(1pt)γ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,1yy^) • 间隔最大化
• 已正确样本无损失
• 稀疏支持向量
• 收敛慢于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=n1i(yiy^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^iyi)) • 二阶可导
• 平滑过渡
• 鲁棒性介于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)(yiy^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)
• 监控任务学习速率
• 可与不确定性加权组合

多任务损失平衡建议

  1. 简单场景:从均匀权重(w=1)开始 → 网格搜索
  2. 复杂场景:使用不确定性加权或GradNorm自动平衡
  3. 关键原则:归一化损失量级 + 监控各任务指标 + 验证集评估

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=logkexp(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=yd2+(1y)max(md,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=1IoU 直接优化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 (1Tversky)γ • 进一步聚焦困难样本
• 极度不平衡小目标好
• 超参数更多 γ=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(1D(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 对数空间网格搜索 任务相关

调优原则

  1. 由粗到细:先大范围对数搜索,再精细调整
  2. 验证集评估:关注最终任务指标,不只看训练损失
  3. 记录实验:使用WandB/MLflow等工具
  4. 参考经验:查论文和开源实现的参数设置

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 PyTorchsegmentation_models.pytorch - 分割损失函数
  • MMDetection:目标检测框架,包含各种检测损失
  • PyTorch Metric Learning:对比学习和度量学习损失
  • TensorFlow Addons:额外的损失函数实现

最后更新时间:2026年6月10日

使用建议

  1. 从简单损失开始建立baseline(CE、MSE)
  2. 根据数据特点选择专用损失(不平衡、异常值等)
  3. 组合使用多个损失函数获得更好效果
  4. 充分调优超参数(权重、温度等)
  5. 持续监控训练过程,及时调整策略
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐