28

De modelo base a asistente

¿Qué convierte a un predictor de texto en un asistente útil?

14 minRuta ejecutiva

De modelo base a asistente

Con voz. Puedes pausar y saltar a cualquier paso.

Lección completa

Subtítulos

En la lección veintitrés viste que un modelo base solo continúa texto. En la anterior, que ajustarlo con ejemplos cambia su conducta. Hoy: cómo se vuelve un asistente.

Voz

Sin voz: la lección avanza sola con subtítulos.

La voz de esta lección está en preparación: por ahora avanza sola con subtítulos.

0:00 / 0:00

Qué lograrás

  • Explicar por qué un modelo base no es un asistente y nombrar los pasos que lo convierten en uno: ajuste con instrucciones, preferencias con modelo de recompensa, y RLHF o DPO.
  • Calcular, con la sigmoide, la probabilidad de que gane una respuesta a partir de los puntos que le da un modelo de recompensa.
  • Reconocer los efectos de optimizar la aprobación humana (ley de Goodhart, adulación, rechazos de más o de menos) y quién decide el comportamiento de un asistente.

Ideas clave

  1. Un modelo base solo continúa texto: se entrenó para adivinar la siguiente pieza, no para atender a una persona. Alinear es lograr que haga lo que la persona pretende: ser útil, veraz y no causar daño.
  2. Paso uno, ajuste con instrucciones: se sigue entrenando el modelo con ejemplos de indicación y respuesta ideal, escritos por personas. Enseña la forma de responder con pocos datos (InstructGPT: unas 13 mil indicaciones).
  3. Paso dos: comparar es más fácil que escribir. Con miles de preferencias se entrena un modelo de recompensa, un juez que da puntos; la probabilidad de que gane una respuesta es la sigmoide de la diferencia de puntos.
  4. Paso tres, RLHF: el modelo practica contra el juez, con una correa que lo mantiene cerca de cómo escribía. Con demasiada presión agrada al juez y la calidad real cae (ley de Goodhart). DPO llega al mismo lugar sin juez aparte.
  5. Optimizar la aprobación humana puede premiar la adulación, y el umbral de rechazo siempre cuesta algo. El asistente es el modelo base más una capa de comportamiento, decidida por personas concretas.

Lo que mucha gente cree

Creencia común Un asistente como ChatGPT es un modelo distinto, entrenado desde cero para conversar.

Lo correcto Es un modelo base preentrenado más una capa de comportamiento: ejemplos, preferencias y reglas. Esa capa cambia sobre todo cómo responde, y en InstructGPT entrenarla costó menos del dos por ciento del cómputo de GPT-3 (sin contar los datos).

Compruébalo

Cuatro preguntas. Sin nota ni cuenta: sirven para ver si la idea quedó.

Concepto¿Por qué un modelo base no responde como un asistente?
Concepto¿Qué es un modelo de recompensa?
CálculoUn modelo de recompensa le da 1.5 puntos a la respuesta A y −0.5 a la B. Con la sigmoide de la diferencia, ¿qué probabilidad hay de que A sea la preferida?
AplicaciónTras una actualización que añadió los «me gusta» de los usuarios como señal de entrenamiento, tu asistente interno empieza a darles la razón aunque se equivoquen. ¿Qué haces primero?

Por dentroPara quien quiere las fórmulas y el código. No hace falta para seguir el curso.

Paso uno: el ajuste supervisado (SFT)

Con pares (indicación xx, respuesta ideal yy), el ajuste con instrucciones minimiza la entropía cruzada solo sobre los tokens de la respuesta:

LSFT(θ)=−∑t∈respuestalog⁡πθ (yt∣x, y<t)\mathcal{L}_{\text{SFT}}(\theta) = -\sum_{t \in \text{respuesta}} \log \pi_\theta\,(y_t \mid x,\, y_{<t})

Los tokens de la indicación no aportan error (una «máscara de pérdida»). Es la pérdida de la lección 19 con otros datos, y el ajuste fino de la lección 27. InstructGPT usó unas 13 mil indicaciones con demostraciones escritas por unas 40 personas contratadas (Ouyang et al., 2022). Antes, FLAN (Wei et al., 2021) había convertido decenas de conjuntos de datos en instrucciones; después, LIMA (Zhou et al., 2023) ajustó un modelo de 65 mil millones de parámetros con solo mil ejemplos elegidos con cuidado, para argumentar que casi todo el conocimiento llega en el preentrenamiento y el ajuste enseña sobre todo el formato.

