¿Por Qué SFT Solo No Puede Producir Modelos Alineados?

Un modelo que ha sido pre-entrenado y luego ajustado con SFT puede seguir instrucciones, responder preguntas y producir texto fluido. Pero seguir instrucciones no es lo mismo que estar alineado (el modelo aún puede generar respuestas que son dañinas, deshonestas o inútiles), porque SFT solo le enseña a imitar el estilo y la estructura de las demostraciones, no a internalizar las cualidades que hacen buena una respuesta. Si los datos de entrenamiento contienen una respuesta sesgada o sutilmente incorrecta, el modelo la reproduce fielmente. Si hay una respuesta dañina que el modelo puede producir interpolando entre ejemplos de entrenamiento, SFT no proporciona ningún mecanismo para penalizarla a menos que ese patrón exacto haya sido explícitamente excluido de los datos.

Establecimos en el primer artículo que RL ofrece un camino a seguir: dejar que el modelo genere libremente y puntuar la respuesta. Pero puntuar con RL requiere una señal de recompensa, y la recompensa que en última instancia nos importa es el juicio humano (si una persona consideraría la respuesta útil, honesta e inofensiva). Obviamente no podemos tener a un humano calificando cada respuesta generada durante el entrenamiento (una sola ejecución de PPO podría producir millones de respuestas), así que necesitamos un proxy: un modelo entrenado para predecir lo que los humanos preferirían. Ese proxy es el reward model .

Esta idea de aprender una función de recompensa a partir de retroalimentación humana y luego optimizar una policy contra ella fue formalizada para modelos de lenguaje por Christiano et al. (2017) y posteriormente escalada a LLMs que siguen instrucciones por Ouyang et al. (2022) en el artículo de InstructGPT. El pipeline de tres pasos que introdujeron (SFT, reward modeling, PPO) sigue siendo la columna vertebral de la mayoría del trabajo de alineamiento hoy en día, incluso mientras métodos más nuevos como DPO han comenzado a comprimir o reemplazar partes del mismo.

💡 El alineamiento a menudo se enmarca a través de los criterios "HHH": helpful (útil — responde la pregunta, sigue la instrucción), honest (honesto — no fabrica hechos, expresa incertidumbre cuando es apropiado) y harmless (inofensivo — rechaza solicitudes peligrosas, evita sesgos). Estas son las cualidades que el reward model está entrenado para reconocer.

¿Cómo Entrenamos un Modelo para Predecir Preferencias Humanas?

El reward model se entrena con datos de comparación. A los anotadores humanos se les muestra un prompt y dos respuestas candidatas, y ellos indican cuál respuesta prefieren. Esto es significativamente más fácil que pedir a los anotadores que escriban respuestas ideales desde cero (que es lo que requiere la recolección de datos de SFT) o que asignen puntuaciones absolutas de calidad en una escala numérica (lo cual tiende a ser ruidoso e inconsistente entre anotadores). Los juicios de preferencia binaria son más rápidos, más baratos y más confiables.

Dado un conjunto de datos de tales comparaciones (tripletas $(x, y_w, y_l)$ donde $x$ es el prompt, $y_w$ es la respuesta preferida ("ganadora") y $y_l$ es la respuesta rechazada ("perdedora")), entrenamos un reward model $r_\theta$ para asignar puntuaciones escalares de modo que las respuestas preferidas obtengan puntuaciones más altas. El objetivo de entrenamiento proviene del modelo de Bradley-Terry de preferencias por pares (Bradley & Terry, 1952) :

$$P(y_w \succ y_l \mid x) = \sigma\big(r_\theta(x, y_w) - r_\theta(x, y_l)\big)$$

Aquí $\sigma$ es la función sigmoide $\sigma(z) = 1/(1 + e^{-z})$. Cuando $r_\theta(x, y_w)$ es mucho mayor que $r_\theta(x, y_l)$, la diferencia es un número positivo grande, $\sigma$ produce un valor cercano a $1$, y tenemos confianza en que $y_w$ es preferida, lo cual coincide con la etiqueta. Cuando las dos puntuaciones son cercanas, $\sigma$ produce algo cerca de $0.5$, representando incertidumbre genuina sobre la preferencia. Cuando $r_\theta(x, y_l)$ es mayor (el modelo los clasifica incorrectamente), $\sigma$ produce un valor cercano a $0$, y la pérdida penaliza esto fuertemente.

