常见的损失函数有哪些?回归和分类分别用什么损失函数?
简化版
损失函数(Loss Function)衡量「模型预测值和真实值的差距」,训练的目标就是最小化损失。选什么损失函数取决于任务:回归任务(预测连续值)常用 MSE(均方误差) 或 MAE(平均绝对误差),MSE 对大误差惩罚重、对异常值敏感,MAE 更鲁棒;分类任务(预测类别)用 交叉熵损失(Cross-Entropy)——二分类用二元交叉熵、多分类用多元交叉熵,它衡量「预测的概率分布和真实分布的差距」。SVM 则用 Hinge 损失。核心原则:回归用误差类损失、分类用交叉熵(不用 MSE)。
详细版
回归损失函数:
| 损失 | 公式 | 特点 |
|---|---|---|
| MSE(均方误差) | (1/n)Σ(y - ŷ)² | 对大误差惩罚重、对异常值敏感、处处可导 |
| MAE(平均绝对误差) | `(1/n)Σ | y - ŷ |
| Huber 损失 | 小误差用 MSE、大误差用 MAE | 结合两者优点,抗异常值又平滑 |
分类损失函数:
| 损失 | 用途 | 说明 |
|---|---|---|
| 二元交叉熵 | 二分类 | -[y·log(p) + (1-y)·log(1-p)] |
| 多元交叉熵 | 多分类 | -Σ yᵢ·log(pᵢ)(配合 Softmax) |
| Hinge 损失 | SVM | max(0, 1 - y·ŷ),最大间隔 |
关键结论:分类为什么不用 MSE?
- 交叉熵配合 Sigmoid/Softmax,梯度大、收敛快;用 MSE 会导致梯度消失(预测错得离谱时梯度反而很小),训练慢。
- 交叉熵从概率/最大似然角度推导,更契合分类的概率解释。
完整版教学
一、损失函数是什么、为什么重要
损失函数(也叫代价函数、目标函数)是一个衡量「模型预测有多差」的函数——它接收「模型预测值 ŷ」和「真实值 y」,输出一个数字表示两者的差距。差距越小、损失越小,说明模型越好。
损失函数是机器学习的指挥棒:训练的整个过程,就是不断调整模型参数,让损失函数的值最小化(通过梯度下降等优化算法,见「梯度下降」专题)。所以选对损失函数至关重要——它定义了「什么叫好模型」,直接决定模型往哪个方向优化。不同任务要用不同的损失函数。
二、回归损失:MSE(均方误差)
回归任务预测连续数值(房价、气温),最常用 MSE(Mean Squared Error,均方误差):
MSE = (1/n) Σ (yᵢ - ŷᵢ)²
把每个样本的「预测误差」平方后求平均。特点:
- 对大误差惩罚很重:因为平方,误差 2 的惩罚是误差 1 的 4 倍——大误差被放大。这让模型努力避免大偏差。
- 对异常值(outlier)敏感:一个离谱的异常样本,平方后损失极大,会主导训练、把模型带偏。
- 处处可导、平滑:便于用梯度下降优化,这是它流行的重要原因。
三、回归损失:MAE 与 Huber
MAE(Mean Absolute Error,平均绝对误差):
MAE = (1/n) Σ |yᵢ - ŷᵢ|
用绝对值而非平方。特点:
- 对异常值更鲁棒:误差不平方,异常值的影响是线性的、没被放大,模型不容易被少数异常点带偏。
- 缺点:在 0 点不可导(绝对值函数在 0 处有尖角),优化时需特殊处理;且对所有误差「一视同仁」,收敛可能较慢。
Huber 损失:结合 MSE 和 MAE 的优点——误差小时用 MSE(平滑、可导),误差大时用 MAE(抗异常值)。它在一个阈值 δ 内是平方损失、超过则变线性损失。既平滑好优化、又对异常值鲁棒,是回归的一个稳健选择。
回归损失选择:一般用 MSE(简单、可导);数据有较多异常值时用 MAE 或 Huber。
四、分类损失:交叉熵(核心)
分类任务预测离散类别,用 交叉熵损失(Cross-Entropy Loss)。它衡量的是「模型预测的概率分布」和「真实的概率分布」之间的差距。
二分类(二元交叉熵):模型输出一个概率 p(预测为正类的概率,经过 Sigmoid),真实标签 y ∈ {0, 1}:
Loss = -[ y·log(p) + (1-y)·log(1-p) ]
理解:
- 真实是正类(y=1)时,损失 =
-log(p)——p 越接近 1(预测越对),损失越接近 0;p 越接近 0(预测越错),损失趋于无穷大(重罚自信的错误)。 - 真实是负类(y=0)时,损失 =
-log(1-p),同理。
多分类(多元交叉熵):模型输出各类别的概率分布(经过 Softmax),真实标签用 one-hot 表示:
Loss = -Σ yᵢ·log(pᵢ)
只有真实类别那一项 yᵢ=1 起作用,损失 = -log(真实类别的预测概率)——模型给真实类别的概率越高,损失越小。
五、为什么分类不用 MSE(高频考点)
一个经典问题:分类为什么用交叉熵而不用 MSE? 两个关键原因:
① 梯度问题(最重要):分类模型输出通常经过 Sigmoid/Softmax。如果用 MSE,损失对参数的梯度里会乘上 Sigmoid 的导数——而 Sigmoid 在预测「错得很离谱」(输出接近 0 或 1)时导数接近 0,导致梯度消失:模型错得越离谱,梯度反而越小、学得越慢,这完全违背直觉(错得越狠应该改得越快)。而交叉熵配合 Sigmoid/Softmax,梯度形式恰好是 (预测 - 真实)——预测错得越多梯度越大、收敛越快。
② 概率解释 / 最大似然:交叉熵可以从最大似然估计推导出来——最小化交叉熵等价于最大化「模型对真实标签的预测概率」,这和分类的概率本质天然契合。而 MSE 假设误差服从高斯分布,更适合回归。
③ 凸性:对逻辑回归,交叉熵损失是凸函数(有全局最优),用 MSE 则可能是非凸的(有局部最优,难优化)。
所以分类一律用交叉熵,这是标准做法。
六、Hinge 损失与其他
Hinge 损失用于 SVM(支持向量机):
Loss = max(0, 1 - y·ŷ) (y ∈ {-1, +1})
它的特点是**「间隔」思想**——只要样本被正确分类且离分类边界足够远(间隔 ≥ 1),损失就是 0;只有分错或离边界太近的样本才产生损失。这让 SVM 追求最大间隔(详见 SVM 专题)。
其他还有:Focal Loss(解决类别不平衡,降低易分样本的权重,让模型关注难分样本)、KL 散度(衡量两个分布的差异)等,用于特定场景。
七、损失函数与评估指标的区别(易混)
一个重要区分:损失函数 ≠ 评估指标。
- 损失函数:训练时用来优化的目标,必须可导(才能梯度下降),如交叉熵、MSE。
- 评估指标:训练后用来衡量效果的、给人看的,可以不可导,如准确率、F1、AUC(见「模型评估」专题)。
比如分类优化时用交叉熵损失,但汇报效果时看准确率/F1——因为准确率不可导,没法直接用来训练,但更直观。两者目标一致(都想模型好)但角色不同。
八、用数字和工程流程校验理解
真实值为 10 时,预测 8 的误差是 2:单样本 MAE=2、MSE=4。若另一点误差从 2 增到 10,MAE 惩罚增为 5 倍,MSE 却从 4 增到 100、增为 25 倍,因此 MSE 对离群误差更敏感。
| 对象/方案 | 核心机制 | 选择或风险 |
|---|---|---|
| MSE | 平方误差 | 平滑但对离群点敏感 |
| MAE | 绝对误差 | 鲁棒但零点不可导,可用次梯度 |
| 交叉熵 | 负对数似然 | 适合概率分类并重罚自信错误 |
把面试题落到可执行流程:
任务假设 -> 选择概率分布
分布的负对数似然 -> training loss
独立评估指标 -> 衡量业务目标
loss 与 metric 可以不同
损失函数用于优化,评估指标用于选模和业务判断;AUC 不易直接逐样本优化,不代表训练目标必须叫 AUC loss。
九、常见误区与追问
- 误区:回归任务只能使用 MSE。 噪声重尾或离群点多时,MAE、Huber、分位数损失可能更合适。
- 误区:交叉熵越小,Accuracy 必然越高。 二者相关但不单调等价,概率置信度变化可降低交叉熵而分类标签不变。
- 追问:MSE 对应什么概率假设? 最小化 MSE 等价于在独立同方差高斯噪声假设下最大化似然。
- 追问:MAE 对应什么概率假设? 它对应以预测值为中心、尺度固定的拉普拉斯噪声负对数似然。
- 追问:Huber 的阈值怎么选? 阈值控制二次区与线性区,可结合残差尺度和验证集调节。
十、加强记忆
记忆时抓住这条主线:损失函数衡量「预测与真实的差距」,训练就是最小化它(是优化的指挥棒)。回归(连续值):MSE=(1/n)Σ(y-ŷ)²(大误差惩罚重、对异常值敏感、平滑可导)、MAE=(1/n)Σ|y-ŷ|(抗异常值但 0 点不可导)、Huber(小误差 MSE + 大误差 MAE,两者优点结合)。分类(类别):交叉熵——二分类 -[y·log(p)+(1-y)·log(1-p)]、多分类 -Σyᵢlog(pᵢ)(配 Sigmoid/Softmax)。分类为什么不用 MSE:① MSE + Sigmoid 会梯度消失(错得越离谱梯度越小),交叉熵梯度是 (预测-真实) 收敛快;② 交叉熵从最大似然推导契合概率本质;③ 凸性好优化。SVM 用 Hinge 损失(最大间隔)。损失函数(可导、用于训练)≠ 评估指标(如准确率/F1,用于衡量效果)。核心:回归用误差类、分类用交叉熵。