
损失函数概念在深度学习中, 损失函数是用来衡量模型参数质量的函数, 衡量的方式是比较网络输出预测值和真实输出真实值的差异。模型通过最小化损失函数的值来调整参数使其输出更接近真实值。损失函数又名代价函数、目标函数、误差函数……损失函数作用评估性能反映模型预测结果与目标值的匹配程度。指导优化通过梯度下降等算法最小化损失函数优化模型参数。分类任务损失函数在深度学习的分类任务中使用最多的是交叉熵损失函数。多分类任务损失函数在多分类任务通常使用softmax将logits转换为概率的形式所以多分类的交叉熵损失也叫做softmax损失它的计算方法是多分类交叉熵损失 softmax() 损失计算在多分类问题中使用多分类交叉熵损失的情况下输出层可以不用softmax()激活函数。其中是x属于某个类别的真实概率是样本属于某一类别的预测分数S是softmax激活函数将属于某一类别的预测分数转换成概率L用来衡量真实值y和预测值f(x)之间差异性的损失结果例如真实预测值标签y[0, 1, 0]模型预测分数f(x) [0.1, 2, 1]softmax转换后的概率为S(f(x)) [0.1, 0.7, 0.2]多分类交叉熵损失从概率角度理解我们的目的是最小化正确类别所对应的预测概率的对数的负值(损失值最小)APIloss torch.nn.CrossEntropyLoss() # 计算损失结果 my_loss loss(y_pred, y_true).detach().numpy()二分类任务损失函数在处理二分类任务时我们不再使用softmax激活函数而是使用sigmoid激活函数那损失函数也相应的进行调整使用二分类的交叉熵损失函数其中y是样本x属于某一个类别的真实概率是样本属于某一类别的预测概率L用来衡量真实值y与预测值之间差异性的损失APItorch.nn.BCELoss()回归任务损失函数MAE损失函数L1 Lossmean absolute loss(MAE)也被称为L1 Loss是以绝对误差作为距离特点是由于L1 loss具有稀疏性为了惩罚较大的值因此常常将其作为正则项添加到其他loss中作为约束。(0点不可导, 产生稀疏矩阵)L1 loss的最大问题是梯度在零点不平滑导致会跳过极小值适用于回归问题中存在异常值或噪声数据时可以减少对离群点的敏感性APItorch.nn.L1Loss()MSE损失函数L2 LossMean Squared Loss/ Quadratic Loss(MSE loss)也被称为L2 loss或欧氏距离它以误差的平方和的均值作为距离特点是L2 loss也常常作为正则项对于离群点outliers敏感因为平方项会放大大误差当预测值与目标值相差很大时, 梯度容易爆炸梯度爆炸:网络层之间的梯度值大于1.0重复相乘导致的指数级增长会产生梯度爆炸适用于大多数标准回归问题如房价预测、温度预测等APItorch.nn.MSELoss()Smooth L1损失函数smooth L1说的是光滑之后的L1是一种结合了均方误差MSE和平均绝对误差MAE优点的损失函数。它在误差较小时表现得像 MSE在误差较大时则更像 MAE。其中xf(x)-y从上图中可以看出该函数实际上就是一个分段函数在[-1,1]之间实际上就是L2损失这样解决了L1的不光滑问题在[-1,1]区间外实际上就是L1损失这样就解决了离群点梯度爆炸的问题特点是对离群点更加鲁棒当误差较大时损失函数会线性增加而不是像MSE那样平方增加因此它对离群点的惩罚更小避免了MSE对离群点过度敏感的问题计算梯度时更加平滑与MAE相比Smooth L1在小误差时表现得像MSE避免了在训练过程中因使用绝对误差而导致的梯度不连续问题APItorch.nn.SmoothL1Loss()