ENTRENAMIENTO

DPO

Algoritmo de alineamiento que optimiza un modelo directamente sobre preferencias humanas (respuesta A es mejor que B) sin necesidad de entrenar un reward model intermedio.

Nivel · avanzado6 min de lecturaActualizado 24 may 2026
También conocido como: Direct Preference Optimization, Optimización directa de preferencias

Definición

DPO (Direct Preference Optimization) es un algoritmo de alineamiento de modelos de lenguaje introducido por Rafailov et al. (Stanford) en 2023. Permite ajustar un LLM a las preferencias humanas —que respuesta A es mejor que B— sin necesidad de entrenar un reward model intermedio ni de usar reinforcement learning explícito.

Es la alternativa moderna y simplificada al RLHF clásico (SFT + reward model + PPO). En lugar de tres modelos y un loop de RL complejo, DPO logra resultados comparables con un único loop de fine-tuning supervisado sobre un dataset de pares (preferido, rechazado).

Desde 2024 DPO y sus variantes han desplazado a PPO en muchos pipelines de alineamiento por su simplicidad y estabilidad. Modelos como Llama 3.1, Mistral Large, Qwen 2.5, DeepSeek-V3 usan DPO o variantes para gran parte de su post-training.

El problema que resuelve

El RLHF clásico (InstructGPT, ChatGPT inicial) tiene tres fases costosas:

  1. SFT: fine-tuning con respuestas humanas ideales.
  2. Reward Model: entrenar un modelo separado que prediga qué respuesta preferirá un humano.
  3. PPO (RL): optimizar el modelo SFT para maximizar la recompensa del reward model.

Problemas operativos:

  • Tres modelos en memoria simultáneamente: el policy (que se entrena), una copia frozen (reference), y el reward model.
  • PPO es notoriamente inestable: pequeños cambios en hiperparámetros producen colapso del modelo.
  • Riesgo de reward hacking: el modelo encuentra trucos que el reward model puntúa alto pero que humanos no querrían.
  • Pipeline complejo, difícil de debuggear y reproducir.

DPO elimina el reward model y el loop de RL, usando una formulación matemática elegante.

Cómo funciona

La idea matemática: hay una relación cerrada entre la política óptima de un problema de RL con recompensa basada en preferencias y la distribución del modelo. DPO usa esta relación para optimizar directamente sobre las preferencias sin entrenar el reward model explícitamente.

La función de pérdida DPO es básicamente:

loss = -log σ(β · [log π_θ(y_w|x)/π_ref(y_w|x) - log π_θ(y_l|x)/π_ref(y_l|x)])

Donde:

  • y_w es la respuesta preferida (winner).
  • y_l es la respuesta rechazada (loser).
  • π_θ es el modelo que se entrena.
  • π_ref es el modelo de referencia (típicamente el SFT inicial, frozen).
  • β controla cuánto se aleja el modelo del referencia (típicamente 0.1-0.5).

Conceptualmente: el modelo aprende a aumentar la probabilidad de las respuestas preferidas y disminuir la de las rechazadas, manteniéndose cerca del modelo de referencia.

El pipeline DPO completo:

  1. SFT (igual que en RLHF): fine-tuning con respuestas ideales para tener una base decente.
  2. Dataset de preferencias: pares (prompt, respuesta_preferida, respuesta_rechazada) generados por humanos o por un modelo de IA fuerte.
  3. DPO training: optimización directa sobre la pérdida anterior. Un solo loop, dos modelos en memoria (policy + reference frozen).

Ejemplo práctico

