> ## 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.

# Entrenamiento PPO

> Aprendizaje por Refuerzo con Retroalimentación Humana usando PPO

# Entrenamiento PPO

Entrena modelos de lenguaje usando Proximal Policy Optimization (PPO) para aprendizaje por refuerzo con retroalimentación humana (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>

<Note>
  También disponible: [RL explicado en Portugués](https://youtu.be/no9f9xvHgNA)
</Note>

## Visión General

El entrenamiento PPO es un proceso de 2 pasos:

1. **Entrenar un Modelo de Recompensa** - Entrena un modelo para puntuar respuestas (ver [Reward Modeling](/advanced/reward-modeling))
2. **Ejecutar Entrenamiento PPO** - Usa el modelo de recompensa para guiar la optimización de la política

## Inicio Rápido

```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()
```

## Requisitos

<Warning>
  El entrenamiento PPO requiere `--rl-reward-model-path` (ruta a un modelo de recompensa entrenado) o `--model-ref` (modelo de referencia para divergencia KL). Al menos uno debe ser especificado.
</Warning>

## Parámetros

### Parámetros Principales de PPO

| Parámetro              | Flag CLI                 | Por Defecto | Descripción                                      |
| ---------------------- | ------------------------ | ----------- | ------------------------------------------------ |
| `rl_reward_model_path` | `--rl-reward-model-path` | None        | Ruta al modelo de recompensa (requerido)         |
| `rl_gamma`             | `--rl-gamma`             | `0.99`      | Factor de descuento (0.9-0.99)                   |
| `rl_gae_lambda`        | `--rl-gae-lambda`        | `0.95`      | Lambda GAE para estimación de ventaja (0.9-0.99) |
| `rl_kl_coef`           | `--rl-kl-coef`           | `0.1`       | Coeficiente de divergencia KL (0.01-0.5)         |
| `rl_value_loss_coef`   | `--rl-value-loss-coef`   | `1.0`       | Coeficiente de pérdida de valor (0.5-2.0)        |
| `rl_clip_range`        | `--rl-clip-range`        | `0.2`       | Rango de recorte PPO (0.1-0.3)                   |
| `rl_value_clip_range`  | `--rl-value-clip-range`  | `0.2`       | Rango de recorte de función de valor             |

### Parámetros de Entrenamiento

| Parámetro                  | Flag CLI                     | Por Defecto | Descripción                      |
| -------------------------- | ---------------------------- | ----------- | -------------------------------- |
| `rl_num_ppo_epochs`        | `--rl-num-ppo-epochs`        | `4`         | Épocas PPO por batch             |
| `rl_chunk_size`            | `--rl-chunk-size`            | `128`       | Tamaño de chunk de entrenamiento |
| `rl_mini_batch_size`       | `--rl-mini-batch-size`       | `8`         | Tamaño de mini-batch             |
| `rl_optimize_device_cache` | `--rl-optimize-device-cache` | `True`      | Optimización de memoria          |

### Parámetros de Generación

| Parámetro           | Flag CLI              | Por Defecto | Descripción                |
| ------------------- | --------------------- | ----------- | -------------------------- |
| `rl_max_new_tokens` | `--rl-max-new-tokens` | `128`       | Máximo de tokens a generar |
| `rl_top_k`          | `--rl-top-k`          | `50`        | Muestreo top-k             |
| `rl_top_p`          | `--rl-top-p`          | `1.0`       | Muestreo top-p (núcleo)    |
| `rl_temperature`    | `--rl-temperature`    | `1.0`       | Temperatura de generación  |

### Parámetros Avanzados

| Parámetro            | Flag CLI               | Por Defecto | Descripción                                                                 |
| -------------------- | ---------------------- | ----------- | --------------------------------------------------------------------------- |
| `rl_reward_fn`       | `--rl-reward-fn`       | None        | Función de recompensa: `default`, `length_penalty`, `correctness`, `custom` |
| `rl_multi_objective` | `--rl-multi-objective` | `False`     | Habilitar recompensas multi-objetivo                                        |
| `rl_reward_weights`  | `--rl-reward-weights`  | None        | Pesos JSON para multi-objetivo                                              |
| `rl_env_type`        | `--rl-env-type`        | None        | Tipo de entorno RL                                                          |
| `rl_env_config`      | `--rl-env-config`      | None        | Configuración JSON del entorno                                              |

## Formato de Datos

El entrenamiento PPO usa solo prompts (el modelo genera respuestas):

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

## Tipos de Entorno RL

Tres tipos de entorno están disponibles:

| Entorno                 | Descripción                                               |
| ----------------------- | --------------------------------------------------------- |
| `text_generation`       | Generación de texto estándar con puntuación de recompensa |
| `multi_objective`       | Múltiples componentes de recompensa combinados            |
| `preference_comparison` | Comparar respuestas generadas                             |

### Recompensas Multi-Objetivo

Habilitar múltiples señales de recompensa:

```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}',
)
```

## Ejemplo: Pipeline RLHF Completo

### Paso 1: Entrenar Modelo de Recompensa

```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
```

### Paso 2: Ejecutar Entrenamiento 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
```

## Mejores Prácticas

1. **Comienza con un buen modelo base** - Haz fine-tuning con SFT antes de PPO
2. **Usa un modelo de recompensa bien entrenado** - La calidad de las recompensas determina el éxito de PPO
3. **Monitorea la divergencia KL** - Demasiado alta significa que el modelo está divergiendo demasiado del original
4. **Comienza con hiperparámetros por defecto** - Ajusta según la dinámica del entrenamiento
5. **Usa tasas de aprendizaje pequeñas** - PPO es sensible a la tasa de aprendizaje (1e-5 a 5e-6)

## Próximos Pasos

<CardGroup cols={2}>
  <Card title="Reward Modeling" href="/advanced/reward-modeling">
    Entrenar modelos de recompensa
  </Card>

  <Card title="DPO Training" href="/advanced/dpo-training">
    Alternativa más simple a PPO
  </Card>

  <Card title="Entrenamiento GRPO" href="/advanced/grpo-training">
    RL con entornos personalizados
  </Card>

  <Card title="Módulo RL" href="/advanced/rl-module">
    Bloques de construcción RL
  </Card>
</CardGroup>
