Saltar al contenido
Capítulo 05 · 13 min

Transformers y atención

El transformer es la arquitectura que impulsa cada LLM puntero. Su truco central (la autoatención) es lo que permite a un modelo decidir, para cada palabra, qué otras palabras de la frase importan. En cuanto lo ves, el resto del campo encaja en su sitio.

The round-table metaphorSeven tokens arranged in a circle. Each is connected to every other token with thin lines of varying intensity. One token (the focus) has thicker, accent-coloured lines showing it "attends" more strongly to some neighbours than others.

Una sala de reuniones donde cada palabra decide a qué otras palabras prestar oído.

El problema que resuelve la atención

Toma la frase: «El trofeo no cabía en la maleta marrón porque era demasiado grande.» ¿A qué se refiere «era»? Obviamente al trofeo. Ahora dale la vuelta: «…porque era demasiado pequeña.» Ahora «era» se refiere a la maleta. Para resolver el sujeto, tienes que mirar el resto de la frase y decidir qué importa.

Las arquitecturas anteriores (RNN, LSTM) procesaban el texto de izquierda a derecha, una palabra cada vez, con la esperanza de que el contexto relevante sobreviviera en un estado oculto para cuando llegara el pronombre. Eran lentas, difíciles de entrenar y a menudo olvidaban. El transformer (2017) dijo: olvídate del izquierda a derecha. Deja que cada palabra mire a todas las demás, *al mismo tiempo*, y decida qué ponderar. Eso es la atención.

Self-attention on the sentence "The trophy didn't fit because it was too big"The pronoun "it" is highlighted. Curved lines connect it to every other token in the sentence. The lines are thick and accent-coloured for the tokens it attends to most: "trophy" gets the strongest weight, and thin for the rest.ATTENTION FROM “IT”Thetrophydidn'tfitbecauseitwastoobig← “it” resolves to “trophy”
Al mirar «era», la atención pone la mayor parte de su peso en «trofeo»: el modelo ha aprendido a qué se refiere el verbo.

La autoatención, conceptualmente

Cada token desempeña tres papeles encarnados por tres vectores derivados de su embedding: una query («¿qué busco?»), una key («¿con qué encajo?»), y un value («¿qué aporto si me encuentran?»).

Para un token dado, compara su query con la key de cada otro token (un producto escalar da una puntuación de similitud). Aplica softmax a esas puntuaciones para obtener una distribución de probabilidad sobre todos los tokens. Ahora suma el value de cada token, ponderado por su puntuación. El resultado es una nueva representación de este token, mezclada a partir de las partes de la frase que ha juzgado relevantes.

Haz esto para cada token en paralelo. Toda la capa es una gigantesca multiplicación de matrices. Toda la capa se ejecuta en una GPU en milisegundos incluso para miles de tokens.

Self-attention QKV flowQ (query) and K (key) are combined by a dot product, divided by the square root of d, passed through softmax to produce attention weights, then multiplied by V (value) to produce the attention output.QK·DOT/ √dsoftmaxweights× Vattentionsoftmax(Q · Kᵀ / √d) · V
La fórmula fundamental detrás de cada LLM moderno, en forma de dimensiones: la query se encuentra con la key, se escala, softmax, se ponderan los values.

Cabezas múltiples, conversaciones múltiples

Una capa de atención aprende una sola «forma de mirar». Pero una frase tiene muchas estructuras simultáneas (sintáctica, semántica, correferencia, sentimiento). Por eso los transformers ejecutan la atención en paralelo varias veces por capa (las «cabezas»), cada una con sus propias proyecciones Q/K/V aprendidas. Una cabeza podría rastrear «¿cuál es el sujeto de este verbo?» Otra podría rastrear «¿a qué se refiere este pronombre?» Otra podría rastrear «¿es esto una pregunta?»

La mayoría de los transformers de producción tienen entre 16 y 128 cabezas de atención por capa, y entre 30 y 120 capas apiladas unas sobre otras. La cantidad total de «miradas alrededor» que hace el modelo para un solo token es asombrosa.

El bloque transformer completo

