浅谈L1与L2正则化

过拟合问题

在训练数据不够多时,常常会出现过拟合问题。其直观的表现如下图所示,随着训练过程的进行,模型复杂度不断增加,在training data上的error渐渐减小,但是在验证集上的error却反而渐渐增大——因为训练出来的网络过拟合了训练集,对训练集外的数据却不work。

通常,避免过拟合问题的方法有很多:early stopping ,data augmentation,BN,dropout,正则化等等。这里主要介绍正则化。

L2正则化

具体来说,L2正则化就是在损失函数里加上一个正则项:

C0代表原始的代价函数,后面那一项就是L2正则化项,它是这样来的:所有参数w的平方的和,除以训练集的样本大小n。λ就是正则项系数,权衡正则项与C0项的比重。
L2正则化是如何避免过拟合的呢?对上式求导一下:

可以发现L2正则化项对b的更新没有影响,但是对于w的更新有影响:

不使用L2正则化时,求导结果中w前系数为1,现在w前面系数为 1−ηλ/n ,因为η、λ、n都是正的,所以 1−ηλ/n小于1,它的效果是减小w,这也就是权重衰减(weight decay)的由来。当然考虑到后面的导数项,w最终的值可能增大也可能减小。L2正则化项有让w“变小”的效果,但是还没解释为什么w“变小”可以防止overfitting?一个所谓“显而易见”的解释就是:更小的权值w,从某种意义上说,表示网络的复杂度更低,对数据的拟合刚刚好(这个法则也叫做奥卡姆剃刀),而在实际应用中,也验证了这一点,L2正则化的效果往往好于未经正则化的效果。可以看出,l可以让所有特征稀疏都缩小,但不是减为0,它会优化求解稳定快速,因此L2可以加快网络收敛速度。

L1正则化

具体来说,L1正则化,也是在损失函数后面加上一个正则项:

对上式求导:

上式中sgn(w)表示w的符号。那么权重w的更新规则为:

比原始的更新规则多出了η λ sgn(w)/n这一项。当w为正时,更新后的w变小。当w为负时,更新后的w变大——因此它的效果就是让w往0靠,使网络中的权重尽可能为0,更专业的说法是,L1正则化可以使得参数更趋向于某些维度为0,也就是稀疏性
也就相当于减小了网络复杂度,防止过拟合。

L1和L2解的稀疏性

左边表示L2正则化,右边表示L1正则化,蓝色的圆圈表示没有经过限制的损失函数在寻找最小值过程中,w的不断迭代(随最小二乘法,最终目的还是使损失函数最小)变化情况,表示的方法是等高线,z轴的值就是 E(w)w∗最小值取到的点

可以直观的理解为,我们的目标函数(误差函数)就是求蓝圈+红圈的和的最小值,而这个值通在很多情况下是两个曲面相交的地方。可以看到L2正则化中,相交点w*往往在象限区域中,该点横纵坐标值都不为0,再看L1正则化,相交点往往在坐标轴上,该点的横纵坐标值至少一个为0,即求解得到的w非零分量更少,这就是为什么L1更容易获得稀疏解。此外,这也间接地实现了特征选择。因为这个性质,L1正则化经常被用于降噪和图像重建中。

更多关于L1和L2的解释,以及相关的实验证明,可以参考这里这里