前言
L1/L2正则化的目的是为了解决过拟合,因此我们先要明白什么是过拟合、欠拟合。
- 过拟合:训练出的模型在测试集上Loss很小,在训练集上Loss较大
- 欠拟合:训练出的模型在测试集上Loss很大,在训练集上Loss也很大
- 拟合:训练的刚刚好,在测试集上Loss很小,在训练集上Loss也很小
现在,让我们开启L1/L2正则化正则化之旅吧!
L1/L2正则化原理
L1与L2正则是通过在损失函数中增加一项对网络参数的约束,使得参数渐渐变小,模型趋于简单,以防止过拟合。
损失函数Loss:
上述Loss,MSE均方误差的Loss
L1正则化的损失函数:
W代表网络中的参数,超参数λ需要人为指定。需要注意的是,L1使用绝对值来约束参数
L2正则化的损失函数:
相比于L1正则化,L2正则化则使用了平方函数来约束网络参数
需要注意的是,在有的文献中,把L2正则项定义为权值向量w中各个元素的平方和然后再求平方根,其实,L2正则加不加平方根影响不大,原理都是一样的,但不加平方根更容易数学公式推导
我们知道,当W的值比较大时(即W的值距离0很远,取几百甚至几千的值),则拟合的曲线比较陡,x稍微一变化,y的影响就比较大,如下图所示:
可以看到,你的模型复杂度越大,拟合的曲线就越陡,惩罚项W就越大,在这种情况容易出现过拟合,所以要避免W出现比较大的值,一个有效的方法是给loss加上一个与W本身有关的值,即L1正则项或L2正则项,这样,我们在使用梯度下降法让Loss趋近于0的时候,也必须让W越来越小,W值越小,模型拟合的曲线会越平缓,从而防止过拟合。也可以从奥卡姆剃刀原理的角度去解释,即在所有可以选择的模型中,能够很好拟合当前数据,同时又十分简单的模型才是最好的。
L1与L2正则化让W变小的原理是不同的:
- L1能产生等于0的权值,即能够剔除某些特征在模型中的作用(特征选择),即产生稀疏的效果。
- L2可以得迅速得到比较小的权值,但是难以收敛到0,所以产生的不是稀疏而是平滑的效果。
下面,从两个角度理解L1/L2正则化这两个结论
从数学的角度理解L1/L2正则化
我们来看看L1正则化的损失函数的求导及梯度更新公式:
lr是学习率(更新速率),上述求导是Loss或 L o s s l 1 Loss_l1 Loss