在 AdamW 算法中调整参数对模型训练过程和最终效果有直接且重要的影响,以下是各关键参数对性能的具体影响总结:
AdamW 主要可调参数及其影响说明
1. 学习率 lr
- 影响:
- 太大(如
0.01 ~ 0.1
):训练过程不稳,容易发散、无法收敛; - 太小(如
<1e-5
):收敛速度慢、欠拟合。
- 最佳范围:
- 普通 CNN/ResNet:
3e-4 ~ 1e-3
- NLP Transformer/BERT:
2e-5 ~ 5e-5
- 大语言模型(如 LLaMA、ChatGPT):
1e-4 ~ 6e-4
2. 权重衰减 weight_decay
- 作用:控制正则化强度,防止过拟合。
- 影响:
- 太小(如
0.0
或 0.01
):可能模型复杂度高、泛化能力差; - 太大(如
0.1
以上):可能导致模型容量不足,欠拟合。
- 最佳范围:
- 普通 CNN/ResNet:
1e-4 ~ 0.1
- NLP Transformer/BERT:
0.01~0.05
(有时会关闭正则化) - 大语言模型:
0.01~0.03
,与学习率搭配使用
3. 动量系数 betas = (beta_1, beta_2)
- 默认为
(0.9, 0.999)
- 影响:
beta_1
越大,则对历史梯度的权重越高,更新速度越慢;beta_2
影响 RMSProp 的统计效果。默认设置已经非常成熟。
- 建议不调整这些值。
4. epsilon(eps)
- 默认为
1e-8
- 作用: 避免除零操作
- ❗️ 一般无需调整
5. 梯度裁剪 max_grad_norm
- 可选参数,不设置则不启用
- 影响:
- 太大(如
2.0
):可能无法抑制过大的梯度; - 太小(如
0.1
):模型更新受限、收敛速度慢。
- 适用场景:当模型训练过程中出现严重的梯度爆炸或数值不稳定问题时启用,一般设置为
1.0~2.0
参数调节影响总结
参数 | 调大影响 | 调小影响 | 推荐值区间 |
---|
lr | 训练不稳定、发散 | 收敛慢、欠拟合 | 1e-4 ~ 1e-3 (根据任务调整) |
weight_decay | 过正则化,模型能力下降 | 正则不足,过拟合 | 0.01~0.1 |
betas | 更新更慢 | 更快、但可能不稳定 | 默认值不建议改动 |
eps | 影响很小(可忽略) | 无显著影响 | 不用调整 |
max_grad_norm | 训练稳定性提升 | 过早限制更新速度,可能收敛困难 | 1.0~2.0 (根据任务启用) |
实际操作建议:按步骤调节参数
第一步:固定所有其他参数
- 仅调整 学习率 lr
- 观察训练是否快速收敛;
- 如果发散,则降低 lr;
- 如果非常慢,则增加 lr。
第二步:调整 weight_decay
- 根据模型是否出现过拟合进行调节:
- 过拟合严重 → 增大 weight_decay
- 欠拟合(训练效果差) → 减小 weight_decay
第三步(可选):梯度裁剪(max_grad_norm)
- 如果你的数据噪声很大或模型特别深、大,可以设置为
1.0~2.0
来稳定训练。
示例(以 NLP 模型为例)
import torch
from transformers import AdamWmodel = ...
optimizer = AdamW(model.parameters(),lr=5e-5, betas=(0.9, 0.999), eps=1e-8,weight_decay=0.01
)
torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0)
举个例子:AdamW 在不同任务中的配置
任务类型 | lr | weight_decay |
---|
普通 CV(ResNet) | 3e-4 | 1e-4 ~ 0.1 |
BERT/Transformer | 5e-5 | 0.01 |
大语言模型(LLaMA) | 2e-4~6e-4 | 0.01~0.03 |
总结:参数调整影响总结
超参数 | 过大影响 | 过小影响 |
---|
lr | 训练不稳定、发散 | 收敛速度慢、欠拟合 |
weight_decay | 模型能力受限,过正则化 | 过拟合风险增加 |
betas | 不影响训练稳定性(默认值即可) | 可能导致更新不稳定 |
max_grad_norm | 训练速度变慢、收敛困难 | 无法抑制梯度爆炸 |
番外
