提到正则化,大家应该不会感到陌生,它在机器学习和深度学习中非常常见,尤其是L1正则化和L2正则化。正则化的主要目的是通过向损失函数中添加权重,从而降低模型过拟合的风险。进一步了解的话,大家会知道L1正则化可以使模型的权重参数变得稀疏(部分权重为0),而L2正则化会使模型的权重趋于0。本文将探讨为什么L1正则化会使部分权重变为0,为什么L2正则化会使权重趋近于0,以及正则化如何防止过拟合。
在介绍正则化之前,我们先看一幅图:
在这张图中,我们绘制了三条不同的曲线:y1、y2 和 y3。可以看出,y1 的函数值变化最大,y2 和 y3 的函数值变化较为平缓。y2 的自变量系数比 y1 小,y3 则少了一个自变量,这意味着 y3 中某个自变量的系数为0。一般而言,函数的取值变化越大,函数越复杂,方差也越大。因此,在这三个函数中,y1 的复杂度最高。通过函数图像可以发现,降低自变量的系数或减少自变量的数量(使某些自变量的系数为0)可以降低函数的复杂度。
在构建模型之前,我们无法预知数据的分布,因此如果模型过于简单,可能会导致欠拟合;如果模型过于复杂,则容易过拟合。为了平衡这一点,我们需要让模型部分权重为0或降低权重,从而降低过拟合的风险。为此,我们在损失函数中添加一个惩罚项,数学表达式如下:
其中,J(θ;X,y) 表示原始目标函数(未添加正则化),Ω(θ) 表示模型参数的惩罚项,惩罚项系数 α ∈ [0, ∞),α 越大表示正则化惩罚越大。需要注意的是,在对模型参数进行惩罚时,我们只添加了权重参数,并未包括偏置参数。这是因为偏置参数的数量较少,且每个权重参数会影响两个变量之间的关系,而偏置参数只影响单一变量。因此,不对偏置参数进行正则化不会导致较大的方差。此外,如果对偏置参数进行正则化,可能会导致明显的欠拟合。
上式中的参数 θ 包含了权重和偏置,但只需对权重进行正则化。因此,L1正则化和L2正则化可以改写为以下表达式:
为了更好地理解正则化的效果,我们可以通过绘图来观察L1正则化和L2正则化的作用。
正则化实际上是在原始目标函数的基础上增加了一个参数惩罚项,目的是防止网络参数过大而导致过拟合。因此,我们可以将正则化后的目标函数视为在最小化原始目标函数的同时添加了一个约束条件,这个约束条件需要满足某个常数C的限制。
L1正则化
我们将L1正则化的效果等效于寻找原始目标函数的最小值以及对权重参数的约束。为了便于绘图,我们只考虑二维情况。
从上图可以看出,蓝色椭圆表示原始目标函数的等高线,红色矩形表示权重的约束函数。蓝色箭头表示原始目标函数在该点的梯度方向,红色箭头表示约束函数的法向量。由于约束函数的限制,权重只能在红色矩形的边界上移动以寻找最优解。当权重位于上图所示位置时,将原始目标函数的梯度分解为沿着约束函数的切线方向(矩形的边)和法线方向。为了使原始目标函数达到最小值,需要沿着梯度在约束函数的切线方向移动。当权重移动到ω'时,可以发现为了使原始目标函数达到最小值,应沿着右上方移动。因此,最优权重ω*应位于矩形的顶点位置。通过观察可以发现,此时权重在坐标轴上的取值为0,即部分权重参数稀疏。
L2正则化
同样地,我们按照L1正则化的思路进行分析。
上图中,蓝色椭圆表示原始目标函数的等高线,红色圆表示权重的约束函数,其半径为√C。蓝色箭头表示原始目标函数在该点的梯度方向,红色箭头表示约束函数在该点的法向量,绿色箭头表示约束函数在该点的切线方向。我们将梯度分解为沿着切线方向和法线方向。为了使原始目标函数达到最小值,需要沿着切线方向移动权重。当移动到ω时,梯度方向与切线方向垂直,梯度沿切线方向的分量为0,此时原始目标函数达到最小值,因此ω为最优解。通过观察可以发现,此时权重的取值接近于0,即部分权重趋于0。
L2正则化
L2正则化也称为权重衰减或岭回归,在神经网络中广泛使用。它会使部分权重向零点靠近。为了观察L2正则化的影响,我们查看添加惩罚项后权重参数的更新过程。
使用单步梯度下降更新权重,更新公式如下:
上式中的 ϵ 表示学习率,α 表示权重衰减系数,这两个参数通常都小于1。通过单步权重更新公式可以发现,权重每次更新前都需要乘以一个小于1的系数,相当于每次更新权重时都会对其进行衰减。经过多次更新后,权重的系数会接近于0,最终导致权重接近0。例如,如果权重的系数为0.9,经过100次更新,最终权重系数会变为0.9^100 ≈ 2.7 × 10^-5(注:这里未考虑梯度大小,仅说明趋势)。
接下来,我们推导整个训练过程中权重的更新过程。为了简化分析,假设 ω* 为 J(ω) 获得最小值时的权重向量。根据泰勒公式:
假设 J(ω) 二阶可导,我们对其进行二次近似的泰勒展开,得到:
为了让 J^(ω) 达到最小值,令其导数为0。由于 J(ω) 为常数,其导数为0,因此省略。上式中的 I 表示单位矩阵。通过上式可以发现,当正则化惩罚项系数 α 为0时,此时 ω˜ 的最优解等于 ω。接下来讨论惩罚项系数不为0的情况。由于 H 是 J 在 ω* 处的海森矩阵,因此 H 是一个对称矩阵,可以对其进行特征分解,得到 H = QΛQ^T(Q 的转置)。其中 Λ 为对角矩阵,Q 为一组标准正交基。代入上式可得:
通过上式可以发现,L2正则化的效果就是沿着 H 矩阵特征向量定义的轴缩放未正则化 J(ω) 的解 ω*。由于 I 是单位矩阵,可以将缩放系数改写为:
其中 λi 表示矩阵 H 的特征值大小。当特征值 λi ≫ α 时,α 的影响可以忽略不计,正则化缩放系数趋于1,正则化基本没有影响。当特征值 λi ≪ α 时,可以将缩放系数改写为:
由于 α ≫ λi,因此 α / λi ≫ 1,缩放系数 λi / α ≪ 1,缩放系数趋于0,权重也趋于0。
L1正则化
下面我们推导添加了L2正则化后对权重的影响,通过最后推导得到的公式可以解释为什么L2正则化会使权重趋于0。接下来,我们采用类似的方法推导L1正则化对权重的影响。
上式中的 sign 函数为符号函数,其图像如下:
当函数输入值 x1 时,输入值恒等于1。sign 函数常被用来表示阶跃函数。
我们将 J(ω; X, y) 用二阶泰勒展开式来代替,可以将 L1 正则化后的代价函数转换为如下形式:
接下来,我们求解 ωi。上式中的 J(ω*) 是常数,无需考虑。主要考虑求和式中的二次项式和绝对值式,以使整个目标函数达到最小值。为了求得后两项和的最小值,我们对其求导并令求导后的结果等于0来求 ωi。
我们可以将上式中的 ωi 分为两种情况:第一种是 ωi 和 ω* 同号,即 sign(ωi) = sign(ωi);第二种是 ωi 和 ω 异号,即 sign(ωi) ≠ sign(ω*i)。我们先讨论第一种情况。为了帮助理解,我们可以看看下图:
通过上图可以发现,当 ωi 与 ω* 异号时,无论是哪种情况,为了使损失函数最小,其最优值都是 ωi = 0。此时可以保证代价函数的二次项式和绝对值式都达到最小值。
当 ωi 和 ω* 同号时,可以将上式简化为:
因此,我们可以合并上式的结果,得到最终的 ωi 解析解:
通过画图和公式推导,我们证明了L1正则化和L2正则化产生不同效果的原因。需要注意的是,它们的共同点在于衰减对于代价函数影响较小的权重,即特征值较小的权重。L1正则化会使这部分权重为0,而L2正则化会使它们趋于0。