L1正则化 (regularization)通过添加一个惩罚项来修改标准损失函数 (loss function),该惩罚项与网络中所有权重 (weight)的绝对值之和成比例。
回想一下,在训练过程中,我们的目标通常是最小化一个数据损失函数,我们称之为 Ldata(W),它衡量在给定当前权重 W 的情况下,模型的预测与实际目标值匹配的程度。使用L1正则化时,我们在这个目标函数中添加一个新项:
Ltotal(W)=Ldata(W)+λi∑∣wi∣
让我们分析这个新项:
- wi: 表示网络中(所有层上的)单个权重。
- ∑i∣wi∣: 这是所有权重的绝对值之和。它也被称为权重向量 (vector)的 L1 范数,通常写为 ∣∣W∣∣1。
- λ: 这是正则化强度超参数 (parameter) (hyperparameter),其作用与L2正则化中使用的 λ 相同。它是一个非负值(通常很小),用于控制L1惩罚项的影响。更高的 λ 会施加更强的惩罚,促使模型更稀疏。如果 λ=0,则恢复原始的未正则化损失函数。
与L2正则化相比,主要区别在于使用了绝对值 ∣wi∣ 而不是平方值 wi2。这种看似微小的变化对优化过程有显著影响。
对梯度下降 (gradient descent)的影响
在反向传播 (backpropagation)过程中,我们需要计算总损失 Ltotal 相对于每个权重 (weight) wj 的梯度以更新它。L1惩罚项相对于特定权重 wj 的梯度为:
∂wj∂(λi∑∣wi∣)=λ⋅∂wj∂∣wj∣
绝对值函数 ∣x∣ 的导数是 sign(x),即:
- +1 如果 x>0
- −1 如果 x<0
- 在 x=0 处未定义
因此,总损失的梯度变为:
∂wj∂Ltotal=∂wj∂Ldata+λ⋅sign(wj)对于 wj=0
这意味着L1惩罚项会向数据损失的梯度添加一个常数值(λ 或 −λ),将权重推向零,无论权重的当前大小如何(只要它不为零)。这种恒定的推动力就是促使权重变为精确零的原因。将其与L2正则化 (regularization)进行比较,L2正则化中惩罚项对梯度的贡献(λ⋅2wj)随着权重变小而减小,使其不太可能精确地达到零。
零点不可微的处理
当 wj=0 时会发生什么?绝对值函数在这一点上不可微。在实践中,优化算法通过使用与次梯度下降 (gradient descent)或近端梯度方法相关的技术来处理这种情况。∣wj∣ 在 wj=0 处的次梯度是区间 [−1,1]。一种常见的实际方法是,如果权重 (weight)已经为零,则将L1项的梯度贡献简单地设置为零,或者在更新步骤中应用“软阈值”操作,这种操作会检查更新是否会越过零点,如果会,则将权重设置为零。大多数深度学习 (deep learning)框架的优化器在内部处理这个细节。
核心要点是,L1惩罚项为非零权重提供了一个恒定的“推力”使其趋近于零,这使得它在生成许多权重变为精确零的稀疏模型方面非常有效。
L1惩罚项呈“V”字形,对非零权重施加恒定的梯度大小(斜率),无论其大小如何。L2惩罚项呈抛物线形,梯度随着权重接近零而减小。
这种数学结构直接导致了前面讨论的稀疏性诱导特性。在接下来的部分中,我们将更直接地比较L1和L2,并查看如何在代码中实现它们。