【八股文-机器学习】L1/L2正则化
在神经网络出现high variance也就是overfitting的时候,regularization(正则化)是一个很常用的方法。现在应用最为广泛的包括两种regularization方式:
- L1/L2 regularization
- dropout regularization
其中本篇介绍L1/L2 regularization,主要包括:
- L1/L2 regularization以及效果
- 加入正则化之后的梯度下降推导
- 代码实现
- regularization能够解决overfitting问题的解释
L1/L2 regularization以及效果
1. L2 正则化
假设一个网络,其损失函数可以表示为:
L2正则化是给cost function加上正则项:
例如针对交叉熵代价函数,得到的损失函数为:
在修改了损失函数之后,必然要修改梯度下降方向,由于正则化部分的影响,需要对原本的梯度下降方向加上下面的部分:
2. L1正则化
L1正则化采用的正则化项如下所示:
这里称为L1正则化,其实是对应到向量的1-范数,而矩阵范数里的1范数并不是这里的正则化计算方法,因此有点尴尬容易混淆。
修改加入了L1正则化的梯度下降方法为:
L1/L2正则化的区别
- 通过上面的推导我们可以看出,在L1规范化中,权重通过一个常量向0进行缩小;在L2规范化中,权重通过一个和w成比例的量进行缩小
- 当一个特定的权重绝对值|w|很大时,L1规范化的权重缩小要比L2规范化小很多;当一个特定的权重绝对值|w|很小时,L1规范化的权重缩小要比L2规范化大很多
- L1规范化倾向于聚集网络的权重在相对少量的高重要度的连接上,而其他权重会被驱使向0接近
- 在w=0处偏导数不存在,此时使用无规范化的随机梯度下降规则,因为规范化的效果是缩小权重,不能对一个已经是0的权重进行缩小。
正则化为什么能解决overfitting的问题
为什么正则化有利于预防过拟合呢?为什么它可以减少方差问题?我们通过两个例子来直观体会一下
左图是高偏差,右图是高方差,中间是Just Right
现在我们来看下这个庞大的深度拟合神经网络。我知道这张图不够大,深度也不够,但你可以想象这是一个过拟合的神经网络。我们添加正则项,它可以避免数据权值矩阵过大,这就是弗罗贝尼乌斯范数,为什么压缩范数,或者弗罗贝尼乌斯范数或者参数可以减少过拟合?
直观上理解就是如果正则化设置得足够大,权重矩阵被设置为接近于0的值,直观理解就是把多隐藏单元的权重设为0,于是基本上消除了这些隐藏单元的许多影响。如果是这种情况,这个被大大简化了的神经网络会变成一个很小的网络,小到如同一个逻辑回归单元,可是深度却很大,它会使这个网络从过度拟合的状态更接近左图的高偏差状态。
但是会存在一个中间值,于是会有一个接近“Just Right”的中间状态。
直观理解就是增加到足够大,会接近于0,实际上是不会发生这种情况的,我们尝试消除或至少减少许多隐藏单元的影响,最终这个网络会变得更简单,这个神经网络越来越接近逻辑回归,我们直觉上认为大量隐藏单元被完全消除了,其实不然,实际上是该神经网络的所有隐藏单元依然存在,但是它们的影响变得更小了。神经网络变得更简单了,貌似这样更不容易发生过拟合,因此我不确定这个直觉经验是否有用,不过在编程中执行正则化时,你实际看到一些方差减少的结果。
我们进入到神经网络内部来直观感受下为什么正则化会预防过拟合的问题,假设我们采用了tanh的双曲线激活函数
补充
可以通过图示更直观的理解
如上图所示,l1正则化项是权重的加和,那我们就可以画出等高线,要使正则化项最小,那么越靠近中心的越小,且等高线上的所有w取值都可以,那这时另一个问题就来了,除了正则化项,我们还有损失函数,因为损失函数最小也一般都是大于0的值,所以可以在第一象限画出它的等高线,可以看出当它和正则项等高线相切的时候,最小,因为固定等高线只有相切的loss等高线是最小的。
同时,我们发现由于菱形外观,所以我们的切点很容易就落在坐标轴上,这意味着权重组合里有一部分的权重会直接置0,这就是l1正则化更容易稀疏化的原因,解向量0的个数比较多。
l2也是类似的,只不过变成了和圆来相切,所以会更加平滑。另外由于圆处处可导,在坐标轴的切线是水平线,loss等高线几乎不满足这样的条件,所以最后的结果就是会有一些切点让部分权重接近0但不是0.