模型调参

通用调参方法论

调参顺序

很多人一上来就调 scheduler、调 optimizer、调各种小参数。这是错的。参数的影响力差距巨大:

影响力排序:learning rate >> effective batch size >> 模型架构参数(LoRA rank 等)>> scheduler / optimizer 类型 >> 其他细节参数。

每个阶段的分阶段策略

粗调(找方向)

只跑 10%~20% 的训练步数。lr 和 batch 做粗网格搜索。目的是快速排除明显不行的配置,不是找最优。

细调(找最优)

粗调选出的 top 2~3 个配置跑完整训练。对比 eval 指标。目的是在候选里挑最好的。

验证(防作弊)

最终配置在 hold-out 测试集上跑一次。如果测试集效果和验证集差太多,说明你在验证集上过拟合了调参。

如何判断"调好了"

  • SFT:eval loss 稳定在合理范围(不涨),人工抽检回答质量符合预期。别追求 loss 越低越好——loss 太低可能过拟合。
  • RM:eval accuracy > 65%,chosen/rejected score margin 在 0.5~2.0,score 分布明显分离。人工抽检:chosen 的分应该普遍高于 rejected。
  • GRPO:reward 稳步上升但不过快,KL 散度缓慢增长但不爆炸(<5~10),抽检回答质量比 SFT 有改善。reward 涨太快是危险信号。
  • DPO:chosen log prob 上升或持平,rejected log prob 下降,margin 合理。抽检 DPO 后回答明显比 SFT 基线好。

核心参数选择

阶段核心参数(优先级↓)为什么这些最重要
SFT lr → effective batch → warmup → epochs SFT 本质是"继续预训练",lr 决定学多快,batch 决定梯度稳不稳
RM lr → epochs → effective batch RM 最容易过拟合,lr 偏低 + epoch 偏少是关键
GRPO lr → beta(KL) → num_generations → max_completion_length RL 阶段 lr 极低,beta 控制"别跑太远",generation 数决定样本质量
DPO beta → lr → lora_r/alpha → epochs DPO 里 beta 是第一大参数,直接决定模型敢不敢偏离参考模型

SFT 监督微调

Step 1 — 定 effective batch size:先把单卡 batch 拉到显存极限(1.5B 在 128GB 上 per_device=4 应该没问题),gradient_accumulation_steps 调到 effective batch 16~32。batch 太小 loss 曲线像心电图,没法判断其他参数的效果。
Step 2 — 小网格搜 lr:固定其他参数,lr 试 [5e-6, 1e-5, 2e-5, 5e-5],每个跑 500~1000 步看 loss 下降斜率。选 loss 降最快且不震荡的那个。不用跑完整个 epoch。
Step 3 — 调 warmup:确定总步数后,warmup 设为 3%~5%。20K 步的话 warmup=600~1000。warmup 不够初期 loss 可能冲飞。
Step 4 — 决定 epochs:跑完 1 epoch 看 eval loss 是否还在降。在降就加 epoch,持平或上升就停。SFT 过拟合的典型信号是 eval loss 涨但 train loss 还在降。
 
注:
gradient_accumulation_steps:用多个小 batch 累加梯度,只累积满 N 步才更新一次权重,模拟更大 batch 训练,解决显存不够 OOM 的问题

RM 奖励模型

RM 的训练目标是学会区分"好回答"和"坏回答"。它不是一个生成模型——它给一个回答打分。因为它要在之后指导 GRPO,RM 的质量直接决定整个 RLHF 的上限

RM 最大的坑是过拟合:因为你训练它区分 chosen vs rejected,它很容易学到一些浅层特征("长回答分高"、"带数字的分高")而不是真正的质量判断。

RM 特有指标(比 loss 更重要)

RM 的训练 loss 会骗人——loss 在降不代表模型真的好。真正要看的是:

Accuracy:chosen 分 > rejected 分的样本占比。训练集上应该 >70%,验证集 >65%。低于 60% 说明 RM 没学到东西。
Score margin:chosen 分 - rejected 分的平均值。margin 太小说明模型区分度差,太大可能过拟合。0.5~2.0 比较健康。
Score distribution:如果 chosen 和 rejected 的分数分布几乎重叠,那 RM 基本是废的。两张分布图应该明显分开。

调参步骤

Step 1 — 先跑 baseline:lr=1e-5, batch=8, 1 epoch。记录 accuracy 和 score margin。
Step 2 — 降 lr 试:如果 accuracy 高但过拟合严重(train acc >> eval acc),降 lr 到 5e-6,或者加 dropout/weight decay。
Step 3 — 增大 batch:RM 对 batch size 敏感。effective batch 从 8 提到 16 或 32,通常能提升 eval accuracy 1~3 个点。
Step 4 — 检查数据:如果 accuracy 死活上不去(<60%),大概率是偏好数据有问题——chosen 和 rejected 区分度不够。回去看数据,别死调参数。
 
RM 调参铁律:accuracy 比 loss 重要一百倍。loss 降到 0.3 不代表 RM 好用——可能只是学会了"回答越长分越高"这种垃圾特征。 

GRPO 强化学习

GRPO(Group Relative Policy Optimization)是 RLHF 的最后一步:用 RM 当裁判,不断优化策略模型,让它生成 RM 打高分的回答。

