深度学习之L1 loss和L2 loss的区别

L1 loss和L2 loss的区别?

img
L1 loss:在这里插入图片描述
L2 loss: 在这里插入图片描述
smooth L1 loss: 在这里插入图片描述

L1 loss

l1 loss在零点不平滑,用的较少。一般来说,l1正则会制造稀疏的特征,大部分无用的特征的权重会被置为0。

(适合回归任务,简单的模型,由于神经网络通常解决复杂问题,很少使用。)

l2 loss

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

(适合回归任务,数值特征不大,问题维度不高)

l1和l2

smooth l1 loss

smooth l1 loss修改零点不平滑问题,L1-smooth比l2 loss对异常值的鲁棒性更强。具有l1和l2的优点,当绝对差值小于1,梯度不至于太大,损失函数较平滑,当差别大的时候,梯度值足够小,较稳定,不容易梯度爆炸。

(回归,当特征中有较大的数值,适合大多数问题)
img
img

L2 损失函数L1 损失函数L2正则化L1正则化
不是非常的鲁棒鲁棒计算效率高(有解析解)在非稀疏情形下计算效率低
稳定解不稳定解非稀疏输出稀疏输出
总是一个解可能多个解无特征选择内置特征选择

L1不可导的时候该怎么办

当损失函数不可导,梯度下降不再有效,可以使用坐标轴下降法。
梯度下降是沿着当前点的负梯度方向进行参数更新;
而坐标轴下降法是沿着坐标轴的方向;
假设有m个特征个数,坐标轴下降法进行参数更新的时候,先固定m-1个值,然后再求另外一个的局部最优解,从而避免损失函数不可导问题。

使用Proximal Algorithm对L1进行求解,此方法是去优化损失函数上界结果。

### 定义 #### L1 Loss (绝对误差损失) L1 Loss 表示预测值与实际值之间差异的绝对值总。对于单个样本而言,其计算方式如下: \[ \text{L1 Loss} = |y_{\text{pred}} - y_{\text{true}}| \] 其中 \( y_{\text{pred}} \) 是模型给出的预测结果,\( y_{\text{true}} \) 则代表真实的标签值。 在多维情况下,则是对所有维度上的差取绝对值得到向量后再求[^1]。 ```python import torch.nn as nn criterion_l1 = nn.L1Loss() output = criterion_l1(torch.tensor([0.8]), torch.tensor([1.0])) print(output.item()) ``` #### L2 Loss (均方误差损失) L2 Loss 计算的是预测值与目标值之间的平方差平均数,在数学上也被称为欧几里得距离或欧式距离。具体表达式为: \[ \text{L2 Loss} = (y_{\text{pred}} - y_{\text{true}})^2 \] 同样地,在处理多个特征时会先逐元素相减并平方之后再累加起来除以样本数量得到最终的结果[^2]。 ```python import torch.nn.functional as F def mse_loss(input, target): return F.mse_loss(input, target) output = mse_loss(torch.tensor(0.9), torch.tensor(1.0)) print(output.item()) ``` ### 区别 - **对离群点敏感程度不同**: L2 Loss 对于较大的残差更加敏感,因为它是基于二次幂运算;而 L1 Loss 只考虑绝对偏差大小,因此相对更稳健一些,不易受到极端数据的影响[^3]。 - **导数特性有异**: 当接近最优解附近时,由于 L2 Loss 函数曲线较为平坦,所以能够提供较小但持续存在的梯度来帮助优化过程收敛;相反,L1 Loss 在零处不可微分,这可能导致某些算法难以有效工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值