L2正则化通过惩罚大权重来鼓励更简单的模型并提升泛化能力。数学上,L2正则化通过修改模型的客观函数——即训练期间旨在最小化的函数——并添加一个代表大权重惩罚的项来进行形式化。
正则化损失函数
通常,在训练神经网络时,我们最小化一个损失函数,通常表示为 J(θ),它衡量模型预测值与真实目标值之间的差异。常见例子包括回归任务的均方误差 (MSE) 或分类任务的交叉熵损失。这里,θ 代表网络中所有可学习的参数(权重和偏置)。
L2 正则化向这个原始损失函数添加一个惩罚项。这个惩罚项与权重的平方大小成比例。对于一个具有权重矩阵 W[1],W[2],...,W[L](对应第 1 到 L 层)的网络,L2 正则化项计算为这些权重矩阵的平方 Frobenius 范数之和:
L2惩罚项=2mλl=1∑L∣∣W[l]∣∣F2
我们来逐一分析:
- W[l] 是第 l 层的权重矩阵。
- ∣∣W[l]∣∣F2 是权重矩阵 W[l] 的平方 Frobenius 范数。矩阵的 Frobenius 范数是通过对矩阵中的每个元素进行平方并求和来计算的:∣∣W∣∣F2=∑i∑j(wij)2。本质上,它是该层所有单个权重值的平方和。
- ∑l=1L 表示我们将这些惩罚项在所有层 l 从 1 到 L 上求和。
- m 是小批量中的训练样本数量(或总训练集大小,取决于约定)。除以 m 将惩罚项平均到每个样本上。
- λ (lambda) 是正则化超参数。这是一个非负值,您在训练前选择。它控制正则化的强度。更大的 λ 会对大权重施加更强的惩罚,从而产生更小的权重和更简单的模型。如果 λ=0,我们恢复原始的、未正则化的损失函数。
- 包含因子 21 主要为了数学上的便利,因为它简化了导数的计算,我们将在后面看到。
新的正则化损失函数,我们称之为 Jreg(θ),变为:
Jreg(θ)=J(θ)+2mλl=1∑L∣∣W[l]∣∣F2
注意: 通常,偏置项(如 b[l])不包含在正则化惩罚中。尽管对偏置项进行正则化是可行的,但与权重正则化相比,它对模型复杂度的影响通常可以忽略不计,在实践中也常被省略。
对梯度下降的影响
这个附加项如何通过梯度下降影响训练过程?在反向传播过程中,我们计算损失函数对每个参数的梯度。添加L2惩罚项后,正则化损失 Jreg 对特定权重 wij[l](连接第 l−1 层神经元 j 到第 l 层神经元 i 的权重)的梯度为:
∂wij[l]∂Jreg=∂wij[l]∂J(θ)+∂wij[l]∂(2mλk=1∑L∣∣W[k]∣∣F2)
原始损失项的导数 ∂wij[l]∂J(θ) 照常通过反向传播计算。L2惩罚项对 wij[l] 的导数为:
∂wij[l]∂(2mλk=1∑Lp∑q∑(wpq[k])2)=2mλ∂wij[l]∂(wij[l])2=2mλ(2wij[l])=mλwij[l]
(请注意,因子2是如何巧妙地抵消的)。
因此,权重 wij[l] 的完整梯度为:
∂wij[l]∂Jreg=∂wij[l]∂J(θ)+mλwij[l]
“权重衰减”效应
现在,我们来看看这个权重的梯度下降更新规则,使用学习率 α:
wij[l]:=wij[l]−α∂wij[l]∂Jreg
代入我们得到的梯度:
wij[l]:=wij[l]−α(∂wij[l]∂J(θ)+mλwij[l])
我们可以稍微重新排列一下:
wij[l]:=wij[l]−αmλwij[l]−α∂wij[l]∂J(θ)
wij[l]:=wij[l](1−αmλ)−α∂wij[l]∂J(θ)
仔细观察这一项 (1−αmλ)。由于学习率 α 和正则化强度 λ 为正,且 m 是批量大小(也为正),这个因子略小于1(假设 αλ/m 足够小,这对于稳定训练通常是成立的)。
这个方程表明了为什么L2正则化常被称为权重衰减。在每个更新步骤中,在应用原始损失的梯度之前,权重 wij[l] 乘以一个略小于1的因子。这有效地使权重在每一步中缩小或“衰减”到接近零。权重越大,衰减效果越明显(由于梯度中的 mλwij[l] 项)。这种机制阻止权重变得过大,实现了我们之前讨论的道理:保持权重较小有助于简化模型并提高泛化能力。
超参数 λ 直接控制这种衰减的速度。更高的 λ 会导致更快的衰减和更小的最终权重。找到 λ 的合适值是一个超参数调优过程,通常使用验证集完成。