机器学习的L1、L2损失函数
**问题一:损失函数是什么?**损失函数就一个具体的样本而言,模型预测的值与真实值之间的差距。哦哦,这句话怎么理解呢,就是我们使用自己的算法模型,然后就是自己的模型产生了一个自己进行判断出来的y(猜),然后我们放入模型进行训练的值就有一个y(真正),如何衡量我们模型产生的一个预测值和原本的值之间的差距呢,就是使用这个损失函数进行一个配对,让我们可以直观地看到机器学习的效果。还有一种说法是:对于一个
**
问题一:损失函数是什么?
**
损失函数就一个具体的样本而言,模型预测的值与真实值之间的差距。
哦哦,这句话怎么理解呢,就是我们使用自己的算法模型,然后就是自己的模型产生了一个自己进行判断出来的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)
优点:
- L1 loss的鲁棒性(抗干扰性)比L2 loss强。概括起来就是L1对异常点不太敏感,而L2则会对异常点存在放大效果。因为L2将误差平方化,当误差大于1时,误会会放大很多,所以使用L2 loss的模型的误差会比使用L1 loss的模型对异常点更敏感。如果这个样本是一个异常值,模型就需要调整以适应单个的异常值,这会牺牲许多其它正常的样本,因为这些正常样本的误差比这单个的异常值的误差小。如果异常值对研究很重要,最小均方误差则是更好的选择。
缺点:
- L1 loss 对 x(损失值)的导数为常数,在训练后期,x较小时,若学习率不变,损失函数会在稳定值附近波动,很难收敛到更高的精度。
- L2 loss的稳定性比L1 loss好。概括起来就是对于新数据的调整,L1的变动很大,而L2的则整体变动不大。
L2 Loss损失函数
L2 Loss损失函数的图像如下:
缺点:
从L2 loss的图像可以看到,图像(上图左边红线)的每一点的导数都不一样的,离最低点越远,梯度越大,使用梯度下降法求解的时候梯度很大,可能导致梯度爆炸。
比如在深度学习的领域里面一般是不适用L1 Loss损失函数,一般使用L2Loss损失函数。
更多推荐
所有评论(0)