Avançado
DPO: pulando o reward model
A Direct Preference Optimization transforma pares de preferência num objetivo parecido com classificação sobre log-probabilidades de policy e referência — e no Qwen3.8-27B o segmento de thinking é o que faz a montagem funcionar ou fracassar.
Atualizada em
01 · Conceito
Conceito
A lição 6.5 deixou você segurando quatro modelos ao mesmo tempo e uma policy de 27B de parâmetros cujo estado de otimizador sozinho chega a centenas de gigabytes. A maioria dos times não consegue rodar isso, e muitos não precisam. A Direct Preference Optimization (DPO) parte de uma relação matemática entre uma policy ótima regularizada por KL e sua recompensa, e então a rearranja para que a policy possa ser treinada diretamente em pares de preferência — sem reward model, sem workers de rollout, sem cabeça de valor. O que sobra é um forward pass e uma loss.
Cada exemplo ainda contém um prompt , uma resposta preferida e uma resposta rejeitada . A DPO usa uma policy treinável e uma referência congelada , soma as log-probabilidades dos tokens de cada resposta condicionada ao prompt, e compara quanto a policy favorece cada resposta a mais do que a referência já favorecia:
Agora torne isso concreto no modelo deste curso. Você quer adaptar o estilo do instruct mode do Qwen3.8-27B para um produto de suporte, e tem 8.000 pares de preferência. Montar o treino significa responder a quatro perguntas, nesta ordem.
Primeira: de onde vem o modelo de referência? Carregar ingenuamente dois checkpoints de 27B em bf16 não é um plano para uma placa. Combine DPO com LoRA da lição 6.3: treine adapters sobre um backbone de poucos bits e obtenha a log-probability de referência rodando o mesmo backbone com os adapters desativados. Isso remove a segunda cópia dos pesos, mas não prova encaixe numa GPU fixa; ativações, metadados de quantization, comprimento da sequência, micro-batch e buffers do backend ainda determinam a residência.
Segunda: que modo você está treinando? O Qwen3.8-27B vem com thinking mode ligado por padrão e instruct mode atrás de enable_thinking em False, e os dois renderizam a mesma conversa em sequências de tokens diferentes. Log-probabilidades são calculadas sobre tokens, então um par coletado num modo e pontuado no outro não é meramente ruidoso — é outro objetivo. Escolha um modo, renderize tanto a resposta escolhida quanto a rejeitada por aquele exato ramo do template, e registre qual ramo o dataset usou.
Terceira: quais tokens entram na soma? Se você está treinando thinking mode e sua resposta escolhida carrega um traço de raciocínio de 900 tokens enquanto a rejeitada carrega 200, a diferença de log-probabilidade somada é dominada pelo comprimento do traço antes de a qualidade ter voz. Ou mascare o segmento de thinking da loss e pontue só a resposta final, ou controle deliberadamente o comprimento dos seus pares. Não deixe isso ao acaso.
Quarta: como os candidatos foram amostrados? Registre a configuração completa. Para reproduzir as recomendações do model card, thinking usa temperature 1.0, top_p 0.95, top_k 20, min_p 0.0, presence_penalty 0.0 e repetition_penalty 1.0; instruct usa 0.7, 0.80, 20, 0.0, 1.5 e 1.0. O operador do deployment pode escolher outros valores, então amostras fora da recomendação não são intrinsecamente inválidas nem respostas que usuários jamais verão. O que importa é a distribuição de candidatos cobrir o comportamento que você pretende implantar e essa escolha ficar registrada.
Então passe um exemplo pela aritmética. Tome . Suponha que a resposta escolhida pontue sob a policy e sob a referência, um ganho relativo de ; e que a rejeitada pontue sob a policy e sob a referência, uma perda relativa de . Então , e a loss é . Repare no que moveu o número: não quão provável cada resposta é, mas quanto a verossimilhança de cada uma se deslocou em relação à referência.
Essa distinção prepara o desvio clássico. Times logam a log-probabilidade bruta das respostas escolhidas sob a policy, veem-na cair durante o treino, e concluem que o treino está quebrado — o modelo está ficando pior em produzir as respostas que dissemos preferir. Olhe as duas séries e o pânico se dissolve. É perfeitamente normal a log-probabilidade da escolhida escorregar de para enquanto a da rejeitada desaba de para : a margem passou de 8 para 16, que é exatamente o que o objetivo otimiza. A DPO nunca prometeu elevar a verossimilhança absoluta da resposta escolhida. Ela prometeu tornar a resposta escolhida mais característica da nova policy do que a rejeitada é. Se você quer um piso de verossimilhança absoluta, precisa também de um termo supervisionado — que é precisamente o projeto que o ORPO adota, na lição 6.7. O que você deveria acompanhar é a margem, a acurácia pareada, o comprimento médio das respostas e a divergência tipo KL em relação à referência; quando a log-probabilidade da escolhida despenca e o comprimento desaba junto, aí sim o treino está degenerando.
Remover o reward model não remove as preferências, e toda fraqueza que a lição 6.4 catalogou sobrevive intacta: discordância entre anotadores, viés de comprimento, cobertura rala de prompts, policies de candidatos desatualizadas, exemplos mal rotulados. A DPO também pode punir uma resposta rejeitada que continha material útil, porque o rótulo se aplica à sequência inteira e nunca identifica o trecho que falhou. E como a DPO padrão é offline, ela não coleta julgamentos novos conforme a policy se move; se o treino empurra o modelo para comportamento que o dataset nunca cobriu, não existe feedback nenhum lá. Variantes iterativas regeneram candidatos e coletam pares novos, o que restaura um laço de produção de dados mesmo evitando a maquinaria do PPO.
Os detalhes mecânicos merecem o mesmo cuidado que a matemática. O padding precisa ser mascarado. Os tokens de prompt precisam ser excluídos de forma consistente dos dois lados. O truncamento nunca pode apagar a evidência que determinou o rótulo — uma resposta rejeitada cortada antes do seu erro é uma resposta rejeitada sem motivo visível para ter sido rejeitada. E as convenções de diferem entre bibliotecas, então um valor copiado da config de outra pessoa pode significar outra coisa na sua.
O modelo durável é modelagem pareada de policy. A DPO torna a resposta desejada mais característica da nova policy em relação a uma linha de base fixa, e a resposta rejeitada menos. Ela troca um jurado escalar aprendido e um otimizador online por uma loss offline elegante — enquanto os julgamentos humanos, a escolha da referência, o ramo do template e a avaliação continuam sendo a especificação de verdade.
02 · Analogia
Analogia
Em vez de contratar um crítico, ensinar o crítico a atribuir notas e depois treinar um chef para perseguir essas notas, uma escola de culinária compara dois pratos diretamente. Ela pede ao chef que torne o prato preferido mais característico do seu novo estilo do que do seu livro de receitas antigo, empurrando o prato rejeitado no sentido oposto. A DPO remove o crítico separado, mas os rótulos dos pares e o livro antigo continuam determinando o que é aprendido.
03 · Explique de volta
Explique de volta
Explique que quantidades a DPO compara para uma resposta escolhida e uma rejeitada, e descreva um risco específico do Qwen3.8-27B ao montar um treino de DPO.
Comparar com uma resposta-modelo
A DPO compara a log-probabilidade de cada resposta sob a policy treinável com a log-probabilidade da mesma resposta sob uma policy de referência congelada, e uma loss logística amplia a margem relativa da escolhida sobre a rejeitada. No Qwen3.8-27B o risco é o segmento de thinking: thinking mode é o padrão, então a mesma conversa é renderizada de formas diferentes conforme enable_thinking esteja em False ou não, e as duas renderizações produzem sequências de tokens e log-probabilidades diferentes. Se os pares foram coletados num modo e pontuados no outro, ou se as respostas escolhida e rejeitada carregam traços de thinking de comprimentos muito diferentes, as log-probabilidades somadas medem comprimento de traço em vez de qualidade da resposta.
04 · Teste seu entendimento
Teste seu entendimento
Conclua o teach-back e acerte o quiz para finalizar a aula.
◎ · Marcador de evidência
Fontes
- Rafael Rafailov et al. (2023). Direct Preference Optimization: Your Language Model is Secretly a Reward Model.
- Qwen Team (2026). Qwen3.8-27B Model Card.