Un matiz: la frontera entre «base» y «asistente» se ha vuelto borrosa. El informe técnico de Qwen2.5 (2024) cuenta que su preentrenamiento ya usa datos sintéticos generados por modelos instruidos; con ese modelo base no se ve el contraste. Por eso la escena usa TinyLlama 1.1B base (punto de control de 3 billones de tokens) y TinyLlama-1.1B-Chat-v1.0, que según su ficha se ajustó con UltraChat (diálogos sintéticos) y luego se alineó con DPO sobre UltraFeedback (64 mil indicaciones con respuestas ordenadas por GPT-4, no por personas). Las salidas son reales, con decodificación voraz y sin retoques (build-outputs.py); es un modelo pequeño, entrenado sobre todo en inglés, y su asistente es imperfecto: el correo «de dos líneas» no sale en dos líneas.

Paso dos: el modelo de recompensa (Bradley–Terry)

Si ywy_w es la respuesta preferida y yly_l la rechazada para la indicación xx, el modelo de preferencias de Bradley–Terry supone

P(yw≻yl∣x)=σ(rϕ(x,yw)−rϕ(x,yl))P(y_w \succ y_l \mid x) = \sigma\big(r_\phi(x, y_w) - r_\phi(x, y_l)\big)

y el modelo de recompensa rϕr_\phi se entrena minimizando −E log⁡σ(rϕ(x,yw)−rϕ(x,yl))-\mathbb{E}\,\log \sigma\big(r_\phi(x,y_w) - r_\phi(x,y_l)\big). Solo importan las diferencias: sumarle una constante a todas las puntuaciones no cambia nada. En InstructGPT, quienes etiquetaban ordenaban entre 4 y 9 respuestas por indicación (sobre unas 33 mil indicaciones), lo que da (K2)\binom{K}{2} comparaciones por indicación, y el modelo de recompensa tenía 6 mil millones de parámetros, con una salida escalar. Quienes etiquetaban coincidían entre sí el 72.6 % de las veces (±1.5). Durante la recolección de datos de entrenamiento se les pidió priorizar la utilidad por encima de la veracidad y la inocuidad; en la evaluación final, al revés.

La idea de aprender una recompensa a partir de comparaciones humanas viene de Christiano et al. (2017), en juegos de Atari y robots simulados; Stiennon et al. (2020) la aplicó a resúmenes de texto, e InstructGPT, a instrucciones generales. Las preferencias no siempre vienen de personas: Constitutional AI (Bai et al., 2022) sustituye las etiquetas humanas sobre qué es dañino por una lista de principios escritos (RLAIF). En la escena, r(y)=w⋅φ(y)r(y)=\mathbf{w}\cdot\boldsymbol{\varphi}(y) con cuatro rasgos asignados a mano, y w\mathbf{w} se ajusta con regresión logística con una pequeña regularización L2.

Paso tres: optimizar con correa (RLHF)

El modelo πθ\pi_\theta se ajusta para maximizar la recompensa sin alejarse del modelo de partida πref\pi_{\text{ref}}; la «correa» es la penalización de divergencia KL:

max⁡πθ  Ex, y∼πθ[rϕ(x,y)]−β DKL(πθ(⋅∣x) ∥ πref(⋅∣x))\max_{\pi_\theta}\; \mathbb{E}_{x,\,y\sim\pi_\theta}\big[r_\phi(x,y)\big] - \beta\, D_{\mathrm{KL}}\big(\pi_\theta(\cdot\mid x)\,\|\,\pi_{\text{ref}}(\cdot\mid x)\big)

Su solución exacta tiene forma cerrada:

π∗(y∣x)=1Z(x) πref(y∣x) exp⁡ ⁣(1β r(x,y))\pi^*(y\mid x) = \frac{1}{Z(x)}\,\pi_{\text{ref}}(y\mid x)\,\exp\!\Big(\tfrac{1}{\beta}\,r(x,y)\Big)

La escena calcula esa distribución exacta; la «presión» es 1/β1/\beta. En la práctica se aproxima con algoritmos de refuerzo como PPO. InstructGPT aplicó una penalización KL por token respecto del modelo ajustado y, además, mezcló gradientes del preentrenamiento (PPO-ptx) para reducir las caídas de rendimiento en algunas tareas públicas.

