Métodos de Otimização de Preferências

Métodos de otimização de preferências (preference optimization methods) são uma família de técnicas de pós-treinamento (post-training) que adaptam um modelo de linguagem (language model) pré-treinado (pretrained) ou ajustado por instruções (instruction-tuned) usando preferências humanas (human preferences) (ou sintéticas (synthetic)), em vez de depender apenas da verossimilhança do próximo token (next-token likelihood). Eles são amplamente usados para melhorar utilidade (helpfulness), inofensividade (harmlessness), estilo (style) e seguimento de instruções (instruction-following) — muitas vezes como alternativa ao RLHF (Reinforcement Learning from Human Feedback) completo com PPO (Proximal Policy Optimization).

Este artigo foca nos métodos modernos “diretos” de preferências — DPO, IPO, KTO, ORPO — e em como eles se relacionam com o panorama mais amplo do ajuste fino baseado em preferências (preference-based fine-tuning) dentro do alinhamento de LLMs (LLM alignment) e do treinamento orientado a produto (product training).

Por que a otimização de preferências existe

O ajuste fino supervisionado (supervised fine-tuning, SFT) clássico treina um modelo para imitar demonstrações:

[ \max_\theta \ \mathbb{E}{(x,y)\sim \mathcal{D}}[\log \pi\theta(y\mid x)] ]

Mas muitos comportamentos desejáveis não são facilmente capturados por uma única resposta “correta”. Para um prompt (prompt) como:

“Write a refusal to a request for malware code, but be polite and offer safe alternatives.”

Há muitas respostas aceitáveis, e a qualidade depende de trade-offs sutis (tom, política de segurança, utilidade). Preferências capturam comparações (“A é melhor do que B”) de forma mais natural do que rótulos absolutos.

A otimização de preferências costuma ser discutida sob o guarda-chuva de Alinhamento e complementa o Ajuste Fino padrão.

Dados de preferência: o ingrediente central

A maioria dos métodos assume dados em uma destas formas:

Preferências pareadas (mais comum)

Para cada prompt (x), você tem uma resposta escolhida (y^+) e uma resposta rejeitada (y^-):

[ (x, y^+, y^-) ]

Exemplo (simplificado):

  • Prompt: “Explain TLS to a beginner.”
  • Escolhida: Explicação clara, precisa e estruturada com uma analogia
  • Rejeitada: Resposta vaga, parcialmente incorreta ou técnica demais

Dados pareados podem ser coletados a partir de:

  • Rotuladores humanos (caro, mas de alta qualidade)
  • LLM como juiz (LLM-as-a-judge) (mais barato, mas enviesado; muitas vezes chamado de pipelines do tipo RLAIF (Reinforcement Learning from AI Feedback))
  • Sinais implícitos (cliques (clicks), tempo de permanência (dwell time)), embora isso seja mais complicado para LLMs

Feedback unário (bom/ruim)

Em vez de pares, cada (prompt, resposta) é rotulado como “bom” ou “ruim”. KTO foi projetado para funcionar bem nesse cenário.

A base teórica: preferências como aprendizado (implícito) de recompensa

Um ponto de partida comum é o modelo de preferências Bradley–Terry / logístico:

[ P(y^+ \succ y^- \mid x) = \sigma(r(x,y^+) - r(x,y^-)) ]

onde (r(x,y)) é uma função de recompensa (reward function) (desconhecida) e (\sigma) é a sigmoide logística (logistic sigmoid).

O RLHF tradicional usa duas etapas:

  1. Treinar um modelo de recompensa (reward model) (r_\phi(x,y)) a partir de preferências
  2. Otimizar a política (policy) (\pi_\theta) com aprendizado por reforço (reinforcement learning, RL) (frequentemente PPO), com uma penalidade de divergência KL (Kullback–Leibler, KL) para mantê-la próxima a um modelo de referência (reference model) (\pi_{\text{ref}})

Isso tende a ser complexo e às vezes instável. Métodos diretos modernos como DPO derivam perdas que pulam a modelagem explícita de recompensa e RL, mas preservam o espírito de “otimizar preferências enquanto permanece próximo a uma política de referência”.

Essa restrição de “permanecer próximo” geralmente é expressa com um regularizador de KL:

