¿Cómo Convierte TRL Estas Ideas en Código?
A lo largo de los últimos cinco artículos, construimos el pipeline de alignment pieza por pieza: SFT para enseñar al modelo a seguir instrucciones, reward modelling para capturar preferencias humanas, PPO para optimizar contra la recompensa, DPO para omitir el reward model por completo, y GRPO para eliminar el critic. Cada uno de estos involucró detalles de implementación no triviales (cálculos de log-probabilidad, objetivos recortados, normalización de grupo, penalizaciones de KL), y en un entorno de investigación o producción, reimplementarlos desde cero para cada experimento sería lento y propenso a errores.
La biblioteca TRL (Transformer Reinforcement Learning) de HuggingFace (von Werra et al., 2020) envuelve todos estos métodos en una API unificada que se asienta sobre los ecosistemas de Transformers y PEFT. La correspondencia entre conceptos y clases de TRL es directa: cada método de entrenamiento que estudiamos tiene una clase Trainer correspondiente que maneja el bucle interno, y lo que requería docenas de líneas de código personalizado se reduce a configuración. Los siguientes ejemplos muestran el patrón esencial para cada método.
SFT es el punto de partida para todo pipeline de alignment, y el SFTTrainer de TRL maneja la tokenización, el empaquetado de múltiples ejemplos en una sola secuencia para eficiencia, y la pérdida estándar de modelado causal de lenguaje.
from trl import SFTTrainer, SFTConfig
from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-3.1-8B")
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-3.1-8B")
# dataset has a "text" column with instruction-response pairs
trainer = SFTTrainer(
model=model,
args=SFTConfig(output_dir="./sft-output", max_seq_length=2048),
train_dataset=sft_dataset,
processing_class=tokenizer,
)
trainer.train()
Una vez que tenemos un modelo SFT, podemos entrenar un reward model a partir de datos de preferencia. El RewardTrainer de TRL espera un conjunto de datos con columnas para las respuestas elegidas y rechazadas, y maneja la pérdida de Bradley-Terry internamente.
from trl import RewardTrainer, RewardConfig
from transformers import AutoModelForSequenceClassification
reward_model = AutoModelForSequenceClassification.from_pretrained(
"meta-llama/Llama-3.1-8B", num_labels=1
)
# dataset has "chosen" and "rejected" columns
reward_trainer = RewardTrainer(
model=reward_model,
args=RewardConfig(output_dir="./reward-output"),
train_dataset=preference_dataset,
processing_class=tokenizer,
)
reward_trainer.train()
Con un reward model en mano, podemos ejecutar PPO. El PPOTrainer de TRL gestiona el bucle de generación, la puntuación de recompensa, la estimación de ventajas y las actualizaciones recortadas, que es donde reside la mayor parte de la complejidad de implementación.
from trl import PPOTrainer, PPOConfig, AutoModelForCausalLMWithValueHead
ppo_model = AutoModelForCausalLMWithValueHead.from_pretrained("./sft-output")
ppo_config = PPOConfig(
output_dir="./ppo-output",
learning_rate=1e-6,
kl_penalty="kl", # KL penalty type
init_kl_coef=0.2, # initial beta for KL
)
ppo_trainer = PPOTrainer(
config=ppo_config,
model=ppo_model,
ref_model=None, # uses a copy of the initial model
processing_class=tokenizer,
reward_model=reward_model,
train_dataset=prompt_dataset,
)
ppo_trainer.train()
DPO es aún más simple porque no hay bucle de generación ni reward model. El DPOTrainer toma el mismo formato de conjunto de datos de preferencia (pares elegidos/rechazados) y optimiza la pérdida de DPO directamente.
from trl import DPOTrainer, DPOConfig
dpo_model = AutoModelForCausalLM.from_pretrained("./sft-output")
dpo_trainer = DPOTrainer(
model=dpo_model,
args=DPOConfig(output_dir="./dpo-output", beta=0.1),
train_dataset=preference_dataset,
processing_class=tokenizer,
)
dpo_trainer.train()
Cada uno de estos ejemplos omite detalles que importan en producción (configuración de LoRA , formato de datos, flags de entrenamiento distribuido, gradient checkpointing), pero el punto es que la correspondencia conceptual es limpia: cada clase Trainer corresponde a uno de los métodos que estudiamos, y los hiperparámetros ($\beta$, $\varepsilon$, tasa de aprendizaje, coeficiente de KL) son los mismos que analizamos en las fórmulas.
¿Cuándo Debemos Usar Cada Método?
Con tantos métodos de alignment disponibles, elegir entre ellos puede resultar abrumador. La decisión generalmente depende de tres factores: qué datos tenemos, cuánto cómputo podemos permitirnos y si la tarea se beneficia de la exploración online. Las siguientes tendencias (no reglas estrictas) pueden guiar la elección.
SFT es siempre el primer paso, independientemente de lo que venga después. Enseña al modelo base a seguir instrucciones, producir salidas estructuradas y adoptar el tono correcto. Omitir SFT y saltar directamente a RL tiende a producir entrenamiento inestable porque la policy comienza demasiado lejos de la distribución objetivo para que las señales de recompensa sean significativas.
DPO es a menudo la opción predeterminada para equipos que tienen datos de preferencia pero cómputo limitado. Dado que entrena con una pérdida supervisada estándar sobre datos estáticos, usa aproximadamente la mitad de la memoria GPU de RLHF (sin red de valor, sin generación online), tiende a converger más rápido y es más fácil de depurar. Tiende a funcionar bien cuando el conjunto de datos de preferencia es lo suficientemente diverso para cubrir la distribución de despliegue y cuando no necesitamos que el modelo descubra comportamientos novedosos más allá de lo que los datos demuestran.
RLHF basado en PPO vale la pena cuando tenemos un reward model confiable y suficiente cómputo para el bucle de generación online. Su ventaja clave es la flexibilidad: dado que la policy genera sus propias completaciones y recibe feedback de recompensa, puede explorar comportamientos que ningún anotador humano demostró. El reward model también puede reutilizarse entre experimentos o actualizarse independientemente. La desventaja es la complejidad de ingeniería (tres o cuatro modelos en memoria GPU simultáneamente) y el riesgo de reward hacking si el reward model tiene brechas explotables.
GRPO ocupa un punto medio: mantiene la generación online que hace poderoso a PPO pero elimina el critic, reduciendo el uso de memoria y la complejidad de implementación. Es particularmente adecuado para tareas donde la recompensa puede verificarse automáticamente (matemáticas, código, salida estructurada), porque el verificador reemplaza al reward model aprendido y elimina el reward hacking. El éxito de DeepSeek-R1 en benchmarks de razonamiento demostró que GRPO puede igualar o superar el rendimiento de PPO en este régimen.
SFT ponderado por tokens (del primer artículo de este track) es una opción más ligera cuando tenemos señales de calidad por token pero no queremos la sobrecarga del RL completo. Se sitúa entre SFT y DPO en el espectro de complejidad y puede ser útil como calentamiento previo a DPO o como método independiente cuando las señales de calidad son confiables.
¿Qué Puede Salir Mal con el Alignment?
Los métodos de alignment son poderosos, pero introducen modos de fallo que no existen con SFT solo. Entenderlos es importante porque moldean cómo los profesionales diseñan, monitorean e iteran sobre pipelines de alignment.
El reward hacking es quizás el modo de fallo más discutido. Cuando un modelo se optimiza contra un reward model aprendido, tiende a encontrar entradas que puntúan alto según el reward model pero que en realidad no son buenas según estándares humanos. Un ejemplo clásico es el modelo aprendiendo a producir respuestas verbosas y llenas de matices porque el reward model fue entrenado con datos donde las respuestas más largas generalmente eran preferidas. El modelo explota la correlación entre longitud y calidad sin realmente mejorar la calidad. Gao et al. (2023) estudiaron esto sistemáticamente y encontraron que las puntuaciones del reward model y la verdadera preferencia humana divergen a medida que aumenta la presión de optimización: más allá de cierto punto, presionar más fuerte contra el reward model empeora las salidas en lugar de mejorarlas. Por eso la penalización de KL es tan importante; limita cuánto puede desviarse la policy, lo que acota el grado de reward hacking.
El impuesto del alignment se refiere a la observación de que el alignment puede reducir ligeramente las capacidades brutas de un modelo en benchmarks que miden conocimiento factual o razonamiento. Un modelo que ha sido ajustado con RLHF para ser útil e inofensivo puede puntuar ligeramente más bajo en, digamos, MMLU que el mismo modelo después de solo SFT. Esto sucede porque la penalización de KL y la optimización de preferencias alejan la distribución del modelo de aquella que maximiza la precisión de predicción del siguiente token. En la práctica, el impuesto tiende a ser pequeño (del orden de unos pocos puntos porcentuales en benchmarks reportados), y las ganancias en usabilidad generalmente lo compensan, pero vale la pena monitorearlo.
La supervisión escalable es un desafío más profundo que crece con la capacidad del modelo. RLHF asume que los humanos pueden juzgar confiablemente cuál de dos salidas es mejor, pero a medida que los modelos producen salidas más largas, más complejas o más especializadas, esta suposición se vuelve forzada. Un etiquetador humano puede no ser capaz de determinar si un programa de 500 líneas es correcto, o si una explicación médica detallada contiene errores sutiles. Si las etiquetas de preferencia son ruidosas o sistemáticamente sesgadas, el alignment resultante hereda esos defectos.
Varias direcciones de investigación buscan abordar la supervisión escalable. Constitutional AI (Bai et al., 2022) reemplaza a los etiquetadores humanos con una IA que critica las salidas contra un conjunto de principios escritos, reduciendo (aunque no eliminando) el cuello de botella de la anotación humana. RLAIF (Reinforcement Learning from AI Feedback) extiende esto usando un LLM para generar etiquetas de preferencia para entrenar el reward model. El debate y el reward modelling recursivo son propuestas más especulativas donde los modelos argumentan entre sí o ayudan a los humanos a evaluar salidas complejas. Ninguna de estas resuelve completamente el problema, pero representan direcciones activas hacia hacer que el alignment funcione a medida que los modelos se vuelven más capaces.
¿Hacia Dónde Se Dirige el Campo?
El campo del alignment ha cambiado dramáticamente en poco tiempo. En 2022, RLHF con PPO era el único método probado, y requería infraestructura significativa (InstructGPT supuestamente requirió un equipo dedicado y cómputo sustancial). Para 2023, DPO demostró que podíamos obtener resultados comparables con una simple pérdida supervisada. Para 2024, GRPO demostró que el RL online podía funcionar sin un critic, y DeepSeek-R1 mostró que comportamientos de razonamiento emergente podían surgir solo de la optimización de recompensa. Cada paso simplificó el pipeline mientras preservaba (o mejoraba) los resultados.
Lo que permanece constante a través de todos estos métodos son las ideas fundamentales que hemos construido a lo largo de este track. La optimización de policy (ya sea a través de REINFORCE, el recorte de PPO o el gradiente implícito de DPO) proporciona el motor de mejora. El aprendizaje de preferencias (el modelo de Bradley-Terry, comparaciones por pares) traduce el juicio humano en una señal de entrenamiento. La regularización de KL evita que la policy derive hacia regiones degeneradas. Estos tres pilares aparecen en cada método que hemos estudiado, solo combinados de diferentes maneras.
Nuevos métodos continúan apareciendo a un ritmo rápido. Variantes iterativas de DPO como IPO (Azar et al., 2023) y KTO (Ethayarajh et al., 2024) refinan la pérdida de preferencia para manejar etiquetas ruidosas o trabajar con datos no pareados (donde tenemos ejemplos "buenos" y "malos" pero no pares emparejados). Los métodos de DPO online generan nuevas completaciones durante el entrenamiento para combinar la simplicidad de DPO con los beneficios de exploración de PPO. Los process reward models puntúan cada paso de una cadena de razonamiento en lugar de solo la respuesta final, dando feedback más granular para tareas de matemáticas y código. Cada uno de estos se construye sobre los fundamentos que hemos cubierto.
Para los profesionales, el consejo práctico es empezar simple y agregar complejidad solo cuando sea necesario. SFT nos lleva la mayor parte del camino. DPO sobre un buen conjunto de datos de preferencia maneja la mayoría de las necesidades de alignment. El RL online (PPO o GRPO) vale la inversión cuando necesitamos que el modelo descubra nuevos comportamientos, cuando tenemos una señal de recompensa automatizada confiable, o cuando la distribución de despliegue difiere significativamente de los datos de entrenamiento. Los fundamentos no cambian, incluso cuando los métodos evolucionan.
Quiz
Pon a prueba tu comprensión de los métodos de alignment y las consideraciones prácticas.
¿Por qué se realiza típicamente SFT antes de cualquier método de alignment basado en RL?
¿Qué es el reward hacking en el contexto de RLHF?
¿Qué método de alignment es generalmente más adecuado para un equipo pequeño con un buen conjunto de datos de preferencia pero cómputo limitado?
¿Qué problema busca abordar Constitutional AI (CAI)?
¿Cuáles tres ideas fundamentales aparecen a través de todos los métodos de alignment cubiertos en este track?