← 返回题目列表

常见的损失函数有哪些?回归和分类分别用什么损失函数?

高频 中等 第 4 / 25 题 更新于 2026/07/28
机器学习损失函数交叉熵MSE

简化版

损失函数(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 损失SVMmax(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,用于衡量效果)。核心:回归用误差类、分类用交叉熵