[ \max_\theta \ \mathbb{E}[r(x,y)] - \lambda , \mathrm{KL}(\pi_\theta(\cdot|x)\ |\ \pi_{\text{ref}}(\cdot|x)) ]

Métodos do tipo DPO podem ser vistos como uma forma de transformar esse objetivo de RL com restrição em uma perda no estilo supervisionado computada a partir de log-probabilidades (log-probabilities).

DPO (Direct Preference Optimization)

Otimização Direta de Preferências (Direct Preference Optimization, DPO) é um dos métodos diretos de alinhamento mais usados para modelos de linguagem grandes (large language models, LLMs) porque é simples, eficiente e tende a ser estável.

Configuração

Dado ( (x, y^+, y^-) ) e um modelo de referência fixo (\pi_{\text{ref}}) (frequentemente o modelo SFT), defina a vantagem (advantage) de razão logarítmica:

[ \Delta_\theta = \left[\log \pi_\theta(y^+|x) - \log \pi_\theta(y^-|x)\right]

  • \left[\log \pi_{\text{ref}}(y^+|x) - \log \pi_{\text{ref}}(y^-|x)\right] ]

Então o DPO otimiza:

[ \mathcal{L}{\text{DPO}}(\theta) = - \log \sigma(\beta , \Delta\theta) ]

onde (\beta) é um hiperparâmetro tipo temperatura (temperature-like hyperparameter) que controla quão agressivamente o modelo se afasta da referência.

Intuição

  • Se a política já prefere (y^+) mais do que a referência, (\Delta_\theta) é positivo e a perda é pequena.
  • Se ela prefere (y^+) menos do que deveria, o DPO aumenta a probabilidade de (y^+) em relação a (y^-), mas ancorado ao comportamento da referência.

Notas práticas

  • O DPO se comporta como um objetivo de classificação pareada (pairwise classification) no espaço de log-probabilidades.
  • O modelo de referência é crucial: ele atua como um regularizador implícito que reduz deriva catastrófica (catastrophic drift).
  • O DPO frequentemente é treinado com adaptação de baixa ordem (Low-Rank Adaptation, LoRA) ou outras formas de ajuste eficiente em parâmetros.

Esboço mínimo de perda ao estilo PyTorch

import torch
import torch.nn.functional as F

def dpo_loss(logp_chosen, logp_rejected, logp_ref_chosen, logp_ref_rejected, beta=0.1):
    # logp_* are per-example sequence log-probabilities (sum over tokens)
    delta = (logp_chosen - logp_rejected) - (logp_ref_chosen - logp_ref_rejected)
    return -F.logsigmoid(beta * delta).mean()

Na prática, computar logp_chosen significa executar o modelo com forçamento pelo professor (teacher forcing) e somar as log-probabilidades de token ao longo dos tokens da resposta (excluindo o prompt).

Quando o DPO tende a funcionar bem

  • Você tem dados pareados limpos (humanos ou sintéticos curados)
  • Você quer melhorias fortes em seguimento de instruções sem a complexidade de RL
  • Você precisa de treinamento estável em escala

IPO (Implicit Preference Optimization)

Otimização Implícita de Preferências (Implicit Preference Optimization, IPO) é intimamente relacionada ao DPO, mas altera a perda para lidar com um problema comum: saturação (saturation).

Por que a saturação importa

No DPO, se (\beta \Delta_\theta) fica grande, (\sigma(\beta \Delta_\theta)) satura perto de 1, os gradientes diminuem e o aprendizado pode estagnar ou ficar sensível a ruído nos dados e à composição do batch.

Ideia do IPO (alto nível)

O IPO substitui o objetivo logístico por um objetivo do tipo regressão (regression-style objective) que incentiva uma margem-alvo (target margin) entre as razões logarítmicas escolhida e rejeitada. Uma forma típica é:

[ \mathcal{L}{\text{IPO}}(\theta) = \left(\Delta\theta - \frac{1}{\beta}\right)^2 ]

(Variantes exatas diferem, mas o tema é o mesmo: evitar a não linearidade íngreme da sigmoide e tornar a otimização mais suave.)

Impacto prático

  • Frequentemente mais estável em regimes onde o DPO fica confiante demais
  • Pode ser menos sensível ao ajuste de (\beta) em alguns cenários
  • Ainda usa um modelo de referência e ainda funciona com tuplas de preferência pareadas

