Python Data Science Program
📓 Abrir notebook en GitHub

Clase 143 — Transformers: arquitectura, BERT, GPT (+ Flash Attention, RoPE, GQA)

Parte: 2 — Deep Learning · Fuente: Géron, cap. 16 § The Transformer Architecture + Vaswani et al. (2017) + papers BERT, GPT, FlashAttention. ⏱️ Duración estimada: 100 min.

🎯 Objetivo

Dominar la arquitectura Transformer —encoder, decoder, ambas variantes (BERT encoder-only, GPT decoder-only, T5 encoder-decoder)— a nivel de poder implementarla a mano. Conocer las mejoras clave 2022-2024 que hacen a los LLMs modernos rápidos y eficientes: Flash Attention v2/v3, RoPE (Rotary Position Embeddings), Grouped-Query Attention (GQA).

📚 Resultados de aprendizaje

Al finalizar, el estudiante podrá:

🗺️ Temas

📌 Versión profundizada — 2026

El tema moderno que vivía como complemento dentro de esta clase ahora tiene clase propia dedicada con patrón completo, ejercicios y homework:

📖 Definiciones y características

📂 Dataset / recursos

🧪 Ejercicios

  1. Transformer block desde cero: implementar def transformer_block(x): x = x + mha(LN(x)); x = x + ffn(LN(x)); return x con MultiHeadAttention y FFN.
  2. Positional encoding sinusoidal: implementar la fórmula original de Vaswani; visualizar como heatmap.
  3. Mini-GPT: 4 capas Transformer con causal mask. Entrenar en next-token sobre Tiny Shakespeare. Comparar con char-RNN (122).
  4. RoPE manual: implementar la rotación. Aplicar y verificar que attention(Q_rot, K_rot) da diferencia relativa.
  5. HuggingFace check: cargar bert-base-uncased y gpt2; imprimir model.config. Identificar num_attention_heads, hidden_size, intermediate_size.

📝 Homework verificable

Entrenar un mini-GPT desde cero sobre Tiny Shakespeare:

  1. 4 capas Transformer decoder con causal mask.
  2. d_model=128, n_heads=4, vocab=char-level.
  3. Train 20 épocas; generar 1000 caracteres con temperatura 0.7.
  4. Comparar val_loss y muestras vs char-RNN (clase 122).

Criterio de aceptación: val_loss < 1.3 (mejor que char-RNN); samples más coherentes con estructura de obra teatral.

⚠️ Errores comunes

Síntoma / mensaje Causa y cómo arreglar
Modelo entrena pero outputs son random Olvido del causal mask en decoder. Fix: use_causal_mask=True.
LayerNorm antes vs después: dudas "Pre-LN" (antes) entrena mucho mejor que "Post-LN" (Vaswani original) — todos los modelos modernos usan pre-LN.
Positional encoding aprendible explota Init mal. Fix: small std (0.02) o usar RoPE/sinusoidal.
Sin gradient checkpointing → OOM en secuencia larga Fix: tf.recompute_grad o gradient checkpointing manual.
FFN sin expansión Default es d_ff = 4 * d_model. Fix: respetar el ratio.

❓ Preguntas frecuentes

❓ ¿Encoder-only o decoder-only o ambos?

Encoder-only (BERT): clasificación, NER, similaridad. Decoder-only (GPT): generación, LLMs modernos. Encoder-decoder (T5, Whisper): traducción, transcripción.

❓ ¿GPT-style "es todo lo que necesitás" hoy?

Para LLMs generales sí. BERT-style sigue siendo eficiente para clasificación.

❓ ¿LayerNorm o RMSNorm?

RMSNorm (Zhang & Sennrich 2019) es estándar moderno — más rápida sin pérdida de calidad. Lo usan Llama, Mistral, etc.

❓ ¿Por qué RoPE en lugar de aprendible?

(a) Mejor extrapolación a longitudes no vistas, (b) propiedad relativa útil, (c) no agrega parámetros.

❓ ¿GQA solo para inference?

Se entrena con GQA desde el principio. Beneficio principal es inference; training también es marginalmente más rápido.

🔗 Referencias

📥 Material descargable

➡️ Siguiente clase

Clase 144 — Flash Attention v2/v3, RoPE, GQA: el motor de los LLMs modernos