损失函数
损失函数 (Loss Functions)
损失函数(Loss Function)用于衡量模型预测值与真实值之间的差异。选择合适的损失函数对于模型的训练效果至关重要。
1. 回归损失 (Regression Losses)
主要用于预测连续值的任务。
1.1 L1 Loss (Mean Absolute Error, MAE)
计算预测值与真实值之差的绝对值。
$$ L_1 = \frac{1}{N} \sum_{i=1}^{N} |y_i - \hat{y}_i| $$- 特点:
- 鲁棒性强: 对异常值(Outliers)不敏感,因为误差是线性增长的。
- 梯度恒定: 无论误差多大,梯度大小都一样(除了0点),这可能导致在0点附近震荡,难以收敛到精确值。
- 稀疏性: 倾向于产生稀疏解(某些参数为0)。
1.2 L2 Loss (Mean Squared Error, MSE)
计算预测值与真实值之差的平方。
$$ L_2 = \frac{1}{N} \sum_{i=1}^{N} (y_i - \hat{y}_i)^2 $$- 特点:
- 收敛快: 误差越大,梯度越大,训练初期收敛快;随着误差减小,梯度也减小,有利于收敛到微小的最小值。
- 对异常值敏感: 异常值的误差被平方放大,会主导损失函数,导致模型过度关注异常值。
1.3 Smooth L1 Loss
结合了 L1 和 L2 的优点。在误差较小时使用 L2(平滑,可导),在误差较大时使用 L1(梯度稳定,鲁棒)。
$$ \text{Smooth } L_1(x) = \begin{cases} 0.5 x^2 & \text{if } |x| < 1 \\ |x| - 0.5 & \text{otherwise} \end{cases} $$- 应用: 常见于目标检测(如 Faster R-CNN, SSD)的边界框回归。
- 优点: 既解决了 L1 在 0 点不可导的问题,又解决了 L2 对异常值敏感的问题。
1.4 Huber Loss
Smooth L1 的一种通用形式,引入了超参数 $\delta$ 来控制 L1 和 L2 的切换阈值。
$$ L_{\delta}(y, \hat{y}) = \begin{cases} \frac{1}{2}(y - \hat{y})^2 & \text{for } |y - \hat{y}| \le \delta \\ \delta |y - \hat{y}| - \frac{1}{2}\delta^2 & \text{otherwise} \end{cases} $$- 特点: 当 $\delta$ 趋向于 0 时接近 L1 Loss,趋向于无穷大时接近 L2 Loss。
2. 分类损失 (Classification Losses)
主要用于预测离散类别或概率的任务。
2.1 Cross Entropy Loss (交叉熵损失)
衡量两个概率分布之间的差异。
二分类 (Binary Cross Entropy, BCE):
$$ L = - \frac{1}{N} \sum_{i=1}^{N} [y_i \log(\hat{y}_i) + (1 - y_i) \log(1 - \hat{y}_i)] $$多分类 (Categorical Cross Entropy):
$$ L = - \frac{1}{N} \sum_{i=1}^{N} \sum_{c=1}^{C} y_{i,c} \log(\hat{y}_{i,c}) $$特点:
- 在分类任务中表现优异,通过 Softmax (多分类) 或 Sigmoid (二分类) 将输出映射为概率。
- 梯度爆炸风险: 当预测概率接近 0 或 1 时,log 函数的值会趋向负无穷,可能导致数值不稳定。
2.2 Focal Loss
为了解决类别不平衡(Class Imbalance)和难易样本不平衡问题而提出(源自 RetinaNet)。
$$ FL(p_t) = -\alpha_t (1 - p_t)^\gamma \log(p_t) $$- $\alpha_t$: 平衡正负样本的权重。
- $(1 - p_t)^\gamma$: 调节因子。对于易分类样本($p_t$ 接近 1),权重接近 0,减少其对 Loss 的贡献;对于难分类样本($p_t$ 小),权重较大。
- 应用: 目标检测中背景样本极多,前景样本极少的情况。
2.3 Hinge Loss
主要用于支持向量机(SVM)和一些最大间隔分类任务。
$$ L = \max(0, 1 - y \cdot \hat{y}) $$(假设标签 $y \in \{-1, 1\}$)
- 特点: 只要正确分类且有足够的间隔(margin),损失就为 0。鼓励模型不仅分类正确,还要确信度高。
3. 分割与生成损失 (Segmentation & Generative Losses)
3.1 Dice Loss
源自 Dice 系数,用于衡量两个集合的重叠程度。常用于医学图像分割。
$$ \text{Dice} = \frac{2 |X \cap Y|}{|X| + |Y|} $$$$ L_{\text{Dice}} = 1 - \text{Dice} = 1 - \frac{2 \sum y_i \hat{y}_i}{\sum y_i + \sum \hat{y}_i + \epsilon} $$- 特点:
- 解决样本不平衡: 直接优化评价指标(IoU/Dice),对前景背景比例不敏感。
- 训练不稳定: 梯度变化剧烈,通常结合 CE Loss 一起使用。
3.2 IoU Loss (Jaccard Loss)
Intersection over Union,即交并比。
$$ \text{IoU} = \frac{|X \cap Y|}{|X \cup Y|} $$$$ L_{\text{IoU}} = 1 - \text{IoU} $$- 应用: 语义分割、目标检测框回归(GIoU, DIoU, CIoU 等变体)。
3.3 GAN Losses (生成对抗网络损失)
Minimax Loss (原始 GAN):
$$ \min_G \max_D V(D, G) = \mathbb{E}_{x \sim p_{data}(x)}[\log D(x)] + \mathbb{E}_{z \sim p_z(z)}[\log(1 - D(G(z)))] $$- 生成器 G 试图欺骗判别器 D,判别器 D 试图区分真假。
- 问题: 容易出现模式崩塌(Mode Collapse)和梯度消失。
Wasserstein Loss (WGAN): 引入 Earth Mover’s Distance (EM距离)。
$$ L = \mathbb{E}[D(x)] - \mathbb{E}[D(G(z))] $$- 特点: 即使两个分布不重叠,也能提供有意义的梯度,训练更稳定。
4. 相似度与分布损失 (Similarity & Distribution Losses)
4.1 KL Divergence (Kullback-Leibler Divergence)
衡量两个概率分布 $P$ 和 $Q$ 之间的差异(非对称)。
$$ D_{KL}(P || Q) = \sum P(x) \log \frac{P(x)}{Q(x)} $$- 应用: VAE (Variational Autoencoder) 中用于约束隐变量分布接近标准正态分布;知识蒸馏。
假设先验 $P(z) \sim \mathcal{N}(0, I)$,后验 $Q(z|x) \sim \mathcal{N}(\mu, \sigma^2)$。两个高斯分布之间的 KL 散度有解析解:
$$ D_{KL} = -\frac{1}{2} \sum_{j=1}^J (1 + \log((\sigma_j)^2) - (\mu_j)^2 - (\sigma_j)^2) $$kld_element = mu.pow(2).add_(logvar.exp()).mul_(-1).add_(1).add_(logvar)
loss_kld = torch.sum(KLD_element).mul_(-0.5) * lambda_kld4.2 Triplet Loss (三元组损失)
用于度量学习(Metric Learning),如人脸识别。 输入三元组:Anchor ($A$), Positive ($P$), Negative ($N$)。
$$ L = \max(0, d(A, P) - d(A, N) + \text{margin}) $$- 目标: 拉近同类样本距离 $d(A, P)$,推远异类样本距离 $d(A, N)$。
4.3 Cosine Similarity Loss
衡量两个向量在方向上的相似度。
$$ L = 1 - \cos(\theta) = 1 - \frac{A \cdot B}{\|A\| \|B\|} $$- 应用: 文本语义相似度、自监督学习(如 SimCLR)。
5. 总结与对比 (Summary & Comparison)
| 损失函数类型 | 常用函数 | 典型应用场景 | 核心特点 | |
|---|---|---|---|---|
| 回归 | MSE (L2) | 一般数值预测 | 收敛快,但对异常值敏感 | |
| MAE (L1) | 异常值较多的回归 | 鲁棒性强,解稀疏 | ||
| Smooth L1 | 目标检测 (Bounding Box) | 结合 L1/L2 优点,稳定 | ||
| 分类 | Cross Entropy | 图像分类、文本分类 | 标准分类损失,概率解释性强 | |
| Focal Loss | 目标检测 (RetinaNet) | 解决正负样本极度不平衡问题 | ||
| Hinge Loss | SVM | 最大化分类间隔 | ||
| 分割 | Dice / IoU | 医学图像分割、语义分割 | 直接优化重叠度,抗样本不平衡 | |
| 生成 | WGAN Loss | 图像生成 (GAN) | 解决 GAN 训练不稳定和梯度消失 | |
| 相似度 | Triplet Loss | 人脸识别、ReID | 拉近同类,推远异类 | |
| KL Divergence | VAE、蒸馏 | 衡量分布差异 | — |