GRPO 和 PPO 的核心区别:GRPO 不训 value model,而是用同一 prompt 的一组回答的相对分数来估计 advantage。省显存,收敛也更快。

beta 怎么调——这是灵魂参数

beta 控制 KL 散度惩罚的强度。直观理解:beta 越小,模型越敢"放飞自我",越容易 reward hacking;beta 越大,模型越保守,越接近 SFT 原始行为。

beta=0.01:KL 惩罚很轻。模型会激进地优化 reward,但可能学会取巧——比如输出超长文本骗分、重复 RM 喜欢的词。reward 曲线飙升但实际质量可能变差。
beta=0.04(当前):中庸值。reward 涨得没那么快但更稳。大多数场景的默认起点。
beta=0.1:KL 惩罚重。reward 涨得慢但模型不会跑偏。适合 RM 不太靠谱的时候。

怎么判断 beta 合不合适:

  • 看 KL 散度和 reward 的 tradeoff 曲线。如果 KL 涨很快 reward 不怎么涨 → beta 太小,模型在瞎搞。
  • 抽几条回答人工看。如果模型开始重复无意义内容或胡说 → beta 加大。
  • 如果训练完回答和 SFT 几乎一样 → beta 太大,没学到东西。

调参步骤

Step 1 — 小步验证:先跑 10~20 步,确认 reward 在涨 + KL 没爆炸。reward 不涨 → lr 提一点(2e-6)。KL 爆炸(>10)→ beta 加大或 lr 降低。
Step 2 — 调 beta:跑 100 步看 reward-KL 曲线。理想情况:reward 稳步上升,KL 缓慢增长。reward 飙但 KL 也飙 → 加 beta。reward 不动 → 降 beta 或提 lr。
Step 3 — 调 num_generations:从 4 试到 8。advantage 估计更准,reward 收敛更稳。代价是每步 2 倍开销。
Step 4 — 定 max_steps:监控 reward 是否 plateau。连续 50 步不涨就停。RL 训练过头通常会 reward hacking——reward 还在涨但质量在降。

GRPO 调参铁律:beta 是 C 位参数。RL 阶段不要追求 reward 越高越好——reward 涨太快往往意味着模型在 hack RM 而不是真正变好。定期人工抽查回答。 

注:

num_generations:每组 prompt 生成几个回答。4~8 是常见范围。越多 advantage 估计越准,但越慢

DPO 直接偏好优化

DPO 是 RLHF 的"捷径":跳过 RM 训练和 RL,直接在偏好数据上优化策略。公式上等价于 RLHF,但实现简单很多。

DPO 的 beta 怎么调(比 GRPO 更直接)

DPO 里 beta 的作用比 GRPO 更直观:beta 越小,模型越激进地拉大 chosen 和 rejected 的概率差距。

beta行为适用场景
0.01~0.05 激进。chosen/rejected 差距拉很大。高风险:可能过拟合偏好数据里的噪声 偏好数据质量高、标注一致性好
0.1(当前) 平衡。中庸之选,大多数论文默认值 通用场景,数据质量一般
0.3~0.5 保守。模型几乎不动,接近 SFT。安全但效果弱 偏好数据少或质量不确定时

监控指标:看 chosen 和 rejected 的 log probability 差距。训练中这个差距应该在变大但不应该爆炸。如果差距变成几十甚至几百 → beta 调大或用 early stopping。

LoRA 参数怎么选

r(rank):决定了 LoRA 的低秩矩阵维度。r=8 省参数但表达能力弱,r=64 强但慢。1.5B 模型 r=16 够用。如果你发现 chosen/rejected margin 不涨,试 r=32。
alpha:一般设 alpha = 2×r。alpha/r 比越大 LoRA 权重越大。你这个 alpha=32, r=16,比值 2,标准配置。
target_modules:你的配置覆盖了所有 attention 和 FFN 的投影层(q/k/v/o/gate/up/down),这是最全的配置。效果最好但参数最多。如果显存不够,可以只留 q_proj + v_proj。
dropout:数据 < 500 条建议 0.1,数据 > 2000 条可以 0 或 0.05。你的 train 数据很少,0.05 偏保守,可以试 0.1。

调参步骤

Step 1 — 定 beta:先跑 beta=0.1 看效果。抽几条回答对比 SFT 基线和 DPO 后,看有没有明显改善。没有 → beta 降到 0.05。
Step 2 — 调 lr:QLoRA 下 lr 范围 1e-5~1e-4。当前 5e-5 合理。如果 loss 不降试 1e-4,如果震荡试 2e-5。
Step 3 — 调 LoRA rank:如果效果不明显,试 r=32(同时 alpha=64)。基本上 rank 越高效果越好,但增益递减。r=16 到 r=32 提升通常明显,r=32 到 r=64 差别不大。
Step 4 — 定 epochs:看 chosen/rejected margin 的趋势。如果 margin 还在涨就继续训,如果 plateau 就停。DPO 过拟合的信号是 eval margin 比 train margin 低很多。
 
DPO 调参铁律:beta 第一,lr 第二,LoRA rank 第三。偏好数据的质量比这三个参数加起来都重要——数据差,怎么调都是垃圾进垃圾出。 

 

参考项目:https://github.com/2143616/RLHF_train

posted @ 2026-07-23 08:04  黄艺龙  阅读(1)  评论(0)    收藏  举报