正则化不等于解决过拟合,需结合验证误差监控、alpha交叉验证搜索及特征标准化;L1/L2强度须与学习率协同调整,且仅对权重正则化,数据质量是前提。

直接加 l1 或 l2 正则化不等于解决过拟合——它只是引入了约束,真正起效取决于你是否在训练流程中正确暴露验证误差、是否对 alpha(或 lambda)做了交叉验证搜索,以及是否忽略了特征尺度的影响。
sklearn 里用 Lasso 和 Ridge 时,alpha 不是越大越好
很多人调参时盲目增大 alpha,结果模型直接“瘫痪”:所有预测趋近均值,验证误差飙升。这是因为 alpha 控制正则项权重,过大会压制真实信号。
-
Lasso(L1)的alpha超过某个阈值后,所有系数会变成 0,模型退化为常数预测 -
Ridge(L2)的alpha过大时,系数被压得极小,但不会归零,仍保留微弱响应 - 推荐做法:用
sklearn.model_selection.GridSearchCV在[0.001, 0.01, 0.1, 1.0, 10.0]范围内搜索,配合cv=5 - 注意:必须在标准化后的特征上做搜索,否则
alpha对不同量纲特征的惩罚严重失衡
Keras 中 kernel_regularizer 的作用范围容易被误解
kernel_regularizer=l1(0.01) 只约束当前层的权重矩阵(W),不约束偏置项(b)。如果你希望也正则化偏置,得显式加上 bias_regularizer,但通常不建议——偏置项本身不具备特征选择意义,加 L1/L2 反而干扰收敛。
- 全连接层默认只正则化
kernel;卷积层同理,只正则化卷积核权重 - 多个层可以设置不同强度,比如浅层用
l2(0.001)防震荡,深层用l1(0.01)做稀疏压缩 - 切记:正则化强度必须和学习率协同调整。lr=1e-3 时用
l2(0.01)合理,换成 lr=1e-5 后若不调低正则强度,模型几乎不更新
PyTorch 手动加正则项时,torch.norm 容易漏掉 bias 或重复计算
手动实现 L2 正则时,常见错误是直接对整个模型 parameters() 调用 torch.norm(p, 2),但这会把 bias 也纳入惩罚——而大多数论文和实践都只正则化权重(weight)。
立即学习“Python免费学习笔记(深入)”;
- 正确写法:遍历
model.named_parameters(),只对含'weight'的参数计算torch.norm(p, 2) - L1 同理,用
torch.norm(p, 1),但注意不要对 batch norm 的running_mean等 buffer 求范数(它们不是可训练参数) - 别忘了乘上
lambda并加到 loss 后再反向传播:loss = base_loss + lambda * l2_penalty - 如果用了
nn.DataParallel或 DDP,确保正则项在主设备上计算或同步,否则多卡间梯度不一致
最容易被忽略的一点:L1/L2 正则化本身不解决数据偏差或标签噪声。如果你的训练集存在系统性错误(比如某类样本标注全部颠倒),再强的正则也无法挽救——它只会帮你选错更“干净”的错法。先检查数据质量,再调正则强度。


