La pérdida de entrenamiento es la log-verosimilitud negativa de las preferencias observadas:

$$\mathcal{L}_{\text{RM}}(\theta) = -\mathbb{E}_{(x, y_w, y_l)} \left[ \log \sigma\big(r_\theta(x, y_w) - r_\theta(x, y_l)\big) \right]$$

Esto es simplemente cross-entropy binaria donde la "clase positiva" es siempre la respuesta preferida. Para ver los casos extremos: cuando el modelo ya asigna una puntuación mucho mayor a $y_w$, $\sigma$ está cerca de $1$, $\log(\sigma)$ está cerca de $0$, y la contribución a la pérdida es pequeña (correctamente confiado, poco que aprender). Cuando el modelo se equivoca en el ranking, $\sigma$ está cerca de $0$, $\log(\sigma)$ es un número negativo grande, y la contribución a la pérdida es grande (señal de gradiente fuerte para corregir el ranking).

En la práctica, el reward model típicamente se inicializa desde el modelo SFT mismo (o desde el mismo checkpoint pre-entrenado), con la cabeza de modelado de lenguaje reemplazada por una cabeza de salida escalar. Esto le da al reward model una representación fuerte del lenguaje de partida (ya entiende cómo luce el texto coherente y bien estructurado) y solo necesita aprender el mapeo de preferencias encima. El siguiente esbozo de código muestra la configuración de entrenamiento.

import torch
import torch.nn.functional as F

def reward_model_loss(reward_model, prompt, chosen, rejected):
    """
    Compute Bradley-Terry loss for a single preference pair.

    reward_model: maps (prompt, response) -> scalar reward
    chosen: the human-preferred response
    rejected: the human-rejected response
    """
    r_chosen  = reward_model(prompt, chosen)    # scalar
    r_rejected = reward_model(prompt, rejected)  # scalar

    # Bradley-Terry: P(chosen > rejected) = sigmoid(r_chosen - r_rejected)
    # Loss = -log P(chosen > rejected)
    loss = -F.logsigmoid(r_chosen - r_rejected)

    # For monitoring: how often does the model rank correctly?
    accuracy = (r_chosen > r_rejected).float()

    return loss, accuracy

# Training loop (simplified)
for batch in preference_dataloader:
    losses, accs = [], []
    for prompt, chosen, rejected in batch:
        loss, acc = reward_model_loss(reward_model, prompt, chosen, rejected)
        losses.append(loss)
        accs.append(acc)

    batch_loss = torch.stack(losses).mean()
    batch_loss.backward()
    optimizer.step()
    optimizer.zero_grad()

Un reward model bien entrenado típicamente alcanza un 65-75% de concordancia con las preferencias humanas en datos no vistos (Ouyang et al., 2022) . Esto puede parecer modesto, pero los anotadores humanos a menudo concuerdan entre sí solo alrededor del 73% de las veces en las mismas comparaciones, por lo que el reward model se está acercando al techo del acuerdo entre anotadores. Donde el reward model tiende a fallar es en entradas fuera de distribución (prompts o estilos de respuesta que eran raros o estaban ausentes en los datos de preferencia), que es una razón por la cual la penalización de KL en el siguiente paso es tan importante.

📌 El reward model solo necesita acertar el ranking, no las puntuaciones absolutas. Sumar una constante tanto a $r_\theta(x, y_w)$ como a $r_\theta(x, y_l)$ no cambia la salida de la sigmoide ni la pérdida. Esto significa que las puntuaciones de recompensa solo son significativas en relación unas con otras, no en términos absolutos (una recompensa de $3.2$ no significa "bueno" a menos que sepamos qué puntuación obtuvieron otras respuestas al mismo prompt).

¿Cómo Encaja el Pipeline Completo de RLHF?

Con el reward model en mano, podemos ensamblar el pipeline completo de RLHF como se describe en el artículo de InstructGPT (Ouyang et al., 2022) . Tiene tres etapas, cada una construyendo sobre la anterior:

