在 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 | 訓練速度變慢、收斂困難 | 無法抑制梯度爆炸 |
番外