Optimizar de más: la ley de Goodhart

Como rϕr_\phi es un sustituto imperfecto, optimizarlo demasiado perjudica la calidad real. Gao, Schulman y Hilton (2022) lo midieron con un modelo «de oro» que hacía el papel de las personas: con d=DKLd=\sqrt{D_{\mathrm{KL}}}, la puntuación de oro sigue Rbon(d)=d(α−βd)R_{\text{bon}}(d)=d(\alpha-\beta d) al elegir la mejor de nn muestras y RRL(d)=d(α−βlog⁡d)R_{\text{RL}}(d)=d(\alpha-\beta\log d) con refuerzo: sube, llega a un máximo y baja. En su montaje, la penalización KL no mejoró de forma medible esa frontera (podría depender de los hiperparámetros): sirve sobre todo para decidir hasta dónde llegar.

En el juguete, los rasgos son independientes en el modelo de partida (q=0.5, 0.3, 0.4, 0.2q = 0.5,\ 0.3,\ 0.4,\ 0.2), y el óptimo conserva esa independencia: la probabilidad de cada rasgo pasa a ser σ(logit⁡qj+wj/β)\sigma(\operatorname{logit} q_j + w_j/\beta). El juez de práctica tiene pesos supuestos w=(2.2, 0.5, 0.3, 0.45)\mathbf{w}=(2.2,\ 0.5,\ 0.3,\ 0.45) y la «calidad real» es otra regla supuesta, g=(3, −1.2, 0.3, −2.6)\mathbf{g}=(3,\ -1.2,\ 0.3,\ -2.6), que premia lo correcto y castiga el relleno y la complacencia. La calidad real mejora hasta 1/β≈1.251/\beta \approx 1.25 (+0.90) y luego cae, hasta −0.97 con presión 8, mientras los puntos del juez suben siempre (de 0 a +1.89).

DPO: el modelo es, en secreto, un modelo de recompensa

Despejando rr de la solución cerrada, r(x,y)=βlog⁡π∗(y∣x)πref(y∣x)+βlog⁡Z(x)r(x,y)=\beta\log\frac{\pi^*(y\mid x)}{\pi_{\text{ref}}(y\mid x)}+\beta\log Z(x). Como Bradley–Terry solo depende de diferencias, Z(x)Z(x) se cancela, y la pérdida depende solo del modelo (Rafailov et al., 2023):

LDPO=−E log⁡σ ⁣(βlog⁡πθ(yw∣x)πref(yw∣x)−βlog⁡πθ(yl∣x)πref(yl∣x))\mathcal{L}_{\text{DPO}} = -\mathbb{E}\,\log\sigma\!\Big(\beta\log\frac{\pi_\theta(y_w\mid x)}{\pi_{\text{ref}}(y_w\mid x)} - \beta\log\frac{\pi_\theta(y_l\mid x)}{\pi_{\text{ref}}(y_l\mid x)}\Big)

No hace falta muestrear del modelo durante el ajuste: se parte de un conjunto fijo de parejas. En la escena, la familia de modelos es πδ∝πref eδ⋅φ\pi_\delta\propto\pi_{\text{ref}}\,e^{\delta\cdot\varphi}; la pérdida DPO se calcula con las 16 combinaciones de rasgos y su normalización, y con la misma regularización los pesos β δ\beta\,\delta coinciden con los del modelo de recompensa: un caso exacto de la equivalencia. En un modelo real es una aproximación, porque el modelo no puede representar cualquier distribución. Con preferencias ordenadas por GPT-4 en lugar de personas, Zephyr (2023) obtuvo un asistente competente sin anotación humana nueva; TinyLlama Chat siguió esa receta.

Qué publican los laboratorios: OpenAI dice que ChatGPT se entrenó con RLHF con los métodos de InstructGPT. Llama 2 usó RLHF con muestreo por rechazo y PPO (Touvron et al., 2023); Llama 3 usó ajuste supervisado, muestreo por rechazo y DPO, y explica que los algoritmos de refuerzo más complejos eran menos estables y más difíciles de escalar (Llama Team, 2024). De otros asistentes comerciales no se publica la receta completa: no la des por supuesta.

Cuánto cuesta la capa

