Capítulo 2: Optimización Directa de Preferencias
Alternativa más simple a RLHF
DPO optimiza directamente para las preferencias humanas sin necesidad de un modelo de recompensa separado.
DPO vs RLHF
| Aspecto | RLHF | DPO |
|---|---|---|
| Modelo de recompensa | Requerido | No necesario |
| Entrenamiento RL | PPO/similar | Optimización directa |
| Complejidad | Alta | Menor |
| Estabilidad | Puede ser inestable | Más estable |
Formato de datos de preferencias
{
"prompt": "Explain quantum computing",
"chosen": "Quantum computing uses qubits...",
"rejected": "Quantum computers are just faster..."
}
Implementación de DPO
from trl import DPOTrainer, DPOConfig
dpo_config = DPOConfig(
beta=0.1, # KL penalty weight
learning_rate=5e-7,
num_train_epochs=1,
gradient_accumulation_steps=4,
bf16=True,
)
trainer = DPOTrainer(
model=model,
ref_model=ref_model, # Reference model for KL
args=dpo_config,
train_dataset=preference_dataset,
tokenizer=tokenizer,
)
trainer.train()
Parámetro clave: Beta
- Beta baja (0.01-0.05): Optimización más fuerte
- Beta alta (0.5-1.0): Se mantiene cerca del modelo de referencia
- Por defecto (0.1): Buen equilibrio