🎯 一、分类任务的损失函数
✅ 1. 多分类的交叉熵损失函数(Multi-class Cross-Entropy Loss)
🔍 通俗解释:
想象你在考试中选答案,老师根据你"猜对"的程度来打分。
如果你完全猜对了正确答案,得满分;
如果你猜错了,得分越低;
如果你把正确答案当成概率很低的选项,扣分更多。
📌 数学公式:
Loss=−∑�=1���log(�^�)Loss=−i=1∑Cyilog(y^i)
- ��yi :真实标签(one-hot 编码),只有一个是 1,其余是 0
- �^�y^i :模型预测的概率(比如 [0.1, 0.7, 0.2])
- C:类别总数
✅ 举个例子:
假设一个图像识别任务有 3 类:猫、狗、鸟
表格
| 真实标签 | 模型预测概率 |
|---|---|
| 狗(即第2类) | [0.1, 0.7, 0.2] |
那么损失为:
Loss=−[0⋅log(0.1)+1⋅log(0.7)+0⋅log(0.2)]=−log(0.7)≈0.357Loss=−[0⋅log(0.1)+1⋅log(0.7)+0⋅log(0.2)]=−log(0.7)≈0.357
✅ 越接近 1 的预测值,损失越小 → 模型越准!
💡 应用场景:
- 图像分类(如猫/狗/鸟)
- 文本分类(如新闻类别)
- NLP 中的词预测(如 BERT)
✅ 2. 二分类的交叉熵损失函数(Binary Cross-Entropy Loss)
🔍 通俗解释:
就像判断一个东西是不是"好"或"坏"。
如果它是"好",但你预测它是"坏",那你就错了,惩罚大;
如果你是"半信半疑"(预测 0.5),说明你没把握,也得罚。
📌 数学公式:
Loss=−[�log(�^)+(1−�)log(1−�^)]Loss=−[ylog(y^)+(1−y)log(1−y^)]
- �y :真实标签(0 或 1)
- �^y^ :模型输出的概率(如 0.8 表示"是正类的可能性是 80%")
✅ 举个例子:
判断一封邮件是否是垃圾邮件:
表格
| 真实标签 | 模型预测概率 |
|---|---|
| 是垃圾邮件(y=1) | �^=0.9y^=0.9 |
损失为:
Loss=−[1⋅log(0.9)+(1−1)⋅log(1−0.9)]=−log(0.9)≈0.105Loss=−[1⋅log(0.9)+(1−1)⋅log(1−0.9)]=−log(0.9)≈0.105
如果模型预测是 0.1(认为不是垃圾邮件),则:
Loss=−[1⋅log(0.1)]=−log(0.1)=2.302(惩罚很大!)Loss=−[1⋅log(0.1)]=−log(0.1)=2.302(惩罚很大!)
✅ 所以模型会尽量让正确的类别概率接近 1。
💡 应用场景:
- 垃圾邮件检测
- 疾病诊断(是否有病)
- 情感分析(正面 or 负面)
🎯 二、回归任务的损失函数
回归任务的目标是预测一个连续数值,比如房价、温度、年龄等。
✅ 1. MAE(Mean Absolute Error)平均绝对误差
🔍 通俗解释:
你猜一个房子价格,实际是 100 万,你猜了 110 万,差了 10 万;
另一个人猜了 90 万,也差了 10 万。
不管高估还是低估,都算"错 10 万"。
📌 公式:
MAE=1�∑�=1�∣��−�^�∣MAE=n1i=1∑n∣yi−y^i∣
✅ 举个例子:
表格
| 实际价格(y) | 预测价格(ŷ) | 绝对误差 |
|---|---|---|
| 100 | 110 | 10 |
| 100 | 90 | 10 |
| 100 | 105 | 5 |
MAE=10+10+53=8.33MAE=310+10+5=8.33
✅ 优点:对异常值不敏感(不会被极端错误拉大)
✅ 2. MSE(Mean Squared Error)均方误差
🔍 通俗解释:
和 MAE 类似,但"犯大错"会被狠狠惩罚!
比如你猜 100 万,实际是 10 万,差了 90 万,平方后变成 8100 万,非常大!
📌 公式:
MSE=1�∑�=1�(��−�^�)2MSE=n1i=1∑n(yi−y^i)2
✅ 举个例子:
表格
| 实际价格(y) | 预测价格(ŷ) | 平方误差 |
|---|---|---|
| 100 | 110 | 100 |
| 100 | 90 | 100 |
| 100 | 105 | 25 |
MSE=100+100+253=75MSE=3100+100+25=75
✅ 优点:能让模型更关注"大错误",适合需要高精度的任务
✅ 3. Smooth L1 损失函数(Huber Loss)
🔍 通俗解释:
是 MAE 和 MSE 的"折中方案":
- 当误差小时,像 MSE(平滑梯度)
- 当误差大时,像 MAE(避免爆炸)
📌 公式:
SmoothL1(�)={0.5�2if ∣�∣﹤1∣�∣−0.5otherwiseSmoothL1(x)={0.5x2∣x∣−0.5if ∣x∣﹤1otherwise
✅ 举个例子:
误差为 0.5 → 使用 0.5×0.52=0.1250.5×0.52=0.125
误差为 2 → 使用 2−0.5=1.52−0.5=1.5
✅ 优点:既不会对小误差太敏感,也不会对大误差过度惩罚
💡 应用场景:
- 目标检测(YOLO, Faster R-CNN)
- 物体跟踪
- 任何存在噪声或异常值的回归任务
🧩 总结对比表
表格
| 损失函数 | 适用任务 | 特点 | 例子 |
|---|---|---|---|
| 多分类交叉熵 | 分类(多类) | 对错分类惩罚明确 | 图像分类 |
| 二分类交叉熵 | 分类(两类) | 输出概率,适合 sigmoid | 垃圾邮件检测 |
| MAE | 回归 | 对异常值鲁棒 | 房价预测 |
| MSE | 回归 | 强调减少大误差 | 温度预测 |
| Smooth L1 | 回归 | 折中方案,稳定训练 | 目标检测框坐标 |
📌 记忆口诀
✅ 分类任务用"交叉熵"
✅ 回归任务看"大小":
- 想稳一点 → 用 MAE
- 想准一点 → 用 MSE
- 想又稳又准 → 用 Smooth L1