En el tema anterior vimos que la atención permitió dejar atrás la idea de una memoria secuencial única y pasar a un acceso más flexible al contexto. Los Transformers llevan esa idea al centro mismo de la arquitectura.
Su importancia histórica es enorme porque cambiaron la forma de construir sistemas para lenguaje natural. En lugar de depender principalmente de recurrencia, los Transformers organizan el procesamiento alrededor de mecanismos de autoatención y transformaciones paralelizables.
Las RNN, las LSTM y las GRU fueron útiles, pero seguían teniendo dos límites importantes: procesaban las secuencias paso a paso y no resultaban ideales para capturar dependencias muy largas de forma eficiente.
Los Transformers surgieron para superar ese cuello de botella. La idea fue construir una arquitectura capaz de relacionar tokens distantes de manera más directa y de aprovechar mucho mejor el procesamiento paralelo durante el entrenamiento.
La intuición principal de un Transformer es esta: para representar una palabra o token no alcanza con mirarlo aislado; conviene permitir que se relacione explícitamente con otros tokens de la misma secuencia.
En vez de avanzar paso a paso acumulando estado, el modelo calcula relaciones entre posiciones y construye representaciones contextuales a partir de esas interacciones. Eso hace que el contexto deje de depender solo del orden secuencial de lectura.
El nombre Transformer alude a la idea de transformar una secuencia de representaciones en otra secuencia más informativa. Cada capa toma vectores de entrada y los convierte en vectores nuevos que incorporan cada vez más contexto.
El modelo no trabaja con palabras “crudas”, sino con representaciones numéricas que se van refinando capa tras capa.
La pieza más característica de la arquitectura es la self-attention o autoatención. En ella, cada token de la secuencia puede asignar distinto peso a los demás tokens para decidir cuáles son más relevantes en su representación.
Eso significa que una palabra puede “mirar” a otra lejana si esa relación resulta importante para la tarea, sin necesidad de atravesar una cadena recurrente larga.
La explicación estándar de la autoatención usa tres conceptos: queries, keys y values. Aunque la formulación matemática puede parecer técnica, la intuición es bastante clara.
El modelo compara queries con keys para calcular pesos de atención y luego mezcla los values según esos pesos.
En la versión clásica del Transformer, la atención se calcula mediante productos punto entre queries y keys, seguidos de una normalización con softmax. Esto produce una distribución de pesos que indica cuánto influye cada token sobre otro.
La palabra escalada aparece porque esos productos se dividen por un factor relacionado con la dimensión de los vectores, para estabilizar el cálculo numérico durante el entrenamiento.
Una sola atención ya permite modelar relaciones útiles, pero el Transformer clásico va más allá con la multi-head attention. En lugar de calcular una única relación de atención, calcula varias en paralelo.
Cada cabeza puede capturar patrones diferentes: dependencia sintáctica, relación semántica, alineamientos locales o señales más globales. Luego todas esas vistas se combinan.
La idea no es que cada cabeza tenga un significado humano fijo, sino que el modelo disponga de varias perspectivas simultáneas sobre la secuencia.
Como el Transformer no procesa la secuencia mediante recurrencia paso a paso, necesita una forma explícita de incorporar información sobre el orden de los tokens. Para eso se usan embeddings posicionales o codificaciones posicionales.
El modelo recibe no solo qué token aparece, sino también en qué posición está. De lo contrario, una secuencia con las mismas palabras en distinto orden sería indistinguible.
El mecanismo de atención, por sí solo, trata la secuencia más como un conjunto de elementos relacionados que como una cadena estrictamente ordenada. Eso es útil, pero el lenguaje depende fuertemente del orden.
Las codificaciones posicionales permiten recuperar esa información para que el modelo distinga entre frases como "el perro persigue al gato" y "el gato persigue al perro".
Un Transformer no suele consistir en una sola operación de atención, sino en una pila de bloques similares repetidos varias veces. Cada bloque refina las representaciones recibidas del bloque anterior.
La repetición de capas permite construir representaciones progresivamente más abstractas y más sensibles al contexto amplio.
En su forma clásica, cada bloque Transformer combina al menos dos componentes fundamentales:
La atención mezcla información entre tokens. La red feed-forward transforma cada representación de manera no lineal para aumentar la capacidad expresiva del modelo.
Para facilitar el entrenamiento de arquitecturas profundas, los Transformers usan conexiones residuales y normalización. Las conexiones residuales ayudan a que la información y los gradientes circulen mejor entre capas.
La normalización contribuye a estabilizar el aprendizaje y a hacer más manejable el entrenamiento de modelos muy grandes.
La arquitectura original presentada en el trabajo Attention Is All You Need estaba compuesta por dos grandes partes: un encoder y un decoder.
Este diseño fue especialmente importante en tareas secuencia a secuencia, como traducción automática.
El encoder recibe los tokens de entrada, les agrega información posicional y aplica varias capas de autoatención y transformaciones internas. Como resultado, cada token queda representado no solo por sí mismo, sino por su relación con el resto de la secuencia.
Esas salidas del encoder sirven como una especie de memoria contextual de alto nivel para etapas posteriores.
El decoder genera la salida token por token, pero lo hace apoyándose en dos fuentes de información: lo ya generado y la representación producida por el encoder.
Para evitar “mirar el futuro” durante generación autorregresiva, el decoder utiliza una variante enmascarada de la atención, de modo que cada posición solo pueda usar tokens previos.
En tareas generativas, el modelo no debe acceder a palabras futuras que todavía no correspondería conocer. La masked self-attention resuelve esto bloqueando esas posiciones durante el cálculo de atención.
Así, el modelo aprende a predecir el siguiente token usando únicamente el contexto permitido hasta ese punto.
Los Transformers lograron imponerse porque ofrecieron varias ventajas decisivas:
Esto hizo que el campo del NLP cambiara rápidamente hacia modelos basados en esta familia.
Los Transformers no son gratuitos desde el punto de vista computacional. La atención sobre secuencias largas puede ser costosa en memoria y tiempo, especialmente cuando se calculan relaciones entre todas las posiciones.
Además, el buen rendimiento de estos modelos suele apoyarse en grandes cantidades de datos, potencia de cómputo y etapas intensivas de preentrenamiento.
El impacto de Transformers fue tan fuerte que transformó casi todas las áreas del procesamiento del lenguaje natural: clasificación, traducción, resumen, pregunta-respuesta, generación de texto y recuperación de información, entre otras.
También abrió el camino a una nueva estrategia de trabajo: entrenar un modelo grande de propósito general y luego adaptarlo a múltiples tareas. Esa idea será central en los próximos temas.
Con el tiempo, la familia Transformer dio lugar a varias configuraciones importantes:
Esta distinción será muy importante cuando hablemos de modelos preentrenados concretos.
| Arquitectura | Idea principal de contexto | Limitación principal |
|---|---|---|
| RNN / LSTM / GRU | Contexto acumulado paso a paso. | Procesamiento secuencial y menor paralelización. |
| Atención | Acceso selectivo a partes relevantes. | No define por sí sola una arquitectura completa. |
| Transformer | Representaciones construidas con autoatención en capas paralelizables. | Alto costo computacional en secuencias grandes. |
Este ejemplo muestra un cálculo muy pequeño de autoatención con PyTorch. No implementa un Transformer completo, pero sí la idea central que lo sostiene: comparar tokens entre sí para producir representaciones contextualizadas.
import torch
import torch.nn.functional as F
torch.manual_seed(0)
# 4 tokens, embedding_dim = 8
x = torch.randn(4, 8)
Wq = torch.randn(8, 8)
Wk = torch.randn(8, 8)
Wv = torch.randn(8, 8)
Q = x @ Wq
K = x @ Wk
V = x @ Wv
scores = Q @ K.T / (8 ** 0.5)
pesos = F.softmax(scores, dim=-1)
salida = pesos @ V
print("Matriz de atencion:")
print(pesos)
print("\nForma de la salida:")
print(salida.shape) # torch.Size([4, 8])
La idea importante es que cada fila de pesos representa cuánto atiende un token a los demás. Esa matriz es la base conceptual sobre la que se construyen capas Transformer mucho más grandes.
Los Transformers marcaron un cambio de época en NLP porque reorganizaron el problema del contexto alrededor de relaciones explícitas entre tokens y un procesamiento mucho más escalable.
Más que una mejora puntual, introdujeron una plataforma general sobre la que después se construyeron los modelos de lenguaje más influyentes de la actualidad.
En el próximo tema estudiaremos el uso de modelos preentrenados de NLP, donde veremos cómo estas arquitecturas pasan de ser un concepto técnico a convertirse en herramientas reutilizables para resolver tareas concretas.