El «menos del 2 %» sale del artículo de InstructGPT: entrenar el modelo ajustado de 175 mil millones costó 4.9 petaflops/s-día, y el modelo final con PPO-ptx, 60, frente a 3 640 de GPT-3 (60 / 3 640 ≈ 1.6 %; con los 4.9, ≈ 1.8 %). No incluye el modelo de recompensa de 6 mil millones, la recolección de datos ni las pruebas previas. En las evaluaciones, las personas prefirieron las salidas del InstructGPT de 175 mil millones a las de GPT-3 en el 85 % de los casos (±3), y las del de 1.3 mil millones a las del GPT-3 de 175 mil millones.

En código

import math

def sigmoid(x):
    return 1 / (1 + math.exp(-x))

# 1) Modelo de recompensa (Bradley–Terry): puntos de la respuesta preferida y de la rechazada
r_pref, r_rech = 1.8, -1.1
p = sigmoid(r_pref - r_rech)               # probabilidad de que la preferida gane
print(round(p, 3), round(-math.log(p), 3))

# 2) Óptimo con correa KL: pi*(y) ∝ pi_ref(y) · exp(r(y) / beta), con tres respuestas posibles
pi_ref = [0.6, 0.3, 0.1]
r = [0.0, 1.0, 3.0]
for beta in (10.0, 1.0, 0.25):
    w = [q * math.exp(ri / beta) for q, ri in zip(pi_ref, r)]
    z = sum(w)
    print(beta, [round(x / z, 3) for x in w])

# 3) DPO: la misma pérdida, pero con log-probabilidades del modelo en lugar de puntos
beta = 0.1
logp_w, logp_l = -12.0, -15.0              # log pi_theta de la preferida y de la rechazada
ref_w, ref_l = -12.5, -14.0                # log pi_ref
margen = beta * ((logp_w - ref_w) - (logp_l - ref_l))
print(round(-math.log(sigmoid(margen)), 3))

Salida esperada:

0.948 0.054
10.0 [0.563, 0.311, 0.127]
1.0 [0.175, 0.238, 0.587]
0.25 [0.0, 0.001, 0.999]
0.621

Con β\beta grande (correa corta) el modelo casi no se mueve; con β\beta pequeño casi toda la probabilidad se concentra en la respuesta mejor puntuada y pierde variedad.

Lo que viene

Todo esto moldea el comportamiento a partir de preferencias. La siguiente lección usa la misma maquinaria de refuerzo, pero con recompensas que se pueden verificar (la respuesta de un problema de matemáticas es correcta o no) para enseñar al modelo a razonar antes de responder.

Lente de decisión

Qué significa esta idea si tu trabajo es decidir, no programar.

  • Pregunta quién calibró el modelo. Las preferencias de quienes lo evaluaron quedan incorporadas: en InstructGPT fueron unas cuarenta personas contratadas, que coincidían entre sí unas tres de cada cuatro veces, y sus autores advierten que el modelo refleja a ese grupo, no «valores humanos» en general. Pide saber quiénes, cuántas, en qué idiomas y con qué instrucciones.
  • Tono, longitud, grado de rechazo y complacencia son decisiones de producto, no hechos técnicos. En InstructGPT, durante el entrenamiento se pidió priorizar la utilidad sobre la veracidad y la inocuidad. Pide la política de comportamiento por escrito (algunas empresas la publican, como el Model Spec de OpenAI) y cómo comprueban que el modelo la cumple.
  • Cada actualización del proveedor puede cambiar el comportamiento sin cambiar el nombre del modelo. En abril de 2025 se retiró una actualización de GPT-4o por aduladora; según OpenAI, influyó una combinación de cambios, entre ellos una señal nueva con los pulgares de los usuarios. Mantén casos de prueba propios (adulación, rechazos, tono) y córrelos antes de adoptar cada versión.
  • «Optimizado con retroalimentación humana» no garantiza veracidad: se optimizó una puntuación que aproxima el gusto de las personas. Pide evaluaciones independientes de esa puntuación (lección 34) y recuerda que alinear moldea el comportamiento, no elimina las alucinaciones (lección 33).

Términos de la lección

Transcripción completa
ComentariosConversación pública de esta lección: dudas, datos por revisar, ideas.

Los comentarios viven en GitHub Discussions, en el repositorio público del curso; para escribir se necesita una cuenta de GitHub. Se cargan desde giscus.app al abrir esta sección. Las personas que revisan el curso los leen, y si un cambio se acepta, se aplica en los dos idiomas. Abrir el hilo en GitHub

Fuentes