La Etapa 1 es supervised fine-tuning . Recolectamos un conjunto de datos de demostraciones escritas por humanos (pares de prompt-respuesta donde las respuestas son de alta calidad) y hacemos fine-tuning del modelo pre-entrenado con la pérdida estándar de cross-entropy. Esto nos da un modelo $\pi^{\text{SFT}}$ que puede seguir instrucciones y producir respuestas coherentes (el punto de partida para RL).

La Etapa 2 es entrenamiento del reward model . Recolectamos datos de comparación (para cada prompt, los anotadores clasifican dos o más respuestas por preferencia) y entrenamos el reward model $r_\theta$ usando la pérdida de Bradley-Terry descrita anteriormente. Las comparaciones son típicamente generadas por $\pi^{\text{SFT}}$ mismo (a veces con diferentes temperaturas de muestreo para obtener pares de respuestas diversos), por lo que el reward model ve los tipos de respuestas que necesitará puntuar durante RL.

La Etapa 3 es optimización con RL . Ejecutamos PPO con el reward model como la señal de recompensa del entorno, pero con una adición crítica. La recompensa para una respuesta generada $y$ dado el prompt $x$ no es solo la puntuación bruta del reward model; incluye una penalización de KL divergence que penaliza a la policy por alejarse demasiado del modelo SFT:

$$R(x, y) = r_\theta(x, y) - \beta \cdot \text{KL}\big(\pi_\phi(\cdot \mid x) \;\|\; \pi^{\text{ref}}(\cdot \mid x)\big)$$

Aquí $\pi_\phi$ es la policy que se está optimizando, $\pi^{\text{ref}}$ es la policy de referencia (típicamente el modelo SFT, congelado), y $\beta$ es un coeficiente que controla la fuerza de la penalización. La KL divergence $\text{KL}(\pi_\phi \| \pi^{\text{ref}})$ mide cuánto se ha desviado la distribución de salida de la policy actual respecto a la referencia, calculada por token y sumada sobre la respuesta.

Para entender por qué esta penalización es esencial, consideremos qué sucede sin ella. El reward model es un proxy imperfecto de las preferencias humanas (es una red neuronal entrenada en un conjunto de datos finito, por lo que tiene puntos ciegos y patrones explotables). Dada una optimización sin restricciones, PPO encontrará respuestas que obtienen puntuaciones muy altas en el reward model pero que no se parecen en nada al lenguaje natural (cadenas degeneradas que explotan artefactos del reward model). Este modo de fallo se llama reward hacking (a veces "sobreoptimización de recompensa"), y se ha observado consistentemente en la práctica (Gao et al., 2023) . La penalización de KL previene esto anclando la policy a la referencia: si la distribución de salida del modelo diverge demasiado de lo que el modelo SFT produciría, la penalización crece y compensa cualquier ganancia de recompensa.

Podemos examinar los casos extremos de $\beta$. Cuando $\beta = 0$, no hay penalización de KL y la policy es libre de optimizar la recompensa sin restricción, lo que lleva a reward hacking, típicamente en unos pocos cientos de pasos de PPO. Cuando $\beta \to \infty$, la penalización de KL domina y la policy nunca se aleja de la referencia; recuperamos el modelo SFT sin beneficio de RL. El punto óptimo práctico está en el medio, generalmente encontrado barriendo $\beta$ en un conjunto de validación de preferencias humanas. Ouyang et al. (2022) y trabajos posteriores a menudo comienzan con $\beta$ alrededor de $0.01$–$0.2$ y ajustan según cuán rápidamente crece la KL divergence durante el entrenamiento.

💡 En la práctica, la KL divergence se calcula a nivel de token como $\sum_t \log \frac{\pi_\phi(y_t \mid x, y_{<t})}{\pi^{\text{ref}}(y_t \mid x, y_{<t})}$, que es simplemente la suma de razones de log-probabilidad. Esto requiere un pase forward tanto a través de la policy como del modelo de referencia para cada respuesta generada (una razón por la que el entrenamiento de RLHF es costoso, ya que cuatro modelos pueden estar en memoria simultáneamente: policy, referencia, reward model y crítico).

¿Qué Puede Salir Mal y Qué Viene Después?

RLHF es poderoso pero frágil. Varios modos de fallo están bien documentados en la literatura y vale la pena entenderlos antes de tratar el pipeline como un problema resuelto.

