DPO e RLHF simplificado: aprender com preferências
⏱ 15 min·⭐ 65 XP
Pré-requisitos (0/1)0%
- ⬜⚡ LoRA, QLoRA e PEFT: fine-tuning eficiente(Fine-tuning & Customização de LLMs)
Recomendamos completar os pré-requisitos antes de seguir, mas nada te impede de continuar.
DPO dataset format
| Etapa | Reforço clássico | Otimização direta por preferência |
|---|---|---|
| Modelos no laço | Política, referência, recompensa e valor | Política e referência |
| Precisa treinar modelo de recompensa | Sim | Não |
| Estabilidade | Sensível: exploração da recompensa e esquecimento | Bem mais estável |
| Memória | Alta — quatro modelos | Moderada |
| Formato do dado | Preferências, depois recompensas | Pares: prompt, preferida, rejeitada |
| Onde ainda vence | Recompensa complexa e não diferenciável | — |
EtapaModelos no laço
Reforço clássicoPolítica, referência, recompensa e valor
Otimização direta por preferênciaPolítica e referência
EtapaPrecisa treinar modelo de recompensa
Reforço clássicoSim
Otimização direta por preferênciaNão
EtapaEstabilidade
Reforço clássicoSensível: exploração da recompensa e esquecimento
Otimização direta por preferênciaBem mais estável
EtapaMemória
Reforço clássicoAlta — quatro modelos
Otimização direta por preferênciaModerada
EtapaFormato do dado
Reforço clássicoPreferências, depois recompensas
Otimização direta por preferênciaPares: prompt, preferida, rejeitada
EtapaOnde ainda vence
Reforço clássicoRecompensa complexa e não diferenciável
Otimização direta por preferência—
{
"prompt": "Explique QUIC em 2 frases.",
"chosen": "QUIC é um protocolo de transporte sobre UDP...", // resposta preferida
"rejected": "QUIC não é importante, esquece TCP..." // resposta ruim
}
{
"prompt": "...",
"chosen": "...",
"rejected": "..."
}DPO com TRL
from trl import DPOTrainer
from transformers import AutoModelForCausalLM, AutoTokenizer
from datasets import load_dataset
model = AutoModelForCausalLM.from_pretrained('./llama3-sft')
ref_model = AutoModelForCausalLM.from_pretrained('./llama3-sft') # frozen ref
tokenizer = AutoTokenizer.from_pretrained('./llama3-sft')
dataset = load_dataset('json', data_files='dpo.jsonl')
trainer = DPOTrainer(
model=model,
ref_model=ref_model,
train_dataset=dataset['train'],
tokenizer=tokenizer,
beta=0.1, # KL regularization strength
args={'num_train_epochs': 3, 'learning_rate': 5e-7, ...},
)
trainer.train()RLHF tradicional (contexto)
💡
RLHF: (1) SFT com demonstrations. (2) Train REWARD MODEL em preferências. (3) PPO: policy model optimiza pra maximizar reward. Instável: reward hacking, catastrophic forgetting. DPO mata etapa 2+3 com single loss function. Still RLHF existe em big labs com mais compute/expertise.
Quiz rápido
O que a otimização direta por preferência elimina do pipeline clássico de aprendizado por reforço com feedback humano?
Variants modernos
- KTO (Kahneman-Tversky Optimization): não precisa pairs, só rating binary like/dislike
- IPO (Identity PO): mais estável em preferências ruidosas
- SimPO (2024): sem reference model
- ORPO: combina SFT + preference em single loss
Em 2026 DPO ainda é default mais usado; variants em rapid experimentation.
Perguntas frequentes
❓ Qual a diferença entre RLHF clássico e otimização direta por preferência?
O clássico treina um modelo de recompensa e otimiza a política por reforço — poderoso e instável, com muitas peças. A otimização direta dispensa o modelo de recompensa e treina diretamente sobre pares preferidos, com estabilidade muito maior. Por isso ela virou o caminho padrão em times pequenos.
❓ Preciso de ajuste supervisionado antes?
Sim, e pular é o erro típico: sem ele, a referência aceita continuação demais e a otimização não converge. O supervisionado funciona como ancoragem da distribuição, e a preferência ajusta em cima. Aplicar preferência direto no modelo base costuma não render nada.
❓ De onde vêm os pares de preferência?
De comparação humana entre duas saídas para a mesma entrada — ou de comparação automatizada com critério objetivo. O que estraga é rótulo inconsistente entre anotadores: preferência contraditória ensina ruído. Rubrica escrita antes de anotar é o que sustenta a qualidade.
Fixando
Quiz rápido
Cada exemplo do conjunto traz prompt, resposta escolhida e resposta rejeitada. Por que o par importa mais que a resposta boa isolada?
Quiz rápido
Existem variantes que dispensam pares, que dispensam modelo de referência ou que fundem as etapas. Qual é o estado descrito para 2026?
Terminou de ler?
Marcar como concluído registra o XP, mantém sua sequência e coloca 3 cartas deste módulo na fila de revisão espaçada.
Próximos passos sugeridos
Temas deste módulo
Discussão
Carregando comentários…