Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Arquitectura Transformer

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

Arquitectura Transformer

Curso : CLAUDE AI - Ingeniería, Economía y Ciencia de Datos

Avatar for Abraham Zamudio

Abraham Zamudio

September 20, 2026

More Decks by Abraham Zamudio

Other Decks in Education

Transcript

  1. Arquitectura Transformer Motivación y Contexto Histórico 1 Motivación y Contexto

    Histórico 1.1 El Problema Fundamental del Procesamiento de Secuencias El procesamiento de datos secuenciales representa uno de los desafíos más fundamentales y persistentes en el desarrollo de sistemas de inteligencia artificial. Desde las primeras investigaciones en procesamiento de lenguaje natural hasta las aplicaciones modernas de series temporales financieras, la capacidad de modelar dependencias temporales y contextuales ha sido una piedra angular del aprendizaje automático. Sin embargo, durante décadas, la comunidad de investigación se enfrentó a limitaciones arquitectónicas que parecían inherentes al problema mismo: ¿cómo puede una red neuronal “recordar” información relevante de pasos temporales distantes mientras procesa secuencialmente una entrada? Antes de la introducción del Transformer por Vaswani et al. en 2017, el paradigma dominante para el modelado de secuencias estaba constituido por las Redes Neuronales Recurrentes (RNN, por sus siglas en inglés) y sus variantes sofisticadas como LSTM (Long Short-Term Memory) y GRU (Gated Recurrent Unit). Estas arquitecturas, aunque revolucionarias en su momento, adolecían de limitaciones fundamentales que impedían su escalabilidad efectiva a problemas de gran escala. El Transformer no surgió como una mejora incremental, sino como una reimaginación radical de cómo las redes neuronales deberían procesar información secuencial, eliminando por completo la recurrencia y apostando todo al mecanismo de atención. Para comprender la magnitud de este cambio de paradigma, es esencial analizar rigurosamente las limitaciones de las arquitecturas recurrentes desde múltiples perspectivas: teórica, computacional y práctica. Este análisis nos permitirá apreciar no solo por qué el Transformer fue necesario, sino también por qué sus principios de diseño continúan dominando el landscape del aprendizaje profundo siete años después de su introducción. 1.2 El Paradigma RNN/LSTM: Fortalezas y Limitaciones Fundamentales Las Redes Neuronales Recurrentes representaron durante más de dos décadas el estado del arte en modelado de secuencias. Su principio de funcionamiento es conceptualmente elegante: mantener un estado oculto ℎ𝑡 que se actualiza en cada paso temporal 𝑡 mediante una función de transición que depende tanto de la entrada actual 𝑥𝑡 como del estado anterior ℎ𝑡−1 : ℎ𝑡 = 𝑓𝑊 (ℎ𝑡−1 , 𝑥𝑡 ) (1) donde 𝑊 representa los parámetros aprendibles de la red y 𝑓𝑊 es típicamente una transformación no lineal como tanh(𝑊ℎ ℎ𝑡−1 + 𝑊𝑥 𝑥𝑡 + 𝑏). Esta formulación matemática simple encarna una idea poderosa: la secuencia se procesa token por token, y la información del pasado se “comprime” en el vector de estado oculto. En teoría, este estado debería contener toda la información relevante de la historia de la secuencia para tomar decisiones en el paso actual. Las variantes LSTM y GRU refinaron este mecanismo introduciendo puertas (gates) que controlan explícitamente qué información se mantiene, se olvida o se añade al estado, resolviendo parcialmente el problema del desvanecimiento del gradiente. Sin embargo, esta arquitectura recurrente conlleva limitaciones intrínsecas que resultaron ser insuperables para el escalado a modelos masivos: 1.2.1. Limitación 1: Procesamiento Inherentemente Secuencial La dependencia explícita de ℎ𝑡 respecto a ℎ𝑡−1 impone un orden de computación estricto: no es posible calcular el estado en el paso 𝑡 sin haber completado el cálculo en el paso 𝑡 − 1. Esta dependencia causal crea un cuello de botella fundamental para la paralelización. Abraham Zamudio 1
  2. Arquitectura Transformer 1.2 El Paradigma RNN/LSTM Desde una perspectiva de

    ingeniería de software y hardware, esto significa que durante el entrenamiento, procesar una secuencia de longitud 𝑛 requiere 𝑛 pasos secuenciales, cada uno dependiendo del anterior. En contraste con las redes feed-forward o convolucionales, donde todas las operaciones pueden ejecutarse en paralelo aprovechando al máximo las GPUs modernas, las RNN desperdician la mayor parte del potencial computacional del hardware contemporáneo. Consideremos un ejemplo concreto: si entrenamos un modelo de lenguaje en un corpus con secuencias de longitud promedio 500 tokens, cada iteración de entrenamiento requiere 500 pasos secuenciales de computación. Incluso si cada paso individual es rápido, la latencia acumulada es significativa. Más críticamente, no podemos acelerar este proceso simplemente añadiendo más GPUs o núcleos de procesamiento, porque la dependencia secuencial es inherente al algoritmo, no una limitación de implementación. Nota de Implementación Durante la inferencia (generación de texto), esta limitación es inevitable: debemos generar token por token porque cada nuevo token depende de los anteriores. Sin embargo, durante el entrenamiento con teacher forcing (donde tenemos acceso a toda la secuencia objetivo), no existe ninguna razón teórica que impida el procesamiento paralelo. El Transformer explota precisamente esta observación: si durante el entrenamiento conocemos toda la secuencia de entrada, ¿por qué procesarla secuencialmente? 1.2.2. Limitación 2: El Problema del Vanishing Gradient desde una Perspectiva Matemática El problema del desvanecimiento (o explosión) del gradiente es quizás la limitación más estudiada de las RNN. Para comprenderlo rigurosamente, analicemos la propagación del gradiente a través del tiempo (BPTT, Backpropagation Through Time). Supongamos que queremos calcular el gradiente de la función de pérdida L en el paso temporal 𝑡 respecto a los parámetros 𝑊 que afectan el estado en un paso anterior 𝜏 < 𝑡. Aplicando la regla de la cadena: 𝜕L𝑡 𝜕L𝑡 𝜕ℎ𝑡 𝜕ℎ𝑡−1 𝜕ℎ𝜏+1 𝜕ℎ𝜏 = · · ··· · (2) 𝜕𝑊 𝜕ℎ𝑡 𝜕ℎ𝑡−1 𝜕ℎ𝑡−2 𝜕ℎ𝜏 𝜕𝑊 Î 𝜕ℎ 𝑘+1 El término crítico es el producto de Jacobianos 𝑡−1 𝑘=𝜏 𝜕ℎ 𝑘 . Para una RNN simple con ℎ 𝑘+1 = tanh(𝑊ℎ ℎ 𝑘 + 𝑊𝑥 𝑥 𝑘 + 𝑏), tenemos: 𝜕ℎ 𝑘+1 = diag(1 − tanh2 (𝑊ℎ ℎ 𝑘 + 𝑊𝑥 𝑥 𝑘 + 𝑏)) · 𝑊ℎ𝑇 (3) 𝜕ℎ 𝑘 La norma espectral de esta matriz Jacobiana está dominada por la norma espectral de 𝑊ℎ , multiplicada por un factor de contracción debido a la derivada de tanh (que está acotada por 1). Si la norma espectral de 𝑊ℎ es menor que 1, el producto de 𝑛 tales matrices decaerá exponencialmente con 𝑛. Si es mayor que 1, crecerá exponencialmente (explosión del gradiente). Desvanecimiento del Gradiente en RNN 𝑡 Sea 𝜆 máx el valor propio dominante de 𝑊ℎ . Si |𝜆 máx | < 1, entonces la norma del gradiente 𝜕L 𝜕ℎ 𝜏 decae exponencialmente con la distancia temporal (𝑡 − 𝜏), haciendo imposible el aprendizaje de dependencias de largo plazo. Las arquitecturas LSTM y GRU mitigan este problema mediante puertas que crean caminos de gradiente aditivos (en lugar de multiplicativos puros), permitiendo que el gradiente fluya sin atenuación exponencial a través de la conexión de celda. Sin embargo, incluso con estas mejoras, el aprendizaje Abraham Zamudio 2
  3. Arquitectura Transformer 1.3 La Revolución de la Atención Mecánica: De

    la Recurrencia a la Conexión Total de dependencias muy largas (cientos o miles de pasos temporales) sigue siendo problemático en la práctica. 1.2.3. Limitación 3: Cuello de Botella de Información en el Estado Oculto Independientemente del mecanismo de puertas, el estado oculto ℎ𝑡 en una RNN tiene dimensionalidad fija 𝑑model . Esto significa que toda la información relevante de la historia de la secuencia 𝑥 1 , 𝑥2 , . . . , 𝑥𝑡 debe comprimirse en un vector de dimensión 𝑑model . Desde una perspectiva de teoría de la información, esto impone un límite fundamental a la cantidad de información que puede preservarse. Si la entropía de la secuencia de entrada excede la capacidad del estado oculto (medida en bits), necesariamente se produce pérdida de información. En la práctica, esto se manifiesta como una dificultad para mantener coherencia en textos largos o para recordar detalles específicos mencionados muchas posiciones atrás. El mecanismo de atención del Transformer resuelve radicalmente este problema: en lugar de comprimir toda la historia en un solo vector, permite acceso directo a todos los estados anteriores, eliminando el cuello de botella de información. 1.3 La Revolución de la Atención Mecánica: De la Recurrencia a la Conexión Total El mecanismo de atención no fue introducido por primera vez en el paper “Attention Is All You Need” de 2017. Sus raíces se remontan a trabajos anteriores en traducción automática neuronal, particularmente el trabajo seminal de Bahdanau et al. (2015) y Luong et al. (2015), quienes introdujeron la atención como un mecanismo complementario a las RNN para mejorar la alineación entre secuencias de entrada y salida en tareas de traducción. Sin embargo, en estos trabajos pioneros, la atención era un componente adicional a la arquitectura recurrente subyacente. El encoder seguía siendo una RNN (típicamente bidireccional) que procesaba la secuencia de entrada, y el decoder era otra RNN que generaba la secuencia de salida. La atención permitía que el decoder, en cada paso de tiempo, “mirara” selectivamente diferentes posiciones del encoder, ponderando su relevancia. Esto mejoró dramáticamente el rendimiento en traducción, especialmente para oraciones largas, porque mitigaba el cuello de botella de información del estado oculto final del encoder. La contribución revolucionaria de Vaswani et al. (2017) fue darse cuenta de que la recurrencia no era necesaria en absoluto. Si el mecanismo de atención permite acceder directamente a cualquier posición de la secuencia, ¿por qué mantener la arquitectura recurrente que procesa secuencialmente? Eliminar la recurrencia por completo y basar la arquitectura exclusivamente en atención tuvo implicaciones profundas: 1. Paralelización masiva: Sin dependencias recurrentes, todas las posiciones de la secuencia pueden procesarse simultáneamente durante el entrenamiento. 2. Distancia de camino constante: La distancia entre cualquier par de posiciones en términos de operaciones es 𝑂 (1) (una sola operación de atención), en contraste con 𝑂 (𝑛) en una RNN. Esto facilita el flujo de gradientes y el aprendizaje de dependencias de largo alcance. 3. Inductive bias reducido: Las RNN imponen un fuerte sesgo inductivo de localidad temporal (el presente depende principalmente del pasado reciente). El Transformer, al permitir conexiones directas entre cualquier par de posiciones, es más flexible y puede aprender dependencias no locales si los datos lo justifican. Abraham Zamudio 3
  4. Arquitectura Transformer 1.4 El Contexto del Paper Fundacional: “Attention Is

    All You Need” Definición Técnica Self-Attention (Atención Interna): Dada una secuencia de embeddings de entrada 𝑋 = (𝑥1 , 𝑥2 , . . . , 𝑥 𝑛 ), el mecanismo de self-attention calcula para cada posición 𝑖 una representación contextualizada 𝑧𝑖 como combinación ponderada de todas las posiciones 𝑗: 𝑧𝑖 = 𝑛 ∑︁ 𝛼𝑖 𝑗 𝑣 𝑗 (4) 𝑗=1 donde los pesos de atención 𝛼𝑖 𝑗 se calculan como: exp(𝑒𝑖 𝑗 ) 𝛼𝑖 𝑗 = Í𝑛 , 𝑘=1 exp(𝑒𝑖𝑘 ) 𝑒𝑖 𝑗 = (𝑊 𝑄 𝑥𝑖 ) · (𝑊 𝐾 𝑥 𝑗 ) √ 𝑑𝑘 (5) con 𝑊 𝑄 , 𝑊 𝐾 , 𝑊 𝑉 matrices de proyección aprendibles y 𝑣 𝑗 = 𝑊 𝑉 𝑥 𝑗 . Esta formulación permite que cada token “consulte” (query) a todos los demás tokens, comparando su vector de consulta 𝑞𝑖 = 𝑊 𝑄 𝑥𝑖 con las claves 𝑘 𝑗 = 𝑊 𝐾 𝑥 𝑗 de todos los tokens, y agregando los valores 𝑣 𝑗 = 𝑊 𝑉 𝑥 𝑗 ponderados por la relevancia calculada. 1.4 El Contexto del Paper Fundacional: “Attention Is All You Need” El paper de Vaswani et al. fue presentado en la conferencia NeurIPS 2017 y surgió del equipo de Google Brain y Google Research. El contexto temporal es importante: en 2017, el estado del arte en traducción automática estaba dominado por arquitecturas encoder-decoder basadas en LSTM con atención. El paper demostró que un modelo basado puramente en atención no solo igualaba el rendimiento de estos sistemas, sino que los superaba significativamente en calidad de traducción (medida por BLEU score) mientras reducía drásticamente el tiempo de entrenamiento. Los resultados específicos fueron contundentes: En la tarea de traducción inglés-alemán (WMT 2014), el Transformer alcanzó 28.4 BLEU, superando el récord anterior de 26.3 BLEU. En traducción inglés-francés, estableció un nuevo estado del arte con 41.8 BLEU. El tiempo de entrenamiento se redujo de 3.5 días (mejor modelo anterior) a 12 horas en 8 GPUs P100, representando una mejora de más de 10× en eficiencia computacional. Más allá de las métricas, el paper introdujo varias innovaciones arquitectónicas que se han convertido en estándar: 1. Multi-Head Attention: En lugar de calcular atención una sola vez, se calcula en paralelo en múltiples “cabezas” con diferentes proyecciones, permitiendo al modelo atender a diferentes aspectos de la información simultáneamente. 2. Positional Encoding: Al eliminar la recurrencia, se pierde la noción inherente de orden temporal. El paper introdujo codificaciones posicionales sinusoidales que se suman a los embeddings de entrada para inyectar información sobre la posición relativa y absoluta de los tokens. 3. Residual Connections y Layer Normalization: Cada subcapa (atención o feed-forward) está rodeada por conexiones residuales y normalización, facilitando el entrenamiento de arquitecturas muy profundas. 4. Arquitectura Encoder-Decoder: El modelo completo consta de un encoder (que procesa la secuencia de entrada) y un decoder (que genera la secuencia de salida), cada uno compuesto por 𝑁 = 6 capas apiladas. Abraham Zamudio 4
  5. Arquitectura Transformer 1.5 Implicaciones para el Escalamiento y los LLMs

    Modernos 1.5 Implicaciones para el Escalamiento y los LLMs Modernos Quizás la consecuencia más profunda del Transformer, no completamente anticipada en 2017, fue su capacidad para escalar de manera efectiva. La eliminación de la recurrencia y la paralelización masiva permitieron entrenar modelos con órdenes de magnitud más parámetros de lo que era viable con RNNs. Esto dio origen a la era de los Large Language Models (LLMs): GPT (2018): OpenAI demostró que un Transformer decoder-only (solo el decoder, sin encoder) pre-entrenado en texto no etiquetado y luego fine-tuneado podía lograr rendimiento state-of-the-art en múltiples tareas de NLP. BERT (2018): Google introdujo el pre-entrenamiento bidireccional con enmascaramiento de tokens, mostrando que un Transformer encoder-only podía aprender representaciones lingüísticas profundas. GPT-3 (2020): Con 175 mil millones de parámetros, demostró capacidades emergentes de few-shot learning, sugiriendo que el escalamiento continuo revela comportamientos cualitativamente nuevos. La familia Llama, Claude, GPT-4 (2023-2024): Modelos con cientos de miles de millones a billones de parámetros que exhiben razonamiento complejo, programación, y comprensión del mundo. El principio unificador es que el Transformer, al ser altamente paralelizable y tener un camino de gradiente corto entre cualquier par de tokens, permite aprovechar eficientemente: 1. Datos masivos: Puede entrenarse en corpus de billones de tokens. 2. Hardware moderno: Aprovecha al máximo GPUs y TPUs con paralelismo masivo. 3. Parámetros abundantes: Escala a arquitecturas con miles de millones de parámetros sin problemas de optimización insuperables. Nota de Implementación Las Leyes de Escalamiento (Scaling Laws) descubiertas empíricamente por Kaplan et al. (2020) y refinadas posteriormente muestran que el rendimiento de los Transformers sigue una ley de potencia predecible en función del número de parámetros, cantidad de datos de entrenamiento y cómputo utilizado. Esto sugiere que, dentro de ciertos regímenes, simplemente “escalar” el modelo (más parámetros, más datos, más cómputo) produce mejoras sistemáticas y predecibles, una propiedad que no se observaba en arquitecturas recurrentes. 1.6 Conclusión de la Sección El Transformer no surgió en el vacío. Fue la respuesta a limitaciones fundamentales de las arquitecturas recurrentes que habían dominado el procesamiento de secuencias durante décadas. Al eliminar la recurrencia y basarse exclusivamente en mecanismos de atención, resolvió simultáneamente: El problema de la paralelización computacional El problema del vanishing gradient en dependencias de largo plazo El cuello de botella de información en estados ocultos de dimensión fija Pero más allá de resolver problemas existentes, el Transformer habilitó algo completamente nuevo: la posibilidad de entrenar modelos con escalas de parámetros y datos previamente inimaginables, dando origen a la revolución de los LLMs que estamos viviendo. En las siguientes secciones, desglosaremos matemáticamente cada componente de esta arquitectura y exploraremos las variantes modernas que han refinado el diseño original. Abraham Zamudio 5
  6. Arquitectura Transformer Visión General de la Arquitectura 2 Visión General

    de la Arquitectura 2.1 Introducción: Del Diseño Original al Paradigma Moderno La arquitectura Transformer, tal como fue propuesta en el paper fundacional Attention Is All You Need (Vaswani et al., 2017), sigue un patrón encoder–decoder clásico en tareas de secuencia a secuencia (seq2seq). Esta estructura, heredada conceptualmente de los modelos RNN-encoder-decoder de Sutskever et al. (2014) y Bahdanau et al. (2015), fue diseñada originalmente para tareas como la traducción automática, donde una secuencia de entrada (por ejemplo, una oración en inglés) debe mapearse a una secuencia de salida (la misma oración en alemán) de longitud potencialmente diferente. Sin embargo, una de las observaciones más profundas de la última década es que esta arquitectura modular admite tres variantes fundamentales, cada una optimizada para familias distintas de problemas: 1. Encoder-only: modelos bidireccionales diseñados para comprensión del lenguaje (NLU). 2. Decoder-only: modelos autoregresivos diseñados para generación de lenguaje. 3. Encoder-Decoder: modelos seq2seq diseñados para tareas de transducción. Los Large Language Models (LLMs) modernos —GPT-4, Llama 3, Claude, Gemini— han adoptado casi exclusivamente la variante decoder-only, demostrando empíricamente que un modelo de lenguaje sufficiently escalado puede resolver virtualmente cualquier tarea de NLP mediante prompting adecuado. Esta sección desarrolla con rigor técnico cada uno de estos componentes. 2.2 La Arquitectura Encoder-Decoder Original El Transformer original consiste en dos stacks apilados: un encoder que procesa la secuencia de entrada y un decoder que genera la secuencia de salida. Ambos stacks están compuestos por 𝑁 capas idénticas apiladas (el paper original usa 𝑁 = 6). La Figura 1 muestra el flujo completo de datos. Linear + Softmax → distribución Decoder Encoder Decoder stack Encoder stack 𝑁 × capas 𝑁 × capas 𝐾, 𝑉 Masked Self-Attention Self-Attention (bidireccional) Cross-Attention Feed-Forward Network Feed-Forward Network Embedding Embedding + Positional Encoding + Positional Encoding Tokens de entrada Tokens objetivo (ej: “El gato come”) (ej: “The cat eats”) Figura 1: Arquitectura general del Transformer original (encoder-decoder). Los LLMs modernos retienen solo el decoder stack y reemplazan el cross-attention por self-attention causal. Abraham Zamudio 6
  7. Arquitectura Transformer 2.3 El Encoder: Extracción de Representaciones Contextuales Definición

    Técnica Transducción de secuencias: El problema que resuelve la arquitectura encoder-decoder consiste en aprender una función 𝑓 : X ∗ → Y ∗ que mapea secuencias de longitud variable de un dominio fuente X a secuencias de longitud variable de un dominio objetivo Y, típicamente mediante maximización de la verosimilitud condicional: 𝑦ˆ = arg máx 𝑃(𝑦 1 , . . . , 𝑦 𝑚 | 𝑥1 , . . . , 𝑥 𝑛 ) (6) 𝑦 1 ,...,𝑦 𝑚 donde la distribución se factoriza autoregresivamente como 𝑃(y | x) = 2.3 Î𝑚 𝑡=1 𝑃(𝑦 𝑡 | 𝑦 <𝑡 , x). El Encoder: Extracción de Representaciones Contextuales El encoder toma una secuencia de entrada x = (𝑥1 , . . . , 𝑥 𝑛 ) y produce una secuencia de representaciones contextuales z = (𝑧1 , . . . , 𝑧 𝑛 ), donde cada 𝑧𝑖 ∈ R𝑑model codifica información sobre toda la secuencia, no solo sobre el token 𝑥𝑖 . 2.3.1. Flujo de datos en el encoder El proceso completo del encoder se describe en tres etapas: 1. Embedding + Positional Encoding: Cada token discreto 𝑥𝑖 se mapea a un vector denso 𝑒𝑖 ∈ R𝑑model mediante una tabla de embeddings entrenable, y se le suma un vector posicional 𝑝𝑖 : ℎ𝑖(0) = 𝑒𝑖 + 𝑝𝑖 (7) El embedding captura significado léxico; el positional encoding inyecta información de orden. 2. Stack de 𝑁 capas: Cada capa 𝑙 transforma las representaciones de la capa anterior:   ˜ℎ (𝑙) = LayerNorm ℎ (𝑙−1) + MHA(ℎ (𝑙−1) )   ℎ (𝑙) = LayerNorm ℎ˜ (𝑙) + FFN( ℎ˜ (𝑙) ) (8) (9) donde MHA es Multi-Head Attention y FFN es una red feed-forward position-wise. 3. Salida contextual: La representación final ℎ (𝑁) contiene, para cada posición, una codificación que integra información global de toda la secuencia de entrada. 2.3.2. Self-Attention bidireccional El componente clave del encoder es la self-attention bidireccional. A diferencia del decoder, aquí cada token puede “atender” a todos los demás tokens de la secuencia, sin restricciones de causalidad. Formalmente, para el token en la posición 𝑖: √ 𝑛 ∑︁ exp(𝑞𝑖 · 𝑘 𝑗 / 𝑑 𝑘 ) 𝑧𝑖 = 𝛼𝑖 𝑗 𝑣 𝑗 , 𝛼𝑖 𝑗 = Í𝑛 (10) √ exp(𝑞 · 𝑘 / 𝑑 ) 𝑖 𝑘 𝑘 𝑘=1 𝑗=1 donde 𝛼𝑖 𝑗 > 0 para todo 𝑗, incluyendo tanto tokens anteriores como posteriores a 𝑖. Esta bidireccionalidad es fundamental para tareas de comprensión: la interpretación de “banco” en “El banco del parque” vs. “El banco donde deposité dinero” requiere acceso al contexto completo, no solo al prefijo. Abraham Zamudio 7
  8. Arquitectura Transformer 2.4 El Decoder: Generación Autoregresiva Nota de Implementación

    Bidireccionalidad y representaciones contextuales: La bidireccionalidad del encoder permite que la representación de cada token dependa de todo su contexto. Esto es análogo a los modelos de lenguaje enmascarados (Masked Language Models, MLMs), donde el objetivo es predecir tokens ocultos dado el contexto completo. Modelos como BERT y RoBERTa explotan esta propiedad para aprender representaciones ricas que luego se usan como features para downstream tasks. 2.4 El Decoder: Generación Autoregresiva El decoder es estructuralmente similar al encoder, pero con dos diferencias críticas diseñadas para respetar la naturaleza causal de la generación de secuencias: 1. Masked Self-Attention: La atención dentro del decoder se restringe para que el token en la posición 𝑖 solo pueda atender a posiciones 𝑗 ≤ 𝑖. 2. Cross-Attention: Una sub-capa adicional que permite al decoder “consultar” las representaciones del encoder. 2.4.1. Masked Self-Attention: La máscara causal Durante el entrenamiento y la inferencia, el decoder debe respetar una restricción fundamental: al predecir el token 𝑦 𝑡 , el modelo solo puede depender de los tokens anteriores 𝑦 1 , . . . , 𝑦 𝑡−1 , nunca de tokens futuros. Esto es esencial tanto por razones lógicas (no se puede “predecir” información que aún no se ha generado) como para evitar filtración de información (data leakage). Esta restricción se implementa mediante una máscara aditiva√en la matriz de atención. Dada la matriz de scores antes del softmax 𝑆 ∈ R𝑚×𝑚 donde 𝑆𝑖 𝑗 = 𝑞𝑖 · 𝑘 𝑗 / 𝑑 𝑘 , se aplica: ( 𝑆𝑖 𝑗 si 𝑗 ≤ 𝑖 (11) 𝑆˜𝑖 𝑗 = −∞ si 𝑗 > 𝑖 Después del softmax, las entradas con −∞ se convierten en 0, efectivamente eliminando la atención a tokens futuros. La máscara es una matriz triangular inferior: 0 −∞ −∞ · · · −∞ © ª ­0 0 −∞ · · · −∞® ­ ® 0 · · · −∞® 𝑀 = ­­0 0 .. .. .. ®® ... ­ ... . . . ® ­ 0 ··· 0 ¬ «0 0 y los scores enmascarados se calculan como 𝑆˜ = 𝑆 + 𝑀. (12) Equivalencia con generación autoregresiva La máscara causal garantiza que la distribución condicional del decoder sea consistente con la factorización autoregresiva: 𝑃(𝑦 1 , . . . , 𝑦 𝑚 ) = 𝑚 Ö 𝑃(𝑦 𝑡 | 𝑦 1 , . . . , 𝑦 𝑡−1 ) (13) 𝑡=1 Esto es equivalente a generar un token a la vez, donde cada predicción 𝑦 𝑡 depende únicamente del prefijo 𝑦 <𝑡 . Abraham Zamudio 8
  9. Arquitectura Transformer 2.5 Dinámica de Entrenamiento vs. Inferencia 2.4.2. Cross-Attention:

    La conexión encoder-decoder El cross-attention (también llamado encoder-decoder attention) es el mecanismo mediante el cual el decoder “consulta” la salida del encoder. En esta sub-capa: Las queries 𝑄 provienen del estado actual del decoder. Las keys 𝐾 y values 𝑉 provienen de las representaciones finales del encoder ℎ (𝑁) . Matemáticamente, para la capa 𝑙 del decoder: (𝑙−1) (𝑁) CrossAttn (𝑙) (𝐻dec , 𝐻enc ) = MHA(𝑄, 𝐾, 𝑉) (𝑙−1) 𝑄 𝑄 = 𝐻dec 𝑊 , (𝑁) 𝐾 𝐾 = 𝐻enc 𝑊 , (14) (𝑁) 𝑉 𝑉 = 𝐻enc 𝑊 (15) Esta operación permite que, al generar cada token de salida, el decoder “mire” las partes relevantes de la secuencia de entrada. En traducción, por ejemplo, al generar la palabra “come”, el cross-attention se enfocará en el token “come” de la oración fuente. 2.4.3. Flujo completo en una capa del decoder Cada capa 𝑙 del decoder procesa sus entradas en tres sub-capas secuenciales: 1. Masked Self-Attention: Atención causal dentro del decoder. 2. Cross-Attention: Atención a las salidas del encoder. 3. Feed-Forward Network: Transformación no lineal position-wise. Cada sub-capa está rodeada por conexiones residuales y normalización, de forma análoga al encoder. Esto asegura que el gradiente pueda fluir a través de la red profunda sin atenuarse excesivamente. 2.5 Dinámica de Entrenamiento vs. Inferencia Una de las características más elegantes del Transformer es que exhibe comportamientos radicalmente distintos durante el entrenamiento y la inferencia. Esta dualidad es clave para entender su eficiencia práctica. 2.5.1. Entrenamiento: Teacher Forcing y paralelización masiva Durante el entrenamiento, tenemos acceso a la secuencia objetivo completa y = (𝑦 1 , . . . , 𝑦 𝑚 ). Esto permite usar teacher forcing: alimentamos toda la secuencia objetivo al decoder simultáneamente y calculamos las predicciones para todas las posiciones en paralelo. Gracias a la máscara causal, esta paralelización no compromete la validez del modelo: cada posición 𝑡 “ve” solo el prefijo 𝑦 <𝑡 , como si estuviera siendo generada autoregresivamente. Pero como todas las posiciones se computan a la vez en una sola pasada forward, el entrenamiento aprovecha completamente el paralelismo de las GPUs modernas. Abraham Zamudio 9
  10. Arquitectura Transformer 2.5 Dinámica de Entrenamiento vs. Inferencia Insight Arquitectónico

    Complejidad del entrenamiento: Para una secuencia de longitud 𝑛, el entrenamiento del encoder-decoder tiene complejidad: Cómputo: O (𝑛2 · 𝑑) para la atención + O (𝑛 · 𝑑 2 ) para el FFN. Memoria: O (𝑛2 ) para almacenar la matriz de atención durante el backward pass. Tiempo wall-clock: O (1) pasos de cómputo gracias al paralelismo masivo (vs. O (𝑛) pasos en una RNN). La clave está en que el tiempo secuencial (critical path) es 𝑂 (1) en el Transformer vs. 𝑂 (𝑛) en la RNN, aunque el cómputo total sea comparable. 2.5.2. Inferencia: Generación autoregresiva y el KV Cache Durante la inferencia, la situación es completamente distinta. No conocemos la secuencia objetivo de antemano; debemos generarla token por token. Esto introduce una asimetría fundamental: 1. En el paso 𝑡 = 1, generamos 𝑦 1 a partir del embedding inicial (típicamente un token <bos>). 2. En el paso 𝑡 = 2, generamos 𝑦 2 a partir de 𝑦 1 . 3. En general, en el paso 𝑡, generamos 𝑦 𝑡 a partir de 𝑦 <𝑡 . Naivamente, esto requeriría recalcular las keys y values de todos los tokens anteriores en cada paso, lo que sería ineficiente. La solución es el KV Cache: un buffer de memoria que almacena las keys y values ya computadas de los tokens anteriores, de modo que en cada paso solo necesitamos computar el query, key y value del nuevo token. Nota de Implementación El KV Cache como cuello de botella: En modelos grandes con contextos largos, el KV Cache puede ocupar decenas de gigabytes de memoria GPU. Por ejemplo, para Llama 3 70B con contexto de 8K tokens, el KV Cache por secuencia puede requerir más de 40 GB. Esto ha motivado técnicas como: Multi-Query Attention (MQA): Todas las cabezas comparten un único conjunto de keys y values. Grouped Query Attention (GQA): Las cabezas se agrupan y comparten keys/values dentro del grupo (usado en Llama 3). PagedAttention (vLLM): Gestión de memoria del KV Cache análoga a la memoria virtual de sistemas operativos. Estas optimizaciones son críticas para el despliegue eficiente de LLMs en producción. La complejidad durante la inferencia cambia drásticamente: Pre-fill (procesamiento del prompt inicial): O (𝑛2prompt · 𝑑), análogo al entrenamiento. Decode (generación token por token): O (𝑛prompt · 𝑑) por token generado, dominado por la lectura del KV Cache. Esto significa que la generación autoregresiva es memory-bandwidth bound, no compute-bound: el cuello de botella es la velocidad de lectura de memoria, no la capacidad de cómputo de la GPU. Abraham Zamudio 10
  11. Arquitectura Transformer 2.6 Taxonomía de Variantes del Transformer 2.6 Taxonomía

    de Variantes del Transformer La modularidad del diseño original ha permitido que la comunidad derive tres familias principales de arquitecturas, cada una optimizada para tipos distintos de problemas. La Figura 2 muestra esta taxonomía. Traducción, resumen, seq2seq Clasificación, NLU, embeddings Encoder-Decoder Encoder-only T5, BART BERT, RoBERTa Generación, razonamiento, LLMs Decoder-only GPT, Llama, Claude Transformer (Vaswani 2017) Figura 2: Taxonomía de variantes del Transformer según la arquitectura utilizada y su aplicación principal. 2.6.1. Encoder-only: BERT y la comprensión bidireccional Arquitectura: Solo el stack del encoder, sin decoder. La atención es completamente bidireccional. Objetivo de pre-entrenamiento: Masked Language Modeling (MLM). Se enmascaran aleatoriamente aproximadamente el 15 % de los tokens de la secuencia de entrada, y el modelo debe predecir los tokens enmascarados dado el contexto completo (bidireccional). Matemáticamente, el objetivo es maximizar: ∑︁ LMLM = − log 𝑃(𝑥𝑖 | x\M ) (16) 𝑖∈M donde M es el conjunto de posiciones enmascaradas. Aplicaciones típicas: Clasificación de texto (sentimiento, spam, topic modeling). Named Entity Recognition (NER). Sentence similarity y embeddings semánticos. Question Answering extractivo. Limitación: Al ser bidireccional, BERT no puede generar texto de forma natural. No está diseñado para tareas de generación autoregresiva. 2.6.2. Encoder-Decoder: T5, BART y la transducción Arquitectura: El modelo completo con encoder y decoder, tal como se describió en secciones anteriores. Objetivo de pre-entrenamiento: Varía según el modelo: T5 (Text-to-Text Transfer Transformer): Formula todas las tareas como text-to-text. Por ejemplo, clasificación se formula como “classify: Este texto es positivo → positivo”. BART (Bidirectional and Auto-Regressive Transformers): Usa denoising autoencoding, donde la entrada es una versión corrupta del texto (tokens eliminados, enmascarados, rotados) y el objetivo es reconstruir el texto original. Abraham Zamudio 11
  12. Arquitectura Transformer 2.7 Transición Histórica: De Seq2Seq a LLMs Aplicaciones

    típicas: Traducción automática. Resumen de textos (abstractive summarization). Question Answering generativo. Paraphrasing. 2.6.3. Decoder-only: GPT y el paradigma de los LLMs modernos Arquitectura: Solo el stack del decoder, con self-attention causal. No hay encoder ni cross-attention. La entrada y la salida son la misma secuencia. Objetivo de pre-entrenamiento: Causal Language Modeling (CLM) o autoregresivo. El modelo debe predecir el siguiente token dado el prefijo: LCLM = − 𝑛 ∑︁ log 𝑃(𝑥𝑡 | 𝑥1 , . . . , 𝑥𝑡−1 ) (17) 𝑡=1 Este objetivo, simple y elegante, equivale a estimar la distribución conjunta de la secuencia mediante la factorización de la regla de la cadena. Insight Arquitectónico ¿Por qué decoder-only domina los LLMs modernos? Hay razones tanto teóricas como prácticas: 1. Unificación de tareas: Cualquier tarea de NLP puede reformularse como generación de texto (clasificación → generar la etiqueta; traducción → generar la traducción; QA → generar la respuesta). Un solo modelo puede resolverlas todas con el mismo objetivo de entrenamiento. 2. Scaling Laws: Los modelos decoder-only muestran leyes de escalamiento predecibles y limpias (Kaplan et al., 2020; Hoffmann et al., 2022). A mayor escala, emergen capacidades cualitativamente nuevas (reasoning, coding, few-shot learning). 3. Simplicidad arquitectónica: Al eliminar el encoder, se simplifica el diseño y se reduce la cantidad de hiperparámetros. Esto facilita el escalamiento y la ingeniería. 4. Eficiencia de parámetros: En tareas generativas, un modelo decoder-only no desperdicia parámetros en un encoder que nunca se usa durante la generación. 5. Prompting natural: Los LLMs se controlan mediante prompts, que son simplemente texto. Esto crea una interfaz universal que no requiere re-entrenamiento para nuevas tareas (in-context learning). Aplicaciones: Generación de texto (chatbots, asistentes, escritura creativa). Programación asistida (GitHub Copilot, Cursor). Razonamiento matemático y científico. Agentes autónomos con capacidad de tool-use. 2.7 Transición Histórica: De Seq2Seq a LLMs La evolución de los Transformers refleja un cambio paradigmático en cómo concebimos el modelado de lenguaje: Abraham Zamudio 12
  13. Arquitectura Transformer 2.8 Resumen Comparativo 1. Era Seq2Seq (2017-2018): Los

    Transformers se usan como reemplazo directo de RNN-encoderdecoders para tareas específicas (traducción, resumen). Se entrena un modelo por tarea. 2. Era Pre-entrenamiento (2018-2020): BERT y GPT-1/2 introducen el paradigma de pre-entrenar un modelo grande en datos no etiquetados y luego fine-tunearlo para tareas específicas. Se reduce drásticamente la necesidad de datos etiquetados. 3. Era Few-Shot/Zero-Shot (2020-2022): GPT-3 (175B parámetros) demuestra que modelos suficientemente grandes pueden resolver tareas nuevas sin fine-tuning, solo con ejemplos en el prompt (in-context learning). 4. Era de Instrucciones (2022-presente): Modelos como ChatGPT, Claude e InstructGPT añaden RLHF (Reinforcement Learning from Human Feedback) para alinear el modelo con instrucciones humanas. Emergen capacidades conversacionales y de razonamiento complejo. 5. Era de Agentes (2024-presente): Los LLMs se integran con herramientas externas (búsquedas, APIs, code interpreters) y sistemas de razonamiento estructurado (Chain-of-Thought, Tree-of-Thought). Los modelos pasan de ser “generadores de texto” a “agentes autónomos”. Esta evolución ha sido posible precisamente por la flexibilidad del diseño original del Transformer. El mecanismo de atención, las conexiones residuales y la arquitectura modular han demostrado ser increíblemente robustos, permitiendo que la misma arquitectura básica escale desde millones hasta billones de parámetros mientras adquiere capacidades cada vez más sofisticadas. 2.8 Resumen Comparativo La Tabla 1 sintetiza las diferencias fundamentales entre las tres variantes arquitectónicas. Característica Encoder-only Encoder-Decoder Decoder-only Tipo de atención Bidireccional Mixta Causal Objetivo pre-entreno MLM Seq2seq / Denoising CLM Generación de texto Limitada Nativa Nativa Comprensión contextual Excelente Buena Buena Modelos representativos BERT, RoBERTa T5, BART GPT, Llama, Claude Casos de uso NLU, clasificación Traducción, resumen LLMs, agentes Tabla 1: Comparación de las tres variantes principales del Transformer. En las siguientes secciones, profundizaremos en el componente central que hace posible toda esta familia de arquitecturas: el mecanismo de atención. Analizaremos con rigor matemático cómo funciona la atención escalada, por qué es tan efectiva, y cómo las variantes modernas (FlashAttention, GQA, MQA) optimizan su implementación para hacer viables los modelos a escala industrial. Abraham Zamudio 13
  14. Arquitectura Transformer El Mecanismo de Atención 3 El Mecanismo de

    Atención 3.1 Introducción: Del Paradigma Cognitivo a la Formulación Matemática El concepto de “atención” en el aprendizaje automático se inspira, de manera metafórica, en el sistema de atención visual humano. Cuando observamos una escena compleja, nuestro cerebro no procesa cada píxel con la misma resolución o prioridad simultáneamente. En su lugar, focaliza recursos computacionales biológicos en regiones específicas de alto valor informativo, mientras suprime o ignora el ruido de fondo. En el contexto de las redes neuronales, el mecanismo de atención traduce esta intuición en una operación de agregación ponderada diferenciable. En lugar de comprimir toda la información de una secuencia en un único vector de estado oculto de dimensión fija (como lo hacen las RNN), la atención permite que el modelo “consulte” dinámicamente cualquier parte de la secuencia de entrada, asignando un peso de relevancia a cada elemento en función del contexto actual. Para formalizar esto, el Transformer adopta una analogía proveniente de los sistemas de recuperación de información (Information Retrieval). Cada elemento de la secuencia se representa mediante tres vectores distintos: Query (𝑄): Representa la “pregunta” o la necesidad de información del token actual. Key (𝐾): Representa la “etiqueta” o el contenido identificativo que cada token de la secuencia ofrece. Value (𝑉): Representa la “información sustantiva” o el contenido real que se transferirá si la clave coincide con la consulta. La operación fundamental consiste en comparar la Query de un token con las Keys de todos los tokens (incluido él mismo) para calcular un puntaje de similitud. Estos puntajes se normalizan mediante una función softmax para obtener una distribución de probabilidad (los pesos de atención), que luego se utiliza para calcular una suma ponderada de los vectores Value. 3.2 Scaled Dot-Product Attention La variante específica de atención utilizada en el Transformer se denomina Scaled Dot-Product Attention (Atención de Producto Punto Escalado). Sean 𝑄 ∈ R𝑛×𝑑 𝑘 , 𝐾 ∈ R𝑛×𝑑 𝑘 y 𝑉 ∈ R𝑛×𝑑 𝑣 las matrices que contienen las consultas, claves y valores de una secuencia de 𝑛 tokens, donde 𝑑 𝑘 es la dimensión de las claves y 𝑑𝑣 la dimensión de los valores. Definición Técnica La función de atención escalada se define matemáticamente como:   𝑄𝐾 ⊤ Attention(𝑄, 𝐾, 𝑉) = softmax √ 𝑉 𝑑𝑘 (18) donde: 𝑄𝐾 ⊤ ∈ R𝑛×𝑛 es la matriz de puntuaciones (scores) de similitud no normalizadas. √ 𝑑 𝑘 es el factor de escalado. softmax se aplica por filas, convirtiendo cada fila en una distribución de probabilidad. La multiplicación final por 𝑉 ∈ R𝑛×𝑑 𝑣 realiza la agregación ponderada. Abraham Zamudio 14
  15. Arquitectura Transformer 3.2 Scaled Dot-Product Attention √ Justificación Estadística del

    Factor de Escalado 𝑑 𝑘 √ La inclusión del término 1/ 𝑑 𝑘 no es un hiperparámetro empírico arbitrario; posee una justificación estadística rigurosa relacionada con la estabilización de la varianza durante la propagación hacia adelante y el flujo de gradientes durante la retropropagación. Supongamos que los elementos de los vectores de consulta 𝑞 y clave 𝑘 son variables aleatorias independientes e idénticamente distribuidas (i.i.d.) con media 𝜇 = 0 y varianza 𝜎 2 = 1. El producto punto entre 𝑞 y 𝑘 es: 𝑑𝑘 ∑︁ 𝑞·𝑘 = 𝑞𝑖 𝑘 𝑖 (19) 3.2.1. 𝑖=1 Dado que 𝑞𝑖 y 𝑘 𝑖 son independientes con media cero, la esperanza del producto es E[𝑞𝑖 𝑘 𝑖 ] = E[𝑞𝑖 ]E[𝑘 𝑖 ] = 0. La varianza del producto de dos variables aleatorias independientes con media cero es el producto de sus varianzas: Var(𝑞𝑖 𝑘 𝑖 ) = Var(𝑞𝑖 )Var(𝑘 𝑖 ) = 1 × 1 = 1. Por la propiedad aditiva de la varianza para variables independientes, la varianza de la suma es: Var(𝑞 · 𝑘) = 𝑑𝑘 ∑︁ Var(𝑞𝑖 𝑘 𝑖 ) = 𝑑 𝑘 (20) 𝑖=1 Esto implica que, a medida que la dimensión 𝑑 𝑘 crece, la varianza del producto punto crece linealmente con 𝑑 𝑘 . Si aplicamos la función softmax a un vector con varianza muy alta, los valores extremos dominarán la distribución exponencial, empujando el softmax hacia regiones de saturación (cerca de 0 o 1). Saturación del Gradiente en Softmax Sea 𝑝 = softmax(𝑥). La derivada de la función softmax respecto a sus entradas es 𝜕𝜕𝑥𝑝𝑗𝑖 = 𝑝𝑖 (𝛿𝑖 𝑗 − 𝑝 𝑗 ). Si la varianza de 𝑥 es muy grande, un elemento 𝑥 𝑚 dominará, haciendo que 𝑝 𝑚 ≈ 1 y 𝑝 𝑗 ≈ 0 para 𝑗 ≠ 𝑚. En este régimen, el gradiente 𝜕𝜕𝑥𝑝𝑗𝑖 tiende a cero para casi todos los pares (𝑖, 𝑗), provocando el vanishing gradient y deteniendo el aprendizaje. √ Al dividir el producto punto por 𝑑 𝑘 , forzamos a que la varianza de la entrada al softmax sea:   𝑞·𝑘 1 𝑑𝑘 Var √ = Var(𝑞 · 𝑘) = =1 (21) 𝑑𝑘 𝑑𝑘 𝑑𝑘 Esto mantiene la varianza constante e independiente de la dimensión del modelo, garantizando que el softmax opere en su región lineal sensible, donde los gradientes son significativos y el entrenamiento es estable. Abraham Zamudio 15
  16. Arquitectura Transformer 3.3 Interpretación Estadística: Atención como Estimador de Nadaraya-Watson

    Flujo de Scaled Dot-Product Attention Producto Punto 𝑄 𝐾⊤ √ / 𝑑𝑘 Normalización Ponderación 𝑉 Softmax Salida Figura 3: Diagrama de flujo computacional de la operación Scaled Dot-Product Attention. 3.3 Interpretación Estadística: Atención como Estimador de Nadaraya-Watson Para un público con formación en estadística computacional, es profundamente revelador observar que el mecanismo de atención no es un invento ex nihilo del deep learning, sino una generalización de métodos clásicos de estimación no paramétrica. Específicamente, la atención es equivalente al estimador de regresión de kernel de Nadaraya𝑛 , el estimador de Nadaraya-Watson para Watson. En estadística, dado un conjunto de datos {(𝑥𝑖 , 𝑦𝑖 )}𝑖=1 predecir 𝑦 en un punto de consulta 𝑥 se define como: Í𝑛 𝐾 ℎ (𝑥, 𝑥𝑖 )𝑦𝑖 𝑓ˆ(𝑥) = Í𝑖=1 (22) 𝑛 𝑖=1 𝐾 ℎ (𝑥, 𝑥𝑖 ) donde 𝐾 ℎ es una función kernel que mide la similitud entre 𝑥 y 𝑥𝑖 , parametrizada por un ancho de banda ℎ. Si hacemos el siguiente mapeo directo: El punto de consulta 𝑥 corresponde al vector Query 𝑞. Los puntos de datos 𝑥𝑖 corresponden a los vectores Key 𝑘 𝑖 . Los objetivos 𝑦𝑖 corresponden a los vectores Value 𝑣 𝑖 .   La función kernel 𝐾 ℎ (𝑞, 𝑘 𝑖 ) se define como exp √𝑞·𝑘𝑑 𝑖 . 𝑘 Sustituyendo este kernel en la fórmula de Nadaraya-Watson, el denominador es exactamente la suma de las exponenciales que normaliza el softmax, y el numerador es la suma ponderada de los valores. Por lo tanto, la atención es un suavizado por kernel (kernel smoothing) donde el kernel es aprendido y escalado por la red neuronal, en lugar de ser una función fija como el kernel gaussiano. Esta perspectiva unifica el aprendizaje profundo moderno con la teoría estadística clásica de estimación de funciones. 3.4 Multi-Head Attention (MHA) Si bien la Scaled Dot-Product Attention es potente, calcularla una sola vez tiene una limitación inherente: obliga al modelo a representar todas las relaciones sintácticas, semánticas y contextuales de la secuencia en un único espacio de representación de dimensión 𝑑 𝑘 . Un único mecanismo de atención podría, por ejemplo, aprender a capturar dependencias sujeto-verbo, pero a costa de ignorar relaciones de correferencia o modificación adjetival. Abraham Zamudio 16
  17. Arquitectura Transformer 3.4 Multi-Head Attention (MHA) Para mitigar esto, el

    Transformer introduce el mecanismo de Multi-Head Attention (Atención de Múltiples Cabezas). La idea es proyectar las consultas, claves y valores ℎ veces en subespacios de menor dimensión, aplicar la atención escalada en cada subespacio de forma independiente y paralela, y finalmente concatenar los resultados para proyectarlos de nuevo al espacio original. Definición Técnica Formalmente, para ℎ cabezas de atención, definimos matrices de proyección aprendibles para cada cabeza 𝑖 ∈ {1, . . . , ℎ}: 𝑊𝑖𝑄 ∈ R𝑑model ×𝑑 𝑘 (23) 𝑊𝑖𝐾 ∈ R𝑑model ×𝑑 𝑘 𝑊𝑖𝑉 ∈ R𝑑model ×𝑑 𝑣 (24) head𝑖 = Attention(𝑄𝑊𝑖𝑄 , 𝐾𝑊𝑖𝐾 , 𝑉𝑊𝑖𝑉 ) (26) (25) La salida de la 𝑖-ésima cabeza es: La salida final del mecanismo Multi-Head se obtiene concatenando las salidas de todas las cabezas y aplicando una transformación lineal final 𝑊 𝑂 : MultiHead(𝑄, 𝐾, 𝑉) = Concat(head1 , . . . , headℎ )𝑊 𝑂 (27) donde 𝑊 𝑂 ∈ R (ℎ·𝑑 𝑣 )×𝑑model . Insight Arquitectónico Eficiencia Computacional del MHA: A primera vista, calcular ℎ atenciones parece ℎ veces más costoso que una sola. Sin embargo, en la práctica, se elige 𝑑 𝑘 = 𝑑 𝑣 = 𝑑model /ℎ. Bajo esta configuración, la dimensionalidad total de las proyecciones en todas las cabezas combinadas es igual a la dimensionalidad de una sola proyección de tamaño completo. Por lo tanto, el costo computacional total del Multi-Head Attention es asintóticamente idéntico al de una atención de cabeza única con dimensión 𝑑model , pero con la ventaja representacional de tener ℎ subespacios de atención especializados. Abraham Zamudio 17
  18. Arquitectura Transformer 3.5 Implementación Computacional en Python (Enfoque Orientado a

    Objetos) Salida Multi-Head Proyección 𝑊 𝑂 Concatenar Head 1 Head 2 𝑄 𝐾 Head ℎ ... 𝑉 Entrada 𝑋 Figura 4: Esquema arquitectónico del mecanismo Multi-Head Attention. Las proyecciones lineales permiten a cada cabeza aprender representaciones en subespacios distintos. 3.5 Implementación Computacional en Python (Enfoque Orientado a Objetos) Desde una perspectiva de ingeniería de software y ciencia de datos, la implementación eficiente de este mecanismo en frameworks como PyTorch requiere un manejo cuidadoso de las dimensiones de los tensores. A continuación, se presenta una implementación rigurosa, tipada y orientada a objetos que refleja las mejores prácticas de modularidad y trazabilidad. 1 2 3 4 import math import torch import torch . nn as nn from torch import Tensor 5 6 7 8 class MultiHeadAttention ( nn . Module ) : """ Implementaci ó n modular del mecanismo de Multi - Head Attention . 9 10 11 12 13 14 Args : d_model ( int ) : Dimensi ó n total del modelo ( ej . 512) . num_heads ( int ) : N ú mero de cabezas de atenci ó n ( ej . 8) . dropout ( float ) : Tasa de dropout aplicada a los pesos de atenci ó n . """ 15 16 17 18 def __init__ ( self , d_model : int , num_heads : int , dropout : float = 0.1) : super () . __init__ () assert d_model % num_heads == 0 , " d_model debe ser divisible por num_heads " 19 20 21 22 self . d_model = d_model self . num_heads = num_heads self . head_dim = d_model // num_heads # d_k 23 24 # Proyecciones lineales para Q , K , V . Abraham Zamudio 18
  19. Arquitectura Transformer 3.5 Implementación Computacional en Python (Enfoque Orientado a

    Objetos) 25 26 # Se usa una sola matriz grande por eficiencia de hardware ( fused projection ) self . W_qkv = nn . Linear ( d_model , d_model * 3 , bias = False ) 27 28 29 # Proyecci ó n de salida self . W_o = nn . Linear ( d_model , d_model , bias = False ) 30 31 32 self . dropout = nn . Dropout ( dropout ) self . scale = math . sqrt ( self . head_dim ) 33 34 35 36 37 38 39 40 41 42 43 def forward ( self , x : Tensor , mask : Tensor = None ) -> Tensor : """ Args : x : Tensor de entrada de forma ( batch_size , seq_len , d_model ) mask : Tensor opcional de forma ( batch_size , 1 , 1 , seq_len ) o ( batch_size , seq_len , seq_len ) para enmascarar posiciones futuras ( causal ) o tokens de padding . Returns : Tensor de salida de forma ( batch_size , seq_len , d_model ) """ batch_size , seq_len , _ = x . size () 44 45 46 47 # 1. Proyecci ó n lineal y divisi ó n en cabezas # qkv shape : ( batch_size , seq_len , 3 * d_model ) qkv = self . W_qkv ( x ) 48 49 50 51 # Dividir la ú ltima dimensi ó n en 3 (Q , K , V ) y luego en ( num_heads , head_dim ) # reshape a : ( batch_size , seq_len , 3 , num_heads , head_dim ) qkv = qkv . reshape ( batch_size , seq_len , 3 , self . num_heads , self . head_dim ) 52 53 54 # Permutar a : (3 , batch_size , num_heads , seq_len , head_dim ) qkv = qkv . permute (2 , 0 , 3 , 1 , 4) 55 56 57 # Desempaquetar Q , K , V q , k , v = qkv [0] , qkv [1] , qkv [2] seq_len , head_dim ) # Cada uno : ( batch_size , num_heads , 58 59 60 61 # 2. Scaled Dot - Product Attention # q @ k . transpose ( -2 , -1) -> ( batch_size , num_heads , seq_len , seq_len ) attn_scores = torch . matmul (q , k . transpose ( -2 , -1) ) / self . scale 62 63 64 65 66 67 # 3. Aplicar m á scara ( si existe ) if mask is not None : # La m á scara debe ser broadcasteable a ( batch_size , num_heads , seq_len , seq_len ) # Los valores enmascarados se establecen a -1 e9 ( aproximaci ó n de inf para estabilidad num é rica ) attn_scores = attn_scores . masked_fill ( mask == 0 , -1 e9 ) 68 69 70 71 # 4. Softmax y Dropout attn_weights = torch . softmax ( attn_scores , dim = -1) attn_weights = self . dropout ( attn_weights ) 72 73 74 75 # 5. Multiplicar por V # attn_weights @ v -> ( batch_size , num_heads , seq_len , head_dim ) context = torch . matmul ( attn_weights , v ) 76 77 78 # 6. Concatenar cabezas y proyectar de vuelta a d_model # Transponer y aplanar : ( batch_size , seq_len , num_heads , head_dim ) -> ( Abraham Zamudio 19
  20. Arquitectura Transformer 3.6 Análisis de Complejidad Computacional y Cuellos de

    Botella batch_size , seq_len , d_model ) context = context . transpose (1 , 2) . reshape ( batch_size , seq_len , self . d_model ) 79 80 # Proyecci ó n final output = self . W_o ( context ) 81 82 83 return output 84 Listing 1: Implementación de Multi-Head Attention en PyTorch Nota de Implementación Detalle de implementación (PyTorch): Observe el uso de transpose(-2, -1) en lugar de transpose(2, 3). El uso de índices negativos hace que el código sea robusto ante cambios en la dimensionalidad del batch (por ejemplo, si se añade una dimensión de "sequence packing"). Además, la operación masked_fill utiliza -1e9 en lugar de -float(’inf’) por razones de estabilidad numérica en hardware de precisión mixta (FP16/BF16), donde el infinito puede propagar NaNs durante el cálculo del softmax. 3.6 Análisis de Complejidad Computacional y Cuellos de Botella Comprender la complejidad del mecanismo de atención es fundamental para diagnosticar limitaciones de escalabilidad y justificar las variantes modernas (como FlashAttention o Sparse Attention). Analicemos el costo para una secuencia de longitud 𝑛 y dimensión del modelo 𝑑 (asumiendo 𝑑 𝑘 ≈ 𝑑/ℎ). 3.6.1. Complejidad Temporal (Tiempo de Cómputo) Las operaciones matriciales dominantes en la Ecuación 18 son: 1. Proyecciones lineales (𝑋𝑊 𝑄 , 𝑋𝑊 𝐾 , 𝑋𝑊 𝑉 ): Tres multiplicaciones de matriz de tamaño (𝑛 × 𝑑) por (𝑑 × 𝑑). Complejidad: O (𝑛 · 𝑑 2 ). 2. Producto punto 𝑄𝐾 ⊤ : Multiplicación de (𝑛 × 𝑑 𝑘 ) por (𝑑 𝑘 × 𝑛). Complejidad: O (𝑛2 · 𝑑 𝑘 ). Dado que hay ℎ cabezas, el costo total es O (ℎ · 𝑛2 · 𝑑 𝑘 ) = O (𝑛2 · 𝑑). 3. Softmax: Aplicado a una matriz de 𝑛 × 𝑛. Complejidad: O (𝑛2 ). 4. Multiplicación por 𝑉: Multiplicación de la matriz de atención (𝑛 × 𝑛) por 𝑉 (𝑛 × 𝑑𝑣 ). Complejidad: O (𝑛2 · 𝑑 𝑣 ). Total para ℎ cabezas: O (𝑛2 · 𝑑). 5. Proyección de salida (𝑊 𝑂 ): Multiplicación de (𝑛 × 𝑑) por (𝑑 × 𝑑). Complejidad: O (𝑛 · 𝑑 2 ). Sumando estos términos, la complejidad temporal total por capa es: O (𝑛 · 𝑑 2 + 𝑛2 · 𝑑) 3.6.2. (28) Complejidad Espacial (Memoria) Durante el forward pass, debemos almacenar en la memoria de la GPU (HBM) la matriz de puntuaciones de atención de tamaño 𝑛 × 𝑛 para cada cabeza, ya que es estrictamente necesaria para calcular los gradientes durante el backward pass (regla de la cadena). Por lo tanto, la complejidad de memoria es dominada por: O (𝑛2 · ℎ) ≈ O (𝑛2 ) (29) Abraham Zamudio 20
  21. Arquitectura Transformer 3.7 Resumen de la Sección Insight Arquitectónico El

    Muro de la Longitud de Contexto: La dependencia cuadrática O (𝑛2 ) en tiempo y memoria es el principal cuello de botella del Transformer. Para 𝑛 = 4096 (contexto típico), 𝑛2 ≈ 1,6 × 107 , lo cual es manejable. Sin embargo, para 𝑛 = 128, 000 (contexto largo moderno), 𝑛2 ≈ 1,6 × 1010 . Almacenar una matriz de atención de este tamaño en precisión FP16 requiere aproximadamente 32 GB de memoria solo para una capa y una cabeza. Esto hace que el entrenamiento y la inferencia de contextos largos sean prohibitivamente costosos sin optimizaciones a nivel de kernel de GPU, como las implementadas en FlashAttention, que recalcula la atención en la memoria SRAM rápida de la GPU sin materializar la matriz 𝑛 × 𝑛 en la HBM lenta. 3.7 Resumen de la Sección El mecanismo de atención representa el núcleo operativo del Transformer. Hemos desglosado su funcionamiento √ desde la intuición cognitiva hasta la formulación matricial rigurosa, demostrando cómo el escalado por 𝑑 𝑘 estabiliza la varianza del gradiente y cómo la estructura se alinea elegantemente con los estimadores de kernel de Nadaraya-Watson de la estadística clásica. La extensión a Multi-Head Attention permite al modelo capturar relaciones heterogéneas en subespacios paralelos sin incurrir en un costo computacional asintótico adicional. Sin embargo, el análisis de complejidad revela la vulnerabilidad arquitectónica fundamental del diseño: el crecimiento cuadrático con la longitud de la secuencia, un desafío que define la frontera de la investigación actual en eficiencia de modelos de lenguaje. En la siguiente sección, examinaremos cómo los componentes de una capa individual (conexiones residuales y normalización) trabajan en sinergia con la atención para permitir el entrenamiento de arquitecturas extremadamente profundas. Abraham Zamudio 21
  22. Arquitectura Transformer Componentes de una Capa 4 Componentes de una

    Capa 4.1 Anatomía Fundamental de un Bloque Transformer Hasta este punto, hemos analizado el mecanismo de atención como el motor computacional central del Transformer. Sin embargo, un mecanismo de atención aislado no constituye una red neuronal profunda viable. La estabilidad, la capacidad de generalización y la eficiencia del entrenamiento dependen críticamente de cómo se ensamblan estas operaciones de atención con otros componentes arquitectónicos dentro de una capa (o bloque) individual. Tanto el encoder como el decoder del Transformer original están compuestos por una pila de 𝑁 capas idénticas (típicamente 𝑁 = 6 o 𝑁 = 12 en modelos base, y hasta 𝑁 = 80 o más en modelos modernos de gran escala). Cada capa sigue un patrón de diseño macroscópico que alterna subcapas de transformación no lineal con mecanismos de regularización y estabilización. Formalmente, sea 𝑥 (𝑙−1) ∈ R𝑛×𝑑model la salida de la capa 𝑙 − 1 (o la entrada inicial si 𝑙 = 1). La salida de la capa 𝑙, denotada como 𝑥 (𝑙) , se obtiene mediante una composición secuencial de operaciones. En la formulación original (Post-Norm), esta secuencia para una capa del encoder es:   𝑥 ′(𝑙) = 𝑥 (𝑙−1) + MHA LayerNorm(𝑥 (𝑙−1) ) (Self-Attention con residual)   𝑥 (𝑙) = 𝑥 ′(𝑙) + FFN LayerNorm(𝑥 ′(𝑙) ) (Feed-Forward con residual) (30) (31) Nota de Implementación Nota sobre la notación: En el paper original de Vaswani et al. (2017), la normalización se aplicaba después de la suma residual (Post-Norm). Sin embargo, la notación anterior refleja la práctica moderna (Pre-Norm), que se ha convertido en el estándar de facto para modelos como Llama, Mistral y GPT-NeoX debido a sus superiores propiedades de optimización. Analizaremos esta distinción crucial en detalle más adelante. Los tres pilares que sostienen esta arquitectura son: las conexiones residuales, la normalización de capa y la red feed-forward. A continuación, desglosamos cada uno desde una perspectiva matemática, estadística y de ingeniería de software. 4.2 Conexiones Residuales: El Flujo de Gradiente y la Perspectiva de Ecuaciones Diferenciales Las conexiones residuales (o skip connections) no son un añadido cosmético; son la condición sine qua non para el entrenamiento de redes neuronales profundas. Introducidas originalmente en ResNet (He et al., 2016) para visión por computadora, su adopción en el Transformer fue inmediata y fundamental. Definición Técnica Una conexión residual modifica la transformación de una capa F de modo que la salida sea la suma de la entrada y la transformación: 𝑦 = 𝑥 + F (𝑥). 4.2.1. Justificación desde el Flujo de Gradientes Durante la retropropagación, el gradiente de la función de pérdida L respecto a la entrada de la capa 𝑥 se calcula mediante la regla de la cadena:   𝜕L 𝜕L 𝜕𝑦 𝜕L 𝜕F (𝑥) = · = 𝐼+ (32) 𝜕𝑥 𝜕𝑦 𝜕𝑥 𝜕𝑦 𝜕𝑥 Abraham Zamudio 22
  23. Arquitectura Transformer 4.3 Normalización de Capas (Layer Normalization) donde 𝐼

    es la matriz identidad. Este término 𝐼 es la clave del éxito. Garantiza que, independientemente de la magnitud o el signo de la derivada de la transformación 𝜕F 𝜕𝑥 (que podría ser cercana a cero debido a saturación de activaciones o inicialización pobre), siempre existe un camino de gradiente directo y sin atenuar (valor 1) que fluye desde las capas superiores hacia las inferiores. Esto mitiga drásticamente el problema del vanishing gradient. 4.2.2. Interpretación como Ecuaciones Diferenciales Ordinarias (Neural ODEs) Desde una perspectiva de matemática aplicada, la conexión residual puede reinterpretarse elegantemente. Si consideramos la profundidad de la red 𝑙 como una variable temporal continua 𝑡, la ecuación de actualización residual: 𝑥 (𝑙) − 𝑥 (𝑙−1) = F (𝑥 (𝑙−1) ) (33) es exactamente la discretización de Euler hacia adelante (con paso Δ𝑡 = 1) de la Ecuación Diferencial Ordinaria (ODE): 𝑑𝑥(𝑡) = F (𝑥(𝑡), 𝑡) (34) 𝑑𝑡 Esta conexión, formalizada en el marco de las Neural Ordinary Differential Equations (Chen et al., 2018), implica que una red residual profunda no es más que un solver numérico que integra una dinámica continua. Para que esta integración sea estable y no explote, la función F debe estar bien condicionada, lo cual nos lleva directamente a la necesidad de la normalización. 4.3 Normalización de Capas (Layer Normalization) La normalización es esencial para suavizar el paisaje de la función de pérdida, permitiendo el uso de tasas de aprendizaje más altas y acelerando la convergencia. Mientras que la Batch Normalization (Ioffe & Szegedy, 2015) revolucionó la visión por computadora, es inherentemente problemática para el procesamiento de lenguaje natural debido a: (1) longitudes de secuencia variables, (2) dependencia del tamaño del batch (que puede ser pequeño o igual a 1 durante la inferencia), y (3) incompatibilidad con la naturaleza recurrente o autoregresiva. Definición Técnica Layer Normalization (Ba et al., 2016) estandariza las activaciones a lo largo de la dimensión de las características (features) para cada muestra de forma independiente. Dado un vector de entrada 𝑥 ∈ R𝑑 (omitimos el índice de la secuencia por claridad), se calcula: 𝑑 1 ∑︁ 𝜇= 𝑥𝑖 𝑑 𝑖=1 v u t 𝑑 1 ∑︁ (𝑥𝑖 − 𝜇) 2 + 𝜖 𝜎= 𝑑 𝑖=1 𝑥−𝜇 LayerNorm(𝑥) = 𝛾 ⊙ +𝛽 𝜎 (35) (36) (37) donde 𝜖 es una constante de estabilidad numérica (típicamente 10−5 ), y 𝛾, 𝛽 ∈ R𝑑 son parámetros aprendibles de escala y desplazamiento (ganancia y sesgo). Estadísticamente, LayerNorm fuerza a que la distribución empírica de las activaciones de cada token tenga media cero y varianza unitaria antes de ser escalada y desplazada por 𝛾 y 𝛽. Esto desacopla la magnitud de las activaciones de la dirección del gradiente, estabilizando la dinámica de optimización. Abraham Zamudio 23
  24. Arquitectura Transformer 4.4 La Evolución hacia RMSNorm (Root Mean Square

    Normalization) 4.4 La Evolución hacia RMSNorm (Root Mean Square Normalization) A pesar de su eficacia, LayerNorm tiene una ineficiencia computacional y conceptual. Investigaciones posteriores (Zhang & Sennrich, 2019) demostraron que el componente de centrado de la media (𝜇) contribuye marginalmente al rendimiento del modelo, pero añade una sobrecarga computacional no trivial (cálculo de la media, restas adicionales). Definición Técnica RMSNorm simplifica la normalización eliminando el término de recentering, escalando el vector únicamente por su raíz cuadrada media (RMS): v u t 𝑑 1 ∑︁ 2 𝑥 +𝜖 (38) RMS(𝑥) = 𝑑 𝑖=1 𝑖 RMSNorm(𝑥) = 𝛾 ⊙ 𝑥 RMS(𝑥) (39) Preservación de la Relatividad Representacional La operación de reescalado de LayerNorm puede descomponerse en una rotación (cambio de media) y un escalado (cambio de varianza). Dado que las capas subsiguientes (atención y FFN) son invariantes o robustas a traslaciones globales en el espacio de características (especialmente si no tienen sesgos, o si los sesgos se absorben), eliminar la traslación (media) no degrada la capacidad representacional del modelo, siempre que se preserve la dirección relativa del vector 𝑥. RMSNorm preserva exactamente esta dirección mientras normaliza su magnitud. En la práctica, RMSNorm es aproximadamente un 7-64 % más rápido que LayerNorm dependiendo de la implementación del kernel, y se ha convertido en el estándar en arquitecturas de última generación como LLaMA, Mistral y PaLM. 4.5 Pre-Norm vs. Post-Norm: Un Cambio de Paradigma en la Dinámica de Señal La ubicación de la capa de normalización relativa a la conexión residual define dos regímenes de entrenamiento radicalmente distintos. 4.5.1. Post-Norm (Arquitectura Original, 2017)   𝑥 (𝑙) = Norm 𝑥 (𝑙−1) + F (𝑥 (𝑙−1) ) (40) En este régimen, la transformación F opera sobre la señal cruda de la capa anterior. Durante las primeras etapas del entrenamiento, cuando los pesos están inicializados aleatoriamente, F (𝑥 (𝑙−1) ) puede tener una magnitud grande y varianza alta. Al sumarse a 𝑥 (𝑙−1) antes de la normalización, se produce una explosión de varianza a través de las capas. Esto obliga a utilizar técnicas de learning rate warmup (aumentar la tasa de aprendizaje gradualmente desde cero) para evitar que el optimizador diverja. 4.5.2. Pre-Norm (Arquitectura Moderna, 2020–Presente)   𝑥 (𝑙) = 𝑥 (𝑙−1) + F Norm(𝑥 (𝑙−1) ) Abraham Zamudio (41) 24
  25. Arquitectura Transformer 4.6 Redes Feed-Forward (FFN) y sus Variantes Modernas

    Aquí, la normalización se aplica antes de la transformación. Esto garantiza que la entrada a F siempre tenga una magnitud acotada (norma unitaria). Por lo tanto, la salida de F también estará acotada, y la actualización residual 𝑥 (𝑙) estará controlada: ∥𝑥 (𝑙) ∥ ≤ ∥𝑥 (𝑙−1) ∥ + ∥F (Norm(𝑥 (𝑙−1) ))∥ (42) Esta cota superior previene la explosión de señal, permitiendo un flujo de gradiente estable desde la primera iteración. Como resultado, los modelos Pre-Norm pueden entrenarse con tasas de aprendizaje altas desde el inicio, sin necesidad de warmup, y convergen de manera más robusta a profundidades extremas (𝑁 > 40). La contrapartida es que la representación final 𝑥 (𝑁) no está normalizada, por lo que a menudo se añade una capa de Norm final al final del modelo antes del cabezal de clasificación. Post-Norm (Original) Pre-Norm (Moderno) Salida 𝑥 (𝑙) Salida 𝑥 (𝑙) LayerNorm / RMSNorm Suma Residual + Suma Residual + Subcapa F (Atención/FFN) Subcapa F (Atención/FFN) LayerNorm / RMSNorm Entrada 𝑥 (𝑙−1) Entrada 𝑥 (𝑙−1) Figura 5: Comparación topológica de las arquitecturas Post-Norm y Pre-Norm. En Pre-Norm, la normalización actúa como un regulador de magnitud antes de la transformación no lineal, estabilizando el flujo de señal. 4.6 Redes Feed-Forward (FFN) y sus Variantes Modernas Mientras que la capa de atención es responsable de la comunicación entre tokens (mezcla de secuencia), la red Feed-Forward (FFN) es responsable de la transformación intra-token (mezcla de características). Se aplica de manera independiente y idéntica a cada posición de la secuencia. 4.6.1. La FFN Clásica En el Transformer original, la FFN consiste en dos transformaciones lineales con una activación ReLU en el medio: FFN(𝑥) = máx(0, 𝑥𝑊1 + 𝑏 1 )𝑊2 + 𝑏 2 (43) Donde 𝑊1 ∈ R𝑑model ×𝑑ff y 𝑊2 ∈ R𝑑ff ×𝑑model . Típicamente, 𝑑ff = 4 · 𝑑model . Esta expansión y posterior contracción permite al modelo proyectar las características a un espacio de mayor dimensión para aplicar una no linealidad rica, y luego comprimirlas de vuelta. Geva et al. (2020) interpretaron las columnas de 𝑊1 y filas de 𝑊2 como "memoria clave-valor", donde la FFN actúa como un diccionario que recupera y actualiza conocimientos factuales almacenados en los pesos. Abraham Zamudio 25
  26. Arquitectura Transformer 4.7 Implementación Orientada a Objetos en Python 4.6.2.

    La Revolución de las Gated Linear Units (GLU) y SwiGLU Las funciones de activación ReLU tienen una limitación: su gradiente es binario (0 o 1), lo que puede causar "neuronas muertas una dinámica de aprendizaje subóptima. Investigaciones recientes (Shazeer, 2020) demostraron que las Gated Linear Units (GLU) superan consistentemente a ReLU en modelos de lenguaje. La variante más exitosa en modelos modernos (como LLaMA) es SwiGLU. 2 Definición Técnica La función SwiGLU se define como:  SwiGLU(𝑥) = Swish 𝛽 (𝑥𝑊1 ) ⊙ (𝑥𝑊3 ) 𝑊2 (44) donde ⊙ es el producto de Hadamard (elemento a elemento), y Swish 𝛽 (𝑧) = 𝑧 · 𝜎(𝛽𝑧) es la función de activación Swish (con 𝛽 = 1 típicamente, también conocida como SiLU). Insight Arquitectónico Análisis de Parámetros en SwiGLU: La FFN clásica tiene dos matrices de pesos: 𝑊1 y 𝑊2 , totalizando 2 · 𝑑model · 𝑑ff parámetros. SwiGLU introduce una tercera matriz 𝑊3 para la puerta, totalizando 3 · 𝑑model · 𝑑ff parámetros. Para mantener el presupuesto computacional y de memoria constante respecto al modelo original, la dimensión oculta 𝑑ff se reduce. Si el original usaba 𝑑ff = 4𝑑, SwiGLU usa típicamente 𝑑ff = 83 𝑑. Así, 3 · 𝑑 · ( 83 𝑑) = 8𝑑 2 , que es igual a 2 · 𝑑 · (4𝑑) = 8𝑑 2 . Esta reasignación de parámetros hacia una arquitectura con puertas (gated) es una de las razones clave del rendimiento superior de LLaMA sobre arquitecturas GPT-2 de tamaño similar. 4.7 Implementación Orientada a Objetos en Python Para consolidar estos conceptos, presentamos una implementación rigurosa, tipada y modular de un bloque Transformer moderno (Pre-Norm, RMSNorm, SwiGLU) utilizando PyTorch. Esta implementación refleja las mejores prácticas de ingeniería de software: encapsulación, claridad en el flujo de datos y eficiencia computacional. 1 2 3 4 5 import math import torch import torch . nn as nn import torch . nn . functional as F from torch import Tensor 6 7 8 9 10 11 12 13 14 15 16 class RMSNorm ( nn . Module ) : """ Root Mean Square Layer Normalization . M á s eficiente que LayerNorm al eliminar el c á lculo de la media . """ def __init__ ( self , dim : int , eps : float = 1e -6) : super () . __init__ () self . eps = eps # gamma ( peso ) es aprendible , de la misma dimensi ó n que las caracter í sticas self . weight = nn . Parameter ( torch . ones ( dim ) ) 17 18 19 def forward ( self , x : Tensor ) -> Tensor : # Calcular la media cuadr á tica a lo largo de la ú ltima dimensi ó n ( features ) Abraham Zamudio 26
  27. Arquitectura Transformer 4.7 Implementación Orientada a Objetos en Python 20

    21 22 23 # x . pow (2) . mean ( -1 , keepdim = True ) tiene forma ( batch , seq , 1) variance = x . pow (2) . mean ( -1 , keepdim = True ) x_normed = x * torch . rsqrt ( variance + self . eps ) return self . weight * x_normed 24 25 26 27 28 29 30 31 32 33 34 35 36 37 class SwiGLU ( nn . Module ) : """ Feed - Forward Network con activaci ó n SwiGLU . Mantiene el conteo de par á metros equivalente a un FFN ReLU cl á sico escalando la dimensi ó n oculta a (8/3) * dim . """ def __init__ ( self , dim : int , hidden_dim : int ) : super () . __init__ () # w1 y w3 son las proyecciones para la puerta ( gate ) y la rama lineal self . w1 = nn . Linear ( dim , hidden_dim , bias = False ) self . w3 = nn . Linear ( dim , hidden_dim , bias = False ) # w2 es la proyecci ó n de salida de vuelta a ' dim ' self . w2 = nn . Linear ( hidden_dim , dim , bias = False ) 38 39 40 41 def forward ( self , x : Tensor ) -> Tensor : # F . silu es la implementaci ó n optimizada de Swish ( x ) = x * sigmoid ( x ) return self . w2 ( F . silu ( self . w1 ( x ) ) * self . w3 ( x ) ) 42 43 44 45 46 47 48 49 50 class TransformerBlock ( nn . Module ) : """ Un bloque Transformer moderno con arquitectura Pre - Norm . """ def __init__ ( self , dim : int , n_heads : int , dropout : float = 0.1) : super () . __init__ () self . dim = dim self . n_heads = n_heads 51 52 53 54 55 # 1. Normalizaci ó n previa a la atenci ó n self . attention_norm = RMSNorm ( dim ) # Nota : Aqu í se instanciar í a la clase MultiHeadAttention definida previamente # self . attention = MultiHeadAttention ( dim , n_heads , dropout ) 56 57 58 # 2. Normalizaci ó n previa al FFN self . ffn_norm = RMSNorm ( dim ) 59 60 61 62 63 64 # 3. FFN con SwiGLU . Usamos el factor 8/3 para equivalencia de par á metros hidden_dim = int (8 * dim / 3) # Redondear al m ú ltiplo de 256 m á s cercano para eficiencia de hardware ( opcional pero recomendado ) hidden_dim = 256 * (( hidden_dim + 255) // 256) self . feed_forward = SwiGLU ( dim , hidden_dim ) 65 66 self . dropout = nn . Dropout ( dropout ) 67 68 69 70 71 72 73 74 75 76 def forward ( self , x : Tensor , mask : Tensor = None ) -> Tensor : """ Args : x : Tensor de entrada ( batch , seq_len , dim ) mask : M á scara de atenci ó n opcional Returns : Tensor de salida ( batch , seq_len , dim ) """ # --- Subcapa de Atenci ó n ( Pre - Norm ) --- Abraham Zamudio 27
  28. Arquitectura Transformer 4.8 Regularización y Estabilidad Adicional 77 78 79

    ) 80 81 82 83 84 # 1. Normalizar h = self . attention_norm ( x ) # 2. Aplicar atenci ó n ( asumimos que devuelve un tensor de la misma forma # attn_out = self . attention (h , mask ) # Para este ejemplo , simulamos la atenci ó n con una identidad para que el c ó digo sea ejecutable attn_out = h # 3. Suma residual y dropout x = x + self . dropout ( attn_out ) 85 # --- Subcapa Feed - Forward ( Pre - Norm ) --# 1. Normalizar h = self . ffn_norm ( x ) # 2. Aplicar FFN ffn_out = self . feed_forward ( h ) # 3. Suma residual y dropout x = x + self . dropout ( ffn_out ) 86 87 88 89 90 91 92 93 return x 94 Listing 2: Implementación de un Bloque Transformer Moderno (Pre-Norm + RMSNorm + SwiGLU) Nota de Implementación Eficiencia en Hardware: En la implementación de SwiGLU, se observa un patrón común en modelos de producción: redondear la hidden_dim al múltiplo de 256 (o 64) más cercano. Esto se debe a que las unidades de procesamiento tensorial (Tensor Cores) en GPUs modernas (arquitecturas Ampere, Hopper) están optimizadas para multiplicaciones de matrices cuyas dimensiones son múltiplos de 8 o 16. Alinear las dimensiones evita el padding interno ineficiente y maximiza el uso de la memoria SRAM. 4.8 Regularización y Estabilidad Adicional Además de la normalización y las conexiones residuales, una capa Transformer incorpora mecanismos de regularización para prevenir el sobreajuste (overfitting), especialmente crítico en modelos con cientos de millones de parámetros. Residual Dropout: Aplicado a la salida de las subcapas de atención y FFN antes de la suma residual (como se muestra en el código). Esto fuerza a la red a no depender excesivamente de una sola ruta o neurona, promoviendo la robustez. √ Attention Dropout: Aplicado a los pesos de atención (softmax(𝑄𝐾 ⊤ / 𝑑 𝑘 )) antes de multiplicarlos por 𝑉. Esto previene que el modelo se vuelva excesivamente confiado en un pequeño subconjunto de tokens de contexto. Stochastic Depth (DropPath): Una técnica avanzada donde, durante el entrenamiento, una capa completa se .apaga"(se reemplaza por la función identidad) con una probabilidad 𝑝 que aumenta linealmente con la profundidad de la capa. Esto actúa como un ensemble implícito de redes de diferentes profundidades y mejora la generalización en modelos muy profundos. 4.9 Resumen de la Sección El diseño de una capa Transformer es un ejercicio de equilibrio entre capacidad expresiva y estabilidad de optimización. Hemos visto cómo: Abraham Zamudio 28
  29. Arquitectura Transformer 4.9 Resumen de la Sección 1. Las conexiones

    residuales garantizan un flujo de gradiente estable, interpretable como la discretización de una ecuación diferencial continua. 2. La transición de LayerNorm a RMSNorm elimina redundancias computacionales sin sacrificar la estabilidad del paisaje de optimización. 3. La arquitectura Pre-Norm es indispensable para el entrenamiento de modelos profundos, eliminando la necesidad de warmup y controlando la varianza de la señal. 4. Las redes Feed-Forward modernas (SwiGLU) reemplazan las activaciones ReLU simples por mecanismos de puerta (gating) que, con una reasignación inteligente de parámetros, ofrecen una capacidad de modelado no lineal muy superior. Estos componentes, ensamblados con precisión, forman el bloque de construcción fundamental que, al apilarse decenas o cientos de veces, da lugar a las capacidades emergentes de los grandes modelos de lenguaje. En la siguiente sección, abordaremos cómo se inyecta la noción de orden y secuencia en esta arquitectura inherentemente permutacional: el Positional Encoding. Abraham Zamudio 29
  30. Arquitectura Transformer Codificación Posicional (Positional Encoding) 5 Codificación Posicional (Positional

    Encoding) 5.1 El Problema Fundamental: Invarianza a la Permutación Hasta este punto, hemos establecido que el mecanismo de Self-Attention es el motor computacional que permite al Transformer modelar dependencias globales en una secuencia. Sin embargo, esta potente operación posee una propiedad matemática inherente que, paradójicamente, constituye su mayor limitación estructural: la invarianza a la permutación. Formalicemos este concepto. Sea 𝑋 = (𝑥 1 , 𝑥2 , . . . , 𝑥 𝑛 ) una secuencia de vectores de entrada, donde cada 𝑥𝑖 ∈ R𝑑model . El mecanismo de atención calcula una nueva secuencia 𝑍 = (𝑧1 , 𝑧2 , . . . , 𝑧 𝑛 ) mediante la función A (𝑋). Si aplicamos una permutación 𝑃 a la secuencia de entrada, obteniendo 𝑋 ′ = 𝑃(𝑋), la salida del mecanismo de atención será exactamente la secuencia original permutada de la misma manera: A (𝑃(𝑋)) = 𝑃(A (𝑋)) (45) Esto significa que la operación de atención trata a la secuencia como un conjunto (set) no ordenado de vectores, no como una secuencia temporal o espacial. Para el modelo, las oraciones “El perro mordió al hombre” y “El hombre mordió al perro” son matemáticamente indistinguibles a nivel de la capa de atención, ya que ambas contienen exactamente los mismos vectores de embedding, solo que en un orden diferente. Dado que el Transformer carece de recurrencia (como en las RNN) o de convoluciones locales con desplazamiento (como en las CNN), no posee ningún sesgo inductivo (inductive bias) inherente que le permita inferir el orden de los tokens. Por lo tanto, es imperativo inyectar explícitamente información sobre la posición relativa o absoluta de cada token en la representación del modelo. Definición Técnica Un esquema de codificación posicional es una función 𝑓 : N × R𝑑model → R𝑑model que transforma el embedding de un token 𝑥 en la posición 𝑝𝑜𝑠, de modo que la representación resultante ℎ 𝑝𝑜𝑠 = 𝑓 ( 𝑝𝑜𝑠, 𝑥) sea única para cada par (token, posición), permitiendo al modelo distinguir el orden de la secuencia. A lo largo de la evolución de los modelos de lenguaje, han surgido varias filosofías para resolver este problema, desde las funciones sinusoidales deterministas hasta las rotaciones complejas en el espacio de características. 5.2 La Codificación Posicional Sinusoidal Original (Vaswani et al., 2017) El paper fundacional propuso una solución elegante, determinista y no aprendible. En lugar de utilizar una tabla de búsqueda (lookup table) entrenable, se generan funciones sinusoidales de diferentes frecuencias que se suman directamente a los embeddings de entrada. Para una posición 𝑝𝑜𝑠 (un entero 0, 1, 2, . . .) y una dimensión 𝑖 del vector de embedding (donde 0 ≤ 𝑖 < 𝑑model /2), la codificación se define como:   𝑝𝑜𝑠 PE ( 𝑝𝑜𝑠,2𝑖) = sin 100002𝑖/𝑑model   𝑝𝑜𝑠 PE ( 𝑝𝑜𝑠,2𝑖+1) = cos 100002𝑖/𝑑model (46) (47) La representación final que entra a la primera capa del Transformer es simplemente 𝑥 𝑝𝑜𝑠 + PE 𝑝𝑜𝑠 . Abraham Zamudio 30
  31. Arquitectura Transformer 5.2 La Codificación Posicional Sinusoidal Original (Vaswani et

    al., 2017) 5.2.1. Propiedades Matemáticas y Justificación Teórica Los autores eligieron esta formulación específica por varias propiedades matemáticas profundas que la hacen superior a una simple codificación one-hot o a índices enteros normales: Representación Lineal de Distancias Relativas Para cualquier desplazamiento fijo (offset) 𝑘, la codificación posicional en la posición 𝑝𝑜𝑠 + 𝑘, denotada como PE 𝑝𝑜𝑠+𝑘 , puede ser representada como una transformación lineal (específicamente, una rotación) de la codificación en la posición 𝑝𝑜𝑠, PE 𝑝𝑜𝑠 . Demostración (esquemática para un par de dimensiones 2𝑖, 2𝑖 + 1): Definamos la frecuencia 𝜔𝑖 = 10000−2𝑖/𝑑model . Podemos escribir el par de dimensiones como un vector 2D:   sin( 𝑝𝑜𝑠 · 𝜔𝑖 ) (𝑖) PE 𝑝𝑜𝑠 = (48) cos( 𝑝𝑜𝑠 · 𝜔𝑖 ) Para la posición 𝑝𝑜𝑠 + 𝑘, aplicamos las identidades trigonométricas de la suma de ángulos: sin(( 𝑝𝑜𝑠 + 𝑘)𝜔𝑖 ) = sin( 𝑝𝑜𝑠 · 𝜔𝑖 ) cos(𝑘 · 𝜔𝑖 ) + cos( 𝑝𝑜𝑠 · 𝜔𝑖 ) sin(𝑘 · 𝜔𝑖 ) cos(( 𝑝𝑜𝑠 + 𝑘)𝜔𝑖 ) = cos( 𝑝𝑜𝑠 · 𝜔𝑖 ) cos(𝑘 · 𝜔𝑖 ) − sin( 𝑝𝑜𝑠 · 𝜔𝑖 ) sin(𝑘 · 𝜔𝑖 ) Esto se puede reescribir elegantemente como una multiplicación matricial:    cos(𝑘 · 𝜔𝑖 ) sin(𝑘 · 𝜔𝑖 ) sin( 𝑝𝑜𝑠 · 𝜔𝑖 ) (𝑖) PE 𝑝𝑜𝑠+𝑘 = = 𝑅(𝑘 · 𝜔𝑖 ) · PE (𝑖) 𝑝𝑜𝑠 − sin(𝑘 · 𝜔𝑖 ) cos(𝑘 · 𝜔𝑖 ) cos( 𝑝𝑜𝑠 · 𝜔𝑖 ) (49) (50) (51) Donde 𝑅 es una matriz de rotación 2D. ▪ Esta propiedad es crucial. Significa que el modelo no necesita aprender a reconocer posiciones absolutas arbitrarias; en su lugar, las capas de atención (que son combinaciones lineales seguidas de no linealidades) pueden aprender fácilmente a prestar atención a posiciones relativas, ya que la relación entre 𝑝𝑜𝑠 y 𝑝𝑜𝑠 + 𝑘 es una simple rotación constante, independiente de 𝑝𝑜𝑠. Además, el uso de frecuencias geométricamente decrecientes (la base 10000) garantiza que algunas dimensiones capturen cambios de alta frecuencia (variaciones entre tokens adyacentes), mientras que otras capturen cambios de baja frecuencia (tendencias a lo largo de toda la secuencia), creando una representación similar a una Transformada de Fourier discreta de la posición. Valor de la dimensión Primeras dimensiones del Positional Encoding sinusoidal 1 𝑖 = 0 (Frecuencia alta, periodo corto) 𝑖 = 1 (Frecuencia media) 𝑖 = 5 (Frecuencia baja, periodo largo) 0 −1 0 10 20 30 40 50 60 70 80 90 100 Posición ( 𝑝𝑜𝑠) Figura 6: Visualización de tres pares de dimensiones del Positional Encoding sinusoidal para 𝑑model = 512. Las diferentes frecuencias permiten codificar patrones a múltiples escalas temporales. Abraham Zamudio 31
  32. Arquitectura Transformer 5.3 Embeddings Posicionales Aprendidos (Learned Positional Embeddings) 5.3

    Embeddings Posicionales Aprendidos (Learned Positional Embeddings) Una alternativa directa, adoptada por modelos como BERT y las primeras versiones de GPT, es tratar la posición como un token más. Se define una matriz de parámetros entrenables 𝑊 𝑝𝑜𝑠 ∈ R 𝐿 máx ×𝑑model , donde 𝐿 máx es la longitud máxima de contexto soportada (por ejemplo, 512 o 1024). La representación se obtiene mediante una simple suma: ℎ 𝑝𝑜𝑠 = 𝑥 𝑝𝑜𝑠 + 𝑊 𝑝𝑜𝑠 [ 𝑝𝑜𝑠, :]. Nota de Implementación La trampa de la extrapolación: Aunque los embeddings aprendidos son altamente flexibles y el modelo puede optimizarlos para su tarea específica, sufren de una deficiencia catastrófica: falta de generalización fuera del dominio de entrenamiento (out-of-distribution). Si un modelo se entrena con un 𝐿 máx = 2048, la matriz 𝑊 𝑝𝑜𝑠 solo tiene 2048 filas. Si durante la inferencia intentamos procesar una secuencia de 4096 tokens, el modelo consultará índices de posición que nunca vio durante el entrenamiento, resultando en un colapso total del rendimiento (perplejidad explosiva). El encoding sinusoidal, al ser una función analítica continua, sufre menos este problema, aunque tampoco extrapola perfectamente. 5.4 Rotary Position Embedding (RoPE): El Estándar Moderno Dadas las limitaciones de los métodos anteriores, la comunidad convergió hacia una formulación más elegante que inyecta la posición no sumando un vector, sino rotando el espacio de características de las Queries y Keys. Propuesto por Su et al. (2021) en RoFormer, el Rotary Position Embedding (RoPE) es el mecanismo estándar en arquitecturas de vanguardia como LLaMA, Mistral, Qwen y Yi. 5.4.1. Derivación Matemática de RoPE El objetivo de diseño de RoPE es garantizar que el producto punto entre una Query en la posición 𝑚 y una Key en la posición 𝑛 dependa exclusivamente de la distancia relativa 𝑚 − 𝑛, mientras se mantiene la forma estándar del producto punto de la atención. Buscamos una función 𝑓 tal que: ⟨ 𝑓 (𝑞, 𝑚), 𝑓 (𝑘, 𝑛)⟩ = 𝑔(𝑞, 𝑘, 𝑚 − 𝑛) (52) donde ⟨·, ·⟩ es el producto punto estándar en R𝑑 . Consideremos el caso más simple en 2 dimensiones (𝑑 = 2). Representamos 𝑞 y 𝑘 como números complejos o vectores 2D. Definimos la función 𝑓 como una rotación del vector original por un ángulo proporcional a la posición:    cos(𝑚𝜃) − sin(𝑚𝜃) 𝑞 0 𝑓 (𝑞, 𝑚) = 𝑅𝑚𝜃 𝑞 = (53) sin(𝑚𝜃) cos(𝑚𝜃) 𝑞 1 Ahora, evaluemos el producto punto entre 𝑓 (𝑞, 𝑚) y 𝑓 (𝑘, 𝑛): ⟨ 𝑓 (𝑞, 𝑚), 𝑓 (𝑘, 𝑛)⟩ = (𝑅𝑚𝜃 𝑞) ⊤ (𝑅𝑛𝜃 𝑘) ⊤ = 𝑞 ⊤ 𝑅𝑚𝜃 𝑅𝑛𝜃 𝑘 (54) (55) ⊤ = 𝑅 Dado que la transpuesta de una matriz de rotación es su inversa (𝑅𝑚𝜃 −𝑚𝜃 ), y la composición de rotaciones suma sus ángulos (𝑅−𝑚𝜃 𝑅𝑛𝜃 = 𝑅 (𝑛−𝑚)𝜃 ), obtenemos: ⟨ 𝑓 (𝑞, 𝑚), 𝑓 (𝑘, 𝑛)⟩ = 𝑞 ⊤ 𝑅 (𝑛−𝑚)𝜃 𝑘 = ⟨𝑞, 𝑅 (𝑛−𝑚)𝜃 𝑘⟩ (56) ¡Hemos logrado el objetivo! El producto punto depende únicamente de la diferencia (𝑛−𝑚), codificando la posición relativa de manera exacta y matemáticamente pura, sin necesidad de sumar vectores externos. Abraham Zamudio 32
  33. Arquitectura Transformer 5.5 Attention with Linear Biases (ALiBi) 5.4.2. Generalización

    a 𝑑 Dimensiones Para un vector de dimensión 𝑑 (asumiendo 𝑑 par), RoPE aplica esta rotación de forma independiente a pares de dimensiones adyacentes (0, 1), (2, 3), . . . , (𝑑 − 2, 𝑑 − 1), utilizando una secuencia de 𝑑/2−1 frecuencias predefinidas Θ = {𝜃𝑖 = 𝑏 −2𝑖/𝑑 }𝑖=0 , donde típicamente 𝑏 = 10000. La matriz de transformación completa es una matriz bloque-diagonal:     cos 𝑚𝜃 0 − sin 𝑚𝜃 0 cos 𝑚𝜃 𝑑/2−1 − sin 𝑚𝜃 𝑑/2−1 𝑅Θ,𝑚 = diag ,..., (57) sin 𝑚𝜃 0 cos 𝑚𝜃 0 sin 𝑚𝜃 𝑑/2−1 cos 𝑚𝜃 𝑑/2−1 Insight Arquitectónico Ventajas clave de RoPE: 1. Invarianza relativa exacta: A diferencia del encoding sinusoidal sumado, RoPE garantiza matemáticamente que la similitud entre tokens dependa solo de su distancia relativa. 2. Decaimiento con la distancia: A medida que |𝑚 − 𝑛| aumenta, el producto punto entre vectores rotados tiende a disminuir, lo que refleja la intuición lingüística de que los tokens lejanos son menos relevantes que los cercanos. 3. Flexibilidad de longitud: Al ser una operación aplicada sobre la marcha (on-the-fly) a las Queries y Keys, RoPE puede extrapolarse a longitudes de contexto mayores que las vistas en entrenamiento con técnicas de interpolación de frecuencias (como YaRN o NTK-aware scaling). 5.5 Attention with Linear Biases (ALiBi) Como una alternativa radicalmente diferente a la modificación de los embeddings de entrada o la rotación de Q/K, Press et al. (2021) propusieron ALiBi (Attention with Linear Biases). En lugar de alterar las representaciones de los tokens, ALiBi modifica directamente la matriz de puntuaciones de atención antes de aplicar el softmax. Se añade un sesgo (bias) estático, no aprendible y negativo, que es proporcional a la distancia entre el token de consulta 𝑖 y el token clave 𝑗:   𝑞𝑖 · 𝑘 𝑗 + 𝑚 · (𝑖 − 𝑗) 𝑣 𝑗 (58) Attention(𝑄, 𝐾, 𝑉)𝑖, 𝑗 = softmax √ 𝑑𝑘 Donde 𝑚 es una pendiente negativa fija. La innovación de ALiBi es que cada cabeza de atención utiliza una pendiente 𝑚 diferente. Las cabezas que capturan dependencias de corto alcance reciben pendientes más pronunciadas (ej. −2−0,5 ), mientras que las cabezas de largo alcance reciben pendientes más suaves (ej. −2−8 ). Extrapolación de Longitud Cero (Zero-Shot Length Extrapolation) Dado que el sesgo 𝑚 · (𝑖 − 𝑗) es una función lineal de la distancia relativa, no existe un "límite"de longitud de contexto. Si un modelo se entrena con secuencias de 1024 tokens, la función de penalización lineal sigue siendo válida y bien comportada para secuencias de 8192 tokens. ALiBi permite a los modelos extrapolar a contextos hasta 8 veces más largos que los de entrenamiento sin ningún fine-tuning, superando drásticamente a los métodos basados en embeddings absolutos o sinusoidales. Aunque modelos como MPT y BLOOM utilizaron ALiBi con gran éxito, RoPE ha terminado dominando el ecosistema actual (Llama, etc.) debido a que RoPE, combinado con técnicas de escalado de contexto durante el fine-tuning, ofrece un equilibrio ligeramente superior entre rendimiento en contexto corto y capacidad de extensión. Abraham Zamudio 33
  34. Arquitectura Transformer 5.6 Implementación Computacional en Python (Enfoque en RoPE)

    5.6 Implementación Computacional en Python (Enfoque en RoPE) Implementar RoPE de manera eficiente en PyTorch requiere evitar los bucles explícitos y las multiplicaciones de matrices de rotación completas, que son computacionalmente costosas. En su lugar, se utiliza un truco algebraico elegante conocido como rotate_half, que reordena y cambia el signo de las dimensiones para simular la rotación compleja mediante operaciones vectorizadas de Hadamard (producto elemento a elemento). 1 2 3 import torch import torch . nn as nn from torch import Tensor 4 5 6 7 8 9 10 11 12 def rotate_half ( x : Tensor ) -> Tensor : """ Rota la mitad de las dimensiones del tensor . Si x = [ x0 , x1 , x2 , x3 ] , devuelve [ - x2 , -x3 , x0 , x1 ]. Esto simula la multiplicaci ó n por la unidad imaginaria 'j ' en pares 2 D . """ x1 , x2 = x . chunk (2 , dim = -1) return torch . cat (( - x2 , x1 ) , dim = -1) 13 14 15 16 def apply_rotary_pos_emb ( q : Tensor , k : Tensor , cos : Tensor , sin : Tensor ) -> tuple [ Tensor , Tensor ]: """ Aplica RoPE a las Queries y Keys . 17 18 19 20 21 22 23 24 25 26 Args : q , k: Tensores de forma ( batch_size , seq_len , num_heads , head_dim ) cos , sin : Tensores de cosenos y senos precomputados de forma ( seq_len , head_dim ) ( o (1 , seq_len , 1 , head_dim ) para broadcasting correcto ) Returns : q_rot , k_rot : Tensores rotados con la misma forma que q y k . """ # La f ó rmula de rotaci ó n compleja es : q_rot = q * cos + rotate_half ( q ) * sin # Usamos broadcasting para aplicar la rotaci ó n a cada cabeza y cada elemento del batch 27 28 29 30 # q * cos + rotate_half ( q ) * sin q_embed = ( q * cos ) + ( rotate_half ( q ) * sin ) k_embed = ( k * cos ) + ( rotate_half ( k ) * sin ) 31 32 return q_embed , k_embed 33 34 35 36 37 38 39 40 41 42 class RoPE ( nn . Module ) : """ M ó dulo que precomputa y gestiona los tensores de coseno y seno para RoPE . """ def __init__ ( self , head_dim : int , max_seq_len : int = 2048 , base : int = 10000) : super () . __init__ () self . head_dim = head_dim self . max_seq_len = max_seq_len self . base = base 43 44 45 46 47 # 1. Calcular las frecuencias theta : theta_i = base ^( -2* i / head_dim ) # i va de 0 a head_dim /2 - 1 inv_freq = 1.0 / ( self . base ** ( torch . arange (0 , self . head_dim , 2) . float () / self . head_dim ) ) self . register_buffer ( " inv_freq " , inv_freq , persistent = False ) Abraham Zamudio 34
  35. Arquitectura Transformer 5.7 Resumen Comparativo de Esquemas Posicionales 48 #

    2. Precomputar cos y sin para todas las posiciones hasta max_seq_len self . _update_cos_sin_tables ( max_seq_len ) 49 50 51 def _update_cos_sin_tables ( self , seq_len : int ) : " " " Precomputa las tablas de coseno y seno . " " " t = torch . arange ( seq_len , device = self . inv_freq . device , dtype = torch . float32 ) 52 53 54 55 # Outer product : forma ( seq_len , head_dim // 2) freqs = torch . outer (t , self . inv_freq ) 56 57 58 # Concatenar para obtener la forma ( seq_len , head_dim ) # Se repite cada valor dos veces para emparejar con las dimensiones 2 D emb = torch . cat (( freqs , freqs ) , dim = -1) 59 60 61 62 self . register_buffer ( " cos_cached " , emb . cos () , persistent = False ) self . register_buffer ( " sin_cached " , emb . sin () , persistent = False ) 63 64 65 def forward ( self , q : Tensor , k : Tensor , seq_len : int = None ) -> tuple [ Tensor , Tensor ]: """ Aplica la codificaci ó n posicional a q y k . """ # Si la secuencia es m á s larga que lo precomputado , actualizamos las tablas ( ú til para extrapolaci ón ) if seq_len is not None and seq_len > self . cos_cached . shape [0]: self . _update_cos_sin_tables ( seq_len ) 66 67 68 69 70 71 72 73 # Extraer las porciones relevantes de las tablas precomputadas # q y k tienen forma ( batch , num_heads , seq_len , head_dim ) # Necesitamos que cos y sin tengan forma (1 , 1 , seq_len , head_dim ) para broadcast cos = self . cos_cached [: seq_len ]. unsqueeze (0) . unsqueeze (0) sin = self . sin_cached [: seq_len ]. unsqueeze (0) . unsqueeze (0) 74 75 76 77 78 79 return apply_rotary_pos_emb (q , k , cos , sin ) 80 81 Listing 3: Implementación eficiente de Rotary Position Embedding (RoPE) en PyTorch Nota de Implementación Eficiencia del truco rotate_half: Observa que no se construye explícitamente la matriz de rotación 𝑅Θ,𝑚 . En su lugar, la función rotate_half desplaza y niega la segunda mitad del vector de características. Al multiplicar esto por sin y sumarlo al vector original multiplicado por cos, se logra exactamente el mismo resultado matemático que la multiplicación matricial, pero con una fracción del costo computacional y de memoria, aprovechando al máximo las unidades vectoriales de la GPU. 5.7 Resumen Comparativo de Esquemas Posicionales Para consolidar la comprensión de estas arquitecturas, la siguiente tabla resume las características críticas de los enfoques más relevantes en el estado del arte actual. Abraham Zamudio 35
  36. Mecanismo Posición Relativa Extrapolación Modelos Representativos Sinusoidal Suma de funciones

    sen/cos Aproximada (vía linealidad) Moderada Transformer original, BART Aprendido Lookup table entrenable No (absoluta) Pésima (colapso OOD) BERT, GPT-1/2, ViT RoPE Rotación de Q y K en el espacio complejo Exacta (por diseño) Buena (con interpolación/NTK) LLaMA 2/3, Mistral, Qwen ALiBi Sesgo lineal estático en la matriz de atención Exacta (penalización) Excelente (Zero-shot) MPT, BLOOM Tabla 2: Comparativa de los principales esquemas de codificación posicional en arquitecturas Transformer. Arquitectura Transformer 5.7 Resumen Comparativo de Esquemas Posicionales Abraham Zamudio Método 36
  37. Arquitectura Transformer 5.8 Conclusión de la Sección 5.8 Conclusión de

    la Sección La codificación posicional no es un mero detalle de implementación, sino un pilar fundamental que determina la capacidad del Transformer para comprender la estructura del lenguaje y, críticamente, su capacidad para generalizar a longitudes de contexto no vistas durante el entrenamiento. Hemos transitado desde la intuición inicial de las ondas sinusoidales, pasando por la rigurosidad matemática de las rotaciones en el espacio de características (RoPE), hasta la elegancia algorítmica de los sesgos lineales (ALiBi). La elección de RoPE como estándar de facto en la actualidad subraya la importancia de alinear las operaciones del modelo con principios matemáticos sólidos (como la invarianza relativa exacta) para lograr un escalado robusto y predecible. En la siguiente sección, analizaremos cómo todos estos componentes (atención, normalización, FFN y codificación posicional) interactúan para definir la complejidad computacional del modelo, y qué técnicas de vanguardia (como FlashAttention) se están desplegando para romper el muro cuadrático que limita la longitud de las secuencias. Abraham Zamudio 37
  38. Arquitectura Transformer Complejidad Computacional 6 Complejidad Computacional 6.1 Introducción: La

    Tensión entre Expresividad y Costo El mecanismo de atención, tal como se ha descrito en las secciones anteriores, confiere al Transformer una capacidad expresiva sin precedentes para modelar dependencias de largo alcance. Sin embargo, esta potencia no es gratuita. La “culpa original” de la arquitectura Transformer, desde una perspectiva de ciencias de la computación y optimización numérica, radica en su complejidad computacional y de memoria, la cual escala cuadráticamente con la longitud de la secuencia. Esta dependencia cuadrática O (𝑛2 ) constituye el principal cuello de botella (bottleneck) que limita la escalabilidad de los modelos de lenguaje hacia contextos ultralargos (cientos de miles o millones de tokens). Comprender rigurosamente de dónde emerge esta complejidad, cómo se manifiesta de manera diferente durante el entrenamiento y la inferencia, y qué técnicas de vanguardia se han desarrollado para mitigarla, es fundamental para cualquier ingeniero o investigador que trabaje con modelos de lenguaje a escala industrial. En esta sección, desglosaremos la complejidad asintótica formal (tiempo y espacio), analizaremos la distinción crítica entre operaciones limitadas por cómputo (compute-bound) y las limitadas por ancho de banda de memoria (memory-bandwidth-bound), y exploraremos las optimizaciones de kernel (como FlashAttention) y arquitectónicas (como GQA) que definen el estado del arte actual. 6.2 Análisis Asintótico Formal: Tiempo y Espacio Para realizar un análisis riguroso, definamos las variables fundamentales que gobiernan la dimensionalidad del modelo: 𝑛: Longitud de la secuencia de entrada (número de tokens). 𝑑: Dimensión del modelo (𝑑model ). ℎ: Número de cabezas de atención. 𝑑 𝑘 = 𝑑𝑣 = 𝑑/ℎ: Dimensión de las proyecciones por cabeza. 𝑑ff : Dimensión oculta de la red Feed-Forward (típicamente 4𝑑 o 83 𝑑 en arquitecturas SwiGLU). A continuación, descomponemos la complejidad de una única capa del Transformer. 6.2.1. Complejidad del Mecanismo de Atención El cálculo de Scaled Dot-Product Attention involucra las siguientes operaciones matriciales dominantes: 1. Proyecciones lineales de 𝑄, 𝐾, 𝑉: Multiplicar la entrada 𝑋 ∈ R𝑛×𝑑 por las matrices de pesos 𝑊 𝑄 , 𝑊 𝐾 , 𝑊 𝑉 ∈ R𝑑×𝑑 . Cada multiplicación tiene un costo de O (𝑛 · 𝑑 2 ). Para las tres, el costo es 3 · O (𝑛 · 𝑑 2 ) = O (𝑛 · 𝑑 2 ). 2. Cálculo de puntuaciones de atención (𝑄𝐾 ⊤ ): Para cada cabeza, multiplicamos una matriz de (𝑛 × 𝑑 𝑘 ) por una de (𝑑 𝑘 × 𝑛). El costo por cabeza es O (𝑛2 · 𝑑 𝑘 ). Dado que hay ℎ cabezas, el costo total es O (ℎ · 𝑛2 · 𝑑 𝑘 ). Sustituyendo 𝑑 𝑘 = 𝑑/ℎ, obtenemos O (𝑛2 · 𝑑). 3. Operación Softmax: Aplicar la función softmax a la matriz de puntuaciones de tamaño 𝑛 × 𝑛 para cada cabeza. El costo es O (ℎ · 𝑛2 ) = O (𝑛2 ), que es asintóticamente dominado por el paso anterior. 4. Ponderación por valores (𝐴𝑉): Multiplicar la matriz de atención resultante (𝑛 × 𝑛) por la matriz de valores 𝑉 (𝑛 × 𝑑 𝑘 ). El costo por cabeza es O (𝑛2 · 𝑑 𝑘 ). Para ℎ cabezas, el costo total es nuevamente O (𝑛2 · 𝑑). Abraham Zamudio 38
  39. Arquitectura Transformer 6.3 La Paradoja del Cuello de Botella: Compute-Bound

    vs. Memory-Bound 5. Proyección de salida (𝑊 𝑂 ): Multiplicar la salida concatenada (𝑛 × 𝑑) por la matriz de pesos (𝑑 × 𝑑). Costo: O (𝑛 · 𝑑 2 ). Sumando estos términos, la complejidad temporal de la atención en una capa es: Tattn = O (𝑛 · 𝑑 2 + 𝑛2 · 𝑑) (59) En cuanto a la complejidad espacial (memoria), durante el paso hacia adelante (forward pass), debemos almacenar en la memoria de alta velocidad de la GPU (HBM) la matriz de puntuaciones de atención de tamaño 𝑛 × 𝑛 para cada cabeza, ya que es estrictamente necesaria para calcular los gradientes durante la retropropagación (backward pass) mediante la regla de la cadena. Por lo tanto, la complejidad de memoria de la atención está dominada por: Mattn = O (𝑛2 · ℎ) ≈ O (𝑛2 ) 6.2.2. (60) Complejidad de la Red Feed-Forward (FFN) La FFN se aplica de manera independiente a cada una de las 𝑛 posiciones de la secuencia. Consiste en una expansión a 𝑑ff , una no linealidad, y una proyección de vuelta a 𝑑. Tiempo: Dos multiplicaciones matriciales de tamaño (𝑛 × 𝑑) por (𝑑 × 𝑑ff ) y (𝑛 × 𝑑ff ) por (𝑑ff × 𝑑). El costo total es O (𝑛 · 𝑑 · 𝑑ff ). Dado que 𝑑ff es una constante multiplicativa de 𝑑 (ej. 4𝑑), esto se simplifica a O (𝑛 · 𝑑 2 ). Espacio: Solo necesitamos almacenar las activaciones intermedias de tamaño 𝑛 × 𝑑ff , lo que resulta en una complejidad de O (𝑛 · 𝑑). Punto de Inflexión de la Complejidad La complejidad total de una capa Transformer es la suma de la atención y la FFN: Ttotal = O (𝑛 · 𝑑 2 + 𝑛2 · 𝑑) (61) Existe un punto de inflexión crítico determinado por la relación entre 𝑛 y 𝑑. Si 𝑛 < 𝑑, el término O (𝑛 · 𝑑 2 ) domina. El modelo está limitado por las multiplicaciones matriciales densas de la FFN y las proyecciones lineales. Si 𝑛 > 𝑑, el término O (𝑛2 · 𝑑) domina. El modelo está limitado por la operación de atención. En los LLMs modernos, donde 𝑑 suele ser grande (ej. 4096 en Llama 3 8B) pero los contextos 𝑛 se extienden a 8K, 32K o 128K tokens, el régimen 𝑛 > 𝑑 es la norma, convirtiendo a la atención en el principal consumidor de recursos. 6.3 La Paradoja del Cuello de Botella: Compute-Bound vs. Memory-Bound Un error conceptual común en el análisis de complejidad de redes neuronales es asumir que la notación Big-O O (·) se traduce directamente en tiempo de ejecución (wall-clock time) en hardware moderno. En las GPUs, el rendimiento real está dictado por la aritmética de intensidad (operaciones de punto flotante por byte transferido desde la memoria). Esto nos lleva a una distinción fundamental entre dos regímenes de ejecución. 6.3.1. Régimen de Entrenamiento y Pre-fill (Compute-Bound) Durante el entrenamiento (o la fase de pre-fill en la inferencia, donde se procesa el prompt inicial en paralelo), las operaciones de multiplicación de matrices (GEMM, General Matrix Multiply) dominan. Las GPUs modernas (como las series NVIDIA H100 o B200) poseen unidades Tensor Core altamente Abraham Zamudio 39
  40. Arquitectura Transformer 6.4 El KV Cache: Anatomía y Costo de

    Memoria optimizadas que pueden realizar billones de operaciones de punto flotante por segundo (TFLOPS). En este régimen, el cuello de botella es la capacidad de cómputo (FLOPS). La memoria HBM es lo suficientemente rápida como para alimentar a los núcleos de cómputo, y la optimización se centra en maximizar el uso de estos núcleos. 6.3.2. Régimen de Decodificación Autoregresiva (Memory-Bandwidth-Bound) Durante la generación de texto token por token (fase de decode), la dinámica cambia radicalmente. Para generar un solo token nuevo, el modelo debe: 1. Cargar todos los pesos del modelo (miles de millones de parámetros) desde la HBM hacia los registros de la GPU. 2. Cargar el KV Cache completo de todos los tokens anteriores. 3. Realizar una multiplicación matriz-vector (GEMV, General Matrix-Vector multiply) para calcular la nueva atención y la FFN. 4. Escribir el nuevo token y sus nuevos vectores 𝐾 y 𝑉 de vuelta en el KV Cache en la HBM. En una operación GEMV, la cantidad de datos leídos (pesos + KV Cache) es enorme en comparación con la cantidad de operaciones aritméticas realizadas (una multiplicación y una suma por elemento). La intensidad aritmética es extremadamente baja (cercana a 1 FLOP/byte). Como resultado, los núcleos de cómputo de la GPU pasan la mayor parte del tiempo esperando a que los datos lleguen desde la memoria HBM, la cual tiene un ancho de banda limitado (ej. 3.35 TB/s en una H100, que es órdenes de magnitud más lento que la velocidad de cómputo interno). Insight Arquitectónico La paradoja de la generación: Añadir más GPUs o usar núcleos de cómputo más rápidos no acelera significativamente la generación token por token si el modelo ya está limitado por el ancho de banda de memoria. La única forma de acelerar la inferencia es reducir la cantidad de datos que deben moverse (reducir el tamaño del KV Cache, cuantizar pesos) o aumentar el batch size para convertir múltiples operaciones GEMV en una operación GEMM más eficiente, aunque esto último está limitado por la capacidad de memoria. 6.4 El KV Cache: Anatomía y Costo de Memoria El KV Cache es la optimización que hace viable la inferencia autoregresiva. En lugar de recalcular las matrices 𝐾 y 𝑉 para todos los tokens anteriores en cada paso de generación, estos vectores se almacenan en memoria. Sin embargo, este ahorro computacional tiene un costo de memoria prohibitivo. Abraham Zamudio 40
  41. Arquitectura Transformer 6.5 Optimizaciones de Kernel: La Revolución de FlashAttention

    Definición Técnica El tamaño del KV Cache en bytes para un modelo dado se calcula como: MemoriaKV = 2 × 𝑛 × 𝑏 × ℎ × 𝑑 𝑘 × bytes_por_elemento (62) donde: 2: Factor debido al almacenamiento de ambas matrices, Key y Value. 𝑛: Longitud del contexto (número de tokens). 𝑏: Tamaño del batch (número de secuencias procesadas simultáneamente). ℎ: Número total de cabezas de atención en el modelo. 𝑑 𝑘 : Dimensión de cada cabeza. bytes_por_elemento: 2 para precisión FP16 o BF16, 1 para INT8. Ejemplo numérico concreto: Consideremos un modelo tipo Llama 3 70B. Parámetros totales ≈ 70 × 109 . ℎ = 64 cabezas, 𝑑 𝑘 = 128. (Nota: 64 × 128 = 8192 = 𝑑model ). Contexto 𝑛 = 8192 tokens. Batch size 𝑏 = 1 (generación para un solo usuario). Precisión: BF16 (2 bytes). Sustituyendo en la fórmula para una sola capa: MemoriaKV, capa = 2 × 8192 × 1 × 64 × 128 × 2 ≈ 268 MB (63) Dado que Llama 3 70B tiene 80 capas, el KV Cache total para una sola secuencia de 8K tokens es: MemoriaKV, total = 80 × 268 MB ≈ 21,4 GB (64) Esto significa que, solo para mantener el estado de una conversación de 8K tokens, se consumen más de 21 GB de la memoria de la GPU, sin contar los ≈ 140 GB necesarios para almacenar los pesos del modelo en FP16. Esto explica por qué servir modelos de 70B+ parámetros con contextos largos requiere clusters de GPUs con cientos de gigabytes de memoria RAM unificada (como las NVIDIA H100 80GB en configuración tensor parallel). 6.5 Optimizaciones de Kernel: La Revolución de FlashAttention Dado que la complejidad de memoria O (𝑛2 ) de la atención estándar es insostenible para contextos largos, la comunidad ha desarrollado optimizaciones a nivel de kernel de GPU. La más influyente es FlashAttention (Dao et al., 2022, 2023). Es crucial entender que FlashAttention no cambia la complejidad asintótica O (𝑛2 · 𝑑). En su lugar, reduce drásticamente las constantes ocultas relacionadas con el movimiento de datos, logrando aceleraciones de 2x a 4x en la práctica y permitiendo contextos que de otro modo causarían errores de Out Of Memory (OOM). 6.5.1. El Problema del SRAM vs. HBM En una GPU, la memoria jerárquica consiste en: Abraham Zamudio 41
  42. Arquitectura Transformer 6.6 Variantes Arquitectónicas de Atención Eficiente HBM (High

    Bandwidth Memory): Grande (80 GB) pero relativamente lenta (3.35 TB/s). SRAM (Shared Memory): Muy pequeña (ej. 192 KB por Streaming Multiprocessor en una A100) pero extremadamente rápida (19 TB/s). La implementación ingenua de la atención en PyTorch (‘F.scaled_dot_product_attention‘ estándar) materializa la matriz completa 𝑆 = 𝑄𝐾 ⊤ ∈ R𝑛×𝑛 en la HBM, luego lee esa matriz para aplicar el softmax, y luego la escribe de nuevo en la HBM antes de multiplicarla por 𝑉. Para 𝑛 = 8192, esta matriz intermedia consume decenas de megabytes, y las lecturas/escrituras repetidas entre HBM y registros saturan el ancho de banda. 6.5.2. La Solución: Tiling y Recalculación (Recomputation) FlashAttention resuelve esto mediante dos técnicas algorítmicas: 1. Tiling (Bloques): Divide las matrices 𝑄, 𝐾, 𝑉 en bloques pequeños que caben completamente en la SRAM rápida. El kernel de CUDA calcula la atención bloque por bloque, actualizando estadísticas suficientes (el máximo y la suma de exponenciales para el softmax seguro numéricamente) sin escribir nunca la matriz 𝑛 × 𝑛 completa en la HBM. 2. Recomputation (Recomputación en el backward pass): Para evitar guardar la matriz de atención 𝑛 × 𝑛 para la retropropagación (lo que causaría el O (𝑛2 ) de memoria), FlashAttention simplemente vuelve a calcular los bloques de atención necesarios durante el paso hacia atrás, aprovechando que la SRAM es lo suficientemente rápida como para hacer esto más barato que leer/escribir desde la HBM. Nota de Implementación Impacto práctico: FlashAttention es exacto (no es una aproximación como la atención dispersa). Produce los mismos gradientes que la implementación ingenua, pero utiliza una fracción de la memoria y es significativamente más rápido. Hoy en día, es el backend predeterminado en bibliotecas como Hugging Face ‘transformers‘ y ‘vLLM‘ cuando el hardware lo soporta. 6.6 Variantes Arquitectónicas de Atención Eficiente Más allá de las optimizaciones de kernel, se han propuesto modificaciones arquitectónicas para atacar directamente el crecimiento del KV Cache y la complejidad cuadrática. 6.6.1. Multi-Query Attention (MQA) y Grouped Query Attention (GQA) Estas técnicas abordan el cuello de botella de memoria del KV Cache durante la inferencia, reconociendo que no todas las cabezas de atención necesitan sus propias proyecciones de clave y valor únicas. Multi-Query Attention (MQA): Todas las cabezas de consulta (𝑄) comparten un único par de cabezas de clave (𝐾) y valor (𝑉). Esto reduce el tamaño del KV Cache por un factor de ℎ (ej. 64x más pequeño). Introducida por Shazeer (2019) y popularizada por PaLM. Grouped Query Attention (GQA): Un punto medio entre MHA (Multi-Head) y MQA. Las ℎ cabezas de consulta se dividen en 𝑔 grupos, y cada grupo comparte un par 𝐾, 𝑉. Por ejemplo, Llama 3 70B usa ℎ = 64 cabezas de consulta y 𝑔 = 8 grupos de KV. Esto reduce el KV Cache en un factor de 8, recuperando casi toda la calidad de MHA mientras se acerca a la velocidad de inferencia de MQA. Abraham Zamudio 42
  43. Arquitectura Transformer 6.7 Resumen Comparativo de Complejidad 6.6.2. Atención Dispersa

    (Sparse Attention) y Lineal Para romper la barrera O (𝑛2 ) de manera fundamental, se han explorado alternativas: Sparse Attention (ej. Longformer, BigBird): Restringe la matriz de atención a un patrón fijo (ej. ventana local + tokens globales + aleatorios), reduciendo la complejidad a O (𝑛 log 𝑛) o O (𝑛). Sin embargo, la dispersión irregular a menudo resulta en kernels de GPU ineficientes que no aprovechan bien los Tensor Cores. Linear Attention (ej. Performer): Aproxima el kernel softmax mediante características de Fourier aleatorias, permitiendo asociar las operaciones como (𝑄𝐾 ⊤ )𝑉 = 𝑄(𝐾 ⊤𝑉), cambiando el orden de multiplicación para lograr O (𝑛 · 𝑑 2 ). A costa de una ligera degradación en la calidad del lenguaje. State Space Models (SSMs) (ej. Mamba, Jamba): Alternativas híbridas que reemplazan capas de atención con recurrencia continua lineal, logrando complejidad de inferencia O (𝑛) y un tamaño de estado constante, aunque el entrenamiento sigue requiriendo técnicas especiales (como convoluciones causales) para mantener la paralelización. 6.7 Resumen Comparativo de Complejidad La siguiente tabla sintetiza el análisis de complejidad para una única capa del Transformer, destacando el impacto de las optimizaciones modernas. Abraham Zamudio 43
  44. Complejidad Temporal Complejidad Espacial (Memoria) Régimen Dominante Proyecciones Q, K,

    V O (𝑛 · 𝑑 2 ) O (𝑛 · 𝑑) Compute-Bound (Training) Atención Estándar (MHA) O (𝑛2 · 𝑑) O (𝑛2 ) Memory-Bound (Decode) FlashAttention O (𝑛2 · 𝑑) O (𝑛) (en HBM) Compute-Bound (mejor constante) Feed-Forward (FFN) O (𝑛 · 𝑑 · 𝑑ff ) O (𝑛 · 𝑑ff ) Compute-Bound O (𝑛 · 𝑑) (lectura) O (𝑛 · ℎ · 𝑑 𝑘 ) Memory-Bandwidth-Bound O (𝑛2 · 𝑑) O (𝑛2 · 𝑔ℎ ) Mitiga Memory-Bound KV Cache (por paso decode) GQA / MQA Tabla 3: Análisis comparativo de complejidad computacional y de memoria en componentes del Transformer. 𝑔 representa el número de grupos en GQA. Arquitectura Transformer 6.7 Resumen Comparativo de Complejidad Abraham Zamudio Componente 44
  45. Arquitectura Transformer 6.8 Conclusión de la Sección 6.8 Conclusión de

    la Sección El análisis de la complejidad computacional revela que el éxito del Transformer no se debe únicamente a su elegancia matemática, sino a la capacidad de la comunidad de ingeniería para empujar los límites del hardware moderno. Mientras que la complejidad teórica O (𝑛2 ) de la atención impone un límite fundamental, técnicas como FlashAttention (optimización a nivel de hardware), GQA (optimización arquitectónica) y la cuantización del KV Cache han extendido la viabilidad práctica del modelo a contextos de cientos de miles de tokens. Comprender la distinción entre los regímenes compute-bound y memory-bandwidth-bound es la clave para diagnosticar cuellos de botella en sistemas de producción. No basta con saber que un algoritmo es O (𝑛2 ); es imperativo entender cómo ese O (𝑛2 ) se traduce en lecturas de HBM, uso de SRAM y saturación de los núcleos Tensor. En la siguiente y última sección de contenido técnico, sintetizaremos estos conceptos en un resumen de puntos clave y exploraremos las variantes modernas que están redefiniendo la arquitectura Transformer más allá de su formulación original de 2017, preparando el terreno para la próxima generación de modelos de inteligencia artificial. Abraham Zamudio 45
  46. Arquitectura Transformer Referencias Bibliográficas Referencias Bibliográficas Vaswani, A., et al.

    (2017) Attention Is All You Need. Advances in Neural Information Processing Systems (NeurIPS), 30, 5998-6008. Bahdanau, D., Cho, K., & Bengio, Y. (2015) Neural Machine Translation by Jointly Learning to Align and Translate. International Conference on Learning Representations (ICLR). Ba, J. L., Kiros, J. R., & Hinton, G. E. (2016) Layer Normalization. arXiv preprint arXiv:1607.06450. Zhang, B., & Sennrich, R. (2019) Root Mean Square Layer Normalization. Advances in Neural Information Processing Systems (NeurIPS), 32. Shazeer, N. (2020) GLU Variants Improve Transformer. arXiv preprint arXiv:2002.05202. Su, J., et al. (2021) RoFormer: Enhanced Transformer with Rotary Position Embedding. arXiv preprint arXiv:2104.09864. Press, O., Smith, N. A., & Lewis, M. (2021) Train Short, Test Long: Attention with Linear Biases Enables Input Length Extrapolation. International Conference on Learning Representations (ICLR). Kaplan, J., et al. (2020) Scaling Laws for Neural Language Models. arXiv preprint arXiv:2001.08361. Dao, T., Fu, D. Y., Ermon, S., Rudra, A., & Ré, C. (2022) FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness. Advances in Neural Information Processing Systems (NeurIPS), 35, 26434-26449. Ainslie, J., et al. (2023) GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints. Proceedings of the 2023 Conference on Empirical Methods in Natural Language Processing (EMNLP). Gu, A., & Dao, T. (2023) Mamba: Linear-Time Sequence Modeling with Selective State Spaces. arXiv preprint arXiv:2312.00752. Peng, B., et al. (2023) YaRN: Efficient Context Window Extension of Large Language Models. arXiv preprint arXiv:2309.00071. Abraham Zamudio 46