El reward hacking sigue siendo una preocupación incluso con la penalización de KL. Gao et al. (2023) mostraron que a medida que la KL divergence respecto al modelo de referencia aumenta, la recompensa proxy (lo que predice el reward model) continúa subiendo, pero la recompensa verdadera (medida por calificaciones humanas reales) alcanza un pico y luego declina. El modelo aprende a explotar características del reward model que no corresponden a calidad genuina (la verbosidad es una común, ya que los reward models a menudo dan puntuaciones más altas a respuestas más largas independientemente del contenido). La penalización de KL ralentiza este proceso pero no lo elimina por completo, y elegir el punto de parada correcto (o el $\beta$ correcto) requiere monitorear las puntuaciones de preferencia humana verdaderas durante todo el entrenamiento.

El reward model en sí introduce un cuello de botella. Los datos de preferencia humana son costosos de recolectar, y el conjunto de datos resultante suele ser órdenes de magnitud más pequeño que el corpus de pre-entrenamiento. Si los datos de preferencia no cubren ciertos temas o estilos de respuesta, las puntuaciones del reward model en esas regiones son esencialmente aleatorias, y PPO explotará esa aleatoriedad. El cambio distribucional entre los datos de comparación y las respuestas de la policy es un desafío persistente, porque a medida que PPO actualiza la policy, los tipos de respuestas que genera se alejan de lo que el reward model fue entrenado para evaluar.

El costo computacional es sustancial. Ejecutar RLHF requiere cuatro modelos en memoria simultáneamente durante la fase de PPO (policy, referencia, reward model, crítico), todos los cuales pueden ser LLMs grandes. Esto aproximadamente cuadruplica la huella de memoria comparado con SFT, y el bucle de entrenamiento involucra generar respuestas completas (decodificación autoregresiva lenta), puntuarlas con el reward model, calcular ventajas y ejecutar múltiples épocas de PPO (todo por batch). Este gasto ha motivado la investigación en alternativas más eficientes.

Una de esas alternativas es Direct Preference Optimization (DPO) (Rafailov et al., 2023) , que elude el reward model y PPO por completo optimizando directamente la policy sobre datos de preferencia. DPO muestra que la policy óptima bajo el objetivo de RLHF (reward model + penalización de KL) puede expresarse en forma cerrada, y que esta forma cerrada conduce a una pérdida simple tipo clasificación sobre pares de preferencia (sin bucle de RL, sin reward model, sin crítico). Si DPO iguala el rendimiento del RLHF completo a gran escala todavía se debate activamente (Xu et al., 2024) , pero se ha convertido en una alternativa popular para equipos sin la infraestructura para ejecutar PPO a escala.

Otras direcciones incluyen GRPO (Group Relative Policy Optimization) (Shao et al., 2024) , que elimina el modelo crítico por completo usando la recompensa promedio de un grupo de respuestas muestreadas como línea base, y Constitutional AI (Bai et al., 2022) , que reemplaza parte del etiquetado humano con retroalimentación generada por IA (un LLM critica y revisa sus propias respuestas de acuerdo con un conjunto de principios). El campo se mueve rápidamente, pero la idea central de RLHF (aprender una recompensa a partir de preferencias humanas, luego optimizar para ella) sigue siendo la base sobre la cual todas estas variaciones se construyen.

📌 Muchos equipos encuentran que las mayores ganancias de calidad provienen de las etapas de SFT y reward model, no de PPO en sí. Datos de demostración de alta calidad y datos de preferencia bien calibrados a menudo importan más que los detalles de optimización de RL. Esto a veces se resume como "la calidad de los datos domina sobre la elección del algoritmo" (un correctivo útil al enfoque en métodos de RL).

Quiz

Pon a prueba tu comprensión de RLHF y el pipeline de alineamiento.

En el reward model de Bradley-Terry, ¿qué representa la sigmoide de la diferencia de puntuaciones?

¿Cuál es el propósito del término de penalización de KL en la función de recompensa de RLHF?

¿Qué sucede cuando β (el coeficiente de penalización de KL) se establece en cero?

¿Por qué se usan comparaciones de preferencia binaria en lugar de puntuaciones absolutas de calidad para entrenar el reward model?