深度学习损失函数详解:从 MSE、Cross Entropy 到 Dice、Focal、IoU、Contrastive Loss,一文掌握所有常见 Loss

本文系统总结深度学习中常见的损失函数

  • 从最基础的 MSE、MAE、交叉熵
  • 到++分类++ 中的BCE、Focal Loss
  • ++目标检测++ 中的IoU / GIoU / DIoU / CIoU
  • ++语义分割++ 中的 Dice Loss、Tversky Loss
  • 再到++对比学习++ 中的 Contrastive Loss、Triplet Loss
  • 以及 KL DivergenceCTC、GAN 、++扩散模型++中的损失函数。

本文重点不是简单罗列公式,而是回答三个问题:

  1. 这个 Loss 到底在优化什么?

  2. 为什么要这样设计?

  3. 什么时候应该使用它?


1. 什么是损失函数?

在机器学习中,我们希望模型 ++预测结果++ 尽可能接近 ++真实标签++

因此定义一个函数:

用来衡量:模型预测得有多差。也就是Loss 越小 ⇒ 预测结果越接近目标。

训练过程就是不断调整模型参数

其中:

  • :输入

  • :真实标签

  • :模型预测,即

  • :模型参数

  • :损失函数


2. Loss、Metric 和 Objective 有什么区别?

这是学习损失函数时非常容易混淆的地方。

2.1 Loss

Loss 用于:训练模型。例如 pytorch 中的实现:

复制代码
loss = nn.CrossEntropyLoss()

然后反向传播更新模型参数:

复制代码
loss.backward()
optimizer.step()

2.2 Metric

Metric 用于:评价模型效果。 例如分类评价指标:

  • Accuracy

  • Precision

  • Recall

  • F1

  • AUC

医学图像分割评价指标

  • Dice

  • IoU

  • HD95

具体公式例如:


2.3 Objective

Objective 可以理解为最终优化目标

例如多任务学习:

这里整个 就是最终 Objective。


3. Loss 函数的总体分类

可以把深度学习 Loss 大致分成下面几大类:

类别 典型 Loss 典型任务
回归 Loss MSE、MAE、Huber 回归
概率分布 Loss KL Divergence 蒸馏、分布匹配
二分类 Loss BCE、BCEWithLogits 二分类、多标签
多分类 Loss CE、NLL 多分类
Margin Loss Hinge、Margin Ranking SVM、排序
不平衡 Loss Focal、Class-Balanced 长尾分类
分割 Loss Dice、IoU、Tversky 医学图像分割
检测 Loss IoU、GIoU、DIoU、CIoU 目标检测
度量学习 Contrastive、Triplet 表征学习
序列 Loss CTC OCR、语音
生成模型 GAN Loss、VAE Loss、Diffusion Loss 生成模型
正则化 L1、L2、Elastic Net 防止过拟合
多任务 Weighted Sum 多任务学习

下面逐个展开。


4. 回归损失函数

回归任务的目标通常是:

最经典的几种 Loss 是:

  • MSE

  • MAE

  • Smooth L1

  • Huber

  • Log-Cosh


5. MSE Loss

MSE(Mean Squared Error,均方误差)

定义:

也可以写成:


5.1 为什么叫平方误差?

假设:

模型预测:

那么MSE:

如果预测错得更多:

那么:

所以 MSE 会:强烈惩罚大误差。


5.2 MSE 的梯度

对于:

求导:

误差越大,梯度越大。

因此:MSE 对异常值非常敏感。


5.3 MSE 的优点

  • 简单

  • 光滑

  • 可导

  • 优化稳定

  • 大误差惩罚强

PyTorch 实现:

复制代码
import torch.nn as nn

criterion = nn.MSELoss()

loss = criterion(pred, target)

6. MAE / L1 Loss

MAE:Mean Absolute Error

定义:

例如:

则:


6.1 MAE 和 MSE 的区别

假设:

MSE:

MAE:

因此:

++MSE 会放大大误差,而 MAE 对异常值更加鲁棒。++


6.2 MAE 的问题

绝对值:

在:

不可导。虽然深度学习框架能够处理这个问题,但相比 MSE,它的优化通常不如 MSE 平滑。

PyTorch 实现:

复制代码
criterion = nn.L1Loss()

