Capítulo 2: Otimização Direta por Preferência
Alternativa mais simples ao RLHF
DPO otimiza diretamente para as preferências humanas sem precisar de um modelo de recompensa separado.
DPO vs RLHF
| Aspecto | RLHF | DPO |
|---|---|---|
| Modelo de Recompensa | Necessário | Não precisa |
| Treinamento RL | PPO/similar | Otimização direta |
| Complexidade | Alta | Menor |
| Estabilidade | Pode ser instável | Mais estável |
Formato dos Dados de Preferência
{
"prompt": "Explain quantum computing",
"chosen": "Quantum computing uses qubits...",
"rejected": "Quantum computers are just faster..."
}
Implementação 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-chave: Beta
- Beta baixo (0,01-0,05): Otimização mais forte
- Beta alto (0,5-1,0): Mantém-se próximo do modelo de referência
- Padrão (0,1): Bom equilíbrio