Transformer
Un Transformer es una red neuronal basada en la autoatención que procesa una secuencia completa en paralelo. Descubre cómo funciona, cuáles son sus variantes y cómo se usa en visión.
Un Transformer es una arquitectura de red neuronal que procesa una secuencia de tokens, como palabras o parches de imagen, permitiendo que cada token extraiga información de los demás mediante la autoatención. Investigadores de Google lo presentaron en 2017 en Attention Is All You Need para la traducción automática. Las redes neuronales recurrentes (RNN) anteriores leían las frases palabra por palabra, por lo que el entrenamiento no podía paralelizarse entre posiciones. El Transformer procesa todas las posiciones a la vez, y su modelo base alcanzó resultados de vanguardia en traducción del inglés al alemán tras 12 horas de entrenamiento en ocho GPU. Actualmente, los Transformer son la base de los grandes modelos de lenguaje (LLM), los Vision Transformer, el reconocimiento del habla y muchos modelos de detección de objetos y generación de imágenes.
Cómo funcionan los Transformer#
Primero, los tokens de entrada se convierten en embeddings, vectores de anchura fija (512 en el modelo original). A continuación, un Transformer aplica una pila de capas idénticas, cada una con dos subcapas:
- Autoatención multi-cabeza: Cada token produce un vector de consulta, una clave y un valor. La salida de un token es una media ponderada de todos los vectores de valor, cuyos pesos dependen de cuánto coincida su consulta con cada clave, tal como se explica en el mecanismo de atención. Varias cabezas se ejecutan en paralelo —ocho en el modelo original—, de modo que pueden seguir relaciones distintas.
- Red neuronal feed-forward: Una red de dos capas aplicada por separado a cada token, que transforma la información recopilada por la atención.
Una conexión residual rodea cada subcapa y la normalización de capas mantiene estables las activaciones. El modelo original apilaba seis de estas capas en un codificador, que lee la frase de origen, y seis en un decodificador, que escribe la traducción token a token. Cada capa del decodificador añade un paso de autoatención enmascarada que oculta los tokens futuros y otro de atención cruzada que lee la salida del codificador:
La atención compara los tokens únicamente por su contenido, así que una capa Transformer no tiene una noción de orden integrada: si se desordenan los tokens de entrada, solo se desordenan las salidas. Por eso, la información de posición se añade a los embeddings de tokens mediante patrones fijos de senos y cosenos en el artículo original, vectores de posición aprendidos en BERT y ViT, o embeddings posicionales rotatorios (RoPE) en la mayoría de los LLM actuales. Este código de PyTorch muestra el efecto con una capa de codificador:
import torch
from torch import nn
# Una capa de codificador Transformer y una secuencia de 5 embeddings de tokens
torch.manual_seed(0)
layer = nn.TransformerEncoderLayer(d_model=32, nhead=4, batch_first=True).eval()
tokens = torch.randn(1, 5, 32)
reverse = torch.arange(4, -1, -1)
# La autoatención por sí sola ignora el orden: invertir la entrada solo invierte la salida
print(torch.allclose(layer(tokens[:, reverse])[:, reverse], layer(tokens), atol=1e-5))
# Añadir un vector aprendido por posición hace que cada salida dependa de dónde se encuentre su token
positions = nn.Embedding(5, 32).weight
reordered = layer(tokens[:, reverse] + positions)[:, reverse]
print(torch.allclose(reordered, layer(tokens + positions), atol=1e-5))Muestra True y, a continuación, False: invertir los tokens solo invierte las salidas hasta que se añaden los vectores de posición; después, el orden de los tokens cambia la salida de cada token.
Modelos de codificador, decodificador y codificador-decodificador#
Las tres formas de utilizar la pila original sirven para tareas distintas:
- Solo codificador: Cada token presta atención a toda la entrada en ambas direcciones, lo que resulta adecuado para tareas de comprensión. BERT para texto y ViT para imágenes utilizan solo un codificador.
- Solo decodificador: Cada token presta atención únicamente a los tokens anteriores, por lo que el modelo genera texto token a token. Los modelos GPT y la mayoría de los LLM actuales utilizan este diseño.
- Codificador-decodificador: Un codificador lee una secuencia y un decodificador escribe otra mientras presta atención a la primera, como ocurre en los modelos de traducción, T5 y el reconocedor de voz Whisper.
Transformer en visión artificial#
El Vision Transformer (ViT) trata una imagen como una secuencia de parches de 16×16 píxeles y aplica un codificador Transformer sin modificar. El Swin Transformer limita la atención a ventanas locales para poder trabajar con imágenes de alta resolución. DETR reformuló la detección como una predicción de conjuntos: un decodificador Transformer convierte un conjunto fijo de consultas de objeto aprendidas en cajas, una por consulta, lo que elimina la supresión no máxima (NMS) y los anclajes diseñados manualmente. El paquete Ultralytics ejecuta RT-DETR de Baidu, una versión en tiempo real de este diseño cuyo codificador híbrido aplica una capa de codificador Transformer solo al mapa de características de stride 32 —400 tokens para una imagen de 640×640— y cuyo decodificador de seis capas refina 300 consultas de objeto para obtener las detecciones finales sin NMS. Los Transformer también generan imágenes: los Transformer de difusión han sustituido a U-Net en modelos recientes de texto a imagen y de vídeo, y los modelos de visión y lenguaje introducen tokens de imagen en un LLM solo decodificador.
Transformer frente a arquitecturas relacionadas#
- Redes neuronales convolucionales (CNN): Una convolución observa un vecindario pequeño con el mismo filtro en cada posición, una suposición integrada que resulta útil con conjuntos de datos pequeños. La atención puede vincular dos posiciones cualesquiera en una sola capa, pero tiene que aprender la estructura espacial a partir de los datos; por eso, los Transformer suelen necesitar más datos de entrenamiento o preentrenamiento para superar a las CNN.
- RNN y LSTM: Mantienen un estado de tamaño fijo de un paso al siguiente, por lo que la memoria por token es constante, pero el entrenamiento es secuencial. Un Transformer mantiene disponibles todos los tokens anteriores y se entrena en paralelo.
- Modelos de espacio de estados: Arquitecturas como Mamba procesan secuencias con un estado recurrente cuyo coste aumenta linealmente con la longitud, y los modelos híbridos las intercalan con capas de atención.
La autoatención compara cada token con todos los demás, por lo que su coste aumenta con el cuadrado de la longitud de la secuencia. Una secuencia de 4096 tokens tiene unos 16,8 millones de pares consulta-clave en cada cabeza de cada capa, y duplicar la longitud a 8192 tokens cuadruplica esa cifra hasta unos 67 millones. FlashAttention reduce el tráfico de memoria de este cálculo, y la caché KV almacena las claves y los valores de los tokens anteriores para que el decodificador los calcule una sola vez durante la generación.










