当前位置:   article > 正文

【损失函数】(一) L1Loss原理 & pytorch代码解析_pytorch l1 loss

pytorch l1 loss

1.简介

在这个系列里面,我们对常用的损失函数做一个总结,理解其原理和分析适用场景。


2.L1loss

L1loss其实就是我们最好理解的绝对值损失,也叫MAE损失,其实就是计算每个样本的差的绝对值,公式为:

loss(x,y)=L=\left \{l_{1},...,l_{N} \right \}^{T},l_{n}=\left | x_{n}-y_{n} \right |


3.思考

L1loss由于它的直观性和可解释性,常用来作为回归模型的损失函数。同时它最大的一个特点就是可以得到稀疏解。

何为稀疏解呢?当模型中的很多权重都接近于0时,这样的话某一特征输入进来对最终输出就是没有贡献的,因此可以实现特征选择,从而简化模型和提高泛化性。

那么为什么L1loss可以得到稀疏解呢?从梯度的角度来说,L1loss求导始终为一个常数:

\frac{\partial L_{1}}{\partial w_{i}}=sign(w_{i})=(1) or (-1)

这样每次梯度下降的速度都是一个常数,所以权重始终是可以到达0点的,而L2loss的梯度会随着w_{i}本身的衰减而衰减,因此难以到达0点。

但同时这也是L1loss的一个缺点,当到达0点之后它的梯度就不再存在,所以不会再进行更新,所以L1loss一般也只使用在简单模型上。


4.pytorch代码

以下代码为pytorch官方L1loss代码,可以看到里面有几个参数,我们大多数情况下使用默认参数设置就好。

torch.nn.L1Loss(size_average=None, reduce=None, reduction='mean')

其中:

  • size_average表示是否将样本的loss进行平均之后输出,默认为true。
  • reduce表示是否将输出进行压缩,默认为true。当它为false的时候就会无视size_average。
  • reduction表示用怎么的方法进行reduce。可以设置为'none','mean','sum'。
  1. import torch
  2. import torch.nn as nn
  3. a = torch.randn((3, 5)) # [m, n]
  4. b = torch.randn((3, 5)) # [m, n]
  5. criterion = nn.L1Loss()
  6. c = criterion(a, b) # [1]
  7. criterion = nn.L1Loss(reduce=False)
  8. c = criterion(a, b) # [m, n]

业务合作/学习交流+v:lizhiTechnology

 如果想要了解更多损失函数相关知识,可以参考我的专栏和其他相关文章:

损失函数_Lcm_Tech的博客-CSDN博客

【损失函数】(一) L1Loss原理 & pytorch代码解析_l1 loss-CSDN博客

【损失函数】(二) L2Loss原理 & pytorch代码解析_l2 loss-CSDN博客

【损失函数】(三) NLLLoss原理 & pytorch代码解析_nll_loss-CSDN博客

【损失函数】(四) CrossEntropyLoss原理 & pytorch代码解析_crossentropyloss 权重-CSDN博客

【损失函数】(五) BCELoss原理 & pytorch代码解析_bce损失函数源码解析-CSDN博客

如果想要了解更多深度学习相关知识,可以参考我的其他文章:

深度学习_Lcm_Tech的博客-CSDN博客

【优化器】(一) SGD原理 & pytorch代码解析_sgd优化器-CSDN博客

【图像生成】(一) DNN 原理 & pytorch代码实例_pytorch dnn代码-CSDN博客

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/354393
推荐阅读
相关标签
  

闽ICP备14008679号