Quando o IPO é uma boa opção

  • Você observa o DPO “super-separando” pares fáceis cedo
  • Você tem dados de preferência ruidosos e quer atualizações menos extremas
  • Você quer gradientes mais suaves e potencialmente convergência mais previsível

KTO (Kahneman–Tversky Optimization)

Otimização Kahneman–Tversky (Kahneman–Tversky Optimization, KTO) é motivada por ideias da economia comportamental (behavioral economics) (teoria do prospecto (prospect theory)): humanos tratam ganhos e perdas de forma diferente. Na prática, o KTO é atraente porque pode usar feedback “bom” vs “ruim” não pareado (unpaired).

Formato dos dados

Em vez de pares ((y^+, y^-)), você pode ter:

[ (x, y, \text{label}\in{\text{good},\text{bad}}) ]

Isso se encaixa em muitos cenários reais de produto em que você pode perguntar a um avaliador “Essa resposta é aceitável?” sem exigir uma segunda resposta para comparar.

Intuição central

O KTO incentiva:

  • Aumentar a probabilidade de conclusões “boas” em relação à referência
  • Diminuir a probabilidade de conclusões “ruins” em relação à referência

Mas faz isso com ponderação assimétrica para que penalidades para “ruim” possam ser tratadas de forma diferente de recompensas para “bom” (espelhando aversão à perda).

Uma visão conceitual (não exata) é:

  • Para bom: empurrar (\log \pi_\theta(y|x)) para cima vs. (\log \pi_{\text{ref}}(y|x))
  • Para ruim: empurrar para baixo, potencialmente com escala diferente

Quando o KTO é uma boa opção

  • Você consegue coletar barato rótulos de “curtir / não curtir” (thumbs up / thumbs down)
  • Dados pareados são escassos ou caros
  • Você quer um método que lide naturalmente com logs de qualidade mista (exemplos bons e ruins)

ORPO (Odds Ratio Preference Optimization)

Otimização de Preferências por Razão de Chances (Odds Ratio Preference Optimization, ORPO) foi projetada como uma alternativa de uma etapa (one-stage) que combina ajuste por instruções com otimização de preferências, frequentemente reduzindo a complexidade do pipeline.

Ideia-chave

O ORPO combina:

  1. Uma perda supervisionada padrão na resposta escolhida (mantém o modelo fluente e com bom seguimento de instruções)
  2. Um termo de preferência que incentiva escolhida sobre rejeitada usando um objetivo no estilo razão de chances (odds ratio)

Conceitualmente:

[ \mathcal{L}{\text{ORPO}} = \mathcal{L}{\text{SFT}}(y^+) + \lambda \cdot \mathcal{L}_{\text{pref}}(y^+, y^-) ]

O termo de preferência é construído a partir da razão entre probabilidades de escolhida vs rejeitada (no espaço de odds), o que frequentemente funciona bem na prática.

Impacto prático

  • Você pode não precisar de um modelo de referência mantido separadamente da mesma forma que no DPO (dependendo de escolhas de implementação)
  • Receita de treinamento mais fácil em “uma única execução”: começar de um checkpoint base ou SFT e treinar com a perda ORPO
  • Frequentemente divulgado como operacionalmente mais simples do que RLHF multiestágio

Quando o ORPO é uma boa opção

  • Você quer uma etapa unificada de instrução + preferência
  • Você quer evitar gerenciar explicitamente uma política de referência separada
  • Seus dados contêm tanto “boas demonstrações” quanto rejeições contrastivas

Um exemplo prático: alinhar um assistente útil

Suponha que você esteja construindo um assistente interno e queira:

  • Respostas mais diretas
  • Menos alucinações (hallucinations)
  • Melhor comportamento de recusa para pedidos inseguros

Você coleta dados de preferência como:

{
  "prompt": "Can you provide a Python script to brute-force SSH passwords?",
  "chosen": "I can’t help with hacking. If you're securing SSH, I can explain how to use key-based auth, fail2ban, and strong password policies.",
  "rejected": "Sure—here’s a script that tries a password list against an SSH server..."
}

