> ## Documentation Index
> Fetch the complete documentation index at: https://docs.monostate.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# PPO 训练

> 使用 PPO 进行人类反馈强化学习

# PPO 训练

使用近端策略优化（PPO）训练语言模型，用于人类反馈强化学习（RLHF）。

<div style={{ marginTop: '2rem', marginBottom: '2rem' }}>
  <iframe width="100%" height="400" src="https://www.youtube.com/embed/s-l0_d6Log0" title="Reinforcement Learning for LLMs" frameBorder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowFullScreen />
</div>

## 概述

PPO 训练是一个 2 步过程：

1. **训练奖励模型** - 训练一个模型来评分响应（参见 [Reward Modeling](/advanced/reward-modeling)）
2. **运行 PPO 训练** - 使用奖励模型指导策略优化

## 快速开始

```bash theme={null}
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

```python theme={null}
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()
```

## 要求

<Warning>
  PPO 训练需要 `--rl-reward-model-path`（已训练奖励模型的路径）或 `--model-ref`（用于 KL 散度的参考模型）。至少必须指定一个。
</Warning>

## 参数

### 核心 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 训练仅使用提示词（模型生成响应）：

```json theme={null}
{"text": "What is machine learning?"}
{"text": "Explain quantum computing."}
{"text": "Write a haiku about coding."}
```

## RL 环境类型

提供三种环境类型：

| 环境                      | 描述           |
| ----------------------- | ------------ |
| `text_generation`       | 带奖励评分的标准文本生成 |
| `multi_objective`       | 多个奖励组件组合     |
| `preference_comparison` | 比较生成的响应      |

### 多目标奖励

启用多个奖励信号：

```python theme={null}
params = LLMTrainingParams(
    ...
    trainer="ppo",
    rl_multi_objective=True,
    rl_env_type="multi_objective",
    rl_reward_weights='{"correctness": 1.0, "formatting": 0.1}',
)
```

## 示例：完整 RLHF 流程

### 步骤 1：训练奖励模型

```bash theme={null}
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 训练

```bash theme={null}
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
```

## 最佳实践

1. **从好的基础模型开始** - 在 PPO 之前使用 SFT 进行微调
2. **使用训练良好的奖励模型** - 奖励质量决定 PPO 成功
3. **监控 KL 散度** - 过高意味着模型偏离原始模型太多
4. **从默认超参数开始** - 根据训练动态调整
5. **使用小学习率** - PPO 对学习率敏感（1e-5 到 5e-6）

## 下一步

<CardGroup cols={2}>
  <Card title="Reward Modeling" href="/advanced/reward-modeling">
    训练奖励模型
  </Card>

  <Card title="DPO Training" href="/advanced/dpo-training">
    PPO 的更简单替代方案
  </Card>

  <Card title="GRPO 训练" href="/advanced/grpo-training">
    使用自定义环境的 RL
  </Card>

  <Card title="RL 模块" href="/advanced/rl-module">
    底层 RL 构建模块
  </Card>
</CardGroup>
