前言
说到正则化大家应该都不陌生,这个在机器学习和深度学习中都是非常常见的,常用的正则化有L1正则化和L2正则化。提到正则化大家就会想到是它会将权重添加到损失函数计算中来降低模型过拟合的程度。了解更多一点的同学还会说,L1正则化会让模型的权重参数稀疏化(部分权重的值为0),L2正则化会让模型的权重有趋于0的偏好。
不知道大家有没有想过为什么L1正则化会让部分权重的值为0?为什么L2正则化会让权重会有偏向于0?为什么正则化可以防止过拟合?正则化究竟是怎么来的? 带着这些问题,我们来看这篇文章,会帮助大家一一解答。
正则化的由来
在介绍正则化之前,我们先来看一张图
在上图中我们绘制了三条不同的曲线y1、y2、y3 ,从曲线函数值的变化不难看出,y1的函数值变化最大,y2和y3的函数值相对来说要平缓一些。通过函数的表达式可以看出,y2 相对于y1 来说自变量的系数值变小了,y3相对y1 来说自变量少了一个,我们可以理解为少的那个自变量的系数为0。
通常如果函数的取值变化的幅度更大,我们会认为函数更复杂,函数的方差更大。所以,上面的三个函数中,函数y1的复杂度最高。通过函数图像可以发现,降低自变量的系数值,或者减少函数自变量的个数等价于自变量的系数为0是可以降低函数复杂度的。
在构建模型之前,我们是不知道数据的分布,如果模型过于简单就会导致欠拟合,如果模型过于复杂就会过拟合。通常我们为了模型能够更好的拟合数据都是使得模型处于过拟合,为了降低模型的过拟合就需要使得模型部分权重为0或者降低模型的权重,所以我们会为损失函数添加一个惩罚项,数学表达式如下
上式中的J(θ;X,y)表示原目标函数(没有添加正则化),Ω(θ)表示模型参数的惩罚项,惩罚项系数α∈[0,∞) ,α 越大表示正则化惩罚越大。
需要注意:我们在对模型的参数做惩罚的时候,其实只是添加了模型的权重参数并不包括偏置参数,因为模型的偏置参数数量相对于权重参数数量来说要少的多,而且每个权重参数会指定两个变量如何相互作用,而偏置只是控制一个单一的变量,所以我们不对偏置做正则化也不会导致太大的方差。而且,如果对偏置进行正则化可能会导致明显的欠拟合。
上式中的参数θ 包含了权重和偏置,而我们只需要对权重做正则化。所以,L1正则化和L2正则化可以改成如下表达式
正则化的影响
在正则化的由来中,我们直观的介绍了为什么需要加入正则化?接下来我们来介绍一下为什么l1 正则化会使得模型的部分参数为0,l2 正则化会使得模型的参数接近0。为了更好的证明,接下来的公式可能会有点多,不过我会尽可能的详细让大家更好的理解
1. 直观理解
为了帮助大家从直观上理解正则化的效果,接下来我们将通过画图来观察l1正则化和l2正则化的效果
前面我们介绍了正则化其实就是在原代价函数的基础上多增加了一项参数的惩罚项,目的就是为了不让网络的参数过大而导致模型过拟合,所以我们其实可以将正则化后的代价函数理解为在最小化原代价函数的基础上多增加了一个参数的约束函数,对于约束函数的要求就是它需要小于某个常数C
l1 正则化
我们将l1 正则化效果等价于求原代价函数的最小值和对权重参数的约束函数,这里为了便于作图我们只考虑二维情况
根据上两个式子,我们可以绘制出线性规划图如下
上图中的蓝色椭圆表示的是原代价函数的等高线,红色矩形表示的是权重的约束函数,图中的红色箭头表示的是约束函数的法向量方向,其中蓝色箭头表示的是原代价函数在该点的梯度方向(等高线的梯度方向与它的法向量方向一致)
因为约束函数的限制导致ω 只能在红色矩形的边上进行移动来寻找最佳的ω∗。当ω处于上图中的位置时,将原代价函数的梯度分解为沿约束函数的切线方向(即矩形的边)和法线方向,为了使得原代价函数取得最小值此时需要沿着梯度在约束函数的切线方向(左上方)移动。当ω移动到ω′ 时,通过分解原代价函数的梯度可以发现,为了使得取得原代价函数的最小值应该沿着右上方移动,所以最终最优的ω∗ 应该为矩形的顶点位置。
通过观察可以发现此时ω∗ 在坐标轴ω1 方向的取值为0,这也就是为什么l1 正则化会使得权重参数稀疏的原因。
l2 正则化
同样,我们按照分析l1正则化的思路进行分析
上图中蓝色椭圆表示是原代价函数的等高线,红色圆表示的是权重的约束函数它的半径是√ C ,其中蓝色箭头表示的是原代价函数在该点的梯度方向,红色箭头表示的是约束函数在该点的法向量方向,绿色箭头表示的是约束函数在该点的切线方向。
还是按照上面的思想我们将梯度按切线方向和法线方向进行分解,为了使得原代价函数取得最小值,我们需要将ω 按切线方向进行移动,当移动到ω∗ 时,梯度方向与切线方向垂直时梯度沿切线方向的分量为0,此时原代价函数取得最小值,所以ω∗ 为最优点。
通过观察上图可以发现,此时ω1的取值接近于0,这也就是为什么l2正则化会使得权重趋于0的原因。
2. 公式推导证明
l2 正则化
l2 正则化也被称为权重衰减或岭回归,在神经网络中也被经常用到,因为它会使得权重向零点靠近(使得权重的取值趋于0)。为了更好的观察l2正则化的影响,接下来我们观察一下在添加罚项之后,权重参数是如何更新的
使用单步梯度下降更新权重,更新公式如下:
上式中的,ϵ 指的是学习率,α 指的是权重衰减系数,这两个参数通常都是小于1的。
通过单步的权重的梯度更新公式可以发现,权重每次在更新之前都需要乘以一个小于1的系数,相当于每次更新权重的时候都对它做了衰减,在经过多次权重更新之后会,权重的系数会接近于0,最终会导致权重也接近0,假设权重的系数为0.9,经过100次权重的迭代更新,最终权重系数会变为0.9100≈2.7∗10−5(注:这里没有考虑梯度的大小,只是简单表明这种趋势)。
上面只是一个单步的权重更新过程,接下来我们推导一下在整个训练过程中,权重的更新过程,为了简化分析我们假设ω∗ 为J(ω)取得最小值时的权重向量,根据泰勒公式
假设J(ω)二阶可导,我们对其进行二次近似的泰勒展开则有
为了让ˆJ (ω)取得最小值,我们令其导数为0,因为ˆJ(ω∗)为常数,所以它的导数为0,我们就直接省略了
接下来我们研究添加l2 正则化之后的对ˆJ(ω)的影响,我们假设˜ω为l2正则化之后ˆJ(ω)的最优解,可得它的导数为
上式中的 I 表示的是单位矩阵,通过上式不难发现,当正则化的惩罚项系数α 为0时,此时˜ω 的最优解就等于ω∗,接下来我们讨论一下当惩罚项系数不为0的时。因为H 是J 在ω∗ 的Hessian矩阵,所以H 是一个对称矩阵,我们可以对其做特征分解,可得 H = QΛQT,其中Λ为对角矩阵,Q 为一组特征向量的标准正交基,代入上式可得
通过上面的式子可以发现,l2正则化的效果就是沿着H 矩阵特征向量所定义的轴缩放未正则化J(ω)的解ω∗。因为 I 是单位矩阵,我们可以将缩放的系数改成这种形式 ,其中λi指的是矩阵H的特征向量每个轴值的大小,也就是特征分解之后特征值的大小。
通过修改后的衰减系数不难发现,当特征值 λi>>α 时,此时α的影响可以忽略不计,正则化的缩放系数会趋于1,正则化基本没有影响。当特征值 λi<<α 时,可以将缩放系数改为,因为 α>>λi 所以 (α/λi)>>1,所以缩放系数 (λ/iα)<<1,缩放系数趋于0使得权重也会趋于0。
l1正则化
上面我们推导了添加了l2 正则化之后对权重的影响,通过最后推导得到式子可以解释为什么l2正则化会让权重趋于0。接下来,我们以类似的方式来推导l1正则化对于权重的影响
上式中的sign函数为符号函数,函数图像如下
当函数输入值x<0 时输出值恒等于 -1,输入值为0时输出值也等于0,输入值 x>1 时输出值恒等于1,sign函数经常被用来表示阶跃函数
我们将J(ω;X,y) 使用二阶的泰勒展开式来代替,可以将l1正则化后的代价函数转换为如下形式
接下来我们看看如何求解ωi,上式中的J(ω∗)是常数我们不用考虑,主要考虑求和式中的二次项式和绝对值式来使得整个代价函数取得最小值,为了求得后两项和的最小值,我们对其求导并令求导后的结果等于0来求ωi
我们可以将上式中ωi 分为两种情况,第一种是ωi 和ω∗同号即,第二种是ωi 和ω∗异号即,我们先讨论第一种情况,为了帮助大家理解我们可以看看下图
通过上图可以发现,当ωi 与ω∗异号时,无论是哪种情况为了使得损失函数最小,其最优值都是ωi=0此时能保证代价函数的二次项式和绝对值式都取得最小值。
当ωi和ω∗ 同号时,可以将上式进行化简可得
所以,我们可以合并上式的结果得到最终的ωi的表达式为
总结
我们通过画图和使用公式推导证明了l1正则化和l2正则化产生不同效果的原因,需要注意的是它们的共同点其实都是在衰减对于代价函数的值变化影响相对较小的权重,也就是特征值小的权重,而l1正则化的效果是会使得这部分权重为0,l2正则化会使得它们趋于0。
版权声明:本文为CSDN博主「修炼之路」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sinat_29957455/article/details/102827960