深度学习常用的损失函数Loss Function
损失函数(Loss Function)是深度学习中至关重要的组成部分,它衡量模型预测结果与真实标签之间的差异,是模型优化的目标。
1. 线性回归损失函数
线性回归问题通常使用MAE(平均绝对误差)和MSE(均方误差)作为损失函数。
1.1 MAE Loss (L1 Loss)
MAE(Mean Absolute Error)计算预测值与真实值之间绝对差值的平均值。
import torch
import torch.nn as nn
# MAE损失函数
mae_loss = nn.L1Loss()
特点:对异常值不敏感;梯度恒定,不利于梯度下降优化。
1.2 MSE Loss(L2 Loss)
MSE(Mean Squared Error)计算预测值与真实值之间平方差值的平均值。
mse_loss = nn.MSELoss()
特点:对异常值敏感;梯度随误差增大而增大,有利于梯度下降。
备注:对于需要进行特征筛选的任务选择L1正则,它会让权重变得稀疏,缺点是对异常值敏感,当需要保留所有特征减少过拟合时使用L2正则,它处处可导,梯度下降稳定,工程中可以同时使用这两种正则化ElasticNet(L1+L2)或直接试 L2 剪枝。
1.3 Huber Loss / Smooth L1( 更实用)
Huber Loss(也称为 Smooth L1 Loss)是一种在回归任务中常用的损失函数,它结合了MSE和MAE的优点,在误差较小时表现得像 MSE(平滑、可导),在误差较大时表现得像 MAE(对异常值更鲁棒)。
其中x为误差,δ为超参数,通常取1.0
处处可导(L1在0处不可导),且计算简单(无平方操作)。
2. 交叉熵损失(CrossEntropyLoss)
交叉熵损失是分类任务中最常用的损失函数,尤其适用于多分类问题。
交叉熵是信息熵与KL散度的组合:
ce_loss = nn.CrossEntropyLoss()
其中:
信息熵:信息熵是信息量的期望,衡量系统的不确定性。
KL散度:KL散度衡量两个概率分布的差异。
在分类任务中,P是真实分布(one-hot),Q是预测分布,因此最小化交叉熵等价于最小化KL散度。
3. 二元交叉熵损失(BCELoss)
BCELoss(Binary Cross Entropy Loss)用于二分类问题,每个样本只能属于正类或负类。
bce_loss = nn.BCELoss()
BCEWithLogitsLoss:
通常在实际使用中,我们更常用BCEWithLogitsLoss,它结合了Sigmoid激活和BCELoss,数值计算更稳定。
选择建议:
-
回归问题:
-
数据中有异常值:优先考虑MAE
-
数据质量较好:使用MSE
-
-
分类问题:
-
二分类:使用BCEWithLogitsLoss
-
多分类:使用CrossEntropyLoss
-
类别不平衡:使用带权重的版本
-
-
特殊需求:
-
需要更关注困难样本:考虑使用Focal Loss等变体
-
多标签分类:可能需要组合多个BCELoss
-
更多推荐

所有评论(0)