PPO 训练
使用近端策略优化(PPO)训练语言模型,用于人类反馈强化学习(RLHF)。
PPO 训练是一个 2 步过程:
- 训练奖励模型 - 训练一个模型来评分响应(参见 Reward Modeling)
- 运行 PPO 训练 - 使用奖励模型指导策略优化
快速开始
aitraining llm --train \
--model google/gemma-3-270m \
--data-path ./prompts.jsonl \
--project-name ppo-model \
--trainer ppo \
--rl-reward-model-path ./reward-model
Python API
from autotrain.trainers.clm.params import LLMTrainingParams
from autotrain.project import AutoTrainProject
params = LLMTrainingParams(
model="google/gemma-3-270m",
data_path="./prompts.jsonl",
project_name="ppo-model",
trainer="ppo",
rl_reward_model_path="./reward-model",
# PPO hyperparameters
rl_gamma=0.99,
rl_gae_lambda=0.95,
rl_kl_coef=0.1,
rl_clip_range=0.2,
rl_num_ppo_epochs=4,
epochs=1,
batch_size=4,
lr=1e-5,
)
project = AutoTrainProject(params=params, backend="local", process=True)
project.create()
PPO 训练需要 --rl-reward-model-path(已训练奖励模型的路径)或 --model-ref(用于 KL 散度的参考模型)。至少必须指定一个。
核心 PPO 参数
| 参数 | CLI 标志 | 默认值 | 描述 |
|---|
rl_reward_model_path | --rl-reward-model-path | None | 奖励模型路径(必需) |
rl_gamma | --rl-gamma | 0.99 | 折扣因子(0.9-0.99) |
rl_gae_lambda | --rl-gae-lambda | 0.95 | GAE lambda 用于优势估计(0.9-0.99) |
rl_kl_coef | --rl-kl-coef | 0.1 | KL 散度系数(0.01-0.5) |
rl_value_loss_coef | --rl-value-loss-coef | 1.0 | 价值损失系数(0.5-2.0) |
rl_clip_range | --rl-clip-range | 0.2 | PPO 裁剪范围(0.1-0.3) |
rl_value_clip_range | --rl-value-clip-range | 0.2 | 价值函数裁剪范围 |
训练参数
| 参数 | CLI 标志 | 默认值 | 描述 |
|---|
rl_num_ppo_epochs | --rl-num-ppo-epochs | 4 | 每个 batch 的 PPO 轮次 |
rl_chunk_size | --rl-chunk-size | 128 | 训练块大小 |
rl_mini_batch_size | --rl-mini-batch-size | 8 | 小批量大小 |
rl_optimize_device_cache | --rl-optimize-device-cache | True | 内存优化 |
生成参数
| 参数 | CLI 标志 | 默认值 | 描述 |
|---|
rl_max_new_tokens | --rl-max-new-tokens | 128 | 最大生成 token 数 |
rl_top_k | --rl-top-k | 50 | Top-k 采样 |
rl_top_p | --rl-top-p | 1.0 | Top-p(核)采样 |
rl_temperature | --rl-temperature | 1.0 | 生成温度 |
高级参数
| 参数 | CLI 标志 | 默认值 | 描述 |
|---|
rl_reward_fn | --rl-reward-fn | None | 奖励函数:default、length_penalty、correctness、custom |
rl_multi_objective | --rl-multi-objective | False | 启用多目标奖励 |
rl_reward_weights | --rl-reward-weights | None | 多目标 JSON 权重 |
rl_env_type | --rl-env-type | None | RL 环境类型 |
rl_env_config | --rl-env-config | None | JSON 环境配置 |
数据格式
PPO 训练仅使用提示词(模型生成响应):
{"text": "What is machine learning?"}
{"text": "Explain quantum computing."}
{"text": "Write a haiku about coding."}
RL 环境类型
提供三种环境类型:
| 环境 | 描述 |
|---|
text_generation | 带奖励评分的标准文本生成 |
multi_objective | 多个奖励组件组合 |
preference_comparison | 比较生成的响应 |
多目标奖励
启用多个奖励信号:
params = LLMTrainingParams(
...
trainer="ppo",
rl_multi_objective=True,
rl_env_type="multi_objective",
rl_reward_weights='{"correctness": 1.0, "formatting": 0.1}',
)
示例:完整 RLHF 流程
步骤 1:训练奖励模型
aitraining llm --train \
--model google/gemma-3-270m \
--data-path ./preferences.jsonl \
--project-name reward-model \
--trainer reward \
--prompt-text-column prompt \
--text-column chosen \
--rejected-text-column rejected
步骤 2:运行 PPO 训练
aitraining llm --train \
--model google/gemma-3-270m \
--data-path ./prompts.jsonl \
--project-name ppo-model \
--trainer ppo \
--rl-reward-model-path ./reward-model \
--rl-kl-coef 0.1 \
--rl-clip-range 0.2
最佳实践
- 从好的基础模型开始 - 在 PPO 之前使用 SFT 进行微调
- 使用训练良好的奖励模型 - 奖励质量决定 PPO 成功
- 监控 KL 散度 - 过高意味着模型偏离原始模型太多
- 从默认超参数开始 - 根据训练动态调整
- 使用小学习率 - PPO 对学习率敏感(1e-5 到 5e-6)
下一步