Como funciona

O DPO simplifica o RLHF. Em vez de treinar um modelo de recompensa e depois otimizar com PPO, o DPO usa pares (resposta preferida, resposta rejeitada) e ajusta o modelo diretamente para aumentar a probabilidade da preferida.

A função de perda compara as probabilidades relativas das duas respostas, penalizando quando o modelo favorece a rejeitada. O parâmetro beta controla a força da penalização: valores maiores mantêm o modelo mais próximo do original.

O DPO elimina a necessidade de um modelo de recompensa separado e de RL complexo, tornando o alinhamento mais estável e barato.

Exemplo prático

Dado o prompt "Explique recursão", com resposta A (clara, com exemplo) preferida sobre B (confusa), o DPO ajusta o modelo para gerar A com mais frequência.

Python
loss = -log(sigmoid(beta * (logp_preferred - logp_rejected)))

Os dados de preferência podem vir de anotadores humanos ou ser gerados sinteticamente por um modelo mais forte avaliando respostas de um modelo menor.

Para que serve

Alinhar modelos a preferências humanas de forma mais estável e barata que RLHF. É usado em modelos abertos como Zephyr e em ajustes finos de assistentes.

O DPO é especialmente útil quando se tem dados de preferência mas não recursos para treinar modelos de recompensa e rodar PPO.