1. L2正则化:深度学习的"温柔约束者"
在深度学习的世界里,我们常常面临一个两难困境:模型太简单无法捕捉数据中的复杂模式,模型太复杂又容易记住训练数据中的噪声和细节(这就是所谓的过拟合)。而L2正则化就像一位经验丰富的导师,它不会粗暴地砍掉模型的某些部分(那是L1正则化的做法),而是温和地提醒模型:"保持谦虚,不要过度自信"。
我第一次在实战中体会到L2正则化的威力是在一个图像分类项目上。当时我们的CNN模型在训练集上达到了99%的准确率,但在测试集上只有85%。加入L2正则化后,训练集准确率降到了95%,但测试集准确率提升到了92%——这正是我们想要的:牺牲一点训练精度,换取更好的泛化能力。
技术定义:L2正则化(也称为权重衰减或Tikhonov正则化)是在损失函数中添加模型权重的平方和作为惩罚项的技术。数学表达式为:L = L₀ + λΣw²,其中L₀是原始损失,λ是正则化强度,w是模型权重。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. L2正则化的数学本质与实现
2.1 数学形式解析
L2正则化的核心思想直观而优美。假设我们有一个简单的线性模型 y = wx + b,其损失函数通常是最小二乘法:
L₀ = Σ(yᵢ - (wxᵢ + b))²
加入L2正则化后,损失函数变为:
L = Σ(yᵢ - (wxᵢ + b))² + λ(w²)
这里的λ控制着正则化的强度。当λ=0时,我们回到原始问题;λ越大,对大型权重的惩罚就越重。
为什么是平方而不是绝对值?这有几个关键原因:
- 平方项处处可微,优化更方便
- 对大权重的惩罚更严厉(平方放大效应)
- 在贝叶斯框架下对应高斯先验
2.2 PyTorch中的三种实现方式
在实际编码中,我们有多种方式实现L2正则化:
python复制# 方法1:使用优化器的weight_decay参数(最简单)
optimizer = torch.optim.SGD(model.parameters(), lr=0.01, weight_decay=0.001)
# 方法2:手动计算L2损失(更灵活)
def l2_regularization(model, lambda_l2=0.001):
l2_loss = 0.0
for param in model.parameters
