26. Introducción a Transformers

26.1 Introducción

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.

26.2 ¿Por qué surgieron?

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.

26.3 La idea central

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.

En un Transformer, cada token puede consultar directamente a otros tokens para construir una representación contextual más rica.

26.4 Qué significa transformer

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.

26.5 Autoatención como componente principal

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.

26.6 Queries, keys y values

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.

  • La query representa qué información está buscando un token.
  • La key representa qué tipo de información ofrece cada token candidato.
  • El value es el contenido que se combinará si ese token resulta relevante.

El modelo compara queries con keys para calcular pesos de atención y luego mezcla los values según esos pesos.

26.7 Atención escalada por producto punto

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.

26.8 Multi-head attention

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.

26.9 Embeddings y codificación posicional

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.

26.10 ¿Por qué hace falta representar la posición?

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".

26.11 Bloques repetidos

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.

26.12 Subcapas internas

En su forma clásica, cada bloque Transformer combina al menos dos componentes fundamentales:

  • Una subcapa de atención.
  • Una red feed-forward aplicada posición por posición.

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.

26.13 Conexiones residuales y normalización

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.

26.14 Encoder y decoder

La arquitectura original presentada en el trabajo Attention Is All You Need estaba compuesta por dos grandes partes: un encoder y un decoder.

  • El encoder transforma la secuencia de entrada en representaciones contextualizadas.
  • El decoder usa esas representaciones para generar una secuencia de salida.

Este diseño fue especialmente importante en tareas secuencia a secuencia, como traducción automática.

26.15 Qué hace el encoder

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.

26.16 Qué hace el decoder

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.

26.17 Atención enmascarada

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.

26.18 Ventajas frente a arquitecturas recurrentes

Los Transformers lograron imponerse porque ofrecieron varias ventajas decisivas:

  • Mayor facilidad para modelar relaciones largas.
  • Entrenamiento mucho más paralelizable.
  • Arquitectura flexible para muchas tareas distintas.
  • Mejor escalabilidad a grandes volúmenes de datos y parámetros.

Esto hizo que el campo del NLP cambiara rápidamente hacia modelos basados en esta familia.

26.19 Límites y costos

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.

26.20 Impacto en NLP

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.

26.21 Modelos encoder-only, decoder-only y encoder-decoder

Con el tiempo, la familia Transformer dio lugar a varias configuraciones importantes:

  • Encoder-only: muy usados para comprensión y clasificación de texto.
  • Decoder-only: muy usados para generación autorregresiva de texto.
  • Encoder-decoder: muy útiles para tareas de transformación de secuencias, como traducción o resumen.

Esta distinción será muy importante cuando hablemos de modelos preentrenados concretos.

26.22 Comparación conceptual

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.

26.23 Ejemplo en Python: bloque mínimo de autoatención

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.

26.24 Qué debes recordar de este tema

  • Los Transformers colocan la autoatención en el centro de la arquitectura.
  • Permiten relacionar tokens distantes de manera más directa que las arquitecturas recurrentes.
  • Necesitan representar explícitamente la posición de los tokens.
  • La arquitectura clásica combina encoder, decoder, atención y capas feed-forward.
  • Su gran ventaja práctica es la paralelización y la escalabilidad.
  • Su gran costo es el consumo computacional, especialmente con secuencias largas.

26.25 Conclusión

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.