Weight Decay(权重衰减)是深度学习中一个非常重要的超参数,用于防止模型过拟合、提升泛化能力。下面我们从直观理解、数学原理、实际作用和调参建议四个方面详细解释它的含义。
✅ 一、直观理解:什么是 Weight Decay?
你可以把它想象成:
“给模型一个惩罚机制:如果你的参数变得太大或太复杂,我就要罚你。”
这就像训练一个学生:
-
不仅要看他答题是否正确(损失小),还希望他用简洁的方法解题(参数不要太复杂)。
-
Weight Decay 就是鼓励模型“保持简单”的正则化手段。
✅ 二、数学定义:它是如何工作的?
1. 标准训练目标(无 weight decay)
最小化损失函数:
其中
是任务损失(如交叉熵)。
2. 加入 Weight Decay 后的目标
-
就是
weight_decay参数(例如 0.01) -
是所有可训练参数的 L2 范数平方
👉 这个额外项叫做 L2 正则化(L2 Regularization)
⚠️ 注意:在使用 AdamW 优化器时,weight decay 是独立施加在梯度更新之外的,与传统 Adam 中的 L2 正则不同,效果更干净有效。
✅ 三、实际作用:为什么需要它?
|
作用 |
说明 |
|
🔹 防止过拟合 |
抑制模型将权重放大来“死记硬背”训练数据的行为 |
|
🔹 提升泛化性 |
让模型学到更平滑、更鲁棒的特征表示 |
|
🔹 稳定训练过程 |
特别是在大模型、大数据量训练中,避免参数爆炸或震荡 |
|
🔹 控制模型复杂度 |
相当于奥卡姆剃刀原则:“简单的解释更好” |
🎯 典型场景:
-
微调大模型(如 BERT、Qwen、LLaMA)时几乎 always 使用 weight decay
-
图像分类、NLP、多模态任务中广泛使用
✅ 四、常见默认值(参考)
|
模型类型 |
推荐 weight decay 值 |
备注 |
|
Transformer 类(BERT, T5, Qwen 等) |
|
常见默认值为 0.01 |
|
ViT / 视觉模型 |
|
更高以应对高维输入 |
|
AdamW 优化器 |
推荐使用 |
AdamW 专为分离 weight decay 设计 |
|
微调(Fine-tuning) |
|
可稍低避免破坏预训练知识 |
|
小模型 |
|
太大会导致欠拟合 |
📌 在你的命令中:
--weight_decay 未显式设置 → 使用默认值,通常是 0.01
✅ 五、Weight Decay vs L2 正则:有什么区别?
|
对比项 |
传统 L2 正则 |
AdamW / 显式 Weight Decay |
|
实现方式 |
损失函数中加入 |
单独对参数做衰减: |
|
效果 |
在自适应优化器中可能失效 |
更合理,真正实现“权重衰减” |
|
推荐 |
❌ 不推荐用于 Adam |
✅ 推荐使用 AdamW + weight decay |
💡 所以现代框架(如 Hugging Face Transformers、Swift)都推荐使用 AdamW 并开启 weight_decay,而不是依赖 loss 的 L2 正则。
✅ 六、如何选择合适的 weight decay 值?
|
方法 |
描述 |
|
📌 默认尝试 |
最常用的起点,适用于大多数情况 |
|
🔍 小范围搜索 |
如 |
|
🔁 结合学习率调整 |
高 learning rate 可搭配中等 weight decay;低 lr 可适当降低 wd |
|
🧪 注意极端情况: • • |
需平衡 |
✅ 七、代码示例(PyTorch)
from torch.optim import AdamW
optimizer = AdamW(
model.parameters(),
lr=1e-5,
weight_decay=0.01 # ←← 关键参数
)
或者在 Hugging Face / Swift 中通过参数传入:
--weight_decay 0.01
✅ 总结一句话:
Weight Decay 是一种通过轻微“压缩”模型参数来防止过拟合的技术,相当于告诉模型:“不要把参数弄得太大,保持简洁!”
|
参数名 |
含义 |
推荐值 |
|
|
权重衰减值,控制正则强度 |
|
✅ 在你的 GKD 训练任务中,如果没有指定,默认很可能就是 0.01,这是一个安全且有效的选择。
4万+

被折叠的 条评论
为什么被折叠?



