Phase 18 - Lesson 03

A Família de Otimização Direta de Preferências (DPO)

Rafailov et al. (2023) mostraram que o ótimo do RLHF possui uma forma fechada em termos dos dados de preferência, permitindo pular o modelo de recompensa explícito e otimizar a política diretamente. Esse insight deu origem a uma família — IPO, KTO, SimPO, ORPO, BPO — cada uma corrigindo um modo de falha do DPO. Em 2026, os algoritmos de alinhamento direto realizam mais execuções de pós-treinamento de modelos de fronteira do que o PPO. No entanto, a curva de superotimização da Lição 2 ainda se aplica: os DAAs não escapam de Goodhart, eles apenas mudam o local onde ela ataca.

Tipo: Learn Linguagens: Python (stdlib, comparador de perda de preferência com seis variantes) Pré-requisitos: Fase 18 · 01 (InstructGPT), Fase 18 · 02 (Roubo de recompensa), Fase 10 · 08 (Fundamentos de DPO) Tempo: ~75 minutos

Objetivos de Aprendizado

  • Derivar a forma fechada do DPO a partir do ótimo do RLHF com KL.
  • Apresentar o modo de falha de DPO que cada um dos algoritmos IPO, KTO, SimPO, ORPO e BPO corrige.
  • Distinguir a "lacuna de recompensa implícita" da "força da preferência" e explicar por que o mapeamento de identidade do IPO é importante.
  • Explicar por que Rafailov et al. (NeurIPS 2024) provam que os DAAs sofrem superotimização apesar de não possuírem um RM explícito.

O Problema

O objetivo do RLHF (Lição 1):

max_pi E_{x,y~pi} [ r(x, y) ] - beta * KL(pi || pi_ref)

possui um ótimo conhecido:

pi*(y|x) = (1/Z(x)) * pi_ref(y|x) * exp(r(x, y) / beta)

Portanto, a recompensa é definida implicitamente pela razão entre a política ótima e a de referência:

r(x, y) = beta * log(pi*(y|x) / pi_ref(y|x)) + beta * log Z(x)

Substitua isso na verossimilhança de preferência de Bradley-Terry e a função de partição Z(x) se cancela porque depende apenas de x. O que resta é uma perda apenas nos parâmetros da política — sem necessidade de modelo de recompensa. Esse é o DPO.

O problema: a derivação pressupõe que o ótimo seja alcançável, os dados de preferência estejam em distribuição e a política de referência seja o âncora real do modo. Nenhuma dessas suposições é perfeitamente válida. Cada membro da família corrige uma suposição violada diferente.

O Conceito

DPO (Rafailov et al., 2023)

L_DPO = -log sigmoid(
  beta * log(pi(y_w | x) / pi_ref(y_w | x))
  - beta * log(pi(y_l | x) / pi_ref(y_l | x))
)

O que pode dar errado:

  • A lacuna de recompensa implícita beta * (log(pi/pi_ref)_w - log(pi/pi_ref)_l) é ilimitada. Uma preferência minúscula pode produzir uma lacuna arbitrariamente grande.
  • A perda direciona as log-probabilities das respostas escolhidas e rejeitadas em direções opostas. Ela pode reduzir a log-prob absoluta da resposta escolhida desde que a rejeitada caia mais rápido. Este é o fenômeno da Resposta Escolhida Degradada (Degraded Chosen Response).
  • Preferências fora de distribuição (pares raros versus pares raros) produzem recompensas implícitas arbitrárias.

IPO (Azar et al., 2024)

A Otimização de Preferência por Identidade (Identity Preference Optimization) substitui o log-sigmoid por um mapeamento de identidade na probabilidade de preferência. A perda torna-se um erro quadrático em relação a um alvo limitado:

L_IPO = (log(pi(y_w | x) / pi_ref(y_w | x)) - log(pi(y_l | x) / pi_ref(y_l | x)) - 1/(2 beta))^2

A margem é limitada por 1/(2 beta). A força da preferência e a lacuna de recompensa implícita são proporcionais. Sem explosões.

KTO (Ethayarajh et al., 2024)

A Otimização Kahneman-Tversky (KTO) descarta totalmente a estrutura de pares. Dado um único resultado rotulado e um sinal binário de "desejável" ou "indesejável", ela mapeia para uma utilidade da teoria dos prospectos:

v(x, y) = sigma(beta * log(pi(y|x) / pi_ref(y|x)) - z_ref)

com pesos diferentes para ganhos e perdas (aversão à perda). Benefício: você pode usar dados não pareados, que são muito mais abundantes.

SimPO (Meng et al., 2024)

A Otimização Simples de Preferência (Simple Preference Optimization) alinha o sinal de treinamento com a geração. Remove completamente a política de referência e normaliza a log-verossimilhança pelo comprimento:

L_SimPO = -log sigmoid(
  (beta / |y_w|) * log pi(y_w | x)
  - (beta / |y_l|) * log pi(y_l | x)
  - gamma
)

com uma margem gamma para estabilização. A normalização de comprimento elimina o incentivo para explorar o modo de falha de viés de comprimento do DPO (comprimento de y_w maior gera uma lacuna de log-prob maior por construção).

ORPO (Hong et al., 2024)

A Otimização de Preferência por Odds-Ratio adiciona um termo de preferência à perda de log-verossimilhança negativa padrão do SFT:

