Cómo se entrena un LLM. Parte 4: RLHF, la maquinaria
En la Parte 2 cerramos con una pregunta abierta. En el pretraining, el modelo aprende a predecir la siguiente palabra y la «nota objetivo» es gratis: ya viene en el texto. Pero cuando le pides al modelo «escribe un email de disculpa a un cliente», ¿cuál es la respuesta correcta? Hay infinitas válidas. Sin nota objetivo, no hay loss; sin loss, no se pueden afinar los pesos. Y sin afinar los pesos, el modelo no aprende a comportarse como un asistente útil.
Si quiero seguir afinando la orquesta para que toque «bien», pero no tengo un diapasón objetivo, ¿cómo me invento una nota de referencia?
RLHF (Reinforcement Learning from Human Feedback, aprendizaje por refuerzo a partir de feedback humano) es la primera respuesta histórica seria a esa pregunta. En coloquial: se afina el modelo a base de que humanos comparen pares de respuestas y digan cuál suena mejor. Esa frase, aparentemente sencilla, esconde toda una maquinaria que vamos a desarmar pieza a pieza en este post.
Esta es la primera de dos entregas sobre RLHF. Aquí cubrimos la maquinaria entera: cómo funciona, hasta el momento histórico de noviembre de 2022 en el que esa maquinaria parió a ChatGPT y reordenó toda la industria. En la próxima entrega veremos sus grietas — porque, aunque RLHF funcione, está lejos de ser perfecto, y cada una de sus grietas dio luz a una técnica posterior.
Recap mínimo
Si vienes directamente a esta entrada, lo único que necesitas tener en la cabeza de las anteriores es esto:
- Un LLM por dentro es una orquesta enorme de cuerdas afinables (los pesos). Las respuestas que da son la sinfonía que toca esa orquesta.
- «Aprender» significa ajustar las cuerdas para que un número llamado loss sea lo más bajo posible. La loss mide cuánto se desvía la sinfonía de la nota objetivo.
- En el pretraining la nota objetivo es gratis: la siguiente palabra del corpus. El modelo aprende automáticamente, sin humanos por medio.
- En el alineamiento la nota objetivo no existe naturalmente. Hay que inventársela.
Si quieres más detalle de las piezas físicas (qué hay en los ficheros de entrenamiento, dónde queda lo aprendido), está todo en la Parte 3: por dentro del bucle.
La idea base de RLHF: comparar pares, no puntuar
Imagina que tienes un modelo recién pasado por el pretraining. Genera texto razonable, pero la calidad oscila: a veces clava la respuesta, a veces se enrolla, a veces es perezoso. Quieres seguir afinando, pero no hay diapasón natural. Idea: contratas humanos para que hagan de afinador. Pero la pregunta clave es cómo se les pregunta. Y aquí está la decisión no obvia que define toda la técnica.
La opción mala: pedir que puntúen del 1 al 10
Suena lógica. Le enseñas una respuesta a un anotador y le dices: «puntúala del 1 al 10 según lo útil que te parezca». El resultado es siempre el mismo desastre:
Anotador 1: este email me parece un 7
Anotador 2: yo a este mismo email le doy un 8 claro
Anotador 3: hmm, un 5, no me convence
Tres anotadores, mismo email, tres números distintos. Y si al mismo anotador le pasas el mismo email dos días después, te puede dar otro número. Esto es lo que se llama calibración absoluta, y los humanos somos malísimos en ella. Tu «8» no significa lo mismo que el mío. El primer email del día parece bueno; tras leer 50 mediocres, ese mismo te parece excelente; tras leer 50 brillantes, mediocre. El número no captura tipos de error: un 7 puede ser «está bien pero le falta algo» o «está mal pero al menos es claro».
Si entrenas un modelo contra puntuaciones absolutas, lo que tienes es ruido con un poco de señal dentro. Mediocridad asegurada.
La opción que funciona: comparar pares
Cambia la pregunta. En lugar de «puntúa esta respuesta», le enseñas dos respuestas al mismo prompt y le dices: «¿cuál te parece mejor?». Tres botones: A, B, empate / no estoy seguro. Punto.
Prompt: "escríbeme un email pidiendo disculpas a un cliente
cuyo pedido se ha retrasado dos semanas"
Respuesta A:
"Estimado cliente, sentimos mucho el retraso de su pedido.
Comprendemos su frustración y queremos ofrecerle un descuento
del 15% en su próxima compra como compensación..."
Respuesta B:
"Hola! perdón por el retraso. Ya casi llega no te preocupes :)"
¿Cuál es mejor? [ A ] [ B ] [ empate ]
El humano tarda 3 segundos en decir A. Y si le preguntas a otros 9 anotadores, también dicen A. Coincidencia altísima entre anotadores.
¿Por qué funciona tanto mejor? Porque comparar es una operación relativa, no absoluta. No tienes que ponerte de acuerdo en qué significa un «8». Solo en cuál de los dos es más útil aquí, ahora, en este par concreto. El drift de sesión se cancela: si llevas 50 pares mediocres, el siguiente par te parece igual de fácil de comparar entre sí. Capturas la forma del error: cuando A pierde contra B sistemáticamente, no porque B saque un 9 y A un 7, sino porque B es preferible.
Esto no es una intuición de RLHF: es un resultado conocido en psicometría desde mediados del siglo XX. Cuando quieres extraer juicios consistentes de evaluadores humanos, comparaciones por pares es muchísimo mejor que puntuaciones absolutas. RLHF lo aplica al entrenamiento de modelos.
En la práctica, los pipelines de los grandes labs no se quedan en pares. Generan 4 o 7 respuestas distintas al mismo prompt (variando la temperatura del modelo) y le piden al anotador que las ordene de mejor a peor. De un ranking de 4 sacas 6 pares; de un ranking de 7 sacas 21. Más señal por euro pagado al anotador. Pero conceptualmente sigue siendo la misma idea: el humano nunca puntúa, solo ordena.
Tras pasar miles de prompts por anotadores, tienes un fichero con cientos de miles de pares de preferencia:
{"prompt": "...", "chosen": "respuesta A", "rejected": "respuesta B"}
{"prompt": "...", "chosen": "respuesta C", "rejected": "respuesta A"}
Esto es la materia prima de RLHF. Pero todavía no es una «loss» que el modelo grande pueda usar. Para llegar ahí, antes hace falta otra fase intermedia.
Antes del refuerzo: SFT, el calentamiento
Hay una pequeña trampa narrativa en cómo se cuenta normalmente RLHF. Lo presentan como «pretraining → RLHF y ya». La verdad es que en medio hay otra fase, más sencilla pero imprescindible: SFT (Supervised Fine-Tuning, ajuste fino supervisado).
El problema: un modelo pre-entrenado no responde, completa
Después del pretraining tienes un modelo que ha leído el equivalente a millones de libros y sabe predecir la siguiente palabra de cualquier texto. Pero no es un asistente todavía. Es un autocompletador estadísticamente brillante.
Si le pasas:
Pregunta: ¿Cuál es la capital de Francia?
…un modelo recién pre-entrenado podría continuar con cualquiera de estas cosas, según lo que vio en su corpus:
- «Respuesta: París.» (lo que querrías).
- «…es una de las preguntas más frecuentes en exámenes de geografía. En este artículo veremos otros ejemplos…».
- «a) París b) Roma c) Madrid d) Ninguna de las anteriores» (formato de examen).
- «¿Cuál es la capital de Alemania? ¿Cuál es la capital de Italia?» (lista de preguntas).
El modelo no sabe que tú quieres que responda. No «responde», completa. Solo continúa la secuencia que le has dado de la forma estadísticamente más probable según su corpus.
Si pasáramos directamente de aquí a RLHF, el problema sería evidente: para que los humanos comparen pares de respuestas, el modelo tiene que producir respuestas que parezcan respuestas, no continuaciones de texto cualquiera.
La solución: una fase corta de imitación
Antes de RLHF se hace una pasada con un dataset pequeño (decenas o cientos de miles de ejemplos) escrito por humanos:
{"prompt": "¿Cuál es la capital de Francia?",
"completion": "La capital de Francia es París."}
{"prompt": "Escribe un email de disculpa a un cliente cuyo pedido se ha retrasado",
"completion": "Estimado cliente, sentimos mucho el retraso..."}
{"prompt": "Resume el siguiente texto en tres frases: [...]",
"completion": "[...]"}
Estos pares los escriben humanos contratados específicamente para eso. La instrucción que reciben es algo así como: «escribe la respuesta que tú esperarías de un asistente útil, claro y honesto».
Y la mecánica del entrenamiento es el bucle de pretraining tal cual: la «nota objetivo» en cada paso es el siguiente token de la respuesta humana, en lugar del siguiente token de un texto cualquiera de internet. Mismo gradient descent, misma loss, mismos pesos que se ajustan. Lo único que cambia es la dieta de datos.
Lo que aprende el modelo en esta fase no es nuevo conocimiento. Es una forma: dado un prompt, producir directamente una respuesta. No completar listas, no ponerse a debatir consigo mismo. Responde.
Idea clave: SFT no enseña al modelo a saber más, le enseña a comportarse como asistente. El conocimiento ya estaba en el pretraining; SFT solo lo encauza al formato pregunta-respuesta.
Por qué SFT solo no basta
Después de SFT tienes un modelo que ya responde con coherencia. Y aquí viene la pregunta natural: ¿para qué hace falta RLHF después?
SFT te lleva de un autocompletador a un asistente mediocre-aceptable, pero tiene tres limitaciones serias:
- Solo aprende a imitar lo que vio. Si los humanos que escribieron las respuestas-modelo eran buenos, el modelo aprende algo bueno. Si eran mediocres, aprende a ser mediocre. No hay mecanismo para superar el techo de los anotadores.
- No hay distinción entre «bueno» y «mejor». SFT le presenta UNA respuesta correcta y le dice «imita esto». No hay forma de codificar matices del tipo «esto está bien, pero esto otro está aún mejor porque es más conciso / más amable / no inventa datos».
- Es caro escribir respuestas-modelo de calidad a escala. Pedirle a un humano que escriba desde cero la respuesta perfecta a un prompt complejo lleva 10-30 minutos. Pedirle al mismo humano que compare dos respuestas ya generadas lleva 30 segundos. La economía es radicalmente distinta.
Una analogía útil: si entrenar a un modelo fuera enseñar a alguien a tocar el piano, las tres fases serían así:
| Fase | Qué adquiere el modelo |
|---|---|
| Pretraining | Vocabulario musical (ha escuchado todas las épocas, conoce armonía, ritmo, géneros) |
| SFT | El oficio: aprende a tocar piezas concretas con técnica decente, dedos en su sitio |
| RLHF | El gusto: aprende a calibrar qué interpretación de las que sabe hacer suena mejor — más expresiva, más ajustada al contexto |
La diferencia clave: SFT le enseña cómo debe sonar una respuesta (la forma). RLHF le enseña qué debe sonar mejor que qué (la preferencia). RLHF no añade repertorio; refina el juicio sobre el repertorio que ya hay.
Y por eso van en ese orden: primero te aseguras de que el modelo toca (SFT), luego le pules el gusto (RLHF). Saltarse SFT sería como pedirle a alguien que no sabe tocar el piano que interprete con sentimiento. El feedback estético no tiene sobre qué aplicarse.
El modelo de recompensa: destilar el juicio humano
Aquí está la jugada técnica más bonita de todo el invento.
El problema concreto
Tenemos un dataset de comparaciones humanas. Buena materia prima. Pero para entrenar el modelo grande con RLHF necesitas que cada vez que el modelo genera una respuesta tentativa, alguien la puntúe para calcular la loss. Y el entrenamiento no son cien iteraciones: son millones. Decenas de millones.
Si en cada iteración hay que llamar a un humano para que diga «esta respuesta está mejor que aquella», el coste es astronómico (estás pagando salarios) y el tiempo es glacial (un humano tarda 30 segundos por comparación; el modelo grande puede generar miles por segundo).
El cuello de botella: los humanos son la fuente de verdad, pero son caros y lentos. El modelo grande necesita feedback rápido y barato.
La jugada: destilar el juicio humano en otro modelo
Idea: en lugar de llamar a humanos cada vez, entrena un modelo más pequeño cuyo único trabajo sea imitar el juicio humano. Una vez entrenado, ese modelo puede dar puntuaciones a cualquier respuesta nueva, las veces que haga falta, casi gratis.
A ese modelo se le llama modelo de recompensa (en inglés Reward Model, abreviado RM). Y la operación que hace conceptualmente es destilar: coge miles de juicios humanos discretos y caros y los compacta en una función matemática continua y barata.
ENTRADA del RM: un prompt + una respuesta
SALIDA: un número (un score)
Score alto → "creo que a un humano le gustaría esta respuesta"
Score bajo → "creo que no le gustaría"
Eso es todo lo que hace.
Cómo aprende el RM, con un ejemplo concreto
Tomemos un prompt:
«Dame 3 ideas de regalo para mi padre, al que le gusta la música clásica y la cocina.»
El modelo SFT genera tres respuestas variando la temperatura:
RESPUESTA A:
"Una entrada para un concierto, un libro de recetas y un delantal."
RESPUESTA B:
"Tres ideas pensando en sus dos aficiones:
1) Una caja de vinilos de Mahler en edición remasterizada.
2) Un curso presencial de cocina italiana en una escuela de la ciudad.
3) Unos auriculares de alta fidelidad para escuchar en casa.
Cualquiera de las tres aciertan en sus dos hobbies."
RESPUESTA C:
"Música clásica y cocina son temas muy amplios. ¿Podrías
especificar más?"
Un humano las ordena: B > A > C. Esa preferencia se guarda. Y haces lo mismo con otros 50.000 prompts.
El RM empieza dando números aleatorios. Lo entrenas mostrándole los pares y diciéndole: «para ESTE prompt, queremos que B saque más número que A, y A más que C». Al principio se equivoca:
ANTES de entrenarse (números aleatorios):
RM(prompt, A) = 0,4
RM(prompt, B) = 0,2 ← el humano dijo que B era la mejor, pero el RM le pone bajo
RM(prompt, C) = 0,7 ← y le pone alto a la peor
Orden del RM: C > A > B (mal: el humano dijo B > A > C)
Cada vez que el RM se equivoca en el orden, se le ajustan los pesos (backprop, lo de siempre) para que la próxima vez ponga los números en mejor orden. Tras millones de iteraciones con todo el dataset:
DESPUÉS de entrenarse:
RM(prompt, A) = 0,55
RM(prompt, B) = 0,82 ← arriba, como dijo el humano
RM(prompt, C) = 0,15 ← abajo, como dijo el humano
Orden del RM: B > A > C (correcto)
El RM ha aprendido a puntuar como un humano lo haría. Sin más.
La pieza no obvia: generalización
Aquí está el truco potente. El RM ahora puntúa respuestas que nunca vio en el dataset.
Le metes una respuesta nueva al mismo prompt:
RESPUESTA D (nunca estuvo en el dataset):
"Le regalaría un set de cuchillos japoneses y entradas
para un festival de jazz."
RM(prompt, D) = 0,35
El RM le pone un número intermedio. Ni alta ni baja. Y eso es razonable: «set de cuchillos japoneses» conecta con la cocina (suma puntos); «festival de jazz» no es música clásica (resta puntos). Ni un acierto pleno (como B) ni un fallo (como C). Algo intermedio.
¿Por qué le da ese número? Porque entrenándose con miles de comparaciones aprendió patrones generales — «respuestas concretas mejor que respuestas genéricas», «respuestas que conectan con todos los hobbies del prompt mejor que las que ignoran uno». Esos patrones los aplica a respuestas nuevas.
Lo que tienes en la mano cuando termina el entrenamiento del RM: una máquina de puntuar respuestas entrenada para imitar el juicio humano, capaz de evaluar respuestas que nunca vio, instantáneamente y sin coste. Acabas de convertir un juicio humano discreto y caro en una función matemática continua y barata.
Las dos fuentes de comparaciones humanas
Antes de cerrar esta sección, una aclaración que conviene meter porque suele generar confusión. Las comparaciones humanas que entrenan el RM vienen, en la práctica, de dos fuentes distintas:
| Fuente | Quién decide | Cuándo | Para qué |
|---|---|---|---|
| Dataset inicial | Anotadores contratados específicamente | ANTES de lanzar el modelo | Entrenar el RM y hacer la primera pasada de RLHF |
| Feedback en runtime | Tú y yo, los usuarios reales | DESPUÉS, mientras el modelo está en producción | Refinar el modelo con datos reales de uso |
Los anotadores contratados trabajan en empresas de etiquetado (Scale AI, Surge, Sama, Appen…) repartidas por países con mano de obra barata e inglés decente: Kenia, Filipinas, India. A ellos se les pasan prompts curados y un manual de qué cuenta como «buena respuesta».
Los usuarios en runtime somos todos: cada vez que clicas «este me gusta más» en ChatGPT, Claude o Gemini cuando aparecen dos respuestas, o cada pulgar arriba/abajo, estás aportando una línea al dataset de preferencias futuro. Tu interacción gratis con el chatbot es corpus de mañana.
La cara humana de RLHF — quién hace ese trabajo, en qué condiciones, qué sesgos culturales se cuelan — da para una entrada propia. Es la que viene después de esta.
Cerrar el bucle: cómo el RM ajusta los pesos del modelo grande
Ya tenemos el RM. Lo que queremos hacer ahora suena trivial:
«Que el modelo grande genere respuestas, que el RM las puntúe, y que la nota del RM sirva de loss para ajustar los pesos del modelo grande hasta que sus respuestas saquen puntuaciones cada vez más altas.»
Si esto fuera fácil, lo cerraríamos en cinco líneas. Pero hay una piedra en el camino que conviene contar.
El problema: el sampleo rompe el gradiente
Cuando el modelo grande genera una respuesta, no escribe la respuesta entera de golpe. Genera palabra a palabra, y para elegir cada palabra hace lo siguiente:
Distribución del modelo: pop=0,18 rock=0,15 reggaeton=0,14 ...
↓
Saca un dado y "samplea": elige una.
Ese paso de «sacar un dado» — elegir una palabra concreta de entre la distribución — es discreto. No hay punto medio: o sale «pop», o sale «rock», o sale «reggaeton». Y backprop necesita que TODO el camino entre la loss y los pesos sea matemáticamente suave (diferenciable). En cuanto hay un paso discreto en medio, el gradiente se rompe:
modelo grande → distribución → [SAMPLEO] → palabra concreta → respuesta entera → RM → score
▲
aquí se rompe el gradiente:
backprop no puede pasar de aquí
Por eso SFT puede entrenar con backprop tradicional (no hay sampleo: la loss compara token a token contra la respuesta humana esperada), pero RLHF no puede. Necesita otra herramienta.
La solución: aprendizaje por refuerzo
El aprendizaje por refuerzo (en inglés reinforcement learning, RL) es la rama del machine learning que se inventó precisamente para resolver este tipo de problemas: aprender a partir de una recompensa numérica, sin tener una «respuesta correcta» para imitar.
La idea conceptual, sin matemáticas:
1. El modelo genera una respuesta (con su sampleo aleatorio interno).
2. El RM le pone un score.
3. Si el score es alto → "esta forma de responder me gusta, hazla más probable".
4. Si el score es bajo → "esta forma de responder no me gusta, hazla menos probable".
5. Ajustas los pesos en la dirección que cambia esas probabilidades.
Fíjate en la diferencia con SFT:
| Fase | Cómo aprende el modelo |
|---|---|
| SFT | «Imita esta respuesta concreta lo más exactamente posible» |
| RLHF | «Haz cosas que reciban premio alto, evita las que reciban premio bajo» |
El algoritmo de RL que se usó tradicionalmente en RLHF se llama PPO (Proximal Policy Optimization, optimización de política proximal). No vamos a entrar en cómo funciona PPO por dentro — igual que con backprop en la Parte 2, solo necesitas saber qué hace:
PPO es el algoritmo concreto que ajusta los pesos del modelo grande a partir de las puntuaciones del RM. La palabra clave en el nombre es «proximal»: significa que el algoritmo da pasos pequeños y cuidadosos en cada actualización, en lugar de saltos grandes que podrían desestabilizar todo el modelo. Esa cautela es necesaria porque RL es notoriamente caprichoso de entrenar.
(En la Parte 6 de la serie veremos DPO, una técnica posterior que se inventó precisamente para saltarse PPO porque es lento, caro y frágil.)
El guardarraíl: el ancla que evita que el modelo se desboque
Hay una pieza más, no obvia pero importante. Si dejas al modelo grande optimizando solo contra el RM, se vuelve loco. Descubre formas raras de sacar puntuación alta que un humano nunca habría querido: empieza a producir respuestas larguísimas porque el RM tiene un pequeño sesgo a preferir respuestas largas; mete siempre listas con bullets porque le aprendió al RM que las listas suelen ganar; se vuelve empalagosamente educado al borde de no ser útil.
Para evitar que el modelo se aleje demasiado del comportamiento razonable que ya había aprendido en SFT, se le añade una penalización por divergencia. En jerga técnica, KL penalty (de Kullback-Leibler divergence, una medida matemática de «cuánto difieren dos distribuciones de probabilidad»). En idea, sin matemáticas:
KL penalty: un freno que mide «cuánto se ha alejado el modelo grande del modelo SFT original» y lo añade a la loss como castigo. Resultado: el modelo solo se mueve en la dirección que el RM premia si esa dirección no le aleja demasiado del SFT. Es un ancla.
La loss completa de RLHF queda así:
loss_RLHF = -score_del_RM + castigo_si_te_alejas_del_SFT
↑ ↑
"haz cosas que "pero sin volverte loco,
el RM premie" mantente cerca de cómo
hablabas en SFT"
Sin KL penalty, RLHF descarrila a las pocas iteraciones. Con KL penalty, el modelo se afina poco a poco hacia respuestas mejor puntuadas pero sin perder coherencia.
El bucle completo, en pseudocódigo
Juntando todo lo que hemos visto:
# Punto de partida:
modelo_grande = SFT.copia() # parte de donde lo dejó SFT
RM = entrenado_aparte # ya sabe puntuar como un humano
SFT_referencia = SFT.copia_congelada() # ancla para medir divergencia
for iteracion in range(MILLONES):
prompt = sacar_prompt_del_dataset()
respuesta = modelo_grande.generar(prompt) # con sampleo aleatorio
score = RM.puntuar(prompt, respuesta)
distancia = medir_KL(modelo_grande, SFT_referencia, prompt)
loss = -score + beta * distancia
# PPO se encarga de "ajustar pesos a partir de un score"
modelo_grande.pesos = PPO.actualizar(modelo_grande.pesos, loss)
Tres modelos en paralelo durante el entrenamiento:
- Modelo grande — los pesos que se mueven.
- RM — congelado, solo evalúa.
- SFT de referencia — congelado, solo sirve de ancla para el KL.
Tras millones de iteraciones de este bucle, los pesos del modelo grande migran de la versión «SFT mediocre-aceptable» a una versión «RLHF afinada». El conocimiento subyacente es el mismo (pretraining no se ha tocado), pero el estilo de respuesta es claramente mejor: más útil, más conciso, mejor calibrado al gusto humano.
Y este modelo, exactamente este, es lo que el público vio cuando OpenAI lanzó ChatGPT.
Por qué fue una revolución (2022)
El mundo antes de InstructGPT
GPT-3 se lanzó en 2020. Era impresionante por dentro: un modelo de 175.000 millones de parámetros, capaz de cosas que la IA pre-2020 no se acercaba a hacer. Pero el público general no lo usaba. ¿Por qué? Porque era difícil de usar.
Tenías que aprender un arte llamado prompt engineering: la habilidad de redactar la entrada al modelo de tal forma que produjera una salida útil. Para que GPT-3 te explicara algo claramente, no le podías preguntar simplemente «¿qué es la fotosíntesis?». Tenías que escribir algo como:
A continuación se reproduce una explicación clara y didáctica,
escrita por un profesor de ciencias para alumnos de instituto,
sobre el siguiente tema:
Tema: la fotosíntesis
Explicación:
…y entonces sí, el modelo continuaba el texto con una explicación. Si le hacías la pregunta directa, te respondía a veces con otra pregunta, a veces con un poema, a veces con una conversación inventada entre dos personajes. Era un autocompletador brillante, no un asistente. Lo usaban algunos developers experimentados a través de la API de OpenAI; el gran público ni se enteró.
Marzo 2022: el paper de InstructGPT
OpenAI publica un paper titulado «Training language models to follow instructions with human feedback». Es el paper que estandariza el pipeline que llevamos cuatro entregas desmenuzando: pretraining → SFT → RLHF. Y enseña una cosa que cambió la conversación entera:
Un InstructGPT de 1.300 millones de parámetros es preferido por los usuarios sobre un GPT-3 de 175.000 millones.
Es decir: un modelo 130 veces más pequeño, pero con SFT + RLHF encima, gana a un modelo gigantesco sin alineamiento. La conclusión que el campo entero entendió esa semana fue:
«El tamaño del modelo importa menos de lo que pensábamos. Lo que importa es alinearlo con lo que los humanos quieren.»
Eso reordenó las prioridades de toda la industria. Los labs dejaron de competir solo por hacer el modelo más grande y empezaron a competir también — y sobre todo — por hacerlo más alineable.
Noviembre 2022: ChatGPT
OpenAI coge InstructGPT, le mete más SFT, más RLHF, lo afina específicamente para conversaciones de varios turnos, lo envuelve en una interfaz de chat web sencilla y lo publica gratis. Le llaman ChatGPT.
Las cifras que siguieron son ya legendarias:
- 5 días para alcanzar el primer millón de usuarios.
- 2 meses para alcanzar 100 millones.
Hasta ese momento, la aplicación más rápida en alcanzar 100 millones de usuarios había sido TikTok, que tardó 9 meses. ChatGPT lo hizo en menos de la cuarta parte del tiempo. Era, con diferencia, la aplicación de software más rápidamente adoptada en la historia.
¿Qué cambió, exactamente, entre GPT-3 y ChatGPT?
Casi nada del conocimiento del modelo. El cuerpo de saber (el pretraining) era esencialmente el mismo, una variante más afinada del mismo corpus. Lo que cambió fueron tres cosas:
- Forma de responder. Gracias a SFT, el modelo dejó de ser un autocompletador y se convirtió en algo que responde directamente.
- Calibración fina de utilidad. Gracias a RLHF, el modelo aprendió a preferir respuestas claras, concisas y honestas frente a respuestas confusas o evasivas.
- Formato de chat conversacional. En lugar de una caja de texto donde escribir un prompt-arte, una conversación de varios turnos con memoria de los mensajes anteriores.
El público no percibió que ChatGPT era IA más inteligente que GPT-3. Percibió que ChatGPT era IA finalmente usable. Esa diferencia — entre algo brillante pero impenetrable y algo brillante que tu padre puede usar — fue tan grande que parecía un salto de generación tecnológica.
Adopción masiva: el estándar de facto
Tras ChatGPT, todos los labs serios adoptaron variantes del mismo pipeline:
- Anthropic lanza Claude (2023) con RLHF + Constitutional AI (lo veremos en la Parte 6).
- Google lanza Bard / Gemini con RLHF.
- Meta publica Llama 2-Chat y Llama 3-Instruct, ambos con SFT + RLHF.
- Mistral, Cohere, Inflection, xAI (Grok), DeepSeek… todos siguen variantes del mismo esquema.
Por dos años (2023-2024), si querías un modelo conversacional que la gente de verdad usara, el camino era SFT + RLHF. No había alternativa práctica.
Resumen
- RLHF resuelve el problema del alineamiento convirtiéndolo de nuevo en un problema con loss matemática: humanos comparan pares de respuestas, ese juicio se destila en un reward model, y el reward model hace de loss del modelo grande.
- Antes de RLHF se hace SFT (ajuste fino supervisado), una fase de imitación que enseña al modelo a «tener forma de asistente». Sin SFT, RLHF no tendría sobre qué afinar.
- El reward model es una «máquina de puntuar respuestas» entrenada con miles de comparaciones humanas. Una vez entrenado, evalúa cualquier respuesta nueva, instantáneamente y sin coste.
- El bucle final usa RL (no backprop directo, porque el sampleo del modelo rompe el gradiente). El algoritmo concreto es PPO, con un guardarraíl llamado KL penalty para que el modelo no se aleje demasiado del SFT.
- La diferencia entre GPT-3 y ChatGPT no es más conocimiento: es alineamiento. Y eso bastó para que ChatGPT alcanzara 100 millones de usuarios en 2 meses, la adopción más rápida de cualquier aplicación de software en la historia.
Próximas entregas
Antes de meternos en las grietas de RLHF — que las tiene, y serias —, una pausa. Toda esta maquinaria depende de trabajo humano real: anotadores en empresas de etiquetado de Kenia, Filipinas o India que pasan ocho horas al día comparando pares de respuestas a 2$/hora, a veces clasificando contenido tóxico para que tu chatbot suene amable. RLHF tiene cara humana, y conviene mirarla. La entrada paralela El trabajo humano invisible detrás de los LLMs. Parte 1: quién, dónde, cómo y su continuación Parte 2: la paradoja del modelo amable cubren ese lado humano de la maquinaria.
Después volveremos a la serie técnica con la Parte 5: las grietas de RLHF y por qué motivaron todo lo siguiente. Veremos reward hacking, los sesgos heredados de los anotadores, el cuello de botella humano, y cómo cada una de esas grietas dio luz a una técnica posterior — RLAIF, DPO, RLVR — que iremos cubriendo en las entregas siguientes.