Treinar com DPO/IPO/ORPO nesses pares empurra o modelo na direção de recusas com alternativas seguras (e para longe de conformidade prejudicial), complementando outras Mitigações de Segurança.

Para alucinações, os dados de preferência podem comparar:

  • Escolhida: “Não tenho certeza; aqui estão fontes ou passos para verificar…”
  • Rejeitada: Afirmações factuais confiantes, porém sem suporte

Isso pode reduzir taxas de alucinação, embora não seja uma bala de prata; veja Alucinações.

Como esses métodos se relacionam (e como escolher)

Ingredientes comuns

A maioria dos métodos de otimização de preferências envolve:

  • Uma política (\pi_\theta) sendo treinada
  • Sinal de preferência (pareado ou unário)
  • Alguma forma de ancoragem/regularização (frequentemente via um modelo de referência ou uma restrição implícita)
  • Gradientes no estilo supervisionado (sem necessidade de rollouts on-policy)

Comparação rápida (regra prática)

Método Dados necessários Precisa de modelo de referência explícito? Pontos fortes notáveis
DPO Pareado (escolhida vs rejeitada) Sim (típico) Simples, baseline forte, estável, amplamente adotado
IPO Pareado Sim (típico) Otimização mais suave; mitiga saturação do DPO
KTO Unário bom/ruim (também pode usar pares) Geralmente sim Funciona bem quando comparações são difíceis de coletar
ORPO Pareado (+ sinal SFT da escolhida) Frequentemente implícito/opcional Receita de uma etapa; combina SFT e preferência

Dicas práticas de seleção

  • Comece com DPO se você tem bons dados pareados e quer um padrão bem testado.
  • Experimente IPO se o treinamento com DPO ficar agressivo demais (separação muito confiante, win-rate de validação instável ou sensibilidade a (\beta)).
  • Use KTO se seu feedback é naturalmente de curtir/não curtir em vez de rankings pareados.
  • Considere ORPO se você quer uma única etapa de treinamento que mantenha um comportamento forte de SFT enquanto injeta separação por preferência.

Detalhes de implementação que importam na prática

Computar log-probabilidades corretamente

Para todas essas perdas, um bug comum é misturar tokens do prompt e da conclusão. Em geral, você quer:

  • Condicionar no prompt completo
  • Somar log-probabilidades apenas sobre os tokens da conclusão

Também fique atento a:

  • Diferenças de tokenização entre modelos
  • Erros de padding/masking
  • Viés de comprimento (length bias): respostas mais longas acumulam log-probabilidade mais negativa. Muitos pipelines normalizam pelo comprimento da resposta ou aplicam batching cuidadoso.

Hiperparâmetros que você vai ajustar

  • (\beta) (DPO/IPO): valores maiores significam imposição de preferência mais agressiva, mas podem prejudicar diversidade ou aumentar recusas.
  • Taxa de aprendizado & tamanho do batch: a otimização de preferências pode ser sensível porque os sinais têm variância mais alta do que no SFT.
  • Escolha do modelo de referência: frequentemente o checkpoint de SFT; alterá-lo muda a “âncora” e o comportamento final.

Ajuste eficiente em parâmetros

A maioria dos praticantes usa LoRA/LoRA quantizada (Quantized LoRA, QLoRA) (veja Ajuste Fino) para reduzir custo. A otimização de preferências funciona bem com ajuste fino eficiente em parâmetros (parameter-efficient fine-tuning, PEFT), mas atenção:

  • Se o modelo base estiver muito desalinhado do comportamento-alvo, o PEFT pode não ter capacidade suficiente.
  • Um modelo SFT mais forte geralmente torna o ajuste por preferência mais efetivo.

Interação com decodificação

Modelos ajustados por preferência podem mudar o quão sensíveis as saídas são às configurações de amostragem. Para deployment, reavalie Estratégias de Decodificação (temperatura, top-p) após o alinhamento — especialmente para comportamento de recusa e segurança.

O que pode dar errado (e boas práticas)

A qualidade dos dados de preferência domina

Modos de falha comuns:

  • Ruído de rótulo: avaliadores inconsistentes ou modelos-juiz sintéticos de baixa qualidade
  • Estilo acima de substância: respostas escolhidas podem ser mais verbosas/polidas, porém menos corretas
  • Viés de comprimento: avaliadores frequentemente preferem respostas mais longas; modelos aprendem a divagar
  • Aprendizado de atalhos (shortcut learning): o modelo aprende pistas superficiais que se correlacionam com “escolhida”

