zoukankan      html  css  js  c++  java
  • L1和L2 loss的区别

    引自:https://zhuanlan.zhihu.com/p/83131026

    1、L1 loss 在零点不平滑,用的较少 ,、一般来说,L1正则会制造稀疏的特征,大部分无用特征的权重会被置为0
    2、Smooth L1 Loss 修改零点不平滑问题 , L1-smooth比L2范数的对异常值的鲁棒性更强。

    3、L2 loss:对离群点比较敏感,如果feature 是 unbounded的话,需要好好调整学习率,防止出现梯度爆炸的情况[fast rcnn]。 L2正则会让特征的权重不过大,使得特征的权重比较平均。

    L1Loss

    也就是L1 Loss了,它有几个别称:

    • L1 范数损失
    • 最小绝对值偏差(LAD)
    • 最小绝对值误差(LAE)

    最常看到的MAE也是指L1 Loss损失函数。 它是把目标值 [公式] 与模型输出(估计值) [公式] 做绝对值得到的误差。

    [公式]

    什么时候使用?

    1. 回归任务
    2. 简单的模型
    3. 由于神经网络通常是解决复杂问题,所以很少使用。

    L2Loss

    也就是L2 Loss了,它有几个别称:

    • L2 范数损失
    • 最小均方值偏差(LSD)
    • 最小均方值误差(LSE)

    最常看到的MSE也是指L2 Loss损失函数,PyTorch中也将其命名为torch.nn.MSELoss

    它是把目标值 [公式] 与模型输出(估计值) [公式] 做差然后平方得到的误差

    [公式]

    什么时候使用?

    1. 回归任务
    2. 数值特征不大
    3. 问题维度不高

    SmoothL1Loss

    简单来说就是平滑版的L1 Loss。

    原理

    SoothL1Loss的函数如下:

    [公式]

    仔细观察可以看到,当预测值和ground truth差别较小的时候(绝对值差小于1),其实使用的是L2 Loss;而当差别大的时候,是L1 Loss的平移。SooothL1Loss其实是L2Loss和L1Loss的结合,它同时拥有L2 Loss和L1 Loss的部分优点。

    1. 当预测值和ground truth差别较小的时候(绝对值差小于1),梯度不至于太大。(损失函数相较L1 Loss比较圆滑)
    2. 当差别大的时候,梯度值足够小(较稳定,不容易梯度爆炸)。

    什么时候使用?

    1. 回归
    2. 当特征中有较大的数值
    3. 适合大多数问题

    size_average=True or False

    在pytorch中,所有的损失函数都带这个参数,默认设置为True。

    当size_average为True的时候,计算出来的结果会对mini-batch取平均。反之,为False的时候,那算出来的绝对值不会除以n。

  • 相关阅读:
    关于Mac上的开发工具
    关于VS2008和VS2013中字体的选择
    实验四 使用ASP.NET内置对象 总结
    实验三 使用ASP.NET常用服务器控件 总结
    实验二 C#程序设计 总结
    实验一 ASP.NET应用环境配置 总结
    关于PHP.INI中的错误ERROR报告级别设置
    获取当前网址跟目录
    PHP获取站点根目录
    php 上传图片
  • 原文地址:https://www.cnblogs.com/lyp1010/p/11738926.html
Copyright © 2011-2022 走看看