损失函数(Loss Function)是机器学习和深度学习中用于衡量模型预测值与真实值之间差异的函数,其值越小表示模型性能越好。不同的任务(如分类、回归、生成等)需要选择不同的损失函数。
一、分类任务损失函数
1. 交叉熵损失(Cross-Entropy Loss)
(1)二分类(Binary Cross-Entropy)
L=−N1∑i=1N[yilog(pi)+(1−yi)log(1−pi)]
其中,yi是真实标签(0或1),pi是预测概率。
应用场景:逻辑回归、二分类神经网络等。
(2)多分类(Categorical Cross-Entropy)
L=−N1∑i=1N∑c=1Cyi,clog(pi,c)
其中,yi,c是one-hot编码的真实标签,pi,c是预测概率。
应用场景:多分类任务(如ResNet、Transformer等)。
2. 合页损失(Hinge Loss)
L=max(0,1−yi⋅f(xi))
其中,yi∈{−1,1},f(xi)是模型输出。
应用场景:支持向量机(SVM)。
3. Focal Loss
L=−α(1−pi)γlog(pi)
通过参数γ降低易分类样本的权重,解决类别不平衡问题。
应用场景:目标检测(如RetinaNet)。
4. KL散度(Kullback-Leibler Divergence)
L=∑p(x)logq(x)p(x)
衡量两个概率分布的差异。
应用场景:生成模型(如VAE)、模型蒸馏。
二、回归任务损失函数
1. 均方误差(MSE, L2 Loss)
L=N1∑i=1N(yi−y^i)2
对异常值敏感,惩罚大误差。
应用场景:房价预测、连续值预测。
2. 平均绝对误差(MAE, L1 Loss)
L=N1∑i=1N∣yi−y^i∣
对异常值鲁棒,梯度恒定。
应用场景:鲁棒回归任务。
3. Huber Loss
L={21(yi−y^i)2,if∣yi−y^i∣≤δδ∣yi−y^i∣−21δ2,else
结合MSE和MAE优点,δ 为超参数。
应用场景:异常值较多的回归任务。
4. 分位数损失(Quantile Loss)
L=∑i=1N{τ∣yi−y^i∣,ifyi≥y^i(1−τ)∣yi−y^i∣,else
其中,τ为目标分位数(如0.5对应中位数回归)。
应用场景:金融风险预测。
三、其他任务损失函数
1. 对比损失(Contrastive Loss)
L=2N1∑i=1N[yidi2+(1−yi)(max(0,m−di))2]
其中,di是样本对的距离,m为间隔参数。
应用场景:孪生网络、人脸识别。
2. Triplet Loss
L=max(0,d(a,p)−d(a,n)+m)
其中,a(anchor)、p(positive)、n(negative)组成三元组,m为间隔。
应用场景:度量学习(如人脸验证)。
3. Dice Loss
L=1−∣X∣+∣Y∣2∣X∩Y∣
衡量集合相似度,对类别不平衡敏感。
应用场景:图像分割(如UNet)。
4. Wasserstein Loss
用于衡量两个分布之间的Earth-Mover距离。
应用场景:生成对抗网络(WGAN)。
四、选择损失函数的注意事项
任务类型:分类任务常用交叉熵,回归任务常用MSE/MAE。
异常值:MAE或Huber Loss对异常值更鲁棒。
类别不平衡:Focal Loss或Dice Loss可调整样本权重。
梯度特性:MSE梯度随误差增大而增大,可能需梯度裁剪。
通过合理选择损失函数,可以显著提升模型性能。实际应用中可能需要结合任务需求自定义损失函数(如多任务学习中的加权组合)。