學習率與訓練輪數:從損失曲線讀出該停在哪
微調過擬合的速度比想像中快。看懂曲線比背誦超參數表有用得多。
微調資料通常只有幾百到幾千筆,跑三輪就可能過擬合。判斷依據只有一個:驗證損失。
四種常見曲線
- 訓練損失下降、驗證損失下降 → 正常,可以繼續。
- 訓練損失下降、驗證損失上升 → 過擬合,回到轉折點的檢查點。
- 兩者都不動 → 學習率太小,或資料與任務不匹配。
- 損失劇烈震盪或變成 NaN → 學習率太大,或資料裡有異常長樣本。
起手值
# LoRA 微調的常見起點
learning_rate = 2e-4 # 全參數微調要小很多,約 1e-5
num_train_epochs = 3
warmup_ratio = 0.03
lr_scheduler_type = 'cosine'
weight_decay = 0.0LoRA 的學習率比全參數微調大一到兩個數量級,這是正常的——因為只有很小一部分參數在動。
務必存中間檢查點
args = TrainingArguments(
eval_strategy='steps', eval_steps=50,
save_strategy='steps', save_steps=50,
load_best_model_at_end=True,
metric_for_best_model='eval_loss', greater_is_better=False,
)驗證損失不是唯一標準
驗證損失低不代表任務表現好,尤其是結構化輸出任務。最終決策要看任務指標——格式合法率、分類正確率、人工抽查。實務上常見驗證損失最低的檢查點不是任務表現最好的那一個。
每個檢查點都跑一次小型任務評測(50 題就好),把「損失曲線」與「任務分數曲線」畫在一起,選點會清楚很多。