**

问题一:损失函数是什么?

**

损失函数就一个具体的样本而言,模型预测的值与真实值之间的差距。
哦哦,这句话怎么理解呢,就是我们使用自己的算法模型,然后就是自己的模型产生了一个自己进行判断出来的y(猜),然后我们放入模型进行训练的值就有一个y(真正),如何衡量我们模型产生的一个预测值和原本的值之间的差距呢,就是使用这个损失函数进行一个配对,让我们可以直观地看到机器学习的效果。

还有一种说法是:对于一个样本(xi,yi)其中yi为真实值,而f(xi)为我们的预测值。使用损失函数L(f(xi),yi)来表示真实值和预测值之间的差距。两者差距越小越好,最理想的情况是预测值刚好等于真实值。

**

下面来介绍一些主流的损失函数

**

L1 Loss损失函数

请添加图片描述

L1 Loss损失函数的优点与缺点

观察L1 Loss的图像如图下图所示:在图中我们可以看到的就是L1 Loss对于进行求导之后的线段是一个直线,因为我们可以联想提到的L1 Loss的损失函数公式,就能进行推导出来这个求导的线段。
在这里插入图片描述
pytorch实现:

x = torch.Tensor([1, 2, 3])
y = torch.Tensor([1, 0, 6])
L1loss = nn.L1Loss()
loss1 = L1loss(x, y)
print(loss1)

优点:

  1. L1 loss的鲁棒性(抗干扰性)比L2 loss强。概括起来就是L1对异常点不太敏感,而L2则会对异常点存在放大效果。因为L2将误差平方化,当误差大于1时,误会会放大很多,所以使用L2 loss的模型的误差会比使用L1 loss的模型对异常点更敏感。如果这个样本是一个异常值,模型就需要调整以适应单个的异常值,这会牺牲许多其它正常的样本,因为这些正常样本的误差比这单个的异常值的误差小。如果异常值对研究很重要,最小均方误差则是更好的选择。

缺点:

  1. L1 loss 对 x(损失值)的导数为常数,在训练后期,x较小时,若学习率不变,损失函数会在稳定值附近波动,很难收敛到更高的精度。
  2. L2 loss的稳定性比L1 loss好。概括起来就是对于新数据的调整,L1的变动很大,而L2的则整体变动不大。

L2 Loss损失函数

在这里插入图片描述

L2 Loss损失函数的图像如下:

缺点:

从L2 loss的图像可以看到,图像(上图左边红线)的每一点的导数都不一样的,离最低点越远,梯度越大,使用梯度下降法求解的时候梯度很大,可能导致梯度爆炸。

比如在深度学习的领域里面一般是不适用L1 Loss损失函数,一般使用L2Loss损失函数。

更多推荐