7. MSE vs MAE

特性 MSE MAE
误差形式 ![
大误差惩罚
异常值敏感度
梯度 连续 0 点不可导
优化 容易 相对困难
鲁棒性 较差 较好

简单理解:

MSE:我非常讨厌大错误。
MAE:大错误和小错误按照线性比例处理。


8. Smooth L1 Loss

Smooth L1 是一种 MSE 和 MAE 的折中。

定义:

其中:

核心思想:

  • 小误差:使用平方函数

  • 大误差:使用绝对值函数

因此:小误差区域平滑,大误差区域鲁棒。


9. Huber Loss

Huber Loss 与 Smooth L1 非常接近。

定义:

其中:

当误差较小时:

当误差较大时:

因此:Huber Loss 是经典的鲁棒回归 Loss。

PyTorch 实现:

复制代码
criterion = nn.HuberLoss(delta=1.0)

PyTorch 也将 SmoothL1Loss 和 HuberLoss 作为标准 Loss 提供。


10. Log-Cosh Loss

定义:

很小时:

所以类似 MSE。

很大时:

所以类似 MAE。

因此:Log-Cosh也是一种平滑的鲁棒回归 Loss。


11. 回归 Loss 总结

Loss 核心思想 异常值
MSE 平方误差 敏感
MAE 绝对误差 鲁棒
Smooth L1 MSE + MAE 鲁棒
Huber MSE + MAE 鲁棒
Log-Cosh 平滑 MAE 较鲁棒

12. 二分类损失:Binary Cross Entropy

对于二分类:

模型输出:

BCE:


为什么可以当作二分类的损失?

12.1 当真实标签是 1

如果:

那么:

所以:

  • → Loss 很小

  • → Loss 较小

  • → Loss 很大


12.2 当真实标签是 0

得到:

如果模型错误地预测:

那么:

Loss 会非常大。


13. BCEWithLogitsLoss

实际深度学习中更推荐:

复制代码
nn.BCEWithLogitsLoss()

而不是:

复制代码
sigmoid()
+
BCELoss()

因为 BCEWithLogitsLoss 将 Sigmoid 与 BCE 合并计算,并使用数值稳定技巧,避免概率非常接近 0 或 1 时出现数值问题。

正确写法:

复制代码
criterion = nn.BCEWithLogitsLoss()

logits = model(x)

loss = criterion(logits, target)

模型最后:

复制代码
nn.Linear(...)

不要再手动 Sigmoid。


14. BCE 最适合什么任务?

BCE 非常适合:二分类

例如:

复制代码
正常 / 患病
猫 / 狗
有目标 / 无目标

多标签分类

例如一个样本同时存在:

复制代码
肺炎
胸腔积液
肺不张
气胸

每个标签都是独立的:

这种情况使用:

复制代码
nn.BCEWithLogitsLoss()

而不是 CrossEntropyLoss。


15. Cross Entropy Loss

Cross Entropy是深度学习分类任务中最重要的 Loss 之一。

对于 个类别:

如果标签是 one-hot:

那么:


16. 为什么 Cross Entropy 与 Softmax 配合?

Softmax:

其中 是模型输出的 logits。

Cross Entropy:

代入 Softmax:

得到:

这就是分类模型常见的++LogSumExp++结构。

PyTorch 的**CrossEntropyLoss接收的是 未归一化 logits ,而不是先 Softmax 后的概率,它内部等价于 LogSoftmax + NLLLoss**。

所以:

复制代码
criterion = nn.CrossEntropyLoss()

logits = model(x)

loss = criterion(logits, target)

不要:

复制代码
logits = model(x)

prob = torch.softmax(logits, dim=1)

loss = criterion(prob, target)

17. NLL Loss

NLL:Negative Log Likelihood

定义:

PyTorch:

复制代码
criterion = nn.NLLLoss()

log_prob = F.log_softmax(logits, dim=1)

loss = criterion(log_prob, target)

因此:


18. Cross Entropy 为什么有效?

假设真实类别:

模型预测:

复制代码
class 0: 0.1
class 1: 0.1
class 2: 0.8

Loss:

如果模型预测:

复制代码
class 0: 0.4
class 1: 0.5
class 2: 0.1

Loss:

所以:Cross Entropy 本质上是在惩罚模型给真实类别分配过低概率。


19. Label Smoothing

普通 One-Hot:

Label Smoothing 后:

例如:

变成:

目的:不让模型过度自信。

PyTorch 实现:

复制代码
criterion = nn.CrossEntropyLoss(
    label_smoothing=0.1
)

20. BCE 与 Cross Entropy 的区别

这是非常重要的知识点。

问题 BCE Cross Entropy
二分类
多分类 ×
多标签 ×
输出激活 Sigmoid Softmax
类别之间是否互斥

例如:

多分类

一张图片只能是:

复制代码
猫
狗
马

使用:

复制代码
CrossEntropyLoss

多标签

一张医学影像可以同时:

复制代码
肺炎 = 1
胸腔积液 = 1
气胸 = 0

使用:

复制代码
BCEWithLogitsLoss

21. KL Divergence

KL:Kullback-Leibler Divergence

定义:

它衡量:

两个概率分布之间有多不一样。


21.1 KL 的直觉

假设教师模型:

学生模型:

KL 用于约束:

因此经常用于:

  • Knowledge Distillation

  • VAE

  • 分布对齐

  • 概率模型


22. KL 与 Cross Entropy 的关系

交叉熵:

KL:

展开:

因为 与模型参数无关,所以在优化 时:最小化 KL 与最小化 Cross Entropy 有密切关系。


23. Hinge Loss

Hinge Loss 是 SVM 的经典损失。

标签:

定义:

如果:

那么:

否则:

它不仅要求分类正确,还要求:**预测结果拥有足够大的 margin。**Hinge Loss 是最大间隔分类器中的经典形式。


24. Focal Loss

在目标检测、医学影像等任务中经常存在:正负样本极度不平衡

例如:

复制代码
背景:99.9%
目标:0.1%

普通 BCE 很容易被大量简单负样本支配。

Focal Loss的思想是:

降低简单样本的权重,把注意力集中到困难样本。

定义:

其中:


25. 为什么 Focal Loss 有效?

假设:

这是一个非常容易的样本。

如果:

则:

这个样本的贡献被极大降低。

如果:

则:

困难样本仍然具有较大的 Loss。

所以:

FocalLoss = CrossEntropy + 困难样本加权


26. Focal Loss PyTorch 实现

复制代码
import torch
import torch.nn.functional as F

def focal_loss(logits, targets, alpha=0.25, gamma=2.0):
    bce = F.binary_cross_entropy_with_logits(
        logits,
        targets.float(),
        reduction="none"
    )

    probs = torch.sigmoid(logits)

    pt = torch.where(
        targets == 1,
        probs,
        1 - probs
    )

    alpha_t = torch.where(
        targets == 1,
        alpha,
        1 - alpha
    )

    loss = alpha_t * (1 - pt).pow(gamma) * bce

    return loss.mean()

27. Class-Balanced Loss

Focal Loss关注:

样本难度。

Class-Balanced Loss 关注:

类别数量不平衡。

一个经典思路是根据类别的有效样本数量:

定义类别权重:

其中 是该类别样本数。

样本越少:

因此少数类会得到更大的权重。


28. Dice Loss

Dice Loss是医学图像分割中极其重要的 Loss。

Dice:

其中:

  • :预测概率

  • :Ground Truth

Dice Loss:

通常添加平滑项:


29. Dice 为什么特别适合分割?

医学图像通常存在:前景区域远小于背景区域。

例如:

复制代码
肺部:90%
病灶:10%

甚至:

复制代码
背景:99%
病灶:1%

Pixel-wise BCE 很容易被背景主导。

Dice 直接衡量:**预测区域和真实区域的重叠程度,**因此对类别不平衡更加友好。


30. Dice Loss 的代码

复制代码
def dice_loss(pred, target, smooth=1e-6):
    pred = pred.contiguous()
    target = target.contiguous()

    intersection = (pred * target).sum()

    dice = (
        2 * intersection + smooth
    ) / (
        pred.sum() + target.sum() + smooth
    )

    return 1 - dice

31. BCE + Dice Loss

医学图像分割非常常见:

例如:

复制代码
loss = bce_loss + dice_loss

为什么组合?

BCE:

关注每一个像素。

Dice:

关注整体区域重叠。

所以二者具有互补性。


32. IoU Loss

IoU :也叫 Jaccard Index

IoU Loss:

写成预测概率形式:


33. Dice 与 IoU 的关系

二者关系:

反过来:

例如:

则:

因此:Dice 和 IoU 本质上都在衡量区域重叠,但数值并不相同。


34. Tversky Loss

Dice 对 FP 和 FN 的惩罚相对对称。但医学分割中有时:漏诊比误检更加严重。

于是可以使用 Tversky Index

其中:

Tversky Loss:


34.1 如何控制 FP/FN?

如果:

那么:

受到更大的惩罚。

也就是:更关注 Recall,减少漏检。

如果:

则更加惩罚:

即:更关注 Precision,减少误检。


35. Focal Tversky Loss

Tversky 还可以与 Focal 思想结合:

这样:**对困难区域进行进一步强调。**医学图像中小目标病灶分割经常可以考虑这种设计。


36. Boundary Loss

Dice/IoU 主要关注:区域重叠。 但是对于一些医学图像:边界非常重要

例如:

复制代码
肿瘤边界
器官边界
血管边界

此时可以引入 Boundary Loss。其核心思想是:直接优化预测边界与真实边界之间的距离。

例如可以使用距离变换:

其中:

表示像素 到 Ground Truth 边界的距离。


37. Hausdorff Distance Loss

医学图像分割经常关注:Hausdorff Distance

Hausdorff Distance:

它关注:最坏情况下的边界距离。

因此:

  • Dice 高

  • 但某个边界位置偏差很大

仍然可能得到较大的 HD,这也是为什么医学分割不能只看 Dice。


38. 目标检测中的 Bounding Box Loss

目标检测通常同时需要优化:

其中:

  • 分类 Loss

  • Objectness Loss

  • Bounding Box Regression Loss

Bounding Box Loss 的经典方法包括:

  • L1

  • Smooth L1

  • IoU Loss

  • GIoU Loss

  • DIoU Loss

  • CIoU Loss


39. IoU Bounding Box Loss

两个框:

IoU:

Loss:

问题是:**当两个框没有重叠时,IoU = 0。**此时不同位置的框:

复制代码
IoU = 0
IoU = 0
IoU = 0

无法告诉模型:到底应该往哪个方向移动。


40. GIoU Loss

GIoU

其中: 是同时包住两个 Bounding Box 的最小外接框。

Loss:

因此即使:

GIoU 仍然能够提供一定梯度信息。


41. DIoU Loss

DIoU 不仅考虑重叠面积,还考虑:两个框中心点之间的距离。

定义:

其中:

  • :两个中心点的欧氏距离

  • :外接框对角线长度

所以:DIoU 会直接推动预测框中心向真实框中心移动。


42. CIoU Loss

CIoU在 DIoU 基础上进一步考虑:

  • Overlap

  • Center distance

  • Aspect ratio

定义:

其中:

因此:CIoU 同时优化位置、重叠和宽高比。


43. IoU 系列怎么理解?

可以记成:

复制代码
IoU
 │
 ├── GIoU:解决无重叠问题
 │
 ├── DIoU:加入中心距离
 │
 └── CIoU:加入宽高比

所以:


44. Contrastive Loss

对比学习的目标不是直接预测类别,而是学习:什么样的样本应该接近,什么样的样本应该远离。

给定两个样本:

标签:

Contrastive Loss

其中:


45. Contrastive Loss 的直觉

如果两个样本是正样本:

那么:

训练会让:

即:正样本越来越接近。

如果是负样本:

则:

只有:

才有 Loss。

因此:负样本只需要距离超过 margin 即可。


46. Triplet Loss

Triplet Loss 使用三个样本:

复制代码
Anchor
Positive
Negative

分别记为:

目标:

定义:

其中: 是 margin。

PyTorch 的 TripletMarginLoss 就采用这一基本形式,用 Anchor、Positive、Negative 三元组优化相对距离。


47. Triplet Loss 的直觉

假设:

margin:

则:

说明已经满足要求。

如果:

则:

需要继续优化。


48. Cosine Embedding Loss

对于两个向量:

Cosine Similarity:

Cosine Embedding Loss 的目标是:正样本 cosine similarity 高,负样本 cosine similarity 低。

非常适合:

  • 文本匹配

  • 图文对齐

  • Sentence Embedding

  • 多模态学习


49. Ranking Loss

Ranking Loss用于:

排序任务。

例如:

复制代码
商品 A 应该排在商品 B 前面

定义:

其中:

例如:

表示:


50. CTC Loss

CTC: Connectionist Temporal Classification

主要用于:

  • OCR

  • ASR

  • 手写识别

  • 无明确对齐关系的序列预测

例如输入:

复制代码
图像特征:
t1 t2 t3 t4 t5 t6

目标:

复制代码
HELLO

但是我们并不知道:

复制代码
H 对应 t1/t2?
E 对应 t3?
L 对应 t4/t5?

CTC 通过:对所有可能的对齐路径求和 解决这个问题。


51. CTC 的核心思想

定义:

其中:

  • :一种可能的对齐路径

  • :CTC collapse 操作

  • :最终标签序列

Loss:

因此:CTC 不需要人工提供每个时间步对应哪个字符。


52. VAE Loss

VAE:Variational Autoencoder

VAE 的 Loss 通常由两部分组成:

即:

复制代码
VAE Loss
   │
   ├── Reconstruction Loss
   │
   └── KL Divergence

53. Reconstruction Loss

例如图像重构:

它要求:

即:编码之后仍然能够恢复原始输入。


54. VAE 中的 KL Loss

VAE 希望:

接近:

通常:

因此:

如果:

则:

最终:


55. GAN Loss

GAN包括:

  • Generator(G):生成假样本。
  • Discriminator (D):判断真假。

经典 GAN:


56. Generator Loss

经典 GAN 中:

实际训练中经常使用 Non-Saturating Loss

目标:让 Discriminator 把生成样本判断成真。


57. Diffusion Model Loss

扩散模型的核心是:向数据中不断加入噪声,再训练模型预测噪声。

前向过程:

其中:

模型:

预测噪声。最经典的训练 Loss:

也就是:让模型预测自己加进去的噪声。


58. L1/L2 Regularization

严格来说,L1/L2 不一定是任务 Loss,而是:参数正则化项。


L1 Regularization

作用:鼓励参数变成 0 。因此可以产生:稀疏模型。


L2 Regularization

最终:

作用:抑制模型参数过大,降低过拟合风险。


59. Elastic Net

Elastic Net 同时结合:

所以:

复制代码
L1 → 稀疏
L2 → 平滑
Elastic Net → 两者结合

60. 多任务学习 Loss

现实任务往往不是只有一个目标。

例如医学 AI:

复制代码
输入 CT
   │
   ├── 分类
   ├── 分割
   └── 检测

分别得到:

最终:


61. 为什么需要 Loss Weight?

假设:

但是:

直接相加:

这意味着:Segmentation Loss 对梯度的影响可能远大于 Classification Loss。

因此需要:

例如:


62. 常见 Loss 组合

实际科研中,单独使用一个 Loss 并不一定是最好的选择。

常见组合包括:

分类


类别不平衡分类

++++

或者:


二分类


医学图像分割


小目标分割


医学边界分割


多任务


63. 医学图像分割为什么经常使用 Dice + CE?

这是一个非常实用的问题。假设病灶只占1%,背景占99%

如果使用 BCE:

复制代码
背景像素非常多
        ↓
BCE 被背景主导
        ↓
模型倾向于预测背景

而 Dice:

复制代码
直接关注区域重叠
        ↓
降低类别不平衡影响

所以:

可以同时:

  • 利用 CE 的像素级监督

  • 利用 Dice 的区域级监督


64. Loss 函数应该如何选择?

可以记住下面这张表。

任务 首选 Loss
普通回归 MSE
异常值较多的回归 MAE / Huber
二分类 BCEWithLogits
多分类 CrossEntropy
多标签分类 BCEWithLogits
类别严重不平衡 Focal / Weighted CE
图像分割 Dice + CE
小目标分割 Focal + Dice
医学病灶分割 Dice / Tversky
边界敏感分割 Dice + Boundary
目标检测框回归 IoU / GIoU / DIoU / CIoU
图像检索 Contrastive / Triplet
表征学习 Contrastive
排序 Ranking Loss
OCR / ASR CTC
VAE Reconstruction + KL
GAN Adversarial Loss
Diffusion Noise Prediction MSE
多任务 Weighted Sum

65. 一个非常重要的问题:Loss 越小,模型一定越好吗?

不一定。

例如训练:

但是:

说明:

可能发生过拟合。

甚至:

但:

也可能出现。

因此一定要区分:

复制代码
Training Loss
Validation Loss
Evaluation Metric

66. 为什么不能只看 Loss?

因为 Loss 和最终业务目标可能不同。例如医学分割:

训练:

但是论文最终报告:

复制代码
Dice
IoU
HD95
Precision
Recall
Sensitivity
Specificity

因为:

Loss 是优化工具,Metric 是评价工具。

二者没有必要完全一致。


67. Loss 的梯度比 Loss 数值更加重要

深度学习真正更新的是:

参数更新:

因此设计 Loss 时不能只看:

Loss 数值是否合理。

更重要的是:

梯度是否能够提供有效的优化方向。


68. 为什么很多 Loss 会出现梯度消失?

例如 Sigmoid:

其导数:

当:

或者:

都有:

因此:

Sigmoid 饱和会导致梯度变小。

这也是为什么实际二分类中推荐:

复制代码
BCEWithLogitsLoss

而不是手动:

复制代码
Sigmoid + BCELoss

69. Reduction 是什么意思?

PyTorch Loss 经常有:

复制代码
reduction="mean"

或者:

复制代码
reduction="sum"

或者:

复制代码
reduction="none"

假设:

复制代码
loss = [1, 2, 3, 4]

mean

sum

none


70. 为什么 reduction="none" 很重要?

因为很多高级 Loss 需要:

先计算每个样本的 Loss,再进行加权。

例如 Focal:

复制代码
loss = criterion(
    logits,
    target,
    reduction="none"
)

然后:

复制代码
loss = weight * loss

最后:

复制代码
loss = loss.mean()

这也是实现自定义 Loss 的常见方式。


71. PyTorch 常见 Loss API 对照

PyTorch 当前 torch.nn 提供了大量标准损失,包括:

复制代码
L1Loss
MSELoss
SmoothL1Loss
HuberLoss

BCELoss
BCEWithLogitsLoss

CrossEntropyLoss
NLLLoss

KLDivLoss

MarginRankingLoss
HingeEmbeddingLoss
MultiMarginLoss
MultiLabelMarginLoss

CosineEmbeddingLoss

TripletMarginLoss
TripletMarginWithDistanceLoss

CTCLoss

PoissonNLLLoss
GaussianNLLLoss

这些都可以在 PyTorch 官方 API 中找到。


72. 一张图理解所有 Loss

可以把 Loss 看成下面这棵树:

复制代码
Loss Function
│
├── Regression
│   ├── MSE
│   ├── MAE
│   ├── Smooth L1
│   └── Huber
│
├── Classification
│   ├── BCE
│   ├── Cross Entropy
│   ├── NLL
│   ├── Hinge
│   └── Focal
│
├── Distribution
│   └── KL Divergence
│
├── Segmentation
│   ├── Dice
│   ├── IoU
│   ├── Tversky
│   ├── Focal Tversky
│   └── Boundary
│
├── Object Detection
│   ├── L1
│   ├── Smooth L1
│   ├── IoU
│   ├── GIoU
│   ├── DIoU
│   └── CIoU
│
├── Metric Learning
│   ├── Contrastive
│   ├── Triplet
│   └── Cosine
│
├── Sequence
│   └── CTC
│
├── Generative
│   ├── VAE
│   ├── GAN
│   └── Diffusion
│
└── Regularization
    ├── L1
    ├── L2
    └── Elastic Net

73. 最重要的 Loss 对比表

Loss 核心思想 最适合
MSE 惩罚平方误差 回归
MAE 惩罚绝对误差 鲁棒回归
Huber 小误差 MSE,大误差 MAE 鲁棒回归
BCE 二分类概率误差 二分类
CE 多类别概率误差 多分类
Focal 关注困难样本 类别不平衡
KL 分布之间的差异 蒸馏/VAE
Dice 区域重叠 分割
IoU 区域交并比 分割/检测
Tversky 分别控制 FP/FN 医学分割
GIoU 解决无重叠框 检测
DIoU 加入中心距离 检测
CIoU 加入宽高比 检测
Contrastive 正样本近、负样本远 对比学习
Triplet 相对距离排序 度量学习
CTC 无需显式对齐 OCR/ASR
VAE Loss 重构 + 分布约束 VAE
GAN Loss 对抗训练 GAN
Diffusion MSE 预测噪声 Diffusion

74. 最后:如何真正理解 Loss?

不要死记公式。

建议按照下面四个问题理解任何一个 Loss。

第一问:它在比较什么?

例如:

MSE:

Dice:

KL:

Triplet:


第二问:它在惩罚什么?

MSE:

大误差。

Focal:

困难样本。

Dice:

区域不重叠。

Tversky:

FP/FN。

CIoU:

框的位置、重叠和形状。


第三问:它解决了什么问题?

例如:

复制代码
MSE
↓
基础回归

Huber
↓
MSE 对异常值敏感
↓
鲁棒回归

Focal
↓
CE 被大量简单样本支配
↓
困难样本学习

Dice
↓
CE/BCE 被背景支配
↓
类别不平衡分割

Tversky
↓
FP/FN 惩罚不对称
↓
医学分割

CIoU
↓
IoU 无法描述中心距离和宽高比
↓
更好的 Bounding Box Regression

75. 一句话记住整个 Loss 体系

可以把深度学习 Loss 的演化理解成:

误差→概率→类别→难样本→区域→边界→距离→分布→多任务

最基础的是:

分类:

不平衡:

分割:

检测:

表征学习:

分布学习:

生成模型:

最终复杂模型往往不是使用单一 Loss,而是:

因此真正的 Loss 设计,本质上是在回答:

"我希望模型具有什么样的行为?"

如果希望模型预测数值准确,就使用回归 Loss;如果希望分类概率准确,就使用 Cross Entropy;如果希望关注困难样本,就使用 Focal;如果希望预测区域重叠,就使用 Dice/IoU;如果希望学习表示之间的相似关系,就使用 Contrastive/Triplet;如果同时存在多个目标,就组合多个 Loss。

这也是深度学习中一个非常重要的思想:

Loss Function ≈ 我们对"什么叫做预测得好"的数学定义


参考资料

  • PyTorch torch.nn Loss 官方文档:包含 L1、MSE、BCE、CrossEntropy、KL、CTC、Triplet 等标准实现。

  • PyTorch CrossEntropyLoss:详细说明 logits、class index、class probability、weightignore_indexlabel_smoothing 等机制。

  • PyTorch BCEWithLogitsLoss:Sigmoid 与 BCE 的数值稳定实现,并支持 pos_weight 处理正负样本不平衡。

  • PyTorch TripletMarginLoss:Anchor、Positive、Negative 三元组及 margin-based 距离优化。

  • scikit-learn Hinge Loss 文档:介绍二分类和多分类 Hinge Loss。

相关推荐
绘梨衣5471 小时前
AI技术栈全景指南_Prompt_RAG_爬虫_MCP
人工智能·爬虫·prompt
zed_231 小时前
RAG 全链路串起来:一个能答专业问题的问答接口
人工智能
2601_962304911 小时前
把出片接进自动化流水线:2026 年批量 AI 视频生成工具的脚本契约与同类项目对照
运维·人工智能·自动化
知了一笑1 小时前
企业的卷味,组织的AI味
人工智能·ai·ai工作流
实战派K8S&DB2 小时前
如何在内网配置 TiDB 数据库 Agent
数据库·人工智能·分布式·tidb
天远数科2 小时前
零信任架构实战:基于天远身份证OCR构建自动化高并发移动支付网关
人工智能·架构·自动化·ocr
我爱写代码i2 小时前
AI对话绘画数字人源码 - uniapp前端
前端·人工智能·uni-app
这就是佬们吗2 小时前
不写Prompt,写Loop:AI编程的下一场范式迁移
人工智能·prompt·ai编程
用户938515635072 小时前
大模型记忆指南:从短时缓存到永久记忆,手把手带你吃透 LangChain Memory 管理
javascript·人工智能