在机器学习(ML)和深度学习(DL)中,损失函数(Loss Function)用于衡量模型预测值与真实值之间的差异。选择合适的损失函数取决于任务类型(回归、分类、生成等)。

本文列出来了常用的损失函数、公式及必要的推导过程,按任务类型分类。


一、 回归任务 (Regression)

回归任务的目标是预测连续数值。

1. 均方误差 (Mean Squared Error, MSE / L2 Loss)

最常用的回归损失函数。

  • 公式:
其中 $y_i$ 是真实值,$\hat{y}_i$ 是预测值。
  • 推导(从极大似然估计 MLE 角度):
    假设模型预测值与真实值之间的误差 $\epsilon$ 服从高斯分布(正态分布),即 $y = \hat{y} + \epsilon$,且 $\epsilon \sim \mathcal{N}(0, \sigma^2)$。
    概率密度函数为:对数据集进行极大似然估计(MLE),即最大化联合概率(似然函数):取对数似然(Log-Likelihood):最大化 $\ln L$ 等价于最小化第二项(负号),去除常数项后,即为最小化均方误差 (MSE)

2. 平均绝对误差 (Mean Absolute Error, MAE / L1 Loss)

对离群点(Outliers)比 MSE 更鲁棒。

  • 公式:

  • 推导背景:
    相当于假设误差服从拉普拉斯分布 (Laplace Distribution) 时的极大似然估计。

3. Huber Loss / Smooth L1 Loss

结合了 MSE 和 MAE 的优点:在误差较小时是平方误差(收敛快),误差较大时是线性误差(鲁棒)。常用于目标检测(如 Faster R-CNN)。

  • 公式:

二、 分类任务 (Classification)

分类任务的目标是预测离散标签。

1. 二元交叉熵 (Binary Cross-Entropy, BCE / Log Loss)

用于二分类问题(输出为 0 或 1 的概率)。

  • 公式:

  • 推导(从 MLE 角度):
    二分类服从伯努利分布 (Bernoulli Distribution)
    对于样本 $i$,真实标签 $y_i \in {0, 1}$,模型预测为 1 的概率为 $\hat{y}_i$。
    概率质量函数写作:

    似然函数:

    取对数似然:

    最大化对数似然等价于最小化其负值,即 BCE Loss。

2. 类别交叉熵 (Categorical Cross-Entropy, CCE)

用于多分类问题(配合 Softmax 使用)。

  • 公式:

    其中 $C$ 是类别数,$y$ 是 One-hot 编码的真实向量,$\hat{y}$ 是 Softmax 输出的概率向量。

  • Softmax + Cross Entropy 的梯度推导(经典面试题):
    假设神经网络输出 Logits 为 $z$,经过 Softmax 得到 $\hat{y}$:

    损失函数(针对单个样本):

    我们需要求 $\frac{\partial L}{\partial z_i}$。
    根据链式法则:

    第一步:求 $\frac{\partial L}{\partial \hat{y}_k}$

    第二步:求 Softmax 的导数 $\frac{\partial \hat{y}_k}{\partial z_i}$
    分为两种情况:

    1. 当 $k = i$ 时:
    2. 当 $k \neq i$ 时:

    第三步:代回求和

    因为真实标签 $y$ 是 One-hot 向量,$\sum{k} y_k = 1$,即 $\sum{k \neq i} y_k = 1 - y_i$。

    结论: Softmax + Cross Entropy 的梯度非常优雅,就是 预测值 - 真实值

3. Focal Loss

用于解决分类中极度类别不平衡(Class Imbalance)问题(如目标检测中背景极其多)。基于二元交叉熵改进。

  • 公式:其中 $p_t$ 是模型对该样本属于真实类别的预测概率,$\gamma$ 是调节因子(通常取 2)。
    • 原理: 对于易分类样本($p_t$ 很大),$(1-p_t)^\gamma$ 趋近于 0,权重被降低;模型更关注难分类样本。

4. Hinge Loss (合页损失)

主要用于支持向量机 (SVM)。

  • 公式:其中 $y \in {-1, 1}$,$\hat{y}$ 是模型的输出分数(未经过 Sigmoid)。

三、 嵌入与度量学习 (Embedding / Metric Learning)

常用于人脸识别、推荐系统,目的是拉近相似样本,推开不相似样本。

1. Triplet Loss (三元组损失)

用于训练差异性,输入为一个三元组:Anchor ($A$), Positive ($P$), Negative ($N$)。

  • 公式:
    • $d(x, y)$:距离度量(通常是欧氏距离)。
    • $\alpha$:Margin(间隔),强制 $P$ 比 $N$ 离 $A$ 更近至少 $\alpha$。

2. Contrastive Loss (对比损失)

常用于孪生网络 (Siamese Network)。

  • 公式:
    • $Y=0$ 表示是同类对,最小化距离 $D$。
    • $Y=1$ 表示是异类对,若距离小于 $m$,则增大距离。

四、 生成模型 (Generative Models)

1. KL 散度 (Kullback-Leibler Divergence)

衡量两个概率分布 $P$ 和 $Q$ 的差异。常用于 VAE(变分自编码器)中的正则项。

  • 公式(离散):
  • 公式(连续):

2. GAN Loss (Minimax Loss)

生成对抗网络的损失函数。

  • 公式:
    • 判别器 $D$ 希望最大化该值(正确区分真假)。
    • 生成器 $G$ 希望最小化该值(骗过判别器)。

总结如下

任务类型 损失函数 适用场景 备注
回归 MSE (L2) 一般回归 对异常值敏感,对应高斯分布假设
MAE (L1) 有噪回归 对异常值鲁棒,对应拉普拉斯分布假设
Huber 目标检测框回归 结合 L1 和 L2
分类 Cross Entropy 多分类/二分类 对应多项分布/伯努利分布假设
Hinge Loss SVM 最大化间隔
Focal Loss 类别不平衡 (如检测) 降低简单样本权重
度量学习 Triplet Loss 人脸识别 Anchor-Positive-Negative
生成 KL Divergence VAE 衡量分布差异