AI损失函数:数学公式 + PyTorch API + 使用场景

L1 损失(平均绝对误差 MAE)

数学公式

单个样本:

批次平均:

PyTorch API
复制代码
import torch
import torch.nn as nn
​
# 1. 类形式(推荐)
criterion = nn.L1Loss()
loss = criterion(pred, target)
​
# 2. 函数形式
loss = torch.nn.functional.l1_loss(pred, target)
使用场景
  • 回归任务、数据含较多异常值/离群点(鲁棒性强)

  • 图像去噪、超分、预测波动较大的连续值

  • 缺点:梯度恒定,极值点处梯度不连续,收敛慢

L2 损失(均方误差 MSE)

数学公式

单个样本:

批次平均:

PyTorch API
复制代码
criterion = nn.MSELoss()
loss = criterion(pred, target)
​
# 函数形式
loss = torch.nn.functional.mse_loss(pred, target)
使用场景
  • 标准回归任务(房价预测、流量预测、坐标回归)

  • 误差越大惩罚越重,对离群点敏感

  • 梯度平滑,收敛速度快

Smooth L1 损失(平滑L1)

结合 L1、L2 优点,广泛用于目标检测

数学公式
PyTorch API
复制代码
criterion = nn.SmoothL1Loss()
loss = criterion(pred, target)
​
# 函数形式
loss = torch.nn.functional.smooth_l1_loss(pred, target)
使用场景
  • 目标检测:边框回归(YOLO、Faster R-CNN)

  • 误差小时用 MSE、误差大时用 L1,兼顾收敛与鲁棒性

二元交叉熵

BCE (Binary Cross Entropy)

数学公式

单个样本:

(Sigmoid 输出),

PyTorch API
复制代码
# 输入:pred 经过 sigmoid,target 是 0/1 标签
criterion = nn.BCELoss()
loss = criterion(torch.sigmoid(pred), target)
​
# 函数形式
loss = torch.nn.functional.binary_cross_entropy(torch.sigmoid(pred), target)
使用场景
  • 标准单标签二分类(正负样本区分)

  • 图像二分类、判断是否存在目标、简单二分类任务

BCEWithLogitsLoss

(BCE + Sigmoid 合并)

内部集成 Sigmoid,数值更稳定。

数学公式

等价于先 Sigmoid 再 BCE:

输入线性调整后的数据

PyTorch API
复制代码
# 无需手动加 sigmoid!内部自带
criterion = nn.BCEWithLogitsLoss()
loss = criterion(pred_logits, target)  # pred_logits: 网络原始输出
使用场景
  • 二分类首选(数值稳定性 > 手动 Sigmoid + BCELoss)

  • 多标签分类、语义分割(逐像素二分类)、样本不均衡二分类

  • 支持 pos_weight 解决正负样本不均衡

交叉熵损失 CrossEntropyLoss

多分类标准损失,CrossEntropyLoss = LogSoftmax + NLLLoss

数学公式

设模型原始输出 ,真实类别为

批次平均:

PyTorch API
复制代码
# 输入:pred_logits(网络原始输出),target(类别索引,shape=[N])
criterion = nn.CrossEntropyLoss()
loss = criterion(pred_logits, target)
使用场景
  • 单标签多分类(图像分类、文本分类、手写数字识别)

  • 网络最后一层不额外加 Softmax,函数内部自动计算

DiceLoss Dice损失(分割不均衡)

公式
PyTorch(无原生层,自定义)
复制代码
class DiceLoss(nn.Module):
    def __init__(self, smooth=1):
        super().__init__()
        self.smooth = smooth
    def forward(self, pred, target):
        intersection = (pred * target).sum()
        union = pred.sum() + target.sum()
        dice = (2.*intersection + self.smooth)/(union + self.smooth)
        return 1 - dice
使用场景

医学图像分割(前景像素极少,类别极度不均衡)

FocalLoss 聚焦损失(分类/分割不均衡)

核心公式(基于CE改进)

降低易分样本权重,聚焦难样本

使用场景
  • 目标检测:前景框极少、背景海量

  • 小目标分割、不均衡多分类

相关推荐
SuperHeroWu714 天前
【算法】强化学习中奖励和损失函数的关系
算法·环境·强化学习·损失函数·奖励
白羊by2 个月前
Softmax 激活函数详解:从数学原理到应用场景
网络·人工智能·深度学习·算法·损失函数
sun_tao12 个月前
主流大语言模型的损失函数异同
人工智能·llm·损失函数·loss
披着羊皮不是狼3 个月前
MSE、MAE、Binary/Categorical Cross-Entropy、HingeLoss五种损失函数的典型应用场景
人工智能·损失函数
北京地铁1号线3 个月前
8.2 对比学习的损失函数
算法·机器学习·损失函数·对比学习
北京地铁1号线3 个月前
快手面试题:样本不均衡问题
深度学习·机器学习·分类·损失函数
Yngz_Miao5 个月前
【深度学习】语义分割损失函数之SemScal Loss
人工智能·深度学习·语义分割·损失函数·semscalloss
劈星斩月5 个月前
3Blue1Brown-深度学习之梯度下降法
深度学习·损失函数·梯度下降
Yngz_Miao5 个月前
【深度学习】交叉熵损失函数Cross-Entropy Loss
人工智能·深度学习·损失函数·交叉熵·ce