Un transformer es una pila de bloques idénticos. Cada bloque hace dos cosas:

  • Capa de autoatención: cada token presta atención a todos los demás tokens y actualiza su representación.
  • Capa feed-forward: la representación de cada token pasa por una pequeña red neuronal privada (la misma red para cada token, aplicada de forma independiente). Aquí reside la mayor parte del «conocimiento» bruto del modelo, en términos de parámetros.

Ambas capas tienen conexiones residuales (la entrada se vuelve a sumar a la salida) y un paso de normalización. La conexión residual es lo que permite apilar más de 100 capas sin que la señal se degrade. Sin ella, los transformers profundos no se entrenan.

# one transformer block, conceptually
def block(x):
    x = x + multi_head_attention(layer_norm(x))
    x = x + feed_forward(layer_norm(x))
    return x
One transformer blockA vertical stack: layer norm, multi-head attention, residual add, layer norm, feed-forward, residual add. Two curved residual arrows skip from the input around the attention and the feed-forward layers and merge back into the main path.LayerNormMulti-head attentionevery token looks around+LayerNormFeed-forwardprivate per-token network+residualINPUTOUTPUT (TO NEXT BLOCK)
Las líneas naranjas de salto son los residuales. Apila de 30 a 120 de estos bloques y tienes un LLM.

¿De dónde sale la posición?

La atención en sí es invariante a las permutaciones; no sabe qué palabra vino primero. A las frases claramente sí les importa el orden («el perro muerde al hombre» frente a «el hombre muerde al perro»). Por eso los transformers añaden una codificación posicional al embedding de cada token en la entrada. O bien un patrón sinusoidal fijo (artículo original de 2017) o, más recientemente, embeddings posicionales rotatorios aprendidos (RoPE). El modelo aprende a usar esa señal para codificar el orden.

El enmascaramiento causal: convertirlo en un modelo de lenguaje

Un modelo de lenguaje predice el siguiente token a partir de los tokens previos. Así que al calcular la atención para el token *t*, no se le puede permitir ver los tokens *t+1, t+2…*, ya que sería hacer trampa. El arreglo es una máscara causal: poner a cero las puntuaciones de atención de cada token hacia todos los tokens futuros. El modelo queda obligado a predecir solo a partir del pasado.

Esta es la diferencia entre los modelos de la familia GPT (causales, solo decodificador) y los de la familia BERT (bidireccionales, solo codificador, sin máscara). GPT genera texto; BERT entiende texto. La mayoría de los LLM modernos son solo decodificador porque generar resulta subsumir al entender.

Causal attention maskA square grid where rows are query tokens and columns are key tokens. Cells on or below the diagonal are filled: each token may attend to itself and to earlier tokens. Cells above the diagonal are blank, and the model is forbidden from looking ahead.t1t1t2t2t3t3t4t4t5t5t6t6QUERY ↓KEY →nopeekingahead
Las filas son las queries (el token que mira); las columnas son las keys. La máscara pone a cero el triángulo superior: ningún token puede prestar atención a un token futuro.

Por qué escala tan bien

Que cada token preste atención a cada token es O(n²) según la longitud de la secuencia. Para n=4000 tokens son 16 millones de productos escalares por cabeza por capa. Mucho, pero trivialmente paralelizable en una GPU. El patrón de cálculo del transformer (multiplicaciones de matrices masivas) es exactamente para lo que están construidos los aceleradores modernos. Por eso digiere bien el cómputo y por eso las leyes de escalado siguen cumpliéndose.

El coste cuadrático es también la razón de que las ventanas de contexto sean difíciles de agrandar. La mayor parte del esfuerzo de ingeniería detrás de los modelos de «contexto de 1 M de tokens» se dedica a aproximaciones ingeniosas: atención dispersa, ventanas deslizantes, caché KV, variantes de atención lineal.

Una línea por cada uno

  • La autoatención permite a cada token decidir qué otros tokens le importan, en paralelo, todo a la vez.
  • La atención multicabeza ejecuta muchas «formas de mirar» en paralelo; las capas feed-forward almacenan la mayor parte del conocimiento bruto.
  • Las conexiones residuales y la normalización de capa son lo que hace entrenables a los transformers de más de 100 capas.
  • La posición se inyecta por separado porque la atención por sí sola no tiene noción de orden; la caché KV es lo que abarata la generación.