1. L1正则和L2正则的作用

正则化的主要作用是防止过拟合,对模型添加正则化项可以限制模型的复杂度,使得模型在复杂度和性能达到平衡。

L1正则化可以产生稀疏权值矩阵,可以用于特征选择,一定程度上,L1也可以防止过拟合

L2正则化它对于大数值的权重向量进行严厉惩罚,倾向于更加分散的权重向量;L2惩罚倾向于更小更分散的权重向量,这就会鼓励分类器最终将所有维度上的特征都用起来,而不是强烈依赖其中少数几个维度。这样做可以提高模型的泛化能力,降低过拟合的风险。

2. L1正则和L2正则的原理

在原始目标函数的基础上添加正则化相当于,在参数原始的解空间添加了额外的约束。
L1正则化对解空间添加的约束是:
L2正则化代码python 正则化l1l2_机器学习

L2正则化对解空间添加的约束是:
L2正则化代码python 正则化l1l2_正则化_02

为了形象化的说明,以二维参数空间为例,假设有两个参数L2正则化代码python 正则化l1l2_损失函数_03L2正则化代码python 正则化l1l2_权重_04
则L1正则化对解空间的约束为:L2正则化代码python 正则化l1l2_权重_05
L2对解空间的约束为:L2正则化代码python 正则化l1l2_L2正则化代码python_06

在二维平面上绘制以上两个式子的图像,可得L1约束的范围是一个顶点在坐标轴上的菱形,L2约束的范围是一个圆形。

L2正则化代码python 正则化l1l2_L2正则化代码python_07


上面的图,左面是L2约束下解空间的图像,右面是L1约束下解空间的图像。

蓝色的圆圈表示损失函数的等值线。同一个圆上的损失函数值相等的,圆的半径越大表示损失值越大,由外到内,损失函数值越来越小,中间最小

如果没有L1和L2正则化约束的话,w1和w2是可以任意取值的,损失函数可以优化到中心的最小值的,此时中心对应的w1和w2的取值就是模型最终求得的参数

填了L1和L2正则化约束就把解空间约束在了黄色的平面内。黄色图像的边缘与损失函数等值线的交点,便是满足约束条件的损失函数最小化的模型的参数的解。 由于L1正则化约束的解空间是一个菱形,所以等值线与菱形端点相交的概率比与线的中间相交的概率要大很多,端点在坐标轴上,一些参数的取值便为0。L2正则化约束的解空间是圆形,所以等值线与圆的任何部分相交的概率都是一样的,所以也就不会产生稀疏的参数。

L2为什么倾向于产生分散而小的参数呢?
因为求解模型的时候要求,在约束条件满足的情况下最小化损失函数,L2正则化代码python 正则化l1l2_L2正则化代码python_08

用一个实例来说明:
设输入向量L2正则化代码python 正则化l1l2_损失函数_09,两个权重向量L2正则化代码python 正则化l1l2_L2正则化代码python_10L2正则化代码python 正则化l1l2_L2正则化代码python_11。那么L2正则化代码python 正则化l1l2_权重_12两个权重向量都得到同样的内积,但是L2正则化代码python 正则化l1l2_机器学习_13的L2惩罚是1.0,而L2正则化代码python 正则化l1l2_机器学习_14的L2惩罚是0.25。因此,根据L2惩罚来看,L2正则化代码python 正则化l1l2_机器学习_14更好,因为它的正则化损失更小。从直观上来看,这是因为L2正则化代码python 正则化l1l2_机器学习_14的权重值更小且更分散。所以L2正则化倾向于是特征分散,更小。

另一种公式推导(以线性回归为例):
未加正则的梯度下降迭代为:
L2正则化代码python 正则化l1l2_机器学习_17

加了L2正则的梯度下降迭代为:
L2正则化代码python 正则化l1l2_正则化_18

其中L2正则化代码python 正则化l1l2_权重_19是学习率L2正则化代码python 正则化l1l2_机器学习_20是正则化参数

从上式可以看到,与未添加L2正则化的迭代公式相比,每一次迭代,L2正则化代码python 正则化l1l2_正则化_21都要先乘以一个小于1的因子(即L2正则化代码python 正则化l1l2_正则化_22,从而使得L2正则化代码python 正则化l1l2_正则化_21不断减小,因此总的来看,L2正则化代码python 正则化l1l2_损失函数_24是不断减小的

3. 正则化参数 L2正则化代码python 正则化l1l2_机器学习_20

正则化系数越大,正则化的函数图形(上文图中的方形或圆形)会向坐标轴原点收缩得越厉害;通常越大的L2正则化代码python 正则化l1l2_机器学习_20可以让代价函数在参数为0时取到最小值

正则项参数L2正则化代码python 正则化l1l2_机器学习_20用来来平衡经验风险和结构风险(正则项表示结构风险)。

L2正则化代码python 正则化l1l2_L2正则化代码python_28越小考虑经验风险更多一些,约束条件更为宽松,对应上文中的 C 值就很大,容易过拟合;若 λ 近似为 0,正则化失效,容易造成过拟合

若 λ 很大,约束条件更为严格,对应上文中的 C 值就很小,圆形区域很小,L2正则化代码python 正则化l1l2_L2正则化代码python_29 离中心最优解的位置较远。L2正则化代码python 正则化l1l2_L2正则化代码python_29 被限制在一个很小的区域内变化,L2正则化代码python 正则化l1l2_L2正则化代码python_29 普遍较小且接近 0,起到了正则化的效果。但是,λ 过大容易造成欠拟合