Compendio Técnico de la Arquitectura Transformer

Fundamentos de la Arquitectura Transformer

El Transformer es un paradigma de modelado de secuencias diseñado para capturar dependencias de largo alcance mediante mecanismos de atención. A diferencia de las redes recurrentes, procesa los datos en paralelo, permitiendo una mayor eficiencia en el entrenamiento.

1. Arquitecturas Derivadas

  • Encoder-Decoder (Original): Utilizado en tareas de traducción donde se transforma una secuencia de origen en una de destino.
  • Encoder-only (ej. BERT): Especializado en la comprensión del lenguaje, clasificación de texto y extracción de entidades.
  • Decoder-only (ej. GPT): Optimizado para la generación de contenido mediante el modelado de lenguaje autorregresivo.

2. Procesamiento de Entrada: Embeddings y Codificación Posicional

Embeddings de Tokens

Cada identificador de palabra se mapea a un espacio vectorial continuo de dimensión d_model. Este proceso convierte representaciones discretas en vectores densos donde la cercanía geométrica suele correlacionarse con la similitud semántica.

Mecanismos de Posición

Debido a que la auto-atención es invariante al orden, es necesario inyectar información sobre la estructura secuencial. Existen tres enfoques principales:

  • Codificación Sinusoidal: Utiliza funciones seno y coseno de diferentes frecuencias para codificar posiciones absolutas de forma fija.
  • Embeddings Aprendidos: Vectores de posición que el modelo ajusta durante el entrenamiento.
  • Codificación Rotatoria (RoPE): Aplica una rotación a las consultas (Queries) y claves (Keys) basada en su posición relativa, técnica estándar en modelos modernos como Llama.

3. Mecanismo de Atención (Scaled Dot-Product Attention)

La operación central consiste en mapear una consulta (Query) y un conjunto de pares clave-valor (Key-Value) a una salida. El cálculo se realiza de la siguiente manera:


def calcular_atencion(q, k, v, mascara=None):
    # Dimensión de las claves
    d_k = q.shape[-1]
    
    # Producto escalar para medir similitud
    similitud = torch.matmul(q, k.transpose(-2, -1))
    
    # Escalamiento para estabilizar gradientes
    puntuaciones = similitud / math.sqrt(d_k)
    
    if mascara is not None:
        puntuaciones = puntuaciones.masked_fill(mascara == 0, -1e9)
    
    # Distribución de probabilidad sobre la secuencia
    pesos_atencion = torch.softmax(puntuaciones, dim=-1)
    
    # Agregación de valores basada en los pesos
    return torch.matmul(pesos_atencion, v)

El factor 1/sqrt(d_k) es crucial para evitar que el softmax entre en regiones de gradiente nulo cuando las dimensiones son elevadas, lo que causaría inestabilidad durante el entrenamiento.

4. Atención Multi-Cabezal (Multi-Head Attention)

En lugar de realizar una única función de atención, el modelo proyecta linealmente las consultas, claves y valores múltiples veces de forma independiente. Esto permite que el modelo atienda a información de diferentes subespacios de representación simultáneamente.


# Lógica de concatenación de cabezales
# n_cabezales * d_v = d_model
cabezales = [atencion_individual(q, k, v) for _ in range(num_cabezales)]
salida_unificada = concatenar(cabezales, dim=-1)
salida_final = proyeccion_lineal(salida_unificada)

5. Red de Alimentación Hacia Adelante (FFN)

Cada bloque incluye una red neuronal aplicada a cada posición de forma idéntica e independiente. Generamlente consiste en dos transformaciones lineales con una activación no lineal (como ReLU o GeLU) entre ellas:

FFN(x) = max(0, x * W1 + b1) * W2 + b2

6. Normalización y Conexiones Residuales

Para facilitar el entrenamiento de redes muy profundas, el Transformer utiliza:

  • Conexiones Residuales: Salida = x + Subcapa(x). Permiten que el gradiente fluya sin obstáculos por las capas iniciales.
  • Layer Normalization (LN): A diferencia de Batch Normalization, LN normaliza a través de las características de cada token individualmente, lo que es ideal para secuencias de longitud variable.

7. El Bloque del Decoder y la Máscara Causal

El bloque del decodificador introduce dos modificaciones clave respecto al codificador:

  1. Auto-atención Enmascarada: Evita que una posición determinada atienda a posiciones futuras. Durante el entrenamiento, esto se logra mediante una matriz triangular inferior que anula las conexiones con tokens posteriores.
  2. Atención Cruzada (Encoder-Decoder Attention): Las consultas provienen de la capa anterior del decodificador, mientras que las claves y valores provienen de la salida final del codificador.

8. Proceso de Inferencia

La generación de texto es un proceso iterativo:

  • Se introduce un token de inicio de secuencia (<bos>).
  • El modelo predice la distribución de probabilidad para el siguiente token.
  • Se selecciona un token (mediante búsqueda codiciosa, beam search o muestreo).
  • El token seleccionado se añade a la secuencia de entrada para la siguiente iteración.
  • El proceso termina al generar el token de fin de secuencia (<eos>) o alcanzar el límite de longitud.

Etiquetas: transformer DeepLearning NaturalLanguageProcessing AttentionMechanism PyTorch

Publicado el 10-30 17:23