Imaginemos entrenar un asistente de soporte al cliente para IMDICA que sea empático y resolutivo.

  1. SFT inicial: 500 ejemplos curados de conversaciones tipo. El modelo aprende a responder consultas industriales.

  2. Dataset de preferencias: 2.000 prompts → cada uno con 2 respuestas generadas por el modelo SFT, comparadas por humanos:

    Prompt: "Mi pedido lleva 5 días sin llegar"
    A: "Por la información que me das, tu pedido podría haberse perdido. Te recomendamos esperar 2 días más antes de abrir una reclamación con la empresa de transporte..."
    B: "Lamento mucho la espera, Antonio. Reviso tu pedido ahora mismo. ¿Me das el número de referencia para localizarlo?"
    Preferido: B (empático + acción + petición concreta)
    
  3. DPO: una sola fase de entrenamiento ~2-4 horas en una H100, dataset de 2.000 pares.

  4. Resultado: modelo que tiende sistemáticamente a respuestas empáticas y resolutivas, sin sermones largos.

Si hubiéramos hecho RLHF clásico: ~5× más tiempo, más infraestructura, mayor riesgo de fallos. DPO da un resultado comparable con esfuerzo mucho menor.

Variantes y evoluciones

DPO inspiró una familia de métodos relacionados:

  • IPO (Identity Preference Optimization): variante con loss diferente, más robusta a sobreajuste.
  • ORPO (Odds Ratio Preference Optimization): combina SFT y DPO en una sola fase. Pipeline aún más simple.
  • KTO (Kahneman-Tversky Optimization): solo requiere etiquetas binarias (respuesta buena/mala), no comparaciones por pares.
  • SimPO: elimina la necesidad del modelo de referencia. Menos memoria, similar calidad.
  • CPO (Contrastive Preference Optimization): para traducción y tareas de generación.
  • GRPO (Group Relative Policy Optimization): usado por DeepSeek-R1 para razonamiento. Compara grupos de respuestas en lugar de pares.

A 2026 hay bastante consenso en que DPO y variantes son la opción default salvo casos muy específicos donde PPO o GRPO aportan algo concreto.

DPO vs RLHF clásico

AspectoRLHF (PPO)DPO
Modelos en memoria3 (policy, ref, reward)2 (policy, ref)
FasesSFT + RM + PPOSFT + DPO
Estabilidad de entrenamientoFrágilEstable
Calidad finalExcelente con buen tuningComparable o ligeramente menor
Complejidad de pipelineAltaBaja
Dataset requeridoPreferenciasPreferencias (igual)
Reward hackingPosibleReducido
Compute necesarioMásMenos

La conclusión actual: para la mayoría de casos DPO es la elección sensata. Solo se justifica PPO cuando hay reward signal muy específico que se quiere maximizar (juegos, recompensas custom densas, RL on-policy).

Errores comunes al hablar de DPO

  • "DPO elimina la necesidad de humanos": no. Sigue necesitando datasets de preferencias generados por humanos (o por un LLM fuerte, RLAIF).
  • Confundir DPO con SFT: SFT usa respuestas absolutas; DPO usa comparaciones por pares.
  • Pensar que "es magia": solo funciona bien con un modelo de referencia adecuado y dataset de preferencias de calidad.
  • Subestimar la importancia de β: β controla cuánto se aleja el modelo del SFT. Demasiado alto → modelo cambia poco. Demasiado bajo → modelo se desvía y degrada.
  • Saltarse la fase SFT: DPO sin SFT inicial suele dar resultados pobres. SFT establece la base; DPO la afina.
  • Esperar que añada conocimiento factual: DPO afina preferencias, no enseña hechos nuevos.

Cuándo usar DPO

Sí, usa DPO cuando:

  • Necesitas alinear un modelo a preferencias específicas (tono, estilo, comportamiento).
  • Tienes (o puedes generar) un dataset de comparaciones por pares.
  • Quieres pipeline simple sin la complejidad de RL.
  • Eres equipo pequeño-mediano sin recursos para mantener PPO.

Es menos óptimo si:

  • Necesitas recompensas densas y específicas que el modelo debe maximizar (entonces PPO o GRPO).
  • Tu objetivo es razonamiento puro avanzado (DeepSeek-R1 usa GRPO).
  • No tienes preferencias claras de qué quieres optimizar.

Referencias

Tagsiaentrenamientoalineamientopreferencias