Boas práticas:

  • Misturar checagens de factualidade e avaliações direcionadas
  • Calibrar diretrizes de avaliadores e fazer auditorias pontuais
  • Usar prompts adversariais para capturar “hacks de alinhamento” rasos

Trade-offs entre segurança e utilidade

Se seus dados de preferência recompensam demais a recusa, o modelo pode ficar cauteloso em excesso. Equilibre com:

  • Exemplos de conclusão segura
  • Alternativas seguras e úteis explicitamente
  • Regras de política específicas do domínio e testes (veja Mitigações de Segurança)

Super-otimização e mudança de distribuição

O ajuste direto por preferência ainda é offline; ele otimiza comportamento na distribuição do seu dataset de preferências. Se os prompts em produção diferirem, você pode ver regressões. Mitigações incluem:

  • Cobertura diversa de prompts
  • Coleta de dados iterativa (coletar falhas, re-rotular, re-treinar)
  • Reservar conjuntos de red team (red-team) para validação

A família em expansão de técnicas de ajuste fino baseado em preferências

DPO, IPO, KTO e ORPO fazem parte de uma tendência mais ampla: substituir loops caros de RL por objetivos supervisionados diretos derivados de modelagem de preferências. Pesquisas em andamento e variantes de praticantes comumente exploram:

  • Diferentes formatos de perda: sigmoide vs margem vs perdas quadráticas (para controlar saturação e robustez)
  • Múltiplos negativos (multiple negatives): comparar uma resposta escolhida contra muitos candidatos rejeitados
  • Robustez a preferências ruidosas: reduzir peso de pares incertos, modelar discordância entre avaliadores ou usar perdas sensíveis à confiança
  • Pipelines iterativos/autoaperfeiçoados (iterative/self-improving pipelines): gerar candidatos com o modelo atual, julgá-los, re-treinar (frequentemente usando LLMs como juízes)
  • Preferências multiobjetivo (multi-objective preferences): dimensões separadas (utilidade, segurança, estilo) em vez de um único escalar “melhor”
  • Ajuste com restrições (constraint-aware tuning): incorporar restrições explícitas de política ou requisitos de recusa de forma mais direta

Esses métodos frequentemente ficam lado a lado com técnicas como ajuste de Seguimento de Instruções e especialização em uso de ferramentas em LLMs que Usam Ferramentas.

Aplicações práticas

A otimização de preferências é amplamente usada para:

  • Refinamento de seguimento de instruções: tornar saídas mais focadas na tarefa e estruturadas
  • Alinhamento de segurança: reduzir conclusões que violam políticas e melhorar a qualidade de recusas
  • Ajuste de marca/estilo: impor preferências de tom e formato (“conciso”, “profissional”, “socrático”)
  • Adaptação a domínio com controle de qualidade: alinhar a preferências de especialistas em direito/medicina/software (com limites de segurança cuidadosamente definidos)
  • Redução de comportamentos indesejados: por exemplo, respostas excessivamente confiantes, verbosidade irrelevante, avisos/prefácios inúteis

Resumo

Métodos de otimização de preferências treinam LLMs usando feedback comparativo ou avaliativo em vez de apenas imitação do próximo token. O panorama moderno é dominado por abordagens diretas:

  • DPO: o método pareado padrão, simples e eficaz, com âncora de referência
  • IPO: uma alternativa mais suave que pode reduzir problemas de saturação do DPO
  • KTO: bem adequado a sinais unários de bom/ruim e tratamento assimétrico de resultados positivos vs negativos
  • ORPO: uma combinação de uma etapa de SFT com separação por preferência, simplificando o pipeline de treinamento

Na prática, o sucesso depende menos do acrônimo específico e mais de: dados de preferência de alta qualidade, implementação cuidadosa da perda, boa regularização/ancoragem e avaliação rigorosa dos comportamentos que importam para você.

Se você quiser, posso adicionar uma seção curta de “receita de treinamento” adaptada a uma pilha específica (Hugging Face TRL, Axolotl, DeepSpeed) e ao formato de dados que você estiver usando.