L_ORPO = L_NLL(y_w) + lambda * L_OR
L_OR = -log sigmoid(log(odds(y_w) / odds(y_l)))

Sem política de referência — o termo de SFT funciona como o regularizador. Treine em uma única etapa a partir do modelo base até o modelo alinhado. Sem checkpoint de SFT separado.

BPO (submissão do ICLR 2026, OpenReview id=b97EwMUWu7)

Identifica o problema das Respostas Escolhidas Degradadas: o DPO preserva a classificação y_w > y_l, mas a log-prob absoluta de y_w pode despencar. O BPO adiciona uma correção de uma linha que penaliza reduções na resposta escolhida. Relatou +10.1% de acurácia no Llama-3.1-8B-Instruct em raciocínio matemático em relação ao DPO.

O resultado universal: DAAs ainda sofrem superotimização

Rafailov et al. "Scaling Laws for Reward Model Overoptimization in Direct Alignment Algorithms" (NeurIPS 2024) treinaram políticas com DPO, IPO e SLiC em múltiplos conjuntos de dados sob vários orçamentos de KL. As curvas de recompensa real (gold) versus KL apresentam o mesmo formato de pico e colapso de Gao et al. A recompensa implícita consulta amostras fora de distribuição durante o treinamento; a regularização KL não estabiliza isso.

Os DAAs não escapam de Goodhart. Eles apenas mudam a superfície onde ela ataca de "modelo de recompensa superotimizado" para "razão da política de referência superotimizada". A correção universal — melhores dados, ensembles, parada antecipada — se aplica a ambos.

Escolhendo entre eles (2026)

  • Se você tem dados de preferência pareados grandes: DPO com beta conservador, SimPO se o viés de comprimento for evidente.
  • Se você tem feedback binário não pareado: KTO.
  • Se você quer um fluxo de trabalho de etapa única a partir de um modelo base: ORPO.
  • Se você observar log-probs escolhidas degradadas nos logs do DPO: BPO.
  • Se as forças das preferências variarem amplamente e o DPO estiver saturando: IPO.

Cada laboratório executa todos os cinco em uma bateria de testes e escolhe o vencedor por tarefa. Não há razão para que o ótimo seja o mesmo para raciocínio matemático e segurança.

Use It

O arquivo code/main.py compara seis perdas (DPO, IPO, KTO, SimPO, ORPO, BPO) em um conjunto de dados de preferência fictício onde a força real da preferência varia por par. Cada perda é otimizada contra a mesma amostra de 500 pares com uma pequena política softmax. Plota a taxa de vitória final, o desvio da log-prob escolhida e a dispersão da recompensa implícita por método.

Ship It

Esta lição produz outputs/skill-preference-loss-selector.md. Dadas as estatísticas do conjunto de dados (pareado vs não pareado, força de preferência variável vs uniforme, distribuição de comprimento) e um alvo (etapa única ou SFT seguido de preferência), recomenda uma perda de preferência e relata o modo de falha contra o qual ela protege.

Exercícios

  1. Execute code/main.py. Relate a queda final da log-prob escolhida para o DPO e BPO. O BPO deve reter uma probabilidade absoluta escolhida mais alta — verifique isso.

  2. Modifique os dados de preferência para que todos os pares tenham a mesma força. Qual dos seis métodos é o mais robusto? Qual deles degrada? Explique a vantagem do IPO nesse caso.

  3. Faça com que as respostas rejeitadas sejam, em média, 2 vezes mais longas do que as escolhidas. Sem alterar mais nada, mostre numericamente a exploração de comprimento do DPO e a correção do SimPO.

  4. Rafailov et al. (NeurIPS 2024) afirmam que os DAAs sofrem superotimização. Reproduza uma versão de ponto único: plote a divergência KL de escolhida-menos-rejeitada e observe a superotimização no DPO com um beta alto.

  5. Leia o resumo do artigo do BPO (OpenReview b97EwMUWu7). Escreva a correção de uma linha que o BPO adiciona ao DPO. Confirme com a implementação em code/main.py.

Termos-Chave

Termo O que dizem O que realmente significa
DPO "RLHF sem um modelo de recompensa" Perda derivada do ótimo de RLHF em formato fechado; apenas parâmetros de política
Recompensa implícita "a log-razão" `beta * log(pi(y
IPO "DPO limitado" Substitui o log-sigmoid pela identidade; lacuna de recompensa implícita limitada por 1/(2 beta)
KTO "DPO não pareado" Utilidade da teoria dos prospectos sobre rótulos únicos com aversão à perda
SimPO "DPO livre de referência" Log-verossimilhança normalizada pelo comprimento + margem; sem política de referência
ORPO "DPO de etapa única" NLL + termo de preferência de odds-ratio; treina a partir do modelo base em uma única passagem
BPO "DPO que preserva a escolhida" DPO mais uma penalidade por diminuir a log-prob absoluta da resposta escolhida
Escolhida degradada "a escolhida cai" DPO diminui a log-prob escolhida desde que a rejeitada caia mais rápido
DAA "algoritmo de alinhamento direto" Qualquer método de perda de preferência que pula um RM explícito

Leituras Recomendadas

0 lifetime access. Curriculum based on AI Engineering from Scratch by Rohit Ghumare (MIT, used under attribution).