Frankenstein Transformer: Librería unificada Encoder-Decoder, CLI y notas de diseño basadas en investigación

Erick F. Merino M.
Este trabajo no está afiliado
erickfmm@gmail.com

Febrero 2026

Abstract

Las arquitecturas de transformers se han convertido en el paradigma dominante para el modelado de secuencias en el procesamiento del lenguaje natural, la visión por computadora y la biología computacional. Los últimos años han sido testigos de una rápida diversificación de los mecanismos de atención y las estrategias de optimización, con innovaciones que abarcan variantes densas de softmax, alternativas recurrentes y retentivas, patrones de atención dispersa, mecanismos lineales con compuerta, proyecciones en espacio latente y bloques con aumento de memoria. Paralelamente, el panorama de optimizadores se ha expandido más allá del AdamW clásico para incluir métodos de reducción de varianza, variantes eficientes en memoria, enfoques sin programación de tasa de aprendizaje, precondicionadores de segundo orden y aproximaciones de bajo rango. A pesar de esta riqueza de avances arquitectónicos y algorítmicos, el ecosistema de investigación permanece fragmentado: comparar mezcladores de secuencia y optimizadores bajo condiciones de entrenamiento consistentes requiere un esfuerzo de ingeniería sustancial, lo que dificulta la reproducibilidad y ralentiza el progreso científico. En este trabajo proponemos Frankenstein Transformer, un conjunto de herramientas CLI basado en configuración (frankenstein-transformer) que unifica la definición, el entrenamiento y el despliegue de modelos transformer mediante un esquema YAML estricto. El conjunto de herramientas soporta treinta y cinco variantes de mezcladores de secuencia en seis familias (densa, recurrente, dispersa, con compuerta, latente y con aumento de memoria) y veintitrés familias de optimizadores con control de hiperparámetros por grupo de parámetros mediante prefijos. El toolkit además soporta una clase de modelo Vision Transformer (frankenstein_vit) para tareas de comprensión de imágenes incluyendo predicción autosupervisada de parches enmascarados, clasificación y segmentación, reutilizando la misma infraestructura de mezcladores de atención y optimizadores. Proporciona subcomandos para entrenamiento (train), despliegue (deploy), cuantización (quantize), inferencia (infer), entrenamiento e inferencia de incrustaciones de oraciones estilo SBERT (sbert-train, sbert-infer), exportación compatible con HuggingFace (transformers-export), exportación GGUF con soporte BitNet (bitnet-gguf) y un constructor de configuración basado en web (web-server). El sistema impone la reproducibilidad mediante un contrato de esquema estricto con restricciones additionalProperties: false, ofrece una interfaz web basada en Streamlit para la construcción de configuraciones guiada por esquema e incluye tuberías de despliegue de extremo a extremo con cuantización ternaria de pesos y flujos de trabajo de incrustación de oraciones inspirados en SBERT. Las pruebas automatizadas integrales con suites de pruebas unitarias, validación de presets YAML y ejecución de CI en múltiples versiones de Python garantizan la confiabilidad.

Introducción

Motivación y Planteamiento del Problema

Las arquitecturas de transformers han transformado fundamentalmente el panorama del modelado de secuencias en el procesamiento del lenguaje natural , la visión por computadora y la biología computacional. El éxito de modelos como BERT , GPT y sus variantes ha establecido al transformer como el estándar de facto para el aprendizaje de representaciones en el aprendizaje profundo. Sin embargo, la rápida proliferación de innovaciones arquitectónicas presenta desafíos prácticos significativos para investigadores y profesionales.

Los últimos años han sido testigos de una explosión de mecanismos alternativos de atención y mezcla de secuencias, cada uno abordando limitaciones específicas de la atención softmax estándar: complejidad computacional cuadrática , requisitos de inferencia eficiente en memoria , gestión selectiva de estados basada en contenido y optimizaciones conscientes del hardware . Simultáneamente, la literatura sobre optimización se ha diversificado más allá del AdamW clásico, introduciendo técnicas de reducción de varianza , variantes eficientes en memoria , enfoques sin programación de tasa de aprendizaje y métodos de precondicionamiento de segundo orden .

La consecuencia práctica es un ecosistema de investigación fragmentado donde la comparación experimental entre arquitecturas y optimizadores requiere un esfuerzo de ingeniería significativo. Los investigadores deben implementar y depurar múltiples variantes desde cero, garantizar tuberías de entrenamiento consistentes y gestionar espacios de hiperparámetros complejos. Esta fragmentación dificulta la reproducibilidad, ralentiza el progreso científico y aumenta la barrera de entrada para nuevos investigadores.

Este trabajo aborda estos desafíos mediante un conjunto de herramientas de experimentación unificado y basado en configuración, disponible en https://github.com/erickfmm/frankenstein-transformer, que proporciona:

  1. Diseño Basado en Esquemas: Un contrato de configuración estricto y validado que garantiza la reproducibilidad mientras admite treinta y cinco variantes de mezcladores de secuencia en seis familias y veintitrés familias de optimizadores.

  2. Entrenamiento Agnóstico a la Arquitectura: Infraestructura de entrenamiento común que soporta líneas base de atención densa (estándar, sigmoide), alternativas recurrentes (RetNet, Mamba, bloques tipo EDO), enrutamiento adaptativo de profundidad (Mixture-of-Depths) , bloques de memoria condicional (Engram) , conexiones residuales restringidas por variedad (mHC) , patrones de atención dispersa (Sparse Transformer, Longformer, BigBird, SparseK, NSA, SpargeAttn, FASA) y mecanismos con compuerta (GLA, DeltaNet, Gated DeltaNet, Gated DeltaNet-2, HGRN2, FoX, Gated Softmax).

  3. Marco de Enrutamiento de Optimizadores: Grupos de hiperparámetros con prefijos que permiten un control detallado sobre incrustaciones, capas de normalización, bloques recurrentes, bloques de atención y otros subconjuntos de parámetros a través de diversos optimizadores, incluyendo la familia APOLLO (Apollo, Apollo-Mini, Q-Apollo) .

  4. Flujos de Trabajo de Extremo a Extremo: Despliegue integrado mediante cuantización (empaquetado ternario de pesos, activaciones INT8) y capacidades de incrustación de oraciones inspiradas en SBERT .

  5. Configuración Interactiva: Interfaz basada en web que proporciona renderizado de formularios impulsado por esquemas, validación en tiempo real y generación de comandos CLI.

  6. Herramientas de Confiabilidad: Pruebas automatizadas integrales con suites de pruebas unitarias, validación de presets YAML y automatización de CI en versiones de Python compatibles.

La superficie de comandos del proyecto es:

frankenstein-transformer

con subcomandos para flujos de trabajo de codificador y decodificador: train, deploy, quantize, infer, sbert-train, sbert-infer, transformers-export, bitnet-gguf, web-server.

El comando web-server lanza un constructor de configuración basado en Streamlit que proporciona:

Esta interfaz interactiva sirve como alternativa a la edición manual de YAML, mejorando la usabilidad para usuarios que exploran las opciones de configuración disponibles y comprenden su impacto en el comportamiento del modelo y la dinámica de entrenamiento.

Contribuciones

Este trabajo realiza las siguientes contribuciones principales:

  1. Esquema de Configuración Unificado: Un contrato de esquema basado en YAML con validación estricta que soporta treinta y cinco variantes de mezcladores de secuencia en seis familias (densa, recurrente, dispersa, con compuerta, latente y con aumento de memoria), junto con controles de profundidad adaptativa y memoria condicional, mientras garantiza la reproducibilidad mediante restricciones additionalProperties: false.

  2. Soporte Integral de Arquitecturas: Implementación de variantes modernas de transformers incluyendo atención softmax estándar , atención sigmoide , RetNet , Mamba , transformers continuos tipo EDO , atención con aumento de memoria Titans , capas de memoria condicional Engram , enrutamiento de tokens Mixture-of-Depths , mecanismos de atención dispersa y arquitecturas de atención con compuerta . El sistema soporta tanto entrenamiento en modo codificador con atención bidireccional para modelado de lenguaje enmascarado (MLM) como entrenamiento en modo decodificador con enmascaramiento causal para predicción autorregresiva del siguiente token.

  3. Marco de Enrutamiento de Optimizadores: Sistema de hiperparámetros con prefijos que permite control por grupo de parámetros a través de veintitrés optimizadores, incluyendo Anon con adaptabilidad ajustable , métodos de reducción de varianza (MARS, Adan, AdEMAMix, Cautious AdamW), variantes eficientes en memoria (Adafactor, GaLore, Lion), enfoques sin programación de tasa de aprendizaje (Schedule-Free AdamW), métodos conscientes de curvatura (Sophia), precondicionadores de segundo orden (Shampoo, SOAP), optimizadores orientados a ortogonalidad (Muon, Turbo-Muon), escalado de lotes grandes (LAMB) y la familia APOLLO (Apollo, Apollo-Mini, Q-Apollo) .

  4. Cuantización y Despliegue: Tubería de despliegue integrada que soporta empaquetado ternario de pesos y cuantización de activaciones INT8 con estimaciones de tamaño siguiendo la aproximación de almacenamiento de \(1.58\) bits.

  5. Flujos de Trabajo de Incrustación de Oraciones: Tuberías de entrenamiento e inferencia inspiradas en SBERT que soportan puntuación de similitud, recuperación, agrupamiento y exportación persistente de incrustaciones.

  6. Interfaz de Configuración Interactiva: Servidor web basado en Streamlit que proporciona generación de formularios impulsada por esquemas, validación en tiempo real, documentación en línea y generación de comandos CLI.

  7. Tubería de Validación Automatizada: Integración continua y pruebas unitarias ampliadas que verifican las rutas de entrenamiento del modelo, la integración optimizador/esquema y la compatibilidad de ejemplos YAML.

Guía de Lectura

Este documento está organizado como una referencia técnica que aborda cuatro preocupaciones operativas:

  1. Requisitos Previos: El Apéndice 10 proporciona una introducción accesible a los transformers y mecanismos de atención para lectores nuevos en el campo.

  2. Contrato de Configuración: La Sección 3.1 describe el esquema YAML que garantiza experimentos válidos y la Sección 3.2 explica las reglas de validación.

  3. Selección de Arquitectura: La Sección 4.1 proporciona una comparación exhaustiva de las familias de mezcladores de secuencia; los Apéndices 14, 15, 16 y 17 sintetizan la literatura de respaldo; el Apéndice 18 detalla las variantes de normalización, la cuantización BitNet, el enrutamiento Mixture-of-Depths y la memoria condicional Engram; el Apéndice 20 detalla las conexiones residuales restringidas por variedad (mHC).

  4. Dinámica de Optimización: La Sección 5 detalla el enrutamiento de optimizadores y la dinámica de entrenamiento; el Apéndice 13 proporciona un análisis exhaustivo de las familias de optimizadores.

  5. Despliegue e Inferencia: Las Secciones 67 describen el despliegue cuantizado y los flujos de trabajo de incrustación de oraciones.

Constructor de Configuración Basado en Web

Además de la edición directa de YAML, este proyecto proporciona una interfaz web basada en Streamlit (accesible mediante el comando web-server) que mejora la accesibilidad y descubribilidad de la configuración. La interfaz genera dinámicamente formularios guiados por el esquema con documentación de parámetros en línea, vista previa YAML en tiempo real y generación automática de comandos CLI para entrenamiento, despliegue, inferencia y flujos de trabajo SBERT. Los metadatos del esquema (títulos y descripciones) se renderizan sistemáticamente en todas las secciones de configuración, incluyendo arquitectura del modelo, ejecución de entrenamiento, hiperparámetros del optimizador, despliegue y parámetros específicos de SBERT. Este enfoque reduce la necesidad de memorizar la estructura YAML, previene errores tipográficos mediante la validación del esquema y sirve tanto como herramienta de configuración como recurso de aprendizaje para usuarios que exploran arquitecturas novedosas.

Trabajo Relacionado

Este trabajo se sitúa en la intersección de frameworks de aprendizaje profundo, herramientas de entrenamiento y experimentación basada en configuración. Mientras que las Secciones 4.15 examinan en profundidad la literatura arquitectónica y de optimización, esta sección se centra en el ecosistema de software para construir, entrenar y configurar modelos transformer.

Frameworks de Aprendizaje Profundo Base

El ecosistema moderno de investigación en transformers se apoya en varios frameworks fundamentales que proporcionan diferenciación automática, aceleración GPU y APIs de alto nivel para construcción de modelos.

PyTorch se ha convertido en el framework dominante para la investigación en transformers. Su modelo de programación imperativa y grafos de cómputo dinámicos permiten depuración flexible y prototipado rápido de arquitecturas novedosas. La abstracción torch.nn.Module, el entrenamiento automático con precisión mixta mediante torch.cuda.amp y el compilador JIT torch.compile forman la columna vertebral de la mayoría de las implementaciones contemporáneas de transformers. Frankenstein Transformer está construido completamente sobre PyTorch, aprovechando su sistema de módulos para definiciones de arquitectura componibles.

TensorFlow fue pionero en aprendizaje profundo orientado a producción con su paradigma de grafo de cómputo estático y la API de alto nivel Keras. Aunque su influencia en la investigación de transformers ha disminuido en relación con PyTorch, la infraestructura de serving de TensorFlow (TF Serving, TF Lite) y la biblioteca tensorflow-text siguen siendo relevantes para escenarios de despliegue.

JAX ofrece un modelo de programación funcional construido alrededor de transformaciones componibles (jit, vmap, grad) y compilación XLA. Su diseño permite implementaciones limpias de algoritmos complejos y ha sido adoptado por varias bibliotecas recientes de transformers (por ejemplo, Flax, Haiku). El diseño sin estado de JAX y su vectorización automática son particularmente adecuados para la investigación en mecanismos de atención novedosos y algoritmos de optimización.

scikit-learn proporciona algoritmos clásicos de aprendizaje automático y utilidades (preprocesamiento, métricas, selección de modelos) que sirven como líneas base y herramientas complementarias en flujos de trabajo con transformers. Aunque no está diseñado para aprendizaje profundo, su API consistente y documentación extensa lo convierten en un punto de referencia estándar para comparar enfoques basados en transformers con métodos tradicionales.

Frameworks de Entrenamiento Listos para Usar

Varias bibliotecas proporcionan pipelines de entrenamiento completos que abstraen la complejidad del entrenamiento distribuido, la carga de datos y la gestión de hiperparámetros.

Hugging Face Transformers es el estándar de facto para acceder, ajustar y compartir modelos transformer preentrenados. Su API Trainer, el hub de modelos con más de 500,000 modelos y su estrecha integración con las bibliotecas datasets y tokenizers lo han convertido en el punto de entrada principal para NLP basado en transformers. Sin embargo, su arquitectura está optimizada para el ajuste fino de modelos preentrenados existentes en lugar de experimentar con diseños novedosos de mezcladores de secuencia o entrenar desde cero con estrategias de optimización personalizadas.

Oumi (https://github.com/oumi-ai/oumi, 2025) es una plataforma de código abierto de extremo a extremo para entrenar, ajustar, evaluar y desplegar modelos fundacionales. Proporciona una interfaz unificada a través de múltiples proveedores de nube y soporta tanto ajuste fino supervisado como optimización de preferencias (DPO, RLHF). Oumi enfatiza la preparación para producción con monitoreo integrado, checkpointing y herramientas de despliegue.

LLaMA Factory (https://github.com/hiyouga/LLaMA-Factory, 2024) ofrece un framework unificado para el ajuste fino eficiente de más de 100 modelos de lenguaje grandes. Proporciona tanto una interfaz web como una CLI, soportando LoRA, QLoRA, ajuste fino de parámetros completos y diversas técnicas de alineación. Su enfoque está en adaptar LLMs preentrenados existentes a tareas posteriores en lugar de experimentación arquitectónica.

Axolotl (https://github.com/axolotl-ai-cloud/axolotl, 2024) es una herramienta simplificada de ajuste fino que soporta LoRA, QLoRA, DeepSpeed y FSDP. Enfatiza flujos de trabajo basados en configuración mediante archivos YAML y se ha vuelto popular en la comunidad de ajuste fino de LLMs de código abierto. Al igual que LLaMA Factory, se enfoca en el ajuste fino de modelos preentrenados en lugar de entrenar arquitecturas novedosas desde cero.

Herramientas de Bajo Código y Eficiencia

Una categoría creciente de herramientas prioriza la accesibilidad y la eficiencia computacional, reduciendo la barrera para el entrenamiento de transformers.

Unsloth (https://github.com/unslothai/unsloth, 2024) proporciona ajuste fino de bajo código con aceleración de 2–5\(\times\) y requisitos de VRAM significativamente reducidos mediante kernels CUDA escritos a mano y operaciones Triton optimizadas. Soporta exportación GGUF para despliegue cuantizado y se integra con el ecosistema Hugging Face. El enfoque de Unsloth está en hacer el ajuste fino más rápido y eficiente en memoria, no en exploración arquitectónica.

dashAI (https://www.dash-ai.com, 2024) es una aplicación de escritorio para entrenamiento de aprendizaje automático sin código con una interfaz basada en esquemas. Permite a los usuarios configurar conjuntos de datos, modelos y parámetros de entrenamiento a través de una interfaz gráfica sin escribir código. Aunque dashAI demuestra el valor de la configuración basada en esquemas para la accesibilidad, se enfoca en flujos de trabajo de ML clásico en lugar de experimentación con arquitecturas transformer.

Experimentación Basada en Configuración

Un hilo común entre las herramientas examinadas anteriormente es su enfoque en el ajuste fino de modelos preentrenados existentes. Hugging Face Transformers, LLaMA Factory, Axolotl y Unsloth asumen un checkpoint preentrenado como punto de partida. Oumi soporta entrenamiento desde cero pero se enfoca en arquitecturas estándar. Ninguna de estas herramientas proporciona un marco sistemático para experimentar con arquitecturas novedosas de mezcladores de secuencia, comparar diversos algoritmos de optimización bajo condiciones controladas o explorar la interacción entre elecciones arquitectónicas y dinámicas de entrenamiento.

Frankenstein Transformer llena este vacío proporcionando un sistema de configuración basado en esquemas diseñado específicamente para la experimentación arquitectónica. Sus diferenciadores clave incluyen:

Al desacoplar la definición de arquitectura de la infraestructura de entrenamiento mediante un contrato de configuración validado, Frankenstein Transformer permite la comparación sistemática de familias de mezcladores de secuencia y estrategias de optimización bajo condiciones de entrenamiento idénticas—una capacidad no proporcionada por ninguna herramienta existente en el ecosistema.

Diseño y Arquitectura del Sistema

Arquitectura Centrada en Configuración

La decisión de diseño principal en este repositorio es que la experimentación es esquema primero. En lugar de exponer una gran cantidad de indicadores laxamente verificados, el proyecto obliga a la topología del modelo, la familia de optimizadores, los límites de entrenamiento y las opciones de telemetría a través de un único documento de configuración validado. Esto reduce la ambigüedad al reproducir resultados y permite comparar muchas arquitecturas bajo una interfaz operativa consistente.

El contrato autoritativo es configs/schema.yaml. Este impone tres objetos de primer nivel:

Selección de Clase de Modelo.

El campo model_class determina la variante arquitectónica instanciada por el pipeline de entrenamiento. Se soportan dos opciones:

Selección de Modo de Entrenamiento.

El campo model.mode controla el comportamiento de enmascaramiento de atención en todo el modelo:

Este soporte de arquitectura dual permite al sistema manejar tanto preentrenamiento tipo encoder (MLM en contextos bidireccionales) como generación tipo decoder (predicción causal autorregresiva) a través de una interfaz de configuración unificada.

Selección de Patrones de Mezcladores de Secuencia: El campo layer_pattern acepta una lista ordenada de identificadores de mezcladores que abarcan seis familias: líneas base densas (standard_attn, sigmoid_attn, gqa), recurrentes/retentivas (retnet, retnet_attn, mamba, ode, titan_attn), atención dispersa (sparse_transformer_attn, longformer_attn, bigbird_attn, sparsek_attn, nsa_attn, sparge_attn, fasa_attn, msa_attn, sparda_attn), mecanismos con compuerta (gla_attn, deltanet_attn, gated_deltanet_attn, gated_deltanet2_attn, hgrn2_attn, fox_attn, gated_softmax_attn, kda_attn), compresión latente (mla_attn, gqla_attn, mlra_attn, tucker_attn, iha_attn, gta_attn, mtla_attn, cca_attn, ccgqa_attn) y memoria condicional (engram_attn). La taxonomía completa con referencias se proporciona en la Sección 4 y el Apéndice 12.

El training.optimizer.optimizer_class soporta una amplia familia de optimizadores: sgd_momentum, adamw, adafactor, galore_adamw, prodigy, lion, sophia, muon, turbo_muon, radam, adan, adopt, ademamix, mars_adamw, cautious_adamw, lamb, schedulefree_adamw, shampoo, soap, anon, apollo, apollo_mini, y q_apollo.

Arquitectura del sistema: la configuración fluye a través de la validación, se divide en modelo/entrenamiento/optimizador, ejecuta en tiempo real y produce artefactos de despliegue/SBERT/exportación.

Alcance del Esquema y Reglas de Validación

El esquema es estricto: los objetos de primer nivel y anidados establecen additionalProperties: false. Esto garantiza que las claves desconocidas fallen rápidamente en lugar de ser ignoradas silenciosamente. El objeto training.optimizer.parameters está adicionalmente restringido por reglas de prefijo específicas del optimizador mediante verificaciones de patrón allOf+if/then.

Los valores de normalización actualmente aceptados por el esquema son: \[\texttt{norm\_type} \in \{\texttt{layer\_norm}, \texttt{dynamic\_tanh}, \texttt{derf}, \texttt{rms\_norm}, \texttt{prms\_norm}\}\]

Esquema de Configuración

El esquema completo de configuración del modelo y entrenamiento, incluyendo todos los campos, tipos, rangos y reglas de validación, se documenta en el Apéndice 11. El esquema impone additionalProperties: false en todos los niveles, garantizando que las claves desconocidas fallen rápidamente.

La profundidad en bucle inducida por el esquema es: \[L_{\text{logical}} = \texttt{num\_layers} \times \texttt{num\_loops}\] que es la definición a nivel de configuración de los bloques en bucle.

Tipos de Tarea de Entrenamiento

El campo training.task determina el objetivo de entrenamiento, trabajando en conjunto con model.mode para definir cómo aprende el modelo:

Modelado de Lenguaje Enmascarado (MLM).

Modelado de Lenguaje Causal (causal_lm).

Este soporte de tareas permite la experimentación unificada tanto en preentrenamiento tipo encoder (MLM para comprensión bidireccional), generación tipo decoder (causal_lm para predicción autorregresiva del siguiente token) como en embedding de oraciones (SBERT), dentro del mismo código base.

Configuración del Optimizador

El objeto training.optimizer selecciona entre 23 familias de optimizadores mediante optimizer_class y proporciona control de hiperparámetros por grupo de parámetros a través de una convención de nombres con prefijos. El contrato completo de prefijos del optimizador y las familias soportadas se documentan en el Apéndice 11.

Seguridad de Entrenamiento y Semántica de Ejecución

Las características de seguridad a nivel de esquema incluyen acumulación, recorte, verificación de explosión post-recorte y reintentos por NaN: \[g_{\text{acc}}=\frac{1}{K}\sum_{i=1}^{K} g_i,\quad K=\texttt{gradient\_accumulation\_steps}\] \[g_{\text{clip}} = g_{\text{acc}}\cdot \min\left(1,\frac{\tau}{\|g_{\text{acc}}\|_2+\epsilon}\right),\quad \tau=\texttt{grad\_clip\_max\_norm}\] luego los guardas de desbordamiento usan inf_post_clip_threshold y lógica de reintentos limitada por max_nan_retries.

El pseudocódigo completo del paso de entrenamiento guiado por esquema—incluyendo acumulación de gradientes, recorte de norma global, guardas de explosión post-recorte, reintentos acotados de NaN/Inf, despacho del scheduler y rotación de checkpoints rodantes/mejores—se difiere al Apéndice 18.

Variantes de Normalización

La normalización controla la escala de activación a través de la profundidad y es también una cuestión de compatibilidad con el esquema, ya que los valores aceptados de norm_type son layer_norm, dynamic_tanh, derf, rms_norm y prms_norm (RMSNorm parcial). Las formulaciones matemáticas de LayerNorm, RMSNorm, pRMSNorm, Tanh Dinámico (DyT) y Erf Dinámico (Derf) , junto con una tabla comparativa, se detallan en el Apéndice 18.

Arquitecturas de Flujo Residual

La conexión residual no es solo una elección de modelado, sino también una decisión de macro-diseño. El sistema expone cuatro estrategias de conexión residual mediante el sub-objeto model.residuals (clave plana residual_type, por defecto standard):

AttnRes se integra ortogonalmente con mHC y con Mixture-of-Depths: el campo model.residuals.mhc_stream_mode selecciona si la atención sobre la profundidad corre por stream (independent) o conjuntamente sobre la proyección aplanada \(nC\) (joint) cuando mHC está activo. La formulación completa, las cuatro estrategias, el cableado de implementación y los resultados reportados se detallan en el Apéndice 21. mHC por sí solo se detalla en el Apéndice 20.

Taxonomía de Arquitectura e Implementación

Familias de Atención y Mezcladores de Secuencias

Este sistema implementa treinta y cinco variantes de mezcladores de secuencia organizadas en seis categorías funcionales que reflejan las tendencias de investigación en el diseño de modelado de secuencias. La organización taxonómica refleja la comprensión evolutiva de cómo equilibrar expresividad, eficiencia computacional y restricciones de memoria.

  1. Líneas Base de Atención Densas (3): La atención softmax estándar, la atención sigmoide y la Atención por Consultas Agrupadas (GQA) proporcionan contextualización global completa a costo computacional cuadrático, sirviendo como líneas base de referencia para comparación con alternativas más eficientes.

  2. Arquitecturas Recurrentes y Retentivas (5): RetNet, Mamba, bloques estilo ODE, Titans y Engram mantienen representaciones de estado que permiten un costo de inferencia \(\mathcal{O}(1)\) mientras preservan la expresividad mediante dinámicas recurrentes, parámetros selectivos o adaptación de memoria en tiempo de prueba.

  3. Patrones de Atención Dispersa (9): Sparse Transformer, Longformer, BigBird, SparseK, NSA, SpargeAttn, FASA, MSA y SparDA reducen la complejidad cuadrática mediante dispersión estructurada, selección de tokens o estrategias de poda sin entrenamiento.

  4. Mecanismos de Memoria con Compuerta (8): GLA, DeltaNet, Gated DeltaNet, Gated DeltaNet-2, HGRN2, FoX, Gated Softmax y KDA introducen control dependiente de datos sobre la retención de memoria, el olvido y la fuerza de actualización.

  5. Compresión Latente y de Rango Bajo (9): MLA, GQLA, MLRA, Tucker, IHA, GTA, MTLA, CCA y CCGQA comprimen las representaciones clave–valor en cuellos de botella latentes de rango bajo, intercambiando un pequeño error de reconstrucción por ahorros sustanciales de memoria y cómputo.

  6. Memoria Condicional (1): Engram proporciona memoria en tiempo de prueba mediante operaciones de lectura/escritura aprendidas sobre un banco de memoria externo.

Taxonomía completa de treinta y cinco variantes de mezcladores de secuencia en seis categorías funcionales. Las líneas base densas proporcionan enrutamiento global completo a costo cuadrático. Las arquitecturas recurrentes permiten inferencia en tiempo constante mediante compresión de estado. Las variantes dispersas reducen la complejidad mediante patrones estructurados o selección de tokens. Los mecanismos con compuerta introducen control dependiente de datos sobre la retención y el olvido de memoria. Los métodos latentes comprimen representaciones clave–valor en cuellos de botella de rango bajo. La memoria condicional proporciona lectura/escritura en tiempo de prueba sobre un banco de memoria externo.

Familias Densas y Recurrentes

Las líneas base densas (softmax estándar y sigmoide ) y la familia recurrente/retentiva (RetNet , Mamba , bloques continuos estilo ODE y memoria en tiempo de prueba Titans ) proporcionan la compensación fundamental entre expresividad y eficiencia. Las formulaciones matemáticas, las formas paralela y recurrente, el pseudocódigo algorítmico y una tabla comparativa arquitectónica se recopilan en el Apéndice 14. El algoritmo de despacho de mezclador guiado por patrón (incluyendo la política de cumplimiento sin entrenamiento para fasa_attn y sparge_attn) se detalla igualmente allí.

Familia de Atención Latente y de Rango Bajo

Una familia complementaria comprime el estado clave–valor por token en un latente de rango bajo: Atención Latente Multi-Cabeza (MLA), Atención Latente por Consultas Agrupadas (GQLA), Atención Multi-Cabeza de Rango Bajo (MLRA), Atención Tucker, Atención de Cabezas Entrelazadas (IHA), Atención laTenT por Cabezas Agrupadas (GTA) y Atención Latente Temporal Multi-Cabeza (MTLA). Estos métodos unifican diseños de consulta agrupada, latente, factorizado y latente temporal bajo un cuello de botella de rango bajo común. Las formulaciones completas, el pseudocódigo y una tabla comparativa se recopilan en el Apéndice 15.

Extensiones de Atención Dispersa

El registro de mezcladores incluye nueve bloques dispersos: sparse_transformer_attn, longformer_attn, bigbird_attn, sparsek_attn, nsa_attn, sparge_attn, fasa_attn, msa_attn y sparda_attn . La implementación impone una política de ejecución explícita para métodos dispersos sin entrenamiento: fasa_attn y sparge_attn son solo para evaluación/inferencia y generan errores en tiempo de ejecución si se usan mientras el modelo está en modo de entrenamiento. Las formulaciones matemáticas, el pseudocódigo algorítmico, las características por bloque y una tabla comparativa se recopilan en el Apéndice 16.

Mapa conceptual de las estrategias de diseño de atención dispersa utilizadas en el código base. Diferentes métodos reducen el costo restringiendo vecindarios, construyendo grafos dispersos o seleccionando solo tokens/bloques de alto valor.
Tres líneas base de atención densa. La atención softmax estándar y la sigmoide calculan matrices \(QK^\top\) completas. La Atención por Consultas Agrupadas (GQA) comparte cabezas clave–valor entre grupos de consultas, reduciendo el ancho de banda de memoria mientras preserva la expresividad completa de la atención.
Familia de arquitecturas recurrentes y retentivas. RetNet proporciona formas duales paralela y recurrente. Mamba utiliza parámetros selectivos de espacio de estados. Los bloques ODE modelan dinámicas de profundidad continua. Titans introduce adaptación de memoria en tiempo de prueba. Todas logran inferencia en tiempo constante por paso.
Concepto de atención latente y de rango bajo. Los pares clave–valor se comprimen mediante una proyección descendente a un espacio latente de rango bajo (\(r \ll d\)), donde la atención se calcula a costo reducido, y luego se proyectan de vuelta. Las variantes difieren en la estructura de factorización (MLA, GQLA, MLRA, Tucker), entrelazado de cabezas (IHA, GTA), compresión temporal (MTLA) y formulaciones de covarianza cruzada (CCA, CCGQA).

Extensiones de Atención con Compuerta

El registro de mezcladores incluye ocho bloques con compuerta: gla_attn, deltanet_attn, gated_deltanet_attn, gated_deltanet2_attn, hgrn2_attn, fox_attn, gated_softmax_attn y kda_attn . La idea unificadora es que las compuertas controlan qué información sobrevive: algunas compuertas actúan sobre actualizaciones de estado recurrente (GLA, variantes de DeltaNet, HGRN2), mientras que otras modifican la ruta de atención completa (FoX y Gated Softmax). KDA introduce atención dinámica kernelizada con compuertas aprendibles sobre el ancho de banda del kernel. Esto hace que las compuertas sean especialmente útiles cuando el modelo debe equilibrar recuerdo, actualidad y memoria limitada. Las formulaciones matemáticas, el pseudocódigo algorítmico, una plantilla de compuerta genérica y una tabla comparativa se recopilan en el Apéndice 17.

Plantilla de compuerta genérica. Una compuerta puede atenuar la memoria existente, regular la fuerza de escritura o modular las salidas de atención densa, dependiendo de la familia del bloque.

Familias de Optimizadores y Dinámicas de Entrenamiento

La optimización de arquitecturas transformer altamente parametrizadas presenta desafíos significativos debido a paisajes de pérdida no convexos, puntos de silla y heterogeneidad de bloques entre grupos de parámetros. Este sistema aborda estos desafíos mediante un marco unificado que soporta veintitrés familias de optimizadores que abarcan seis categorías algorítmicas: (1) líneas base clásicas (SGD, AdamW), (2) momento avanzado y reducción de varianza (Adan, ADOPT, AdEMAMix, MARS, Cautious), (3) variantes eficientes en memoria (Adafactor, GaLore, Lion, APOLLO, APOLLO-Mini, Q-APOLLO), (4) métodos sin programación y sin parámetros (Schedule-Free AdamW, Prodigy) más escalado de lotes grandes mediante LAMB, (5) conscientes de curvatura y segundo orden (Sophia, Shampoo, SOAP), (6) orientados a geometría (Muon, Turbo-Muon), y (7) optimizadores con adaptabilidad ajustable (Anon). Las descripciones algorítmicas detalladas, pseudocódigo y una tabla comparativa de memoria/complejidad para todos los optimizadores se proporcionan en el Apéndice 13.

Selección de optimizador en la práctica: la clase determina la regla de actualización, mientras que el esquema controla cómo se aplican los hiperparámetros entre embeddings, normas, bloques recurrentes, bloques de atención y otros parámetros.

Cuantización y Despliegue

El stack de despliegue utiliza empaquetado ternario de pesos más cuantización de activaciones INT8 para producir artefactos eficientes.

Ruta de despliegue desde un checkpoint entrenado hasta un artefacto compacto. El código base trata la cuantización como una transformación de la etapa de despliegue en lugar de una familia de modelos separada.

Cuantización Ternaria y Escalado de Activaciones

La etapa de despliegue transforma un checkpoint entrenado en un artefacto compacto mediante empaquetado ternario de pesos estilo BitNet , escalado de activaciones INT8 y aproximación de almacenamiento de 1.58 bits alineada con objetivos de despliegue ligero . Las formulaciones matemáticas del escalado ternario de pesos, la cuantización/des-cuantización de activaciones INT8 y las estimaciones de tamaño FP32/FP16/1.58 bits se difieren al Apéndice 18.

Tareas Posteriores de SBERT

El embedding de oraciones se construye sobre entrenamiento estilo Siamese . Para el par de oraciones \((s_1,s_2)\) con embeddings \((e_1,e_2)\): \[\text{cos}(e_1,e_2)=\frac{e_1^\top e_2}{\|e_1\|\|e_2\|}\] y pérdida coseno estilo regresión: \[\mathcal{L}_{\text{cos}}=\left(\text{cos}(e_1,e_2)-y\right)^2\] con \(y\in[-1,1]\) en este pipeline.

Modos posteriores soportados:

Reutilización del flujo de trabajo SBERT. Un único codificador soporta puntuación de pares en línea, recuperación sobre corpus, clustering y exportación persistente de embeddings.

El pseudocódigo del enrutador de modo de inferencia SBERT—despachando entre los modos de similitud, búsqueda, cluster y codificación sobre un codificador compartido—se difiere al Apéndice 18.

Discusión

Las decisiones de diseño en Transformer Encoder Frankenstein reflejan varias tensiones de ingeniería e investigación en las herramientas modernas de aprendizaje profundo.

Compromisos de Diseño Basado en Esquemas

El enfoque basado en esquemas proporciona beneficios significativos de reproducibilidad al imponer contratos explícitos y fallar rápidamente ante configuraciones inválidas. Sin embargo, este enfoque también introduce rigidez: agregar nuevas arquitecturas u optimizadores requiere extensiones del esquema en lugar de argumentos de línea de comandos flexibles. El sistema de hiperparámetros prefijados permite un control detallado pero aumenta la complejidad de configuración para usuarios acostumbrados a interfaces más simples.

La decisión de imponer additionalProperties: false en todos los niveles del esquema elimina la absorción silenciosa de parámetros que ha afectado a sistemas de configuración anteriores, pero esta rigurosidad requiere un mantenimiento cuidadoso del esquema al extender las capacidades del sistema. Cada nuevo mecanismo de atención o variante de optimizador debe integrarse adecuadamente en el marco de validación, incluyendo definiciones de campos del esquema con tipos y restricciones apropiados, mapeo de hiperparámetros prefijados para grupos específicos de optimizadores, valores predeterminados alineados con las mejores prácticas de investigación y cadenas de documentación para la representación en la interfaz web.

Cobertura Arquitectónica y Vacíos

Las diecisiete arquitecturas de mezclador implementadas abarcan las principales direcciones de investigación en modelado de secuencias, pero ciertos vacíos permanecen. El sistema carece de arquitecturas híbridas recientes como Griffin y Jamba , que combinan compuertas con modelos de espacio de estados. El enrutamiento MoE (Mezcla de Expertos) está implementado para capas FFN pero no para el cómputo de atención, donde trabajos recientes han mostrado beneficios .

La cobertura de atención dispersa es completa, pero la implementación de métodos sin entrenamiento (FASA, SpargeAttn) genera errores en tiempo de ejecución durante el entrenamiento, reflejando restricciones arquitectónicas: estos métodos requieren checkpoints preentrenados de modelos de atención completa o procedimientos específicos de ajuste fino que actualmente no están automatizados.

La cobertura de mecanismos de compuerta es sólida en todas las categorías principales (GLA, DeltaNet, Gated DeltaNet, Gated DeltaNet-2, HGRN2, FoX, Gated Softmax). El macro-diseño del flujo residual está cubierto mediante el flujo residual de \(n\) streams restringido por variedad (mHC) , cuya proyección Sinkhorn–Knopp sobre el politopo de Birkhoff restaura la propiedad de mapeo de identidad que pierden las Hyper-Connexions sin restricción; mHC está validado solo al nivel de los experimentos MoE publicados de 3B–27B, y el marco se beneficiaría de reproducciones independientes a escalas menores (ver Apéndice 20).

Fragmentación del Panorama de Optimizadores

El soporte para veintidós familias de optimizadores en seis categorías algorítmicas demuestra exhaustividad pero también resalta el estado fragmentado de la investigación en optimización. Los usuarios enfrentan una complejidad significativa de decisión al elegir entre métodos de reducción de varianza (Adan, MARS), variantes eficientes en memoria (GaLore, Adafactor, APOLLO) y enfoques conscientes de curvatura (Sophia, Shampoo). El sistema de hiperparámetros prefijados, aunque poderoso, requiere comprender qué parámetros son relevantes para cada clase de optimizador.

La calidad de implementación varía entre optimizadores: los métodos clásicos (AdamW, SGD con momento) están altamente optimizados en PyTorch, mientras que los métodos más nuevos (Muon, Turbo-Muon, SOAP) pueden requerir implementaciones personalizadas que afectan la estabilidad numérica y las características de rendimiento.

Consideraciones de Despliegue y Producción

El pipeline de cuantización demuestra preocupaciones prácticas de despliegue pero realiza compromisos de ingeniería específicos. El empaquetado ternario de pesos reduce el almacenamiento a aproximadamente \(1.58\) bits por parámetro, pero esta compresión agresiva puede degradar el rendimiento, especialmente para modelos más pequeños donde el error de cuantización es más significativo. La implementación actual aplica cuantización uniforme entre todos los tipos de parámetros.

Los flujos de trabajo SBERT proporcionan utilidad práctica para tareas de similitud semántica y recuperación, pero la implementación asume estrategias de pooling estándar (token CLS, pooling promedio). Avances recientes como los embeddings Matryoshka y los refinamientos de aprendizaje contrastivo aún no están incorporados.

Desafíos de Integración y Extensibilidad

La estructura actual del código base, aunque funcional, presenta desafíos de mantenimiento a medida que se expanden las familias de arquitecturas y optimizadores. El patrón de despachador para la selección de mezcladores y el enrutamiento de optimizadores maneja la extensibilidad pero corre el riesgo de convertirse en un “cajón de sastre” de lógica condicional. Las versiones futuras se beneficiarían de arquitecturas basadas en plugins donde nuevos mezcladores y optimizadores puedan registrarse de forma declarativa en lugar de modificar la lógica central de despacho.

La interfaz de configuración web proporciona mejoras significativas de usabilidad pero introduce complejidad de despliegue: ejecutar Streamlit junto con trabajos de entrenamiento requiere recursos adicionales y consideraciones de infraestructura que pueden no ser apropiadas para todos los entornos, particularmente clústeres HPC sin acceso web.

Conclusión

Transformer Encoder Frankenstein presenta una plataforma de experimentación unificada, impulsada por configuración, que aborda desafíos críticos en la investigación moderna de aprendizaje profundo: fragmentación arquitectónica entre atención densa, modelos recurrentes, patrones dispersos y mecanismos de compuerta; complejidad del panorama de optimizadores que abarca líneas base clásicas, métodos de reducción de varianza, variantes eficientes en memoria, enfoques sin programación, algoritmos conscientes de curvatura y métodos orientados a geometría; y flujos de trabajo de despliegue de extremo a extremo que abarcan cuantización y aplicaciones de embeddings de oraciones.

Las contribuciones principales del sistema son:

  1. Diseño Basado en Esquemas: Un contrato de configuración estricto basado en YAML con validación y enrutamiento de hiperparámetros prefijados que permite experimentos reproducibles en diecisiete arquitecturas de mezclador y veintitrés familias de optimizadores.

  2. Soporte Arquitectónico Integral: Implementación que abarca las principales categorías de investigación incluyendo líneas base densas (atención estándar, sigmoide), alternativas recurrentes (RetNet, Mamba, estilo EDO, Titans), atención dispersa (Sparse Transformer, Longformer, BigBird, SparseK, NSA, SpargeAttn, FASA) y mecanismos de compuerta (GLA, DeltaNet, Gated DeltaNet, Gated DeltaNet-2, HGRN2, FoX, Gated Softmax).

  3. Marco Unificado de Optimizadores: Grupos de hiperparámetros prefijados que permiten control detallado sobre embeddings, capas de normalización, bloques recurrentes, pesos de atención y parámetros FFN en líneas base clásicas (SGD+Momentum, AdamW), reducción de varianza (Adan, ADOPT, AdEMAMix, MARS, Cautious), eficientes en memoria (Adafactor, GaLore, Lion, APOLLO, APOLLO-Mini, Q-APOLLO), lotes grandes y simplificación de programación (LAMB, Schedule-Free AdamW, Prodigy), conscientes de curvatura (Sophia), segundo orden (Shampoo, SOAP) y orientados a geometría (Muon, Turbo-Muon).

  4. Flujos de Trabajo de Extremo a Extremo: Pipeline de despliegue integrado que soporta empaquetado ternario de pesos y cuantización de activaciones INT8; entrenamiento e inferencia inspirados en SBERT para similitud semántica, recuperación y tareas de clustering.

  5. Configuración Interactiva: Interfaz web basada en Streamlit que proporciona generación de formularios impulsada por esquemas, validación en tiempo real, documentación en línea y síntesis de comandos CLI.

Este sistema permite iteración experimental rápida mientras mantiene reproducibilidad mediante contratos de configuración estrictos. Al consolidar diversas contribuciones de investigación en un conjunto de herramientas unificado, reduce las barreras para explorar arquitecturas y estrategias de optimización novedosas, particularmente para investigadores que pueden carecer de recursos para implementar y validar cada variante de forma independiente.

Limitaciones y Direcciones Futuras

Varias limitaciones y direcciones prometedoras para trabajo futuro surgen del diseño e implementación de este sistema:

  1. Integración Arquitectónica: Arquitecturas híbridas recientes (Griffin, Jamba, Mamba-X) demuestran beneficios de combinar múltiples mecanismos en bloques unificados. Versiones futuras deberían integrar estas arquitecturas y explorar patrones de composición sistemática.

  2. Cuantización Avanzada: La implementación actual utiliza empaquetado ternario uniforme en todos los parámetros. La investigación sobre cuantización por capas, por canales y consciente de importancia sugiere que estrategias más sofisticadas podrían mejorar los compromisos calidad-eficiencia.

  3. Extensibilidad Basada en Plugins: El patrón de despacho actual se vuelve cada vez más complejo con cada nueva adición. Una arquitectura de plugins que permita el registro declarativo de nuevos mezcladores, optimizadores y métodos de normalización mejoraría el mantenimiento y reduciría el riesgo de errores en la lógica central de despacho.

  4. Optimización Automatizada de Hiperparámetros: El esquema soporta espacios extensos de hiperparámetros, pero los usuarios deben explorar estos espacios manualmente. La integración con optimización bayesiana, estrategias de bandidos multi-brazo o ajuste de hiperparámetros basado en gradientes podría automatizar el descubrimiento de configuraciones efectivas.

  5. Despliegue en Producción: La interfaz web mejora la usabilidad pero puede no ser apropiada para todos los entornos de despliegue. Modos de configuración sin interfaz gráfica, gestión de configuración basada en API o ergonomía CLI mejorada podrían servir a flujos de trabajo HPC y de producción.

  6. Evaluación Comparativa: Si bien el sistema permite entrenamiento con diversas arquitecturas, una evaluación comparativa exhaustiva que compare el rendimiento entre mezcladores y optimizadores en tareas estandarizadas proporcionaría orientación valiosa para la selección de configuraciones.

  7. Garantías de Estabilidad de Entrenamiento: La implementación actual incluye guardas contra NaN/Inf y recorte de gradiente, pero el análisis formal de condiciones de estabilidad para diferentes combinaciones mezclador-optimizador, particularmente con bloques en bucle y cuantización agresiva, sigue abierto.

  8. Extensiones Multimodales y Específicas de Tarea: El diseño actual se centra en modelado de secuencias. Extensiones para modelos de visión-lenguaje, arquitecturas multimodales y flujos de trabajo de ajuste fino específicos de tarea (ej., ajuste por instrucciones, RLHF) ampliarían la aplicabilidad.

La trayectoria de investigación del modelado de secuencias continúa hacia enfoques híbridos que combinan fortalezas de múltiples paradigmas—compresión de la recurrencia, selectividad de la atención, compuertas para gestión de memoria y dispersión para eficiencia. Una plataforma de experimentación unificada como Transformer Encoder Frankenstein es cada vez más valiosa a medida que esta convergencia se acelera, permitiendo a los investigadores explorar sistemáticamente este creciente espacio de diseño con infraestructura reproducible y bien diseñada.

100 urlstyle

Martı́n Abadi, Paul Barham, Jianmin Chen, Zhifeng Chen, Andy Davis, Jeffrey Dean, Matthieu Devin, Sanjay Ghemawat, Geoffrey Irving, Michael Isard, Manjunath Kudlur, Josh Levenberg, Rajat Monga, Sherry Moore, Derek G. Murray, Benoit Steiner, Paul Tucker, Vijay Vasudevan, Pete Warden, Martin Wicke, Yuan Yu, and Xiaoqiang Zheng. : A system for large-scale machine learning. In 12th USENIX Symposium on Operating Systems Design and Implementation (OSDI), pages 265–283, 2016.

Joshua Ainslie, James Lee-Thorp, Michiel de Jong, Yury Zemlyansky, Federico Lebrón, and Sumit Sanghai. Gqa: Training generalized multi-query transformer models from multi-head checkpoints, 2023. URL https://arxiv.org/abs/2305.13245.

Anonymous authors. Anon: Extrapolating adaptivity beyond sgd and adam, 2026. URL https://arxiv.org/abs/2605.02317.

Jimmy Lei Ba, Jamie Ryan Kiros, and Geoffrey E. Hinton. Layer normalization, 2016. URL https://arxiv.org/abs/1607.06450.

Jonathan T. Barron. Continuously differentiable exponential linear units. arXiv preprint arXiv:1704.07483, 2017.

Mina Basirat and Peter M. Roth. The quest for a better ReLU: ELiSH and HardELiSH activation functions. arXiv preprint arXiv:1905.10144, 2019.

Ali Behrouz, Peilin Zhong, and Vahab Mirrokni. Titans: Learning to memorize at test time. URL https://arxiv.org/abs/2501.00663. Version Number: 1.

Iz Beltagy, Matthew E. Peters, and Arman Cohan. Longformer: The long-document transformer, 2020. URL https://arxiv.org/abs/2004.05150.

Thibaut Boissin, Thomas Massena, Franck Mamalet, and Mathieu Serrurier. Turbo-muon: Accelerating orthogonality-based optimization with pre-conditioning. URL https://arxiv.org/abs/2512.04632. Version Number: 1.

James Bradbury, Roy Frostig, Peter Hawkins, Matthew J. Johnson, Chris Leary, Dougal Maclaurin, George Necula, Adam Paszke, Jake VanderPlas, Skye Wanderman-Milne, and Qiao Zhang. : composable transformations of Python+NumPy programs, 2018. URL http://github.com/jax-ml/jax.

Riccardo Bravin, Massimo Pavan, Hazem Hesham Yousef Shalby, Fabrizio Pittorino, and Manuel Roveri. : Attention under 2 MB memory. URL http://arxiv.org/abs/2502.10001.

Mingzhi Chen, Taiming Lu, Jiachen Zhu, Mingjie Sun, and Zhuang Liu. Stronger normalization-free transformers, a. URL http://arxiv.org/abs/2512.10938.

Xiangning Chen, Chen Liang, Da Huang, Esteban Real, Kaiyuan Wang, Yao Liu, Hieu Pham, Xuanyi Dong, Thang Luong, Cho-Jui Hsieh, Yifeng Lu, and Quoc V. Le. Symbolic discovery of optimization algorithms, b. URL https://arxiv.org/abs/2302.06675. Version Number: 4.

Xin Cheng, Wangding Zeng, Damai Dai, Qinyu Chen, Bingxuan Wang, Zhenda Xie, Kezhao Huang, Xingkai Yu, Zhewen Hao, Yukun Li, Han Zhang, Huishuai Zhang, Dongyan Zhao, and Wenfeng Liang. Conditional memory via scalable lookup: A new axis of sparsity for large language models, 2026. URL https://arxiv.org/abs/2601.07372.

Rewon Child, Scott Gray, Alec Radford, and Ilya Sutskever. Generating long sequences with sparse transformers, 2019. URL https://arxiv.org/abs/1904.10509.

Djork-Arné Clevert, Thomas Unterthiner, and Sepp Hochreiter. Fast and accurate deep network learning by exponential linear units (ELUs). arXiv preprint arXiv:1511.07289, 2016.

Chang Dai, Hongyu Shan, Mingyang Song, and Di Liang. : Hyperbolic rotary positional encoding for stable long-range dependency modeling in large language models. URL http://arxiv.org/abs/2509.05218.

Aaron Defazio, Xingyu Alice Yang, Harsh Mehta, Konstantin Mishchenko, Ahmed Khaled, and Ashok Cutkosky. The road less scheduled. URL https://arxiv.org/abs/2405.15682. Version Number: 4.

Keqi Deng and Philip C. Woodland. Multi-head temporal latent attention, 2025. URL https://arxiv.org/abs/2505.13544.

Jacob Devlin, Ming-Wei Chang, Kenton Lee, and Kristina Toutanova. : Pre-training of deep bidirectional transformers for language understanding. URL http://arxiv.org/abs/1810.04805.

Shiv Ram Dubey, Satish Kumar Singh, and Bidyut Baran Chaudhuri. Activation functions in deep learning: A comprehensive survey and benchmark. Neurocomputing, 453: 1–24, 2021. doi: 10.1016/j.neucom.2021.03.063.

Sai Surya Duvvuri, Chanakya Ekbote, Rachit Bansal, Rishabh Tiwari, Devvrit Khatri, David Brandfonbrener, Paul Liang, Inderjit Dhillon, and Manzil Zaheer. Interleaved head attention, 2026. URL https://arxiv.org/abs/2602.21371.

Stefan Elfwing, Eiji Uchibe, and Kenji Doya. Sigmoid-weighted linear units for neural network function approximation in reinforcement learning. Neural Networks, 106: 300–312, 2018. doi: 10.1016/j.neunet.2018.07.012.

Aiming Fang, Suhyune Lee, Nafise Sadat Moosavi, and Iryna Gurevych. Transformers with learnable activation functions. In Findings of the Association for Computational Linguistics: EACL 2023, pages 1736–1746, 2023. doi: 10.48550/arXiv.2208.14111.

Tomas Figliola, Nicholas Alonso, Rishi Iyer, Quentin Anthony, and Beren Millidge. Compressed convolutional attention: Efficient attention in a compressed latent space, 2025. URL https://arxiv.org/abs/2510.04476.

Yaosheng Fu, Guangxuan Xiao, Xin Dong, Song Han, and Oreste Villa. Sparda: Sparse decoupled attention for efficient long-context llm inference, 2026. URL https://arxiv.org/abs/2606.04511.

Xavier Glorot, Antoine Bordes, and Yoshua Bengio. Deep sparse rectifier neural networks. Proceedings of the 14th International Conference on Artificial Intelligence and Statistics (AISTATS), pages 315–323, 2011.

Luke B. Godfrey and Michael S. Gashler. A continuum among logarithmic, linear, and exponential functions, and its potential to improve generalization in neural networks. In Proceedings of the International Conference on Knowledge Discovery and Information Retrieval (KDIR), 2015.

Ian J. Goodfellow, David Warde-Farley, Mehdi Mirza, Aaron Courville, and Yoshua Bengio. Maxout networks. In Proceedings of the 30th International Conference on Machine Learning (ICML), pages 1319–1327, 2013.

Nils Graef, Filip Makraduli, Andrew Wasielewski, and Matthew Clapp. : Fast normalization for transformers. URL http://arxiv.org/abs/2407.09577.

Albert Gu and Tri Dao. Mamba: Linear-time sequence modeling with selective state spaces. URL https://arxiv.org/abs/2312.00752. Version Number: 2.

Albert Gu, AI21 Labs, et al. Jamba: A hybrid transformer-mamba language model, 2024. URL https://arxiv.org/abs/2403.19887.

Vineet Gupta, Tomer Koren, and Yoram Singer. Shampoo: Preconditioned stochastic tensor optimization. URL https://arxiv.org/abs/1802.09568. Version Number: 2.

Ali Hatamizadeh, Yejin Choi, and Jan Kautz. Gated deltanet-2: Decoupling erase and write in linear attention, 2026. URL https://arxiv.org/abs/2605.22791.

Kaiming He, Xiangyu Zhang, Shaoqing Ren, and Jian Sun. Deep residual learning for image recognition. In 2016 IEEE Conference on Computer Vision and Pattern Recognition (CVPR), pages 770–778. IEEE. doi: 10.1109/CVPR.2016.90. URL http://arxiv.org/abs/1512.03385.

Kaiming He, Xiangyu Zhang, Shaoqing Ren, and Jian Sun. Delving deep into rectifiers: Surpassing human-level performance on ImageNet classification. In Proceedings of the IEEE International Conference on Computer Vision (ICCV), pages 1026–1034, 2015.

Dan Hendrycks and Kevin Gimpel. Gaussian error linear units (GELU). In arXiv preprint arXiv:1606.08415, 2016.

Andrew Howard, Mark Sandler, Grace Chu, Liang-Chieh Chen, Bo Chen, Mingxing Tan, Weijun Wang, Yukun Zhu, Ruoming Pang, Vijay Vasudevan, Quoc V. Le, and Hartwig Adam. Searching for MobileNetV3. In Proceedings of the IEEE/CVF International Conference on Computer Vision (ICCV), pages 1314–1325, 2019.

Andrew G. Howard, Menglong Zhu, Bo Chen, Dmitry Kalenichenko, Weijun Wang, Tobias Weyand, Marco Andreetto, and Hartwig Adam. : Efficient convolutional neural networks for mobile vision applications. In arXiv preprint arXiv:1704.04861, 2017.

Prannay Khosla, Piotr Teterwak, Chen Wang, Aaron Sarna, Yonglong Tian, Phillip Isola, Aaron Maschinot, Ce Liu, and Dilip Krishnan. Supervised contrastive learning, 2020. URL https://arxiv.org/abs/2004.11362.

Kimi Team, Yu Zhang, Zongyu Lin, Xingcheng Yao, Jiaxi Hu, Fanqing Meng, Chengyin Liu, Xin Men, Songlin Yang, Zhiyuan Li, Wentao Li, Enzhe Lu, Weizhou Liu, Yanru Chen, Weixin Xu, Longhui Yu, Yejie Wang, Yu Fan, Longguang Zhong, Enming Yuan, Dehao Zhang, Yizhi Zhang, T. Y. Liu, Haiming Wang, Shengjun Fang, Weiran He, Shaowei Liu, Yiwei Li, Jianlin Su, Jiezhong Qiu, Bo Pang, Junjie Yan, Zhejun Jiang, Weixiao Huang, Bohong Yin, Jiacheng You, Chu Wei, Zhengtao Wang, Chao Hong, Yutian Chen, Guanduo Chen, Yucheng Wang, Huabin Zheng, Feng Wang, Yibo Liu, Mengnan Dong, Zheng Zhang, Siyuan Pan, Wenhao Wu, Yuhao Wu, Longyu Guan, Jiawen Tao, Guohong Fu, Xinran Xu, Yuzhi Wang, Guokun Lai, Yuxin Wu, Xinyu Zhou, Zhilin Yang, and Yulun Du. Kimi linear: An expressive, efficient attention architecture, 2025. URL https://arxiv.org/abs/2510.26692.

Günter Klambauer, Thomas Unterthiner, Andreas Mayr, and Sepp Hochreiter. Self-normalizing neural networks. In Advances in Neural Information Processing Systems (NeurIPS), 2017.

Timon Klein, Jonas Kusch, Sebastian Sager, Stefan Schnake, and Steffen Schotthöfer. Tucker attention: A generalization of approximate attention mechanisms, 2026. URL https://arxiv.org/abs/2603.30033.

Xunhao Lai, Weiqi Xu, Yufeng Yang, Qiaorui Chen, Yang Xu, Lunbin Zeng, Xiaolong Li, Haohai Sun, Haichao Zhu, Vito Zhang, Jinkai Hu, Jiayao Li, Rui Gao, Zekun Li, Songquan Zhu, Jingkai Zhou, and Pengyu Zhao. Minimax sparse attention, 2026. URL https://arxiv.org/abs/2606.13392.

Johannes Lederer. Activation functions in artificial neural networks: A systematic overview. arXiv preprint arXiv:2101.09957, 2021. doi: 10.48550/arXiv.2101.09957.

Mike Lewis, Shruti Bhosale, Tim Dettmers, Douwe Kiela, and Luke Zettlemoyer. Base layers: Simplifying training of large, sparse models, 2021. URL https://arxiv.org/abs/2103.16716.

Kaizhao Liang, Lizhang Chen, Bo Liu, and Qiang Liu. Cautious optimizers: Improving training with one line of code. URL https://arxiv.org/abs/2411.16085. Version Number: 4.

Zhixuan Lin, Ke Wang, et al. Forgetting transformer: Softmax attention with a forget gate, 2025. URL https://arxiv.org/abs/2503.02130.

Hong Liu, Zhiyuan Li, David Hall, Percy Liang, and Tengyu Ma. Sophia: A scalable stochastic second-order optimizer for language model pre-training, a. URL https://arxiv.org/abs/2305.14342. Version Number: 4.

Liyuan Liu, Haoming Jiang, Pengcheng He, Weizhu Chen, Xiaodong Liu, Jianfeng Gao, and Jiawei Han. On the variance of the adaptive learning rate and beyond, b. URL https://arxiv.org/abs/1908.03265. Version Number: 4.

Songtao Liu, Hongwu Peng, Zhiwei Zhang, Zhengyu Chen, and Yue Guo. Multi-head low-rank attention, 2026. URL https://arxiv.org/abs/2603.02188.

Ilya Loshchilov and Frank Hutter. Decoupled weight decay regularization. URL https://arxiv.org/abs/1711.05101. Version Number: 3.

Tianyu Lou, Zheyu Chen, Tao Yu, et al. Efficient sparse attention for long-range transformers, 2024. URL https://arxiv.org/abs/2406.16747.

Andrew L. Maas, Awni Y. Hannun, and Andrew Y. Ng. Rectifier nonlinearities improve neural network acoustic models. In Proc. ICML Workshop on Deep Learning for Audio, Speech and Language Processing, 2013.

Sushant Mehta, Raj Dandekar, Rajat Dandekar, and Sreedath Panat. Latent multi-head attention for small language models, 2025. URL https://arxiv.org/abs/2506.09342.

Fanxu Meng. Gqla: Group-query latent attention for hardware-adaptive large language model decoding, 2026. URL https://arxiv.org/abs/2605.15250.

Konstantin Mishchenko and Aaron Defazio. Prodigy: An expeditiously adaptive parameter-free learner. URL https://arxiv.org/abs/2306.06101. Version Number: 4.

Diganta Misra. Mish: A self regularized non-monotonic activation function. arXiv preprint arXiv:1908.08681, 2019.

Niklas Muennighoff et al. Matryoshka representation learning, 2022. URL https://arxiv.org/abs/2205.13147.

Vinod Nair and Geoffrey E. Hinton. Rectified linear units improve restricted Boltzmann machines. In Proceedings of the 27th International Conference on Machine Learning (ICML), pages 807–814, 2010.

Matteo Pagliardini, Pierre Ablin, and David Grangier. The AdEMAMix optimizer: Better, faster, older. URL https://arxiv.org/abs/2409.03137. Version Number: 2.

Adam Paszke, Sam Gross, Francisco Massa, Adam Lerer, James Bradbury, Gregory Chanan, Trevor Killeen, Zeming Lin, Natalia Gimelshein, Luca Antiga, Alban Desmaison, Andreas Köpf, Edward Yang, Zach DeVito, Martin Raison, Alykhan Tejani, Sasank Chilamkurthy, Benoit Steiner, Lu Fang, Junjie Bai, and Soumith Chintala. : An imperative style, high-performance deep learning library. In Advances in Neural Information Processing Systems 32 (NeurIPS), pages 8024–8035, 2019.

Fabian Pedregosa, Gaël Varoquaux, Alexandre Gramfort, Vincent Michel, Bertrand Thirion, Olivier Grisel, Mathieu Blondel, Peter Prettenhofer, Ron Weiss, Vincent Dubourg, Jake Vanderplas, Alexandre Passos, David Cournapeau, Matthieu Brucher, Matthieu Perrot, and Édouard Duchesnay. Scikit-learn: Machine learning in Python. Journal of Machine Learning Research, 12: 2825–2830, 2011.

Boris T. Polyak. Some methods of speeding up the convergence of iteration methods. USSR Computational Mathematics and Mathematical Physics, 4 (5): 1–17, 1964. doi: 10.1016/0041-5553(64)90137-5.

Zhen Qin, Xu Han, et al. Hgrn2: Gated linear rnns with state expansion, 2024. URL https://arxiv.org/abs/2404.07904.

Yuxiang Qiu, Qwen Team, et al. Gated attention for large language models, 2025. URL https://arxiv.org/abs/2505.06708.

Prajit Ramachandran, Barret Zoph, and Quoc V. Le. Searching for activation functions. In arXiv preprint arXiv:1710.05941, 2017.

Jason Ramapuram, Federico Danieli, Eeshan Dhekane, Floris Weers, Dan Busbridge, Pierre Ablin, Tatiana Likhomanenko, Jagrit Digani, Zijin Gu, Amitis Shidani, and Russ Webb. Theory, analysis, and best practices for sigmoid self-attention. URL https://arxiv.org/abs/2409.04431. Version Number: 2.

Nils Reimers and Iryna Gurevych. Sentence-BERT: Sentence embeddings using siamese BERT-networks. URL http://arxiv.org/abs/1908.10084.

Susmita Roy, Souvik Manna, Subhash Bagui, et al. : Non-parametric linearly scaled hyperbolic tangent activation function for neural networks. arXiv preprint arXiv:1811.05870, 2019.

Hema Hariharan Samson. Lightweight transformer architectures for edge devices in real-time applications. URL http://arxiv.org/abs/2601.03290.

Noam Shazeer. variants improve transformer. arXiv preprint arXiv:2002.05202, 2020.

Noam Shazeer and Mitchell Stern. Adafactor: Adaptive learning rates with sublinear memory cost. URL https://arxiv.org/abs/1804.04235. Version Number: 1.

Wei Shen, Ruichuan Huang, Minhui Huang, Cong Shen, and Jiawei Zhang. On the convergence analysis of muon. URL https://arxiv.org/abs/2505.23737. Version Number: 1.

Rafael Soares et al. Griffin: Mixing gated linear recurrences with local attention for efficient sequence modeling, 2024. URL https://arxiv.org/abs/2402.19427.

Luoyang Sun, Cheng Deng, Jiwen Jiang, Xinjian Wu, Haifeng Zhang, Lei Chen, Lionel Ni, and Jun Wang. Gta: Grouped-head latent attention, 2025. URL https://arxiv.org/abs/2506.17286.

Yutao Sun, Li Dong, Shaohan Huang, Shuming Ma, Yuqing Xia, Jilong Xue, Jianyong Wang, and Furu Wei. Retentive network: A successor to transformer for large language models. URL https://arxiv.org/abs/2307.08621. Version Number: 4.

Shohei Taniguchi, Keno Harada, Gouki Minegishi, Yuta Oshima, Seong Cheol Jeong, Go Nagahara, Tomoshi Iiyama, Masahiro Suzuki, Yusuke Iwasawa, and Yutaka Matsuo. : Modified adam can converge with any \(\beta_2\) with the optimal rate. URL https://arxiv.org/abs/2411.02853. Version Number: 3.

Ludovic Trottier, Philippe Giguère, and Brahim Chaib-draa. Parametric exponential linear unit for deep convolutional neural networks. In Proceedings of the 16th IEEE International Conference on Machine Learning and Applications (ICMLA), pages 207–214, 2017. doi: 10.1109/ICMLA.2017.0-133.

Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N. Gomez, Lukasz Kaiser, and Illia Polosukhin. Attention is all you need. URL https://arxiv.org/abs/1706.03762. Version Number: 7.

Nikhil Vyas, Depen Morwani, Rosie Zhao, Mujin Kwun, Itai Shapira, David Brandfonbrener, Lucas Janson, and Sham Kakade. : Improving and stabilizing shampoo using adam. URL https://arxiv.org/abs/2409.11321. Version Number: 2.

Hongyu Wang, Shuming Ma, Li Dong, Shaohan Huang, Huaijie Wang, Lingxiao Ma, Fan Yang, Ruiping Wang, Yi Wu, and Furu Wei. : Scaling 1-bit transformers for large language models. URL http://arxiv.org/abs/2310.11453.

Zhe Wang, Ming Liu, et al. Fasa: Frequency-aware sparse attention, 2026. URL https://arxiv.org/abs/2602.03152.

Thomas Wolf, Lysandre Debut, Victor Sanh, Julien Chaumond, Clement Delangue, Anthony Moi, Pierric Cistac, Tim Rault, Rémi Louf, Morgan Funtowicz, Joe Davison, Sam Shleifer, Patrick von Platen, Clara Ma, Yacine Jernite, Julien Plu, Canwen Xu, Teven Le Scao, Sylvain Gugger, Mariama Drame, Quentin Lhoest, and Alexander M. Rush. Transformers: State-of-the-art natural language processing. In Proceedings of the 2020 Conference on Empirical Methods in Natural Language Processing: System Demonstrations (EMNLP), pages 38–45, 2020.

Xingyu Xie, Pan Zhou, Huan Li, Zhouchen Lin, and Shuicheng Yan. Adan: Adaptive nesterov momentum algorithm for faster optimizing deep models. URL https://arxiv.org/abs/2208.06677. Version Number: 5.

Zhenda Xie, Yixuan Wei, Huanqi Cao, Chenggang Zhao, Chengqi Deng, Jiashi Li, Damai Dai, Huazuo Gao, Jiang Chang, Kuai Yu, Liang Zhao, Shangyan Zhou, Zhean Xu, Zhengyan Zhang, Wangding Zeng, Shengding Hu, Yuqing Wang, Jingyang Yuan, Lean Wang, and Wenfeng Liang. mhc: Manifold-constrained hyper-connections, 2025. URL https://arxiv.org/abs/2512.24880.

Songlin Yang, Bailin Wang, et al. Gated linear attention transformers with hardware-efficient training, 2023. URL https://arxiv.org/abs/2312.06635.

Songlin Yang, Bailin Wang, et al. Parallelizing linear transformers with the delta rule over sequence length, 2024a. URL https://arxiv.org/abs/2406.06484.

Songlin Yang, Bailin Wang, et al. Gated delta networks: Improving mamba2 with delta rule, 2024b. URL https://arxiv.org/abs/2412.06464.

Yang You, Jing Li, Sashank Reddi, Jonathan Hseu, Sanjiv Kumar, Srinadh Bhojanapalli, Xiaodan Song, James Demmel, and Cho-Jui Hsieh. Large batch optimization for deep learning: Training BERT in 76 minutes. URL https://arxiv.org/abs/1904.00962. Version Number: 3.

Han Yuan, DeepSeek-AI, et al. Native sparse attention: Hardware-aligned and natively trainable sparse attention, 2025. URL https://arxiv.org/abs/2502.11089.

Huizhuo Yuan, Yifeng Liu, Shuang Wu, Xun Zhou, and Quanquan Gu. : Unleashing the power of variance reduction for training large models. URL https://arxiv.org/abs/2411.10438. Version Number: 4.

Manzil Zaheer, Guru Guruganesh, Kumar Avinava Dubey, Joshua Ainslie, Chris Alberti, Santiago Ontanon, Pike Pham, Anirudh Ravula, Qifan Wang, Li Yang, and Amr Ahmed. Big bird: Transformers for longer sequences. In Advances in Neural Information Processing Systems, 2020. doi: 10.48550/ARXIV.2007.14062. URL https://arxiv.org/abs/2007.14062.

Biao Zhang and Rico Sennrich. . URL http://arxiv.org/abs/1910.07467.

Jing Zhang, Peng Zhang, Baiwen Kong, Junqiu Wei, and Xin Jiang. Continuous self-attention models with neural ODE networks. (16): 14393–14401. ISSN 2374-3468, 2159-5399. doi: 10.1609/aaai.v35i16.17692. URL https://ojs.aaai.org/index.php/AAAI/article/view/17692.

Yichi Zhang, Yizhong Wang, et al. Accurate and training-free sparse attention accelerating any model inference, 2025. URL https://arxiv.org/abs/2502.18137.

Jiawei Zhao, Zhenyu Zhang, Beidi Chen, Zhangyang Wang, Anima Anandkumar, and Yuandong Tian. : Memory-efficient LLM training by gradient low-rank projection. URL https://arxiv.org/abs/2403.03507. Version Number: 2.

Hanqing Zhu, Zhenyu Zhang, Wenyan Cong, Xi Liu, Sem Park, Vikas Chandra, Bo Long, David Z. Pan, Zhangyang Wang, and Jinwon Lee. Apollo: Sgd-like memory, adamw-level performance, 2025. URL https://arxiv.org/abs/2412.05270.

Jiachen Zhu, Xinlei Chen, Kaiming He, Yann LeCun, and Zhuang Liu. Transformers without normalization. URL http://arxiv.org/abs/2503.10622.

Lianghui Zhu, Yuxin Fang, Bencheng Liao, Shijie Wang, Tianheng Cheng, Zilong Huang, Chen Chen, Lai Wei, Yutao Zeng, Ya Wang, Yi Lin, Yu Li, and Xinggang Wang. Mixture-of-depths attention, 2026. URL https://arxiv.org/abs/2603.15619.

Introducción Conceptual—Transformers y Atención para Principiantes

Este apéndice proporciona una introducción accesible a los conceptos fundamentales de los transformers y el mecanismo de atención, dirigido a lectores sin conocimientos profundos previos en aprendizaje profundo. Los transformers son el motor detrás de los sistemas modernos de inteligencia artificial como ChatGPT, pero su funcionamiento puede entenderse mediante analogías del mundo real.

¿Qué es un Transformer?

Un transformer es una arquitectura neuronal que procesa texto o secuencias de datos interpretando el significado de cada palabra mientras considera todas las demás palabras en contexto. Imagina que lees una oración:

“El banco estaba lleno de gente esperando. María fue al banco.”

¿Qué significa “banco” en cada caso? En la primera oración, se refiere a una institución financiera (o un asiento). En la segunda, no está claro sin contexto. Un transformer resuelve esto automáticamente al mirar todas las palabras circundantes. En la segunda oración, al ver “María fue”, el modelo comprende mejor que probablemente se trata de una ribera (donde va a nadar) o una institución financiera (donde va a realizar una transacción).

Esta capacidad de entender el significado completo de una palabra considerando toda la oración se llama contextualización, y es el corazón de cómo funcionan los transformers modernos.

El Mecanismo de Atención: Una Analogía

El mecanismo de atención es el “truco mágico” que permite a los transformers entender el contexto. Piensa en ello como participar en una conversación importante en una habitación ruidosa:

  1. Mucho ruido: Alguien está hablando y es muy importante para ti.

  2. Ignoras el resto: Tu cerebro automáticamente enfoca la atención en esa persona, ignorando otros sonidos.

  3. Entiendes mejor: Al concentrarte, captas cada palabra claramente.

El mecanismo de atención neuronal funciona de la misma manera: cada palabra “pregunta” qué tan importante es cada otra palabra para entender su significado, luego “enfoca” su atención en las más relevantes.

Ejemplo Práctico Paso a Paso

Veamos cómo un transformer entiende la palabra “come” en dos contextos diferentes:

Contexto 1: “El gato come pescado”

El transformer, al procesar “come”, pregunta internamente:

Por lo tanto, la representación mental de “come” se enfoca principalmente en “gato” y “pescado”.

Contexto 2: “El restaurante come los márgenes de beneficio”

Aquí el transformer pregunta en un contexto diferente:

La palabra “come” obtiene una representación completamente diferente porque “atiende” a palabras distintas en contextos distintos.

Cómo Funciona la Atención Matemáticamente (Versión Simple)

Detrás del cambio de atención hay matemáticas. Aquí está la versión simplificada sin demasiado detalle técnico:

Paso 1: Consultas, Claves y Valores

Cada palabra en la oración se transforma en tres versiones:

Imagina en una biblioteca, cada visitante es una “consulta”, cada libro es una “clave” y el contenido es el “valor”. El bibliotecario (atención) empareja las consultas con las claves más relevantes para acceder al valor correcto.

Paso 2: Compatibilidad

El sistema examina qué tan compatible es cada consulta con cada clave. Las consultas similares a las claves obtienen un puntaje de compatibilidad alto. Esto se calcula multiplicando la consulta por la clave (matemáticamente, el producto punto).

Paso 3: Enfoque

Los puntajes de compatibilidad se convierten en “pesos de enfoque”. Las compatibilidades altas significan “enfocar atención aquí”, y las bajas significan “ignorar esto”. Matemáticamente, una función llamada softmax convierte los puntajes en porcentajes (como: 40% atención aquí, 35% aquí, 25% allá).

Paso 4: Combinar

Finalmente, el sistema combina todos los valores, ponderados por los pesos de enfoque. Si una palabra tiene un 80% de atención en el sujeto, el 80% de la información del sujeto se mezcla en la representación de esa palabra.

Múltiples Cabezas de Atención: Múltiples Perspectivas

Una característica clave es que los transformers no usan una única atención sino múltiples cabezas de atención en paralelo. Es como si tuvieras 8 personas analizando la oración simultáneamente, cada una prestando atención a diferentes aspectos:

Cada “cabeza” aprende a enfocarse en diferentes patrones del lenguaje. Juntas, capturan una comprensión mucho más rica que una sola cabeza.

Apilar Capas

Los transformers procesan información en múltiples capas (generalmente de 12 a 48 para modelos prácticos). Imagina editar un ensayo:

  1. Primera pasada: Corriges ortografía y gramática básica.

  2. Segunda pasada: Mejoras la claridad y la estructura de las oraciones.

  3. Tercera pasada: Aseguras consistencia y flujo narrativo.

Los transformers funcionan de la misma manera: cada capa refina la comprensión del texto. La primera capa captura características básicas (palabras simples, géneros), mientras que las capas posteriores entienden conceptos complejos (relaciones entre palabras, significados abstractos).

¿Por Qué es Importante?

El mecanismo de atención fue revolucionario porque:

  1. Paralelismo: Encuentra contexto para cualquier palabra con cualquier otra palabra, sin procesarlas secuencialmente (a diferencia de sistemas anteriores). Esto lo hace muy rápido.

  2. Flexibilidad: Aprende qué patrones buscar automáticamente a partir de los datos, sin necesidad de programar reglas manualmente.

  3. Escalabilidad: Funciona desde textos pequeños hasta contextos con millones de palabras.

  4. Capacidades generales: El mismo mecanismo funciona para traducción, resumen, preguntas-respuestas, generación de texto, visión por computadora y más.

Desafíos Prácticos

A pesar del extraordinario éxito de los transformers, presentan desafíos:

Complejidad Computacional

Si una oración tiene 1,000 palabras, el mecanismo de atención estándar debe comparar cada palabra con las otras 1,000 palabras. Eso es \(1,000 \times 1,000 = 1,000,000\) de comparaciones. Para documentos largos con millones de palabras, esto se vuelve prohibitivamente costoso en tiempo y memoria.

Requisitos de Memoria

Especialmente durante la inferencia (cuando se usan modelos entrenados), almacenar la matriz de atención completa puede consumir enormes cantidades de RAM o memoria de GPU, limitando las longitudes de secuencia que se pueden procesar.

Eficiencia del Dispositivo

Los transformers fueron diseñados para TPUs y GPUs potentes. Ejecutarlos en teléfonos o dispositivos integrados es un desafío.

Soluciones Modernas

Para resolver estos desafíos, la investigación ha propuesto muchas variantes:

Estas innovaciones son lo que este kit de herramientas (Frankenstein) te permite experimentar fácilmente.

Conclusiones Clave

Estructura del Esquema de Configuración

El conjunto de herramientas Frankenstein Transformer impone un esquema de configuración YAML estricto con additionalProperties: false en todos los niveles. El esquema se define en src/schema.yaml, que referencia sub-esquemas modulares en src/schema/. Cada campo configurable debe declararse en el esquema; las claves no reconocidas se rechazan en tiempo de validación. Este anexo documenta la estructura completa del esquema, incluyendo todos los campos, sus tipos, restricciones y reglas de validación entre componentes.

Estructura de Nivel Superior

El objeto raíz del esquema tiene cinco propiedades de nivel superior. Todas son opcionales excepto training, que es obligatorio:

El esquema impone una regla de exclusión mutua: o bien base_model debe estar presente, o bien tanto model_class como model deben estar presentes.

Configuración del Modelo

El objeto model define todos los hiperparámetros arquitectónicos. Los campos obligatorios son dims.vocab_size, dims.hidden_size, dims.num_layers, dims.num_heads y dims.layer_pattern. La Tabla 1 enumera todos los campos del modelo con sus tipos y descripciones.

Campos completos de configuración del modelo. Todos los campos son opcionales a menos que se indique como obligatorio.
Campo Tipo Descripción
Campo Tipo Descripción
dims.mode enum (encoder, decoder) Modo de enmascaramiento de atención. encoder = bidireccional; decoder = causal.
dims.vocab_size int \(\ge 1\) (obligatorio) Número de tokens únicos en el vocabulario. Debe coincidir con el tamaño de vocabulario del tokenizador.
dims.hidden_size int \(\ge 1\) (obligatorio) Dimensión oculta. Debe ser divisible por num_heads. Típico: 512–2048.
dims.num_layers int \(\ge 1\) (obligatorio) Número de capas físicas del transformer. Típico: 6–24.
dims.num_loops int \(\ge 1\) Número de bucles lógicos. Cada capa en layer_pattern se ejecuta num_loops veces. Por defecto: 1.
dims.num_heads int \(\ge 1\) (obligatorio) Número de cabezas de atención paralelas. Debe dividir hidden_size exactamente.
dims.retention_heads int \(\ge 1\) Número de cabezas para capas RetNet. Debe dividir hidden_size exactamente.
dims.dropout float [0,1] Tasa de dropout global. Típico: 0.1 (estándar BERT).
dims.layer_pattern array of enum (obligatorio) Secuencia ordenada de tipos de capa. La longitud debe igualar num_layers. Más de 35 tipos de mezclador disponibles (ver Tabla 11.2.1).
norm.type enum Estrategia de normalización: layer_norm, dynamic_tanh, derf, rms_norm, prms_norm.
norm.partial_ratio float (0,1] Fracción de dimensiones ocultas para estimación pRMSNorm. Por defecto: 0.0625.
embedding.factorized.enabled bool Activar factorización de matriz de embedding para reducir parámetros.
embedding.factorized.dim int \(\ge 1\) Dimensión intermedia para embeddings factorizados. Típico: 64–256.
embedding.conv.enabled bool Aplicar Conv1d sobre embeddings de tokens para capturar patrones locales de n-gramas.
embedding.conv.kernel int \(\ge 1\) Tamaño de kernel para Conv1d de embedding. Típico: 3.
attention.titan.positional_encoding enum (hope, rope) Método de codificación posicional para capas titan_attn.
attention.titan.use_hope bool Bandera heredada para HoPE en titan_attn. Obsoleta; preferir positional_encoding.
attention.titan.hope.base float \(\ge 0\) Escala de frecuencia base para HoPE. Típico: 10000.
attention.titan.hope.damping float \(\ge 0\) Coeficiente de amortiguación para decaimiento de atención HoPE. Típico: 0.01.
attention.titan.rope.base float \(\ge 0\) Frecuencia base para RoPE. Típico: 10000.
attention.titan.rope.scaling float \(\ge 0\) Multiplicador para índices de posición RoPE. Típico: 1.0.
attention.mla.latent_rank int \(\ge 1\) Rango del latente KV conjunto para MLA. Por defecto: hidden_size // 2.
attention.gqla.latent_rank int \(\ge 1\) Rango del latente KV conjunto para GQLA. Por defecto: hidden_size // 2.
attention.gqla.num_groups int \(\ge 1\) Número de grupos GQA para la ruta de decodificación GQLA. Debe dividir num_heads.
attention.gqla.decode_path enum (mqa_absorb, gqa) Ruta de decodificación para GQLA.
attention.mlra.latent_rank int \(\ge 1\) Rango latente total para MLRA. Por defecto: hidden_size // 2.
attention.mlra.num_latent_heads int \(\ge 1\) Número de sub-espacios latentes disjuntos para MLRA. Por defecto: 4.
attention.tucker.query_rank int \(\ge 1\) Rango Tucker para el tensor de pesos de consulta. Por defecto: hidden_size.
attention.tucker.key_rank int \(\ge 1\) Rango Tucker para el tensor de pesos de clave. Por defecto: hidden_size // 2.
attention.tucker.value_rank int \(\ge 1\) Rango Tucker para el tensor de pesos de valor. Por defecto: hidden_size // 2.
attention.iha.num_pseudo_heads int \(\ge 1\) Número de pseudo-cabezas por cabeza para IHA. Por defecto: num_heads.
attention.gta.num_shared_groups int \(\ge 1\) Número de grupos de cabezas que comparten un mapa de atención para GTA. Debe dividir num_heads.
attention.gta.value_latent_rank int \(\ge 1\) Rango del latente de caché de valores para GTA. Por defecto: hidden_size // 2.
attention.mtla.latent_rank int \(\ge 1\) Rango latente para MTLA. Por defecto: hidden_size // 2.
attention.mtla.merge_factor int \(\ge 1\) Número de entradas KV consecutivas fusionadas por slot temporal. Por defecto: 2.
attention.mtla.stride int \(\ge 1\) Stride entre slots temporales fusionados. Por defecto: mtla_merge_factor.
attention.cca.latent_rank int \(\ge 1\) Ancho latente para CCA. Por defecto: hidden_size // 4. Debe ser divisible por num_heads.
attention.cca.num_conv_layers enum (0, 1, 2) Número de capas de convolución en CCA. Por defecto: 2.
attention.cca.conv_kernel_seq int \(\ge 1\) Tamaño de kernel de convolución causal depth-wise de secuencia. Por defecto: 4.
attention.cca.conv_kernel_ch int \(\ge 1\) Tamaño de kernel de convolución agrupada de canales por cabeza. Por defecto: 3.
attention.cca.qk_mean bool Activar sesgo q-k-mean en CCA. Por defecto: true.
attention.cca.value_shift bool Activar value-shift en CCA. Por defecto: true.
attention.ccgqa.query_latent_rank int \(\ge 1\) Ancho latente de consulta para CCGQA. Por defecto: hidden_size // 2.
attention.ccgqa.kv_latent_rank int \(\ge 1\) Ancho latente KV para CCGQA. Por defecto: hidden_size // 8.
attention.ccgqa.num_kv_heads int \(\ge 1\) Número de cabezas KV para CCGQA. Debe dividir num_heads.
attention.ccgqa.num_conv_layers enum (0, 1, 2) Número de capas de convolución en CCGQA. Por defecto: 2.
attention.ccgqa.conv_kernel_seq int \(\ge 1\) Tamaño de kernel de convolución causal depth-wise de secuencia. Por defecto: 4.
attention.ccgqa.conv_kernel_ch int \(\ge 1\) Tamaño de kernel de convolución agrupada de canales por cabeza. Por defecto: 3.
attention.ccgqa.qk_mean bool Activar sesgo q-k-mean en CCGQA. Por defecto: true.
attention.ccgqa.value_shift bool Activar value-shift en CCGQA. Por defecto: true.
attention.msa.block_size int \(\ge 1\) Tamaño de bloque para MiniMax Sparse Attention. Por defecto: 128.
attention.msa.topk_blocks int \(\ge 1\) Número de bloques seleccionados por grupo GQA por consulta. Por defecto: 16.
attention.msa.index_dim int \(\ge 1\) Dimensionalidad de las cabezas de la Rama de Índice. Por defecto: 64.
attention.msa.kl_loss_weight float \(\ge 0\) Peso de la pérdida de alineación KL para la rama índice MSA. Por defecto: 0.0.
attention.sparda.block_size int \(\ge 1\) Tamaño de bloque KV para SparDA. Por defecto: 128.
attention.sparda.topk_blocks int \(\ge 1\) Número de bloques KV seleccionados por grupo GQA. Por defecto: 16.
attention.sparda.forecast_dim int \(\ge 1\) Dimensionalidad de la proyección Forecast. Por defecto: 64.
attention.engram.max_ngram_size int \(\ge 2\) Tamaño máximo de N-grama para el módulo de memoria Engram.
attention.engram.n_heads_per_ngram int \(\ge 1\) Número de cabezas hash por orden de N-grama.
attention.engram.embed_dim_per_head int \(\ge 1\) Dimensión de embedding por cabeza hash.
attention.engram.kernel_size int \(\ge 1\) Ancho de kernel de convolución depthwise causal para Engram.
attention.engram.seed int Semilla aleatoria para multiplicadores hash de N-gramas.
mhc.enabled bool Activar el flujo residual de \(n\) streams restringido por variedad (mHC, arXiv:2512.24880). Por defecto: false.
mhc.expansion_rate int \(\ge 1\) Factor de expansión del flujo residual \(n\). El flujo pasa a ser \(n \times\) hidden_size. \(1\) recupera el mapeo de identidad. Por defecto: 4.
mhc.sinkhorn_iters int \(\ge 1\) Rondas de normalización Sinkhorn-Knopp que restringen \(H^{\text{res}}\) a ser doblemente estocástica. Por defecto: 20.
mhc.gating_init float \(> 0\) Valor inicial de los escalares de compuerta mHC \(\alpha\). Por defecto: 0.01.
mhc.checkpoint bool Gradient checkpointing en capas mHC para mitigar el aumento de \(\sim n\times\) en memoria de activaciones. Por defecto: false.
mhc.full_prec_under_bitnet bool Mantener la proyección de coeficientes mHC en precisión completa bajo BitNet. Por defecto: true.
use_moe bool Activar Mezcla de Expertos en capas FFN.
num_experts int \(\ge 1\) Número total de redes expertas en capas MoE. Requiere use_moe=true.
top_k_experts int \(\ge 1\) Número de expertos activados por token en MoE. Debe ser \(\le\) num_experts.
use_bitnet bool Activar cuantización ternaria de pesos BitLinear. Por defecto: true.
bitnet_routers bool Cuantizar también proyecciones de enrutamiento/puntuación. Requiere use_bitnet=true. Por defecto: false.
use_bitnet_conv bool Cuantizar Conv1d de embedding con BitConv1d. Requiere use_bitnet=true y embedding.conv.enabled=true. Por defecto: false.
use_mixture_of_depths bool Activar enrutamiento de tokens Mixture-of-Depths.
mixture_of_depths_capacity_ratio float (0,1] Fracción de tokens actualizados por capa en MoD.
mixture_of_depths_router_aux_loss_weight float \(\ge 0\) Peso para la pérdida auxiliar del enrutador MoD.
ffn_hidden_size int \(\ge 1\) Dimensión intermedia de capas feed-forward. Típico: \(4\times\) hidden_size.
ffn_activation enum (silu, gelu) Activación no lineal para capas FFN.
ffn_activation_config object Parámetros anidados para activaciones aprendibles (grados/versión/init de RAF, init PReLU, etc.).
ode_solver enum (rk4, euler) Método de integración numérica para capas ODE.
ode_steps int \(\ge 1\) Número de pasos de integración para capas ODE. Típico: 2–4.

Los campos se agrupan bajo sub-objetos jerárquicos (dims, norm, embedding.factorized, embedding.conv, attention.titan, attention.mla, attention.gqla, etc.); cada fila de sub-encabezado marca el prefijo vigente para las filas que le siguen. Los campos listados bajo model.* permanecen como claves planas de nivel superior.

Enumeración del Patrón de Capas

El array model.dims.layer_pattern acepta los siguientes 35 tipos de mezclador. Cada elemento define una capa física en la pila del modelo. La Tabla 2 enumera todos los tipos disponibles con su soporte de entrenamiento e inferencia.

Enumeración completa de layer_pattern. \(\checkmark\) = soportado, \(\times\) = no soportado.
Tipo Descripción Entrenar Inferir
Tipo Descripción Entrenar Inferir
standard_attn Atención multi-cabeza clásica (estilo BERT)
sigmoid_attn Atención con compuerta sigmoide
gated_softmax_attn Atención softmax con compuerta sigmoide post-SDPA
titan_attn Atención Titan con codificación posicional (HoPE/RoPE)
retnet / retnet_attn Red de Retención (híbrido RNN+transformer)
mamba Modelo de espacio de estado selectivo (SSM)
ode Capa ODE de profundidad continua
gla_attn Atención Lineal con Compuerta con decaimiento multiplicativo
deltanet_attn / gated_deltanet_attn DeltaNet con regla delta correctiva
gated_deltanet2_attn Gated DeltaNet-2 con compuertas de borrado/escritura canalizadas desacopladas
hgrn2_attn HGRN2 con compuertas de olvido jerárquicas
fox_attn Forgetting Transformer (FoX) con sesgo de olvido en logits
nsa_attn Native Sparse Attention (tres ramas)
engram_attn Búsqueda condicional de memoria de N-gramas
gqa_attn Atención por Consultas Agrupadas con cabezas KV configurables
longformer_attn Longformer: ventanas deslizantes + tokens globales
bigbird_attn BigBird: atención local + aleatoria + global
sparse_transformer_attn Sparse Transformer: patrones factorizados
sparsek_attn SparseK: selección KV top-k diferenciable
sparge_attn SpargeAttn — poda de bloques en dos etapas \(\times\)
fasa_attn FASA — selección de tokens consciente de frecuencia \(\times\)
msa_attn MiniMax Sparse Attention — bloques dispersos sobre GQA
sparda_attn SparDA — atención dispersa desacoplada con proyección Forecast
kda_attn Kimi Delta Attention — decaimiento por canal + compuerta de escritura escalar
mla_attn Atención Latente Multi-Cabeza + RoPE
gqla_attn Atención Latente por Consultas Agrupadas — dos rutas de decodificación
mlra_attn Atención Multi-Cabeza de Rango Bajo — latente particionable
tucker_attn Atención Tucker — factorización de rango bajo generalizada
iha_attn Atención de Cabezas Entrelazadas — pseudo-cabezas entre cabezas
gta_attn Atención laTenT por Cabezas Agrupadas — mapa compartido + valores latentes
mtla_attn Atención Latente Temporal Multi-Cabeza — fusión temporal KV
cca_attn Atención Convolucional Comprimida — atención en espacio latente + convs
ccgqa_attn Atención Convolucional Comprimida por Consultas Agrupadas — CCA + GQA en latente

Configuración de Entrenamiento

El objeto training controla todo el pipeline de entrenamiento. El único campo obligatorio es task. La Tabla 3 enumera todos los campos de entrenamiento.

Campos completos de configuración de entrenamiento.
Campo Tipo Descripción
Campo Tipo Descripción
task enum (mlm, sbert, causal_lm) (obligatorio) Objetivo de entrenamiento. mlm = Modelado de Lenguaje Enmascarado; sbert = ajuste fino Sentence-BERT; causal_lm = predicción autorregresiva del siguiente token (requiere model_class=’frankensteindecoder’).
num_epochs int \(\ge 1\) Pasadas completas por el dataset de entrenamiento (solo MLM).
batch_size int \(\ge 1\) Ejemplos por paso del optimizador (antes de acumulación de gradientes).
dataloader_workers int \(\ge 0\) Procesos trabajadores paralelos para carga de datos.
max_length int \(\ge 1\) Longitud máxima de secuencia de tokens. Típico: 128–2048.
mlm_probability float [0,1] Fracción de tokens enmascarados para predicción MLM. Estándar: 0.15.
max_samples int \(\ge 1\) Muestras totales antes de detenerse, independiente de épocas.
dataset_batch_size int \(\ge 1\) Tamaño de lote interno para dataset de streaming.
num_workers int \(\ge 0\) Trabajadores paralelos para pipeline de streaming de dataset.
cache_dir string Directorio para cachear datasets procesados.
local_parquet_dir string Ruta a archivos parquet locales para streaming offline.
prefer_local_cache bool Verificar caché local primero antes de descarga remota.
stream_local_parquet bool Hacer streaming desde parquet local cuando local_parquet_dir está configurado.
join_temp_data_context_window int \(\ge 0\) Si \(>0\), une fragmentos de tokens en caché en secuencias de esta longitud.
join_temp_data_min_remainder_tokens int \(\ge 0\) Tokens de contenido mínimos en la última ventana parcial unida.
use_amp bool Activar precisión mixta FP16.
gradient_accumulation_steps int \(\ge 1\) Acumular gradientes sobre N mini-lotes antes del paso del optimizador.
optimizer object Configuración del optimizador (ver §11.4). Obligatorio cuando task=mlm o task=causal_lm.
sbert object Configuración de entrenamiento SBERT (ver §11.5). Obligatorio cuando task=sbert.
scheduler_total_steps int \(\ge 1\) Pasos totales del optimizador para la programación de LR.
scheduler_warmup_ratio float [0,1] Fracción de scheduler_total_steps para calentamiento de LR.
scheduler_type enum (cosine, constant, linear_warmup_then_constant) Estrategia de decaimiento de LR.
grad_clip_max_norm float \(\ge 0\) Norma máxima permitida del gradiente. 0 = desactivado.
inf_post_clip_threshold float \(\ge 0\) Umbral para marcar explosiones de gradiente post-recorte.
max_nan_retries int \(\ge 0\) Reintentos máximos ante gradientes NaN/Inf antes de detenerse.
checkpoint_every_n_steps int \(\ge 1\) Guardar checkpoint rotativo cada N pasos.
max_rolling_checkpoints int \(\ge 1\) Máximo de checkpoints rotativos mantenidos. El más antiguo se elimina al exceder.
num_best_checkpoints int \(\ge 1\) Número de mejores checkpoints conservados permanentemente (por pérdida de validación).
nan_check_interval int \(\ge 1\) Pasos entre verificaciones de NaN/Inf.
log_gradient_stats bool Registrar normas de gradiente por capa, min/max.
gradient_log_interval int \(\ge 1\) Pasos entre registros de estadísticas de gradiente.
csv_log_path string Ruta de archivo para métricas de entrenamiento a nivel de paso en formato CSV.
csv_rotate_on_schema_change bool Rotar archivo CSV cuando cambia el esquema.
gpu_metrics_backend enum (nvml, none) Backend de telemetría GPU.
nvml_device_index int \(\ge 0\) Índice de GPU a monitorear (0 = primera GPU).
enable_block_grad_norms bool Registrar normas de gradiente por bloque (embeddings, atención, FFN, etc.).
telemetry_log_interval int \(\ge 1\) Pasos entre registros de telemetría pesada.
gpu_temp_guard_enabled bool Monitoreo estricto de temperatura GPU. Requiere gpu_metrics_backend=nvml.
switch_on_thermal bool Temperatura crítica activa fallback GPU\(\to\)CPU, reanudación automática al enfriarse.
gpu_temp_pause_threshold_c float Temperatura (\(^\circ\)C) para pausar entrenamiento.
gpu_temp_resume_threshold_c float Temperatura (\(^\circ\)C) para reanudar entrenamiento tras pausa.
gpu_temp_critical_threshold_c float Marcador de registro informativo para eventos térmicos severos.
gpu_temp_poll_interval_seconds float Segundos entre verificaciones de temperatura durante espera de enfriamiento.
use_galore bool Activar Proyección de Gradiente de Bajo Rango para entrenamiento eficiente en memoria.
galore_rank int \(\ge 1\) Dimensión de proyección de bajo rango para GaLore.
galore_update_interval int \(\ge 1\) Pasos entre recomputaciones de la matriz de proyección.
galore_scale float \(\ge 0\) Factor de escala para gradientes proyectados.
galore_max_dim int \(\ge 1\) Dimensión máxima del tensor para proyección GaLore.
hf_output_dir string Directorio para guardar el modelo final mediante save_pretrained().

Configuración del Optimizador

El objeto training.optimizer tiene dos campos:

Sufijos Compartidos por Grupo

Todos los optimizadores soportan los siguientes sufijos por grupo de parámetros, prefijados por el nombre de la clase del optimizador (ej., adamw-lr_embeddings):

Nota: los parámetros de los mezcladores ODE, RetNet y Mamba se enrutan al grupo attention en lugar de tener grupos dedicados.

Sufijos Globales Específicos del Optimizador

La Tabla 4 enumera los sufijos globales adicionales soportados por cada optimizador (prefijados por el nombre del optimizador).

Sufijos de parámetros globales específicos del optimizador. Todas las claves están prefijadas con el nombre de la clase del optimizador (ej., sgd_momentum-momentum).
Optimizador Sufijos Globales Específicos
Optimizador Sufijos Globales Específicos
sgd_momentum momentum, nesterov
adamw (ninguno — solo sufijos compartidos)
adafactor beta2_decay, clip_threshold, eps1, eps2
galore_adamw rank, update_proj_gap
prodigy d_coef
lion (ninguno — solo sufijos compartidos)
sophia rho, update_k
muon momentum, nesterov, ns_steps, ns_eps
turbo_muon momentum, nesterov, ns_steps, ns_eps
radam (ninguno — solo sufijos compartidos)
adan (ninguno — solo sufijos compartidos)
adopt (ninguno — solo sufijos compartidos)
ademamix (ninguno — solo sufijos compartidos)
mars_adamw (ninguno — solo sufijos compartidos)
cautious_adamw cautious_clip
lamb (ninguno — solo sufijos compartidos)
schedulefree_adamw (ninguno — solo sufijos compartidos)
shampoo (ninguno — solo sufijos compartidos)
soap (ninguno — solo sufijos compartidos)
anon gamma
apollo rank, update_proj_gap, scale, scale_type, proj_type, scale_front, disable_nl
apollo_mini update_proj_gap, scale, proj_type, scale_front, disable_nl
q_apollo rank, update_proj_gap, scale, scale_type, proj_type, scale_front, disable_nl, quant_bits

Configuración SBERT

El objeto training.sbert configura el ajuste fino Sentence-BERT. Es obligatorio cuando training.task=sbert. Los campos clave incluyen:

Reglas de Validación

El esquema impone las siguientes reglas de validación entre componentes, implementadas tanto en el JSON Schema (_conditional_rules.yaml) como en tiempo de ejecución en el cargador de configuración:

  1. additionalProperties: false se aplica en todos los niveles de anidamiento. Cualquier clave no reconocida en cualquier objeto desencadena un error de validación.

  2. model.dims.hidden_size debe ser divisible por model.dims.num_heads. La dimensión por cabeza es \(\texttt{hidden\_size} / \texttt{num\_heads}\).

  3. model.dims.num_kv_heads debe dividir model.dims.num_heads exactamente cuando se usa Atención por Consultas Agrupadas.

  4. vocab_size debe coincidir con el tamaño de vocabulario del tokenizador. Una discrepancia causa corrupción de IDs de token y fallo de entrenamiento irrecuperable.

  5. Cuando base_model está configurado, training.task es obligatorio. Si task=mlm, tokenizer.name_or_path también es obligatorio.

  6. task: mlm requiere training.optimizer; task: sbert requiere training.sbert; task: causal_lm requiere training.optimizer y model_class=’frankensteindecoder’.

  7. bitnet_routers=true requiere use_bitnet=true. La bandera no tiene efecto en caso contrario.

  8. use_mhc=true (flujo residual de \(n\) streams mHC) y use_mixture_of_depths=true son mutuamente excluyentes. Habilitar ambos lanza un ValueError: el enrutamiento MoD de tokens opera sobre un flujo \(C\)-dimensional único, en conflicto con el flujo residual de \(n\) streams.

  9. fasa_attn y sparge_attn son tipos de capa solo para evaluación. Lanzan RuntimeError si se usan durante el entrenamiento. No deben aparecer en model.dims.layer_pattern para ejecuciones de entrenamiento.

  10. model_class: frankensteindecoder fuerza model.dims.mode: decoder en tiempo de ejecución. Establecer model.dims.mode: encoder con esta clase se sobrescribe.

  11. O bien base_model debe estar presente, o bien tanto model_class como model deben estar presentes. El esquema rechaza configuraciones que no proporcionen ninguno o una combinación incompleta.

Tablas de Resumen Completas

Este anexo proporciona una referencia completa de todos los componentes implementados en el código base de Frankenstein Transformer: 35 mezcladores de secuencia en seis familias, 23 optimizadores, 6 variantes de normalización, 43 funciones de activación y 4 métodos de embedding. Cada tabla es autocontenida y referencia la bibliografía.

Resumen de Mezcladores de Secuencia

La Tabla 5 enumera cada mezclador de secuencia soportado por el campo de esquema layer_pattern, organizado por familia arquitectónica. La complejidad de entrenamiento e inferencia se expresa en términos de la longitud de secuencia \(n\), la dimensión oculta \(d\) y parámetros específicos de cada familia.

Catálogo completo de mezcladores de secuencia. \(n\) = longitud de secuencia, \(d\) = tamaño oculto, \(w\) = tamaño de ventana, \(r\) = dimensión de rango bajo, \(k\) = parámetro de dispersidad, \(C\) = razón de compresión. Los parámetros específicos de cada familia se definen en el anexo correspondiente.
Nombre Familia Entrenamiento Inferencia Característica Clave Referencia
Nombre Familia Entrenamiento Inferencia Característica Clave Referencia
continúa en la página siguiente
standard_attn Denso \(\mathcal{O}(n^2 d)\) \(\mathcal{O}(n)\) caché Contexto global completo; cuello de botella KV en secuencias largas
sigmoid_attn Denso \(\mathcal{O}(n^2 d)\) \(\mathcal{O}(n)\) caché Compuerta elemento a elemento; reemplazo eficiente en hardware para softmax
gqa Denso \(\mathcal{O}(n^2 d)\) \(\mathcal{O}(n)\) caché Compresión KV ajustable; reducción de caché \(G\times\) mediante cabezas compartidas
Recurrente (5)
retnet_attn Recurrente \(\mathcal{O}(n^2 d)\) paralelo \(\mathcal{O}(1)\) Decaimiento multi-escala; triple modo de cómputo (paralelo/recurrente/por fragmentos)
mamba Recurrente \(\mathcal{O}(n d)\) \(\mathcal{O}(1)\) Modelo de espacio de estado selectivo; escaneo paralelo consciente del hardware
ode Recurrente \(\mathcal{O}(k \cdot n^2 d)\) \(\mathcal{O}(k n)\) Integración RK4 de profundidad continua; solucionador de paso adaptativo
titan_attn Recurrente \(\mathcal{O}(c^2 + n f)\) \(\mathcal{O}(c^2 + 1)\) Adaptación de memoria en tiempo de prueba; dinámica de escritura impulsada por sorpresa
engram_attn Memoria \(\mathcal{O}(n \cdot N \cdot H)\) \(\mathcal{O}(1)\) lookup Memoria condicional de N-gramas; recuperación escalable basada en hash
Disperso (9)
sparse_transformer_attn Disperso \(\mathcal{O}(n \sqrt{n} \cdot d)\) \(\mathcal{O}(n)\) Máscaras factorizadas estrideadas + fijas; patrón de dispersidad \(\sqrt{n}\)
longformer_attn Disperso \(\mathcal{O}(n \cdot w \cdot d)\) \(\mathcal{O}(n)\) Ventana deslizante + dilatación + tokens globales; lineal en \(n\)
bigbird_attn Disperso \(\mathcal{O}(n)\) \(\mathcal{O}(n)\) Aleatorio + local + global; atención Turing completa
sparsek_attn Disperso \(\mathcal{O}(n \cdot d)\) \(\mathcal{O}(k)\) Selección top-\(k\) diferenciable; máscara de dispersidad aprendida
nsa_attn Disperso \(\mathcal{O}((t/d + n_l + w)d)\) \(\mathcal{O}(n)\) Diseño de 3 ramas alineado con hardware; token/vecino/ventana
sparge_attn Disperso \(\mathcal{O}(n^2 \cdot s \cdot d)\) \(\mathcal{O}(n)\) Filtrado de bloques en dos etapas; solo evaluación (sin entrenamiento)
fasa_attn Disperso \(\mathcal{O}(t \cdot N_{\text{tip}} + N_{\text{fac}} \cdot d)\) \(\mathcal{O}(n)\) Dispersidad consciente de frecuencia RoPE; solo evaluación
msa_attn Disperso \(\mathcal{O}(H_{\text{kv}} \cdot d_{\text{idx}} \cdot N^2 + H_q \cdot d_h \cdot N \cdot k \cdot B_k)\) \(\mathcal{O}(n)\) Bloques dispersos con rama índice; desplegado a escala 109B
sparda_attn Disperso \(\mathcal{O}(H_{\text{kv}} \cdot d_f \cdot N \cdot N_b + H_q \cdot d_h \cdot N \cdot k \cdot B_k)\) \(\mathcal{O}(n)\) Prefetch anticipado guiado por pronóstico; dispersidad predictiva
Con Compuerta (8)
gla_attn Con compuerta \(\mathcal{O}(L d^2)\) \(\mathcal{O}(d^2)\) Decaimiento diagonal dependiente de datos; atención lineal con compuerta
deltanet_attn Con compuerta \(\mathcal{O}(L d^2)\) \(\mathcal{O}(d^2)\) Regla delta; atención lineal con corrección de errores
gated_deltanet_attn Con compuerta \(\mathcal{O}(L d^2)\) \(\mathcal{O}(d^2)\) Síntesis de decaimiento + compuerta de escritura; marco delta unificado
gated_deltanet2_attn Con compuerta \(\mathcal{O}(L d^2)\) \(\mathcal{O}(d^2)\) Compuertas de borrado/escritura canalizadas desacopladas; compuerta mejorada
hgrn2_attn Con compuerta \(\mathcal{O}(L d^2)\) \(\mathcal{O}(d^2)\) Compuertas de olvido acotadas jerárquicas; recurrencia multi-escala
fox_attn Con compuerta \(\mathcal{O}(L^2 d)\) \(\mathcal{O}(L)\) KV Sesgo de recencia en espacio de logits; compatible con FlashAttn
gated_softmax_attn Con compuerta \(\mathcal{O}(L^2 d)\) \(\mathcal{O}(L)\) KV Compuerta sigmoide post-SDPA; mitigación del sumidero de atención
kda_attn Con compuerta \(\mathcal{O}(L d^2)\) \(\mathcal{O}(d^2)\) Decaimiento por canal + escritura escalar; diseño Kimi Linear
Latente (9)
mla_attn Latente \(\mathcal{O}(n^2 d)\) \(\mathcal{O}(r_{\text{kv}} \cdot n)\) KV latente de rango \(r_{\text{kv}} \approx d/2\); estilo DeepSeek
gqla_attn Latente \(\mathcal{O}(n^2 d)\) \(\mathcal{O}(r_{\text{kv}} \cdot n)\) Rutas de decodificación duales adaptativas al hardware; fusión GQA + latente
mlra_attn Latente \(\mathcal{O}(n^2 d)\) \(\mathcal{O}(r_{\text{kv}} \cdot n)\) \(L\) sub-cabezas; compatible con tensor-paralelismo de 4 vías
tucker_attn Latente \(\mathcal{O}(n^2 d)\) \(\mathcal{O}(k_{\text{rank}} \cdot n)\) Factorización Tucker; unifica MHA/GQA/MLA
iha_attn Latente \(\mathcal{O}(n^2 H^2)\) \(\mathcal{O}(H \cdot n \cdot d_h)\) Pseudo-cabezas; escalado de parámetros \(\Theta(\sqrt{k})\)
gta_attn Latente \(\mathcal{O}(n^2 \cdot G \cdot d_h)\) \(\mathcal{O}(r_v \cdot n)\) Mapa compartido + decodificador SiLU; reducción de FLOPs del 62.5%
mtla_attn Latente \(\mathcal{O}(n^2 d / m)\) \(\mathcal{O}(r_{\text{kv}} \cdot n / m)\) Fusión temporal; aceleración de decodificación de \(5.3\times\)
cca_attn Latente \(\mathcal{O}(n^2 d / C)\) \(\mathcal{O}(\tilde{e} \cdot n)\) Atención completa en latente comprimido; \(C\times\) menos FLOPs
ccgqa_attn Latente \(\mathcal{O}(n^2 d / C_1)\) \(\mathcal{O}(\tilde{e}_{\text{kv}} \cdot n)\) CCA + GQA desacoplada; mejor pérdida a \(8\times\) reducción de caché

Resumen de Optimizadores

La Tabla 6 cataloga los 23 optimizadores soportados con su huella de memoria, costo computacional por paso e hiperparámetros clave. Los búferes de estado se expresan como el número de tensores propiedad del optimizador por parámetro; el costo por paso se enfoca en el término dominante más allá del cálculo del gradiente.

Catálogo completo de optimizadores. \(n\) = número de parámetros, \(d\) = dimensionalidad del tensor, \(r\) = dimensión de rango bajo, \(k\) = número de iteraciones de Newton–Schulz. Búferes de estado enumera el número de tensores de estado del optimizador mantenidos por grupo de parámetros.
Optimizador Familia Búferes de Estado Costo por Paso Hiperparámetros Clave Referencia
Optimizador Familia Búferes de Estado Costo por Paso Hiperparámetros Clave Referencia
continúa en la página siguiente
SGD+Momentum Clásico 1 (\(m\)) \(\mathcal{O}(n)\) lr, momentum, wd
AdamW Adaptativo 2 (\(m\), \(v\)) \(\mathcal{O}(n)\) lr, \(\beta_1\), \(\beta_2\), eps, wd
RAdam Adaptativo 2 (\(m\), \(v\)) \(\mathcal{O}(n)\) lr, \(\beta_1\), \(\beta_2\), eps, wd
Reducción de Varianza y Momentum Avanzado
Adan Reducción de varianza 3 (\(m\), \(v\), \(s\)) \(\mathcal{O}(n)\) lr, \(\beta_1\), \(\beta_2\), \(\beta_3\), eps, wd
ADOPT Variante Adam 2 (\(m\), \(v\)) \(\mathcal{O}(n)\) lr, \(\beta_1\), \(\beta_2\), eps, wd
AdEMAMix Multi-EMA 3 (\(m_1\), \(m_2\), \(v\)) \(\mathcal{O}(n)\) lr, \(\beta_1\), \(\beta_2\), \(\beta_3\), eps, wd
MARS Varianza reducida 3 (\(m\), \(v\), \(z\)) \(\mathcal{O}(n)\) lr, \(\beta_1\), \(\beta_2\), eps, wd, \(\gamma\)
Cautious AdamW Momentum enmascarado 2 (\(m\), \(v\)) \(\mathcal{O}(n)\) lr, \(\beta_1\), \(\beta_2\), eps, wd
Lote Grande, Eficientes en Memoria y Sin Parámetros
LAMB Adaptativo por capas 2 (\(m\), \(v\)) \(\mathcal{O}(n)\) lr, \(\beta_1\), \(\beta_2\), eps, wd
Schedule-Free Sin programación 3 (\(z\), \(x\), \(n\)) \(\mathcal{O}(n)\) lr, \(\beta_1\), \(\beta_2\), wd
Adafactor Eficiente en memoria 1–2 (fila/col) \(\mathcal{O}(n)\) lr, \(\beta_1\), \(\beta_2\), eps, wd
GaLore Proyección de bajo rango 2 (\(m\), \(v\)) + SVD \(\mathcal{O}(n r)\) lr, rango \(r\), \(\beta_1\), \(\beta_2\), eps, wd
Prodigy Sin parámetros 3 (\(m\), \(v\), \(d\)) \(\mathcal{O}(n)\) \(\beta_1\), \(\beta_2\), eps, wd, \(d_0\)
Lion Momentum de signo 1 (\(m\)) \(\mathcal{O}(n)\) lr, \(\beta_1\), \(\beta_2\), wd
Segundo Orden, Geométricos y Ortogonalidad
Shampoo Segundo orden \(2d\) (\(L_i\), \(R_i\)) \(\mathcal{O}(n^{1+2/d})\) lr, eps, wd
SOAP Segundo orden \(2d + 2\) (\(m\), \(v\)) \(\mathcal{O}(n^{1+1/d})\) lr, \(\beta_1\), \(\beta_2\), eps, wd
Sophia Consciente de curvatura 3 (\(m\), \(v\), \(h\)) \(\mathcal{O}(n)\) lr, \(\beta_1\), \(\beta_2\), eps, wd, \(k\)
Muon Ortogonalidad 2 (\(m\), \(v\)) \(\mathcal{O}(n \cdot k)\) lr, momentum, wd, pasos NS \(k\)
Turbo-Muon Ortogonalidad 2 (\(m\), \(v\)) \(\mathcal{O}(n \cdot k)\) lr, momentum, wd, pasos NS \(k\)
Adaptativos de Bajo Rango y Adaptividad Ajustable
APOLLO Adaptativo de bajo rango 2 bajo rango + proy \(\mathcal{O}(n r)\) lr, rango \(r\), intervalo de actualización, escala, betas, eps, wd
APOLLO-Mini Adaptativo de bajo rango 2 rango-1 + proy \(\mathcal{O}(n)\) lr, intervalo de actualización, escala, betas, eps, wd
Q-APOLLO Bajo rango cuantizado 2 cuantizados + proy \(\mathcal{O}(n r)\) lr, rango \(r\), intervalo de actualización, escala, bits de cuantización, betas, eps, wd
Anon Adaptividad ajustable 3 (\(m\), \(v\), fixed_lr) \(\mathcal{O}(n)\) lr, \(\beta_1\), \(\beta_2\), eps, wd, \(\gamma\)

Variantes de Normalización

La Tabla 7 resume los seis métodos de normalización disponibles a través del campo de esquema norm_type, desde enfoques clásicos basados en estadísticas hasta transformaciones acotadas sin normalización y RMSNorm sin pesos con ejecución norm-then-project fusionada.

Variantes de normalización. \(d\) = dimensión oculta, \(k = \lceil d \cdot p \rceil\) para razón parcial \(p\), \(\alpha\) y \(s\) son parámetros aprendibles. FlashNorm es sin pesos (sin parámetros aprendibles); la escala por dimensión se pliega en la capa lineal subsecuente según la Prop. 1 de .
Método Fórmula Estadísticas Necesarias Referencia
Método Fórmula Estadísticas Necesarias Referencia
continúa en la página siguiente
LayerNorm \(\gamma_i (x_i - \mu)/\sqrt{\sigma^2 + \epsilon} + \beta_i\) media + varianza
RMSNorm \(\gamma_i x_i / \sqrt{\frac{1}{d}\sum_j x_j^2 + \epsilon}\) solo RMS
pRMSNorm \(\gamma_i x_i / \sqrt{\frac{1}{k}\sum_{j \le k} x_j^2 + \epsilon}\) RMS parcial (\(p\) %)
Dynamic Tanh (DyT) \(\tanh(\alpha x)\) ninguna
Dynamic Erf (Derf) \(\operatorname{erf}(\alpha x + s)\) ninguna
FlashNorm \(x_i / \sqrt{\frac{1}{d}\sum_j x_j^2 + \epsilon}\) solo RMS (sin pesos)

Conexiones Residuales

La Tabla 8 compara los esquemas de conexión residual disponibles en el código base: el residual de identidad estándar, las cuatro estrategias de Residuales de Atención (AttnRes) y el flujo residual de \(n\) streams restringido por variedad (mHC) . \(L\) es la profundidad lógica, \(C\) la dimensión oculta, \(n\) el factor de expansión del flujo, \(t_{\max}\) el número de iteraciones Sinkhorn–Knopp, \(\alpha\) los escalares de compuerta de mHC y \(\mathbf{w}_l\) el pseudo-query por capa de AttnRes (inicializado a cero). HC (Hyper-Connexions sin restricción) se lista como referencia pero no está expuesto en este código base.

Esquemas de conexión residual. \(x_l \in \mathbb{R}^{C}\) (estándar / AttnRes / sin residual) o \(\mathbb{R}^{n \times C}\) (mHC) es el flujo en la capa \(l\), \(F\) la función de capa y \(H^{\text{pre}}, H^{\text{post}}, H^{\text{res}}\) los mapeos aprendidos de mHC. Las estrategias AttnRes se controlan con model.residuals.type; mHC con model.mhc. Detalles completos en los anexos de mHC y AttnRes.
Esquema Actualización del Flujo Restricción Referencia
Esquema Actualización del Flujo Restricción Referencia
continúa en la siguiente página
Residual estándar \(x_{l+1} = x_l + F(x_l, W_l)\) Mapeo de identidad (por construcción)
Sin residual (experimental) \(x_{l+1} = F(x_l, W_l)\) Sin ruta skip
Full AttnRes \(x_{l+1} = \sum_{i=0}^{l} \mathrm{softmax}_i(\mathbf{w}_l^{\top} \mathrm{RMSNorm}(v_i))\, v_i\) \(\mathbf{w}_l\) aprendido, init a cero; RMSNorm en keys; \(L \cdot C\) parámetros
Block AttnRes \(x_{l+1} = \sum_{m=0}^{n} \mathrm{softmax}_m(\mathbf{w}_l^{\top} \mathrm{RMSNorm}(v_m))\, v_m\) \(\mathbf{w}_l\) aprendido, init a cero; RMSNorm en keys; \(N\) reps de bloque + suma parcial; \(L \cdot C\) parámetros
Hyper-Connexions (HC) \(x_{l+1} = H^{\text{res}}_l x_l + (H^{\text{post}}_l)^{\top} F(H^{\text{pre}}_l x_l, W_l)\) Sin restricción
mHC (este código base) misma actualización que HC \(H^{\text{res}}_l\) doblemente estocástica vía Sinkhorn–Knopp (\(t_{\max} = 20\)), \(H^{\text{pre}} = \sigma(\cdot)\), \(H^{\text{post}} = 2\sigma(\cdot)\), init \(\alpha\) en \(0.01\)

Funciones de Activación

La Tabla 9 cataloga las 43 funciones de activación disponibles a través del campo de esquema ffn_activation (40 elementales más 3 variantes de FFN con compuerta), agrupadas por familia. “Aprend.” marca las activaciones con parámetros entrenables; las fórmulas completas están en el Anexo 8.

Catálogo de funciones de activación. “Aprend.” indica la presencia de parámetros entrenables. RAF = Rational Activation Function (razón de Padé aprendible). \(\sigma\) es la sigmoide logística.
Nombre Familia Fórmula Aprend. Referencia
Nombre Familia Fórmula Aprend. Referencia
continúa en la próxima página
silu / swish Clásica \(x\,\sigma(\beta x)\) no / \(\beta\)
gelu Clásica \(x\,\Phi(x)\) no
gelu_tanh Clásica \(\tfrac{x}{2}\big(1+\tanh\!\sqrt{\tfrac{2}{\pi}}(x{+}0.044715x^3)\big)\) no
relu Clásica \(\max(0,x)\) no
sigmoid Clásica \(1/(1+e^{-x})\) no
tanh Clásica \((e^x-e^{-x})/(e^x+e^{-x})\) no
arctan Clásica \(\arctan(x)\) no
softsign / elliott Clásica \(x/(1+|x|)\) no
identity Clásica \(x\) no (interno)
softplus Clásica \(\log(1+e^x)\) no
mish Clásica \(x\tanh(\log(1+e^x))\) no
Familia rectificada (12)
leaky_relu Rectificada \(\max(0,x)+a\min(0,x)\), \(a{=}0.01\) no
relu6 Rectificada \(\min(\max(0,x),6)\) no
hardswish Rectificada \(x\,\text{ReLU6}(x{+}3)/6\) no
prelu Rectificada \(\max(0,x)+\mathbf{p}\odot\min(0,x)\)
abs_relu Rectificada \(\max(0,x)-\max(0,-x)\) no
nl_relu Rectificada \(\beta\log(1+\max(0,x))\) no
brelu Rectificada \(\min(\max(0,x),t)\) no
vrelu Rectificada \(|x|\) no
hexpo Rectificada \(a\max(0,x)-c\max(0,-x)\) no
ptanh Rectificada \(\max(0,\tanh(x))\) no
dis_relu Rectificada \(\max(0,x-\delta)\) no
lisht Rectificada \(x\tanh(x)\) no
Familia exponencial / ELU (12)
elu Exponencial \(x\) si \(x\ge0\) si no \(\alpha(e^x{-}1)\) no
selu Exponencial \(\lambda\,\text{ELU}_{\alpha'}(x)\) no
celu Exponencial \(x\) si \(x\ge0\) si no \(\alpha(e^{x/\alpha}{-}1)\) no
pelu Exponencial \(\tfrac{\alpha}{\beta}x\) / \(\alpha(e^{x/\beta}{-}1)\)
mpelu Exponencial ELU + \(\alpha,\beta\) aprendibles
felu / eelu / pdelu / preu Exponencial variantes ELU c/ params aprendibles
softexp Exponencial interpolación exp/lineal/log
elish / hardelish Exponencial Swish \(\cup\) ramas ELU con compuerta no
Aprendibles / Adaptativas (4)
swish_trainable Aprendible \(x\,\sigma(\beta x)\), \(\beta\) entrenable
maxout Aprendible \(\max_{i}(W_i x+b_i)\)
raf Aprendible \(P(x)/Q(x)\) Padé\((5,4)\), versión A
Variantes FFN con compuerta (3)
swiglu Compuerta \(\text{SiLU}(xW_g)\odot(xW_u)\,W_d\)
geglu Compuerta \(\text{GELU}(xW_g)\odot(xW_u)\,W_d\)
reglu Compuerta \(\text{ReLU}(xW_g)\odot(xW_u)\,W_d\)

Variantes de Embedding

La Tabla 10 cataloga los cuatro métodos de embedding soportados por el código base: dos esquemas de codificación posicional y dos optimizaciones estructurales de embedding.

Variantes de embedding. \(V\) = tamaño de vocabulario, \(H\) = tamaño oculto, \(R\) = dimensión intermedia factorizada.
Método Descripción Referencia
Método Descripción Referencia
continúa en la página siguiente
RoPE Embedding Posicional Rotatorio; aplica rotación basada en frecuencia a vectores de consulta y clave, codificando la posición relativa mediante geometría de producto interno
HoPE Codificación Posicional Rotatoria Hiperbólica; rotación inspirada en Lorentz usando funciones hiperbólicas; impone decaimiento monótono de atención con la distancia; RoPE es un caso especial
Embeddings Factorizados Descompone la matriz de embedding \(V \times H\) en factores \(V \times R\) y \(R \times H\); reduce parámetros de \(\mathcal{O}(VH)\) a \(\mathcal{O}(V R + R H)\); controlado por factorized_embedding_dim (interno)
Convolución de Embedding Conv1d depthwise aplicada sobre el flujo de embeddings antes del primer bloque transformer; proporciona filtrado ligero de contexto local; controlado por embedding_conv_kernel (interno)

Familias de Optimizadores

La Evolución de la Optimización en Redes Neuronales

El estudio de optimizadores enmarca la optimización de transformadores como una respuesta a tres presiones estructurales: paisajes de pérdida no convexos, heterogeneidad severa de curvatura entre bloques de parámetros y el costo de memoria de almacenar el estado del optimizador para modelos muy grandes. El informe sostiene que el campo se ha diversificado en varias trayectorias: líneas base adaptativas de primer orden, métodos de reducción de varianza, métodos eficientes en memoria, precondicionadores estructurados de segundo orden, métodos sin programación de tasa de aprendizaje y actualizaciones orientadas a ortogonalidad.

Línea Base Estándar y Optimizadores Adaptativos

SGD con Momentum.

La actualización clásica acumula un búfer de momentum y luego aplica una tasa de aprendizaje fija. En cada iteración \(t\), el algoritmo mantiene un promedio móvil exponencial \(m_t\) de los gradientes pasados: \[\begin{aligned} m_t &= \beta m_{t-1} + g_t \\ \theta_{t+1} &= \theta_t - \eta m_t \end{aligned}\] donde \(g_t = \nabla f(\theta_t)\), \(\beta \in [0.8, 0.99]\) controla la decadencia del momentum y \(\eta\) es la tasa de aprendizaje fija. El término de momentum actúa como velocidad: acelera el movimiento en direcciones consistentes mientras amortigua oscilaciones en direcciones variables. Sus fortalezas son la baja sobrecarga de memoria (un único búfer de momentum por parámetro) y una fuerte generalización cuando se ajusta cuidadosamente. Su principal debilidad en cargas de trabajo de transformadores es la escasa robustez frente a la heterogeneidad de curvatura (diferentes espectros del Hessiano entre grupos de parámetros) y una fuerte dependencia de las programaciones de tasa de aprendizaje.

Parámetros iniciales \(\theta_0\), tasa de aprendizaje \(\eta\), coeficiente de momentum \(\beta\), decadencia de peso \(\lambda\) Parámetros actualizados \(\theta_T\) Inicializar: búfer de momentum \(m \gets 0\) Calcular gradiente: \(g_t \gets \nabla f(\theta_t)\) \(g_t \gets g_t + \lambda \theta_t\) Actualizar momentum: \(m \gets \beta \cdot m + g_t\) Actualizar parámetros: \(\theta_{t+1} \gets \theta_t - \eta \cdot m\) \(\theta_T\)

Adam y AdamW.

Adam rastrea promedios móviles exponenciales tanto del primer momento (media) como del segundo momento (varianza no centrada) para lograr tasas de aprendizaje adaptativas elemento a elemento. La regla de actualización es: \[\begin{aligned} m_t &= \beta_1 m_{t-1} + (1-\beta_1) g_t \\ v_t &= \beta_2 v_{t-1} + (1-\beta_2) g_t^2 \\ \hat{m}_t &= \frac{m_t}{1-\beta_1^t}, \quad \hat{v}_t = \frac{v_t}{1-\beta_2^t} \quad \text{(corrección de sesgo)} \\ \theta_{t+1} &= \theta_t - \eta \left(\frac{\hat{m}_t}{\sqrt{\hat{v}_t}+\epsilon}\right) \end{aligned}\] AdamW introduce una modificación crucial: la decadencia de peso se aplica directamente a los parámetros (desacoplada de los gradientes): \(\theta_t \gets \theta_t(1-\eta\lambda)\) en lugar de añadir \(\lambda\theta_t\) al gradiente. Este desacoplamiento evita que el escalado adaptativo interfiera con la fuerza de la regularización. El informe trata a AdamW como la línea base práctica para el ajuste fino de transformadores porque converge rápidamente y es relativamente tolerante a la variación de hiperparámetros. La desventaja es el costo de memoria: ambos tensores de momento deben almacenarse para cada parámetro, duplicando la memoria del estado del optimizador en relación con SGD.

Parámetros iniciales \(\theta_0\), tasa de aprendizaje \(\eta\), tasas de decadencia exponencial \(\beta_1, \beta_2 \in [0,1)\) Constante de momentum \(\epsilon\), decadencia de peso \(\lambda\) Parámetros actualizados \(\theta_T\) Inicializar: primer momento \(m \gets 0\), segundo momento \(v \gets 0\), contador de pasos \(t \gets 0\) Calcular gradiente: \(g_t \gets \nabla f(\theta_{t-1})\) Decadencia de peso (desacoplada): \(\theta_{t-1} \gets \theta_{t-1}(1 - \eta\lambda)\) Actualizar momentos: \(m \gets \beta_1 m + (1-\beta_1) g_t\) \(v \gets \beta_2 v + (1-\beta_2) g_t^2\) Corrección de sesgo: \(\hat{m} \gets m / (1 - \beta_1^t)\), \(\hat{v} \gets v / (1 - \beta_2^t)\) Actualizar parámetros: \(\theta_t \gets \theta_{t-1} - \eta (\hat{m} / (\sqrt{\hat{v}} + \epsilon))\) \(\theta_T\)

RAdam (Adam Rectificado).

RAdam aborda la inestabilidad de Adam en el entrenamiento temprano rectificando dinámicamente la tasa de aprendizaje adaptativa. La observación clave es que el segundo momento \(v_t\) tiene una varianza muy alta en los primeros pasos, causando un escalado adaptativo poco fiable. RAdam calcula la longitud efectiva de la ventana de promedio móvil simple (SMA): \[\rho_t = \rho_{\infty} - \frac{2t\beta_2^t}{1-\beta_2^t}, \quad \text{donde} \quad \rho_{\infty} = \frac{2}{1-\beta_2}-1\] Cuando \(\rho_t > 4\) (suficientes muestras para la estimación de varianza), RAdam aplica el escalado adaptativo con un término de rectificación: \[r_t = \sqrt{\frac{(\rho_t-4)(\rho_t-2)\rho_{\infty}}{(\rho_{\infty}-4)(\rho_{\infty}-2)\rho_t}}, \quad \theta_{t+1} = \theta_t - \eta r_t \frac{\hat{m}_t}{\sqrt{\hat{v}_t}+\epsilon}\] Cuando \(\rho_t \leq 4\), RAdam retrocede a SGD con momentum: \(\theta_{t+1} = \theta_t - \eta\hat{m}_t\). Esta transición gradual elimina la necesidad de programaciones manuales de calentamiento de la tasa de aprendizaje y mejora la robustez.

Parámetros iniciales \(\theta_0\), tasa de aprendizaje \(\eta\), \(\beta_1, \beta_2\), decadencia de peso \(\lambda\) Parámetros actualizados \(\theta_T\) Inicializar: \(m \gets 0\), \(v \gets 0\), \(t \gets 0\) Calcular: \(\rho_\infty \gets 2/(1-\beta_2) - 1\) \(g_t \gets \nabla f(\theta_{t-1})\) \(\theta_{t-1} \gets \theta_{t-1}(1 - \eta\lambda)\) \(m \gets \beta_1 m + (1-\beta_1) g_t\) \(v \gets \beta_2 v + (1-\beta_2) g_t^2\) \(\hat{m} \gets m/(1-\beta_1^t)\), \(\hat{v} \gets v/(1-\beta_2^t)\) \(\rho_t \gets \rho_\infty - 2t \beta_2^t / (1 - \beta_2^t)\) \(r_t \gets \sqrt{((\rho_t-4)(\rho_t-2)\rho_\infty) / ((\rho_\infty-4)(\rho_\infty-2)\rho_t)}\) \(\theta_t \gets \theta_{t-1} - \eta r_t \hat{m} / (\sqrt{\hat{v}} + \epsilon)\) \(\theta_t \gets \theta_{t-1} - \eta \hat{m}\) \(\theta_T\)

Momentum Avanzado y Reducción de Varianza (2024–2025)

Adan (Momentum Nesterov Adaptativo).

Adan reformula la aceleración de Nesterov sin el cálculo de gradiente adicional requerido por el SGD Nesterov clásico. El algoritmo mantiene tres búferes de momentum: \[\begin{aligned} m_t &= (1-\beta_1)m_{t-1} + \beta_1 g_t \quad\text{(primer momento)} \\ v_t &= (1-\beta_2)v_{t-1} + \beta_2(g_t - g_{t-1}) \quad\text{(velocidad/diferencia de gradientes)} \\ n_t &= (1-\beta_3)n_{t-1} + \beta_3[g_t + (1-\beta_1)(g_t-g_{t-1})]^2 \quad\text{(segundo momento Nesterov)} \end{aligned}\] El término de Estimación de Momentum Nesterov (NME) \(\bar{g}_t = g_t + (1-\beta_1)(g_t-g_{t-1})\) estima el gradiente en una posición futura sin evaluarlo. La actualización combina el momentum con la velocidad: \[\bar{m}_t = m_t + (1-\beta_1)v_t, \quad \theta_{t+1} = \theta_t - \eta\frac{\bar{m}_t}{\sqrt{n_t}+\epsilon}\] Adan logra una convergencia rápida en diversas arquitecturas (CNN, GAN, Transformadores) mediante esta aceleración. El costo es mantener tres búferes similares al momentum, aumentando la sobrecarga de memoria en relación con Adam.

Parámetros iniciales \(\theta_0\), tasa de aprendizaje \(\eta\), \(\beta_1, \beta_2, \beta_3 \in (0,1)\) Parámetros actualizados \(\theta_T\) Inicializar: \(m \gets 0\), \(v \gets 0\), \(n \gets 0\), \(g_{-1} \gets 0\) (gradiente anterior) \(g_t \gets \nabla f(\theta_{t-1})\) \(m \gets (1-\beta_1) m + \beta_1 g_t\) \(\Delta g_t \gets g_t - g_{t-1}\) \(v \gets (1-\beta_2) v + \beta_2 \Delta g_t\) Estimación Nesterov: \(\bar{g}_t \gets g_t + (1-\beta_1) \Delta g_t\) \(n \gets (1-\beta_3) n + \beta_3 \bar{g}_t^2\) Momentum combinado: \(\bar{m} \gets m + (1-\beta_1) v\) \(\theta_t \gets \theta_{t-1} - \eta (\bar{m} / (\sqrt{n} + \epsilon))\) \(g_{t-1} \gets g_t\) \(\theta_T\)

ADOPT (Adam con Ajuste Óptimo Podado).

ADOPT corrige un problema teórico fundamental en Adam: el gradiente aparece tanto en la estimación del primer momento como en la del segundo momento, creando circularidad. ADOPT desacopla utilizando el segundo momento del paso anterior para el denominador: \[\begin{aligned} v_t &= \beta_2 v_{t-1} + (1-\beta_2)g_t^2 \\ m_t &= \beta_1 m_{t-1} + (1-\beta_1)\frac{g_t}{\sqrt{v_{t-1}}+\epsilon} \quad\text{(usa $v_{t-1}$, no $v_t$)} \\ \theta_{t+1} &= \theta_t - \eta m_t \end{aligned}\] Este simple reordenamiento logra la tasa de convergencia óptima \(O(1/\sqrt{T})\) con cualquier elección de \(\beta_2 \in (0,1)\), sin suposiciones de ruido acotado. La consecuencia práctica es que ADOPT es un reemplazo directo de Adam con garantías teóricas más sólidas y un rendimiento empírico comparable o superior en los dominios de visión, PLN, RL y modelado generativo.

Parámetros iniciales \(\theta_0\), tasa de aprendizaje \(\eta\), \(\beta_1, \beta_2\), tolerancia \(\epsilon\) Parámetros actualizados \(\theta_T\) Inicializar: \(m \gets 0\), \(v \gets 0\) \(g_t \gets \nabla f(\theta_{t-1})\) \(\theta_{t-1} \gets \theta_{t-1}(1 - \eta\lambda)\) Usar segundo momento anterior: \(\text{denom} \gets \sqrt{\max(v, \epsilon)} + \epsilon\) Actualizar primer momento usando varianza anterior: \(m \gets \beta_1 m + (1-\beta_1)(g_t / \text{denom})\) Actualizar segundo momento con gradiente actual: \(v \gets \beta_2 v + (1-\beta_2) g_t^2\) \(\theta_t \gets \theta_{t-1} - \eta m\) \(\theta_T\)

AdEMAMix (Mezcla de Promedios Móviles Exponenciales).

AdEMAMix reemplaza el EMA único de gradientes de Adam por una mezcla de dos EMA: uno de decadencia rápida y otro de decadencia lenta. Esto aborda la observación de que los gradientes siguen siendo informativos durante decenas de miles de pasos, no solo cientos: \[\begin{aligned} m_{1,t} &= \beta_1 m_{1,t-1} + (1-\beta_1)g_t \quad\text{(EMA rápido, $\beta_1 \approx 0.9$)} \\ m_{2,t} &= \beta_3 m_{2,t-1} + (1-\beta_3)g_t \quad\text{(EMA lento, $\beta_3 \approx 0.9999$)} \\ v_t &= \beta_2 v_{t-1} + (1-\beta_2)g_t^2 \\ m_t &= m_{1,t} + \alpha_t m_{2,t} \quad\text{(mezcla con peso programado $\alpha_t$)} \\ \theta_{t+1} &= \theta_t - \eta\frac{m_t}{\sqrt{v_t}+\epsilon} \end{aligned}\] El peso de la mezcla \(\alpha_t\) típicamente aumenta durante el entrenamiento, permitiendo que el EMA rápido proporcione adaptación inmediata mientras que el EMA lento acumula correlaciones de gradiente a largo plazo. Empíricamente, un modelo de 1.3B parámetros en 101B tokens alcanza una pérdida similar a AdamW en 197B tokens (ganancia del 95% en eficiencia de datos), lo que sugiere que el EMA lento reduce significativamente el olvido del modelo.

Parámetros iniciales \(\theta_0\), tasa de aprendizaje \(\eta\), \(\beta_1\) (rápido), \(\beta_3\) (lento), \(\beta_2\) (segundo momento) Peso de mezcla \(\alpha_t\) (típicamente creciente), tolerancia \(\epsilon\) Parámetros actualizados \(\theta_T\) Inicializar: \(m_1 \gets 0\) (EMA rápido), \(m_2 \gets 0\) (EMA lento), \(v \gets 0\) \(g_t \gets \nabla f(\theta_{t-1})\) \(\theta_{t-1} \gets \theta_{t-1}(1 - \eta\lambda)\) \(m_1 \gets \beta_1 m_1 + (1-\beta_1) g_t\) \(m_2 \gets \beta_3 m_2 + (1-\beta_3) g_t\) \(v \gets \beta_2 v + (1-\beta_2) g_t^2\) \(m_t \gets m_1 + \alpha_t m_2\) \(\theta_t \gets \theta_{t-1} - \eta (m_t / (\sqrt{v} + \epsilon))\) \(\theta_T\)

MARS (Haciendo Brillar las Tasas de Aprendizaje Adaptativas).

MARS combina métodos de gradiente precondicionado (ej., AdamW) con reducción de varianza mediante momentum recursivo estocástico escalado. La innovación central es una estimación del gradiente con varianza reducida: \[\begin{aligned} c_t &= g_t + \gamma(c_{t-1} - g_{t-1}) \quad\text{(estimación recursiva tipo SVRG)} \\ m_t &= \beta_1 m_{t-1} + (1-\beta_1)c_t \\ v_t &= \beta_2 v_{t-1} + (1-\beta_2)c_t^2 \\ \theta_{t+1} &= \theta_t - \eta\frac{m_t}{\sqrt{v_t}+\epsilon} \end{aligned}\] donde \(\gamma \in [0.01, 0.1]\) controla cuánta información de gradiente histórico se retiene. El gradiente con varianza reducida \(c_t\) actúa como un filtro de ruido implícito, amplificando las direcciones de señal consistentes y amortiguando el ruido contradictorio. MARS-AdamW supera consistentemente a AdamW por márgenes significativos en el preentrenamiento de GPT-2, lo que sugiere que la reducción de varianza mejora sustancialmente la convergencia en el entrenamiento estocástico por mini-lotes.

Parámetros iniciales \(\theta_0\), tasa de aprendizaje \(\eta\), \(\beta_1, \beta_2\), decadencia de peso \(\lambda\) Coeficiente de reducción de varianza \(\gamma \in [0.01, 0.1]\) Parámetros actualizados \(\theta_T\) Inicializar: \(m \gets 0\), \(v \gets 0\), \(c \gets 0\) (gradiente con varianza reducida), \(g_{-1} \gets 0\) \(g_t \gets \nabla f(\theta_{t-1})\) Reducción de varianza: \(c \gets g_t + \gamma(c - g_{t-1})\) \(m \gets \beta_1 m + (1-\beta_1) c\) \(v \gets \beta_2 v + (1-\beta_2) c^2\) \(\theta_{t-1} \gets \theta_{t-1}(1 - \eta\lambda)\) \(\theta_t \gets \theta_{t-1} - \eta (m / (\sqrt{v} + \epsilon))\) \(g_{t-1} \gets g_t\) \(\theta_T\)

Optimizadores Cautelosos (Cautious AdamW, Cautious Lion).

El marco Cauteloso aplica una modificación de una línea a cualquier optimizador basado en momentum: enmascarar la actualización de modo que solo se apliquen las dimensiones donde el momentum y la dirección del gradiente coinciden: \[\begin{aligned} \text{mask}_i &= \begin{cases} 1 & \text{si } m_t[i] \cdot g_t[i] > 0 \quad\text{(acuerdo)} \\ 0 & \text{en caso contrario} \end{cases} \\ u_t &= \left(\frac{m_t}{\sqrt{v_t}+\epsilon}\right) \odot \text{mask} \quad\text{(enmascaramiento elemento a elemento)} \\ \theta_{t+1} &= \theta_t - \eta u_t \end{aligned}\] La intuición: el momentum \(m_t\) estima la dirección del gradiente a partir del historial; el gradiente actual \(g_t\) es la señal instantánea. Cuando ambos coinciden, el optimizador está seguro y debe actualizar agresivamente. Cuando discrepan, el optimizador está en conflicto—la tendencia histórica apunta hacia una región que pudo haber sido buena antes, pero la evidencia actual la contradice. Al enmascarar las dimensiones en conflicto, Cauteloso se vuelve más conservador y evita pasos corruptos. Empíricamente, este simple enmascaramiento logra hasta 1.47\(\times\) de aceleración en el preentrenamiento de Llama y MAE mientras preserva las garantías de convergencia.

Parámetros iniciales \(\theta_0\), tasa de aprendizaje \(\eta\), \(\beta_1, \beta_2\), decadencia de peso \(\lambda\) Parámetros actualizados \(\theta_T\) Inicializar: \(m \gets 0\), \(v \gets 0\) \(g_t \gets \nabla f(\theta_{t-1})\) \(m \gets \beta_1 m + (1-\beta_1) g_t\) \(v \gets \beta_2 v + (1-\beta_2) g_t^2\) Máscara de consenso: \(\text{mask}_i \gets 1\) si \(m[i] \cdot g_t[i] > 0\), si no \(0\) Actualización base Adam: \(u \gets m / (\sqrt{v} + \epsilon)\) Aplicar máscara: \(u_{\text{masked}} \gets u \odot \text{mask}\) \(\theta_{t-1} \gets \theta_{t-1}(1 - \eta\lambda)\) \(\theta_t \gets \theta_{t-1} - \eta u_{\text{masked}}\) \(\theta_T\)

Optimizadores de Lote Grande, Eficientes en Memoria y Sin Tasa de Aprendizaje

LAMB (Layer-wise Adaptive Moments optimizer for Batch training).

LAMB extiende Adam con escalado de tasa adaptativo por capas (inspirado en LARS), permitiendo entrenamiento estable con tamaños de lote extremos (e.g., 64K en BERT): \[\begin{aligned} m_t^L &= \beta_1 m_{t-1}^L + (1-\beta_1)g_t^L \quad\text{(momento de primer orden por capas)} \\ v_t^L &= \beta_2 v_{t-1}^L + (1-\beta_2)(g_t^L)^2 \\ u_{\text{adam}}^L &= \frac{m_t^L}{\sqrt{v_t^L}+\epsilon} + \lambda\theta_{t-1}^L \quad\text{(paso adaptativo base con decaimiento)} \\ \phi^L &= \frac{\|\theta_{t-1}^L\|_2}{\|u_{\text{adam}}^L\|_2} \quad\text{(razón de confianza: normalización por capas)} \\ \theta_t^L &= \theta_{t-1}^L - \eta \cdot \phi^L \cdot u_{\text{adam}}^L \end{aligned}\] La razón de confianza \(\phi^L = \|\theta^L\|_2 / \|u_{\text{adam}}^L\|_2\) normaliza el paso de actualización efectivo en relación con la magnitud de los pesos. En lotes muy grandes, el ruido estocástico del gradiente puede superar a la señal, desestabilizando las tasas de aprendizaje por capas. Al escalar las actualizaciones proporcionalmente a las normas de los pesos, LAMB asegura cambios relativos en lugar de absolutos, evitando que actualizaciones pequeñas y seguras en vectores grandes dominen. LAMB preserva los beneficios de generalización de lotes pequeños mientras permite entrenamiento eficiente con lotes grandes.

Parámetros iniciales \(\theta_0\), tasa de aprendizaje \(\eta\), \(\beta_1, \beta_2\), decaimiento de pesos \(\lambda\) Parámetros actualizados \(\theta_T\) Inicializar: Para cada capa \(L\): \(m^L \gets 0\), \(v^L \gets 0\) \(g_t^L \gets \nabla f(\theta_t^L)\) \(m^L \gets \beta_1 m^L + (1-\beta_1) g_t^L\) \(v^L \gets \beta_2 v^L + (1-\beta_2) (g_t^L)^2\) Adam base: \(u_{\text{adam}}^L \gets m^L / (\sqrt{v^L} + \epsilon)\) \(u_{\text{adam}}^L \gets u_{\text{adam}}^L + \lambda \theta_{t-1}^L\) Razón de confianza: \(\phi^L \gets \|\theta_{t-1}^L\|_2 / \|u_{\text{adam}}^L\|_2\) si ambos son no nulos, sino \(1\) \(\theta_t^L \gets \theta_{t-1}^L - \eta \phi^L u_{\text{adam}}^L\) \(\theta_T\)

Schedule-Free AdamW.

Los métodos Schedule-Free eliminan el diseño explícito de programación de la receta de optimización. El algoritmo mantiene dos flujos de parámetros: \(z_t\) (exploración) y \(x_t\) (promedio suavizado): \[\begin{aligned} v_t &= \beta_2 v_{t-1} + (1-\beta_2)g_t^2 \quad\text{(varianza)} \\ z_t &= z_{t-1}(1-\eta\lambda) - \eta\frac{g_t}{\sqrt{v_t}+\epsilon} \quad\text{(paso adaptativo con decaimiento)} \\ c_t &= \frac{1}{t+1} \quad\text{(coeficiente de promediado, decrece con el tiempo)} \\ x_t &= (1-c_t)x_{t-1} + c_t z_t \quad\text{(promediado de iteraciones)} \\ y_t &= (1-\beta)z_t + \beta x_t \quad\text{(interpolación para el punto de evaluación)} \end{aligned}\] El coeficiente de promediado \(c_t = 1/(t+1)\) implementa una programación de tasa de aprendizaje implícita sin especificar explícitamente el número total de pasos \(T\). Este marco unifica la programación y el promediado de iteraciones: el algoritmo explora mediante \(z_t\) mientras acumula dirección estable mediante \(x_t\). El punto de evaluación \(y_t\) (usado para el cómputo del gradiente) interpola entre exploración y estabilidad. Schedule-Free logra convergencia de última generación en optimización convexa, aprendizaje profundo a gran escala y aprendizaje por refuerzo, eliminando un hiperparámetro importante.

Parámetros iniciales \(\theta_0\), tasa de aprendizaje \(\eta\) (fija), \(\beta_1, \beta_2\), decaimiento de pesos \(\lambda\) Parámetros actualizados \(\theta_T\) o promediado \(x_T\) Inicializar: \(z \gets \theta_0\) (exploración), \(x \gets \theta_0\) (promedio), \(v \gets 0\), \(t \gets 0\) \(g_t \gets \nabla f(y_{t-1})\) (gradiente en el punto de interpolación) \(v \gets \beta_2 v + (1-\beta_2) g_t^2\) Decaimiento de pesos sobre \(z\): \(z \gets z(1 - \eta\lambda)\) \(z \gets z - \eta g_t / (\sqrt{v} + \epsilon)\) \(c_t \gets 1 / (t+1)\) \(x \gets (1-c_t) x + c_t z\) \(y_t \gets (1-\beta_1) z + \beta_1 x\) \(x_T\) o \(y_T\)

Adafactor.

Adafactor reduce la memoria del optimizador factorizando estadísticas de segundo momento para parámetros con forma de matriz, almacenando solo acumuladores de filas y columnas en lugar de estados de varianza densos. Para una matriz de gradiente \(G_t \in \mathbb{R}^{m \times n}\): \[\begin{aligned} R_t &= \beta_2 R_{t-1} + (1-\beta_2)(G_t^2) \mathbf{1}_n^T \quad\text{(varianza por filas)} \\ C_t &= \beta_2 C_{t-1} + (1-\beta_2) \mathbf{1}_m^\top (G_t^2) \quad\text{(varianza por columnas)} \\ \hat{V}_t &= \frac{R_t C_t}{\mathbf{1}_n^\top R_t} \quad\text{(varianza reconstruida mediante producto exterior)} \\ U_t &= \frac{G_t}{\sqrt{\hat{V}_t}+\epsilon} \quad\text{(paso adaptativo normalizado)} \\ \hat{U}_t &= \frac{U_t}{\max(1, \text{RMS}(U_t))} \quad\text{(recorte de estabilidad)} \end{aligned}\] En lugar de almacenar \(m \times n\) valores de segundo momento, Adafactor almacena solo \(m + n\) acumuladores, reduciendo la memoria de \(O(n_{\text{params}})\) a \(O(\sqrt{n_{\text{params}}})\). Esto es más atractivo cuando la VRAM está dominada por el estado del optimizador en lugar de las activaciones. La contrapartida es una expresividad de optimización reducida y posible inestabilidad en algunas tareas.

Matriz de gradiente \(G_t \in \mathbb{R}^{m \times n}\), tasa de aprendizaje \(\eta\), \(\beta_2 \approx 0.999\) Parámetros actualizados Inicializar: Acumuladores de fila \(R \gets \epsilon \mathbf{1}^T_m\), Columna \(C \gets \epsilon \mathbf{1}_n\) \(G_t \gets \nabla f(\theta_t)\) (gradiente matricial) \(R \gets \beta_2 R + (1-\beta_2) (G_t^2) \mathbf{1}_n^T\) \(C \gets \beta_2 C + (1-\beta_2) \mathbf{1}_m^\top (G_t^2)\) Varianza reconstruida: \(\hat{V} \gets (R \cdot C) / (\mathbf{1}_n^\top R)\) Paso adaptativo normalizado: \(U_t \gets G_t / (\sqrt{\hat{V}} + \epsilon)\) Recorte RMS por fila: \(\hat{U}_t \gets U_t / \max(1, \text{RMS}(U_t))\) \(\theta_{t+1} \gets \theta_t - \eta \hat{U}_t\)

GaLore (Gradient Low-Rank Projection).

GaLore proyecta gradientes 2D en un subespacio de bajo rango antes de la optimización, reduciendo la memoria del estado del optimizador mientras mantiene el escalado adaptativo del paso. Para una matriz de parámetros 2D \(W \in \mathbb{R}^{m \times n}\): \[\begin{aligned} U, S, V &= \text{SVD}(G_t) \quad\text{(calcular descomposición singular)} \\ P &\in \mathbb{R}^{n \times r} \quad\text{o} \quad P^\top \in \mathbb{R}^{r \times m} \quad\text{(seleccionar los $r$ vectores singulares superiores)} \\ G_{\text{low}} &= P^\top G_t \quad\text{(proyectar al espacio de bajo rango)} \\ \Delta_{\text{low}} &= \text{Adam}(G_{\text{low}}) \quad\text{(optimizar en el espacio comprimido)} \\ \Delta &= P \Delta_{\text{low}} \quad\text{(reconstruir en el espacio original)} \end{aligned}\] Al proyectar en un subespacio de rango \(r\) (típicamente \(r \ll \min(m,n)\)), el estado del optimizador se reduce de \(O(mn)\) a \(O(r(m+n))\) para parámetros 2D. Este enfoque complementario de ahorro de memoria es especialmente relevante cuando el modelo es demasiado grande para el estado completo del optimizador. GaLore funciona sinérgicamente con otras técnicas y ha mostrado resultados empíricos sólidos en modelos de miles de millones de parámetros.

Matriz de parámetros 2D \(W \in \mathbb{R}^{m \times n}\), tasa de aprendizaje \(\eta\), rango \(r \ll \min(m,n)\) Parámetros actualizados Inicializar: Estado de Adam en el espacio de bajo rango (si es variante de rango 2) \(G_t \gets \nabla f(W_t)\) \(U_t, S_t, V_t^\top \gets \text{SVD}(G_t)\) (completa o delgada) Seleccionar proyección: \(P \gets U_t[:, :r]\) o \(P \gets V_t[:, :r]\) Proyectar gradiente: \(G_{\text{low}} \gets P^\top G_t\) (o \(G_t P^\top\) para proyección derecha) Ejecutar Adam en bajo rango: \(\Delta_{\text{low}} \gets \text{Adam}(G_{\text{low}})\) Reconstruir en espacio original: \(\Delta \gets P \Delta_{\text{low}}\) (o \(\Delta_{\text{low}} P^\top\)) \(W_t \gets W_t - \eta \Delta\)

APOLLO, APOLLO-Mini, y Q-APOLLO.

La familia APOLLO parte de la observación de que el denominador elemento a elemento de AdamW puede transformarse en una actualización estructurada de la tasa de aprendizaje. En lugar de almacenar momentos densos para cada entrada de parámetro, APOLLO proyecta un gradiente matricial \(G_t \in \mathbb{R}^{m \times n}\) en un subespacio aleatorio compacto y rastrea momentos estilo Adam allí: \[\begin{aligned} R_t &= P_t G_t \quad\text{o}\quad R_t = G_t P_t^\top \\ M_t^R &= \beta_1 M_{t-1}^R + (1-\beta_1)R_t \\ V_t^R &= \beta_2 V_{t-1}^R + (1-\beta_2)R_t^2 \\ \widetilde{R}_t &= \frac{M_t^R}{\sqrt{V_t^R}+\epsilon} \end{aligned}\] El estado proyectado no se expande de vuelta a una actualización densa de bajo rango como en los métodos basados en SVD. En su lugar, APOLLO estima un tensor de escalado estructurado \(S_t\) en el espacio original. En la variante estándar de APOLLO, ese escalado es por canales: cada fila o canal recibe su propia razón de norma. En APOLLO-Mini, el escalado se reduce a un único escalar por tensor, correspondiente al caso extremo de rango 1 descrito en el artículo. La actualización de parámetros resultante es, por tanto, similar a Adam en adaptación pero mucho más cercana a SGD en costo de estado: \[W_t \gets (1-\eta\lambda)W_{t-1} - \eta\,\alpha\,(G_t \odot S_t)\] donde \(\alpha\) es el factor de escala adicional usado para estabilizar variantes altamente comprimidas.

La contribución práctica del artículo es doble. Primero, APOLLO reemplaza el costoso SVD repetido con proyección aleatoria gaussiana actualizada periódicamente, de modo que la carga computacional es multiplicación de matrices ordinaria en lugar de descomposición espectral. Segundo, el optimizador es inusualmente tolerante a la compresión extrema: incluso APOLLO-Mini, que mantiene solo estado auxiliar de rango 1, sigue siendo competitivo o mejor que AdamW en los experimentos de preentrenamiento reportados, mientras se acerca al costo de memoria de SGD.

Matriz de pesos \(W \in \mathbb{R}^{m \times n}\) con \(m \le n\), tasa de aprendizaje \(\eta\), factor de escala \(\alpha\), tasas de decaimiento \((\beta_1, \beta_2)\), decaimiento de pesos \(\lambda\), rango \(r\), intervalo de actualización de proyección \(T\) Parámetros actualizados \(W_T\) Inicializar momentos proyectados: \(M^R \gets 0\), \(V^R \gets 0\), paso \(t \gets 0\) Calcular gradiente: \(G_t \gets \nabla_W \phi(W_t)\) Muestrear proyector gaussiano \(P_t \sim \mathcal{N}(0, 1/r)\) con una semilla nueva Proyectar gradiente: \(R_t \gets P_t G_t\) Actualizar momentos proyectados AdamW: \(M_t^R, V_t^R \gets \text{AdamWState}(R_t; \beta_1, \beta_2)\) Normalizar estado proyectado: \(\widetilde{R}_t \gets M_t^R / (\sqrt{V_t^R}+\epsilon)\) \(S_t \gets \operatorname{diag}(s_1^R, \ldots, s_m^R)\), donde \(s_i^R = \|\widetilde{R}_t[i,:]\|_2 / \|R_t[i,:]\|_2\) \(S_t \gets s_t^R\), donde \(s_t^R = \|\widetilde{R}_t\|_2 / \|R_t\|_2\) Actualizar pesos: \(W_t \gets (1-\eta\lambda)W_{t-1} - \eta\,\alpha\,(G_t \odot S_t)\) \(t \gets t+1\)

APOLLO-Mini.

APOLLO-Mini es el miembro de la familia optimizado para eficiencia de memoria extrema. El artículo lo motiva argumentando que, en un espacio compacto de rango 1, el escalado por canales se vuelve demasiado ruidoso, por lo que la actualización se simplifica aún más a un único escalar por tensor. La pérdida de granularidad se compensa parcialmente con el factor de escala explícito \(\alpha\) (el artículo discute valores como \(128\) en este régimen), proporcionando un punto útil en la frontera de Pareto de optimización: estado muy pequeño, sin sobrecarga de SVD, y aún un comportamiento sólido en preentrenamiento.

Q-APOLLO.

El artículo de APOLLO también enfatiza que la familia se combina naturalmente con cuantización para entrenamiento con memoria ultra-baja. Este repositorio convierte esa observación de sistemas en una variante concreta del optimizador, q_apollo. En la implementación, los momentos de primer y segundo orden de bajo rango de APOLLO se almacenan en forma cuantizada junto con escalas y desplazamientos por tensor, y se descuantizan solo cuando es necesario para el siguiente paso. Q-APOLLO preserva, por tanto, la lógica de gradiente proyectado de APOLLO mientras reduce la precisión del estado restante del optimizador, convirtiéndolo en el miembro más agresivo en ahorro de memoria de la pila local de optimizadores.

Anon (Adaptivity Non-restricted Optimizer with Novel convergence technique).

Anon introduce adaptividad ajustable continuamente mediante un único parámetro \(\gamma \in \mathbb{R}\), cerrando la brecha entre comportamientos tipo SGD (\(\gamma=0\)) y tipo Adam (\(\gamma=1\)), y extrapolando más allá de ambos. La innovación central es el mecanismo Incremental Delay Update (IDU), que permite convergencia estable a través de todo el espectro de adaptividad de valores reales:

\[\begin{aligned} m_t &= \beta_1 m_{t-1} + (1-\beta_1) g_t \quad\text{(momento de primer orden)}\\ v_t &= \beta_2 v_{t-1} + (1-\beta_2) g_t^2 \quad\text{(momento de segundo orden)}\\ \bar{v}_t &= \frac{v_t}{1-\beta_2^{\max(t,1)}} + \epsilon \quad\text{(momento de segundo orden con corrección de sesgo)}\\ \text{fixed\_lr}_k &= \begin{cases} \bar{v}_k^{-\gamma/2} & \text{si } k = 0 \\ \sqrt{2 / \left(\frac{1}{\text{fixed\_lr}_{k-1}^2} + \bar{v}_k^\gamma\right)} & \text{si } k > 0 \end{cases}\\ \theta_{t+1} &= \theta_t - \frac{\eta}{1-\beta_1^t} \cdot m_t \odot \text{fixed\_lr}_{\lfloor\log_2 t\rfloor} \end{aligned}\]

A diferencia de los optimizadores adaptativos estándar, IDU actualiza el precondicionador solo en potencias de dos (\(t = 2^k\)), acumulando estadísticas de gradiente entre actualizaciones y agregándolas recursivamente. Este acumulador suave y multiescala evita el seguimiento estricto del máximo de AMSGrad mientras estabiliza demostrablemente la convergencia para cualquier \(\gamma \in \mathbb{R}\). El parámetro \(\gamma\) controla directamente la adaptividad: \(\gamma > 1\) acelera la salida de puntos de silla (favorable para arquitecturas complejas), \(\gamma = 1\) recupera el comportamiento tipo Adam, \(\gamma = 0\) produce escalado tipo SGD, y \(\gamma < 0\) se sesga hacia mínimos más planos (beneficioso para arquitecturas clásicas como CNNs).

Anon mantiene tres buffers de estado (\(m\), \(v\), \(fixed\_lr\)) con costo \(O(n)\) por paso, situándolo en la misma clase de complejidad que AdamW pero con la flexibilidad adicional de adaptividad ajustable. La técnica IDU converge demostrablemente con regret \(O(\sqrt{T})\) para problemas convexos y \(O(\ln T / \sqrt{T})\) para entornos no convexos, igualando las garantías de los optimizadores adaptativos convencionales mientras soporta todo el rango de adaptividad de valores reales.

Parámetros iniciales \(\theta_0\), tasa de aprendizaje \(\eta\), \(\beta_1, \beta_2\), tolerancia \(\epsilon\), adaptividad \(\gamma \in \mathbb{R}\) Parámetros actualizados \(\theta_T\) Inicializar: \(m \gets 0\), \(v \gets 0\), \(fixed\_lr \gets 0\), paso \(t \gets 0\), contador IDU \(k \gets -1\) \(g_t \gets \nabla f(\theta_{t-1})\) \(m \gets \beta_1 m + (1-\beta_1) g_t\) \(v \gets \beta_2 v + (1-\beta_2) g_t^2\) \(k \gets k+1\) \(\bar{v} \gets v/(1 - \beta_2^{\max(t/2,1)}) + \epsilon\) fixed_lr \(\gets \bar{v}^{-\gamma/2}\) fixed_lr \(\gets \sqrt{2 / (1/\text{fixed\_lr}^2 + \bar{v}^\gamma)}\) \(v \gets 0\) \(\theta_t \gets \theta_{t-1} - \frac{\eta}{1-\beta_1^t} \cdot m \odot \text{fixed\_lr}\) \(\theta_T\)

Prodigy (Approximating the Distance Estimate).

Prodigy adapta la escala efectiva del paso mediante una estadística tipo distancia acumulativa, eliminando la necesidad de ajuste explícito de la tasa de aprendizaje. El algoritmo mantiene una estimación de distancia acumulativa: \[\begin{aligned} u_t &= \frac{g_t}{\sqrt{v_t}+\epsilon} \quad\text{(paso adaptativo no normalizado)} \\ s_t &= s_{t-1} + \langle u_t, \theta_t - \theta_0 \rangle \quad\text{(distancia signada acumulativa)} \\ d_t &= \max(d_{t-1}, d_0 + d_{\text{coef}} \cdot s_t) \quad\text{(estimación de distancia con cota inferior)} \\ \theta_{t+1} &= \theta_t - \eta \cdot d_t \cdot u_t \end{aligned}\] donde \(d_0\) es una cota inicial y \(d_{\text{coef}}\) controla qué tan agresivamente se adapta la estimación. La estimación de distancia \(d_t\) captura la magnitud combinada de gradientes pasados ponderada por el desplazamiento real de los parámetros, implementando una tasa de aprendizaje efectiva implícita. Este escalado consciente de la distancia logra convergencia robusta en distintas escalas de problemas y tamaños de lote sin requerir una programación de la tasa de aprendizaje. Prodigy reduce la sensibilidad a hiperparámetros estimando los tamaños de paso a partir de la geometría de optimización en lugar del conocimiento previo específico del problema.

Parámetros iniciales \(\theta_0\), tasa de aprendizaje \(\eta\), coeficiente \(d_{\text{coef}}\), distancia inicial \(d_0 > 0\) Parámetros actualizados \(\theta_T\) Inicializar: \(s \gets 0\) (distancia signada acumulativa), \(d \gets d_0\) \(g_t \gets \nabla f(\theta_{t-1})\) \(v_t \gets \beta_2 v_{t-1} + (1-\beta_2) g_t^2\) \(u_t \gets g_t / (\sqrt{v_t} + \epsilon)\) Actualizar distancia: \(s \gets s + \langle u_t, \theta_t - \theta_0 \rangle\) \(d \gets \max(d, d_0 + d_{\text{coef}} \cdot s)\) \(\theta_t \gets \theta_{t-1} - \eta \cdot d \cdot u_t\) \(\theta_T\)

Optimizadores de Segundo Orden, Geométricos y de Ortogonalidad

Parámetros iniciales \(\theta_0\), tasa de aprendizaje \(\eta\), intervalo de eigendescomposición \(K\) Parámetros actualizados \(\theta_T\) Inicializar: \(L \gets \epsilon I_m\), \(R \gets \epsilon I_n\) (matrices de Gram izquierda y derecha) \(G \gets \nabla f(\theta_{t-1})\) Actualizar matrices de Gram: \(L \gets L + G G^\top\), \(R \gets R + G^\top G\) \(Q_L, \Lambda_L \gets \text{eigh}(L)\) \(Q_R, \Lambda_R \gets \text{eigh}(R)\) \(L^{-1/4} \gets Q_L (\Lambda_L + \epsilon)^{-1/4} Q_L^\top\) \(R^{-1/4} \gets Q_R (\Lambda_R + \epsilon)^{-1/4} Q_R^\top\) \(\Delta \theta \gets L^{-1/4} G R^{-1/4}\) \(\theta_t \gets \theta_{t-1} - \eta \cdot \Delta \theta\) \(\theta_T\)

Shampoo (Precondicionamiento Matricial mediante Productos de Kronecker).

Shampoo es un método estructurado de segundo orden que calcula precondicionadores matriciales a partir de estadísticas de producto exterior con estructura de Kronecker. Para una matriz de parámetros 2D \(W \in \mathbb{R}^{m \times n}\): \[\begin{aligned} L_t &= L_{t-1} + G_t G_t^\top \quad\text{(matriz de Gram izquierda/filas, $m \times m$)} \\ R_t &= R_{t-1} + G_t^\top G_t \quad\text{(matriz de Gram derecha/columnas, $n \times n$)} \\ L_t^{-1/4} &= Q_L (\Lambda_L)^{-1/4} Q_L^\top \quad\text{(mediante eigendescomposición)} \\ R_t^{-1/4} &= Q_R (\Lambda_R)^{-1/4} Q_R^\top \\ \Delta W_t &= L_t^{-1/4} G_t R_t^{-1/4} \quad\text{(gradiente precondicionado)} \end{aligned}\] Shampoo aproxima el precondicionador de matriz completa de Adagrad \(H^{-1/2}\) (donde \(H\) es el Hessiano) utilizando estructura factorizada de Kronecker. En lugar de almacenar un precondicionador de \((mn) \times (mn)\), Shampoo mantiene dos matrices más pequeñas (\(m \times m\) y \(n \times n\)), capturando correlaciones entre parámetros dentro y entre grupos. El método ha demostrado ser efectivo a escala (sistemas de producción de Google) y es adecuado para arquitecturas transformer con estructura de alto rango. Las eigendescomposiciones se realizan periódicamente (e.g., cada \(K=10\) pasos) para amortizar el costo. Contrapartida: mayor cómputo por paso y eigendescomposición \(O(m^3 + n^3)\) periódica frente a mejor condicionamiento y convergencia acelerada.

SOAP (Shampoo with Adam in eigenbasis).

SOAP es una variante simplificada de Shampoo que desacopla el precondicionamiento del seguimiento de momento. En lugar de álgebra matricial compleja sobre gradientes precondicionados, SOAP ejecuta Adam estándar en la base de eigenvectores de los precondicionadores de Shampoo: \[\begin{aligned} L_t &= L_{t-1} + G_t G_t^\top, \quad R_t = R_{t-1} + G_t^\top G_t \quad\text{(acumulación de Gram)} \\ Q_L, \Lambda_L &= \text{eigh}(L_t), \quad Q_R, \Lambda_R = \text{eigh}(R_t) \quad\text{(eigendescomposición periódica)} \\ G_t^{\text{rot}} &= Q_L^\top G_t Q_R \quad\text{(rotar gradiente a la base de eigenvectores)} \\ m_t^{\text{rot}} &= \beta_1 m_{t-1}^{\text{rot}} + (1-\beta_1) G_t^{\text{rot}} \\ v_t^{\text{rot}} &= \beta_2 v_{t-1}^{\text{rot}} + (1-\beta_2)(G_t^{\text{rot}})^2 \quad\text{(Adam en el espacio rotado)} \\ U_t^{\text{rot}} &= \frac{m_t^{\text{rot}}}{\sqrt{v_t^{\text{rot}}}+\epsilon}, \quad U_t = Q_L U_t^{\text{rot}} Q_R^\top \quad\text{(rotar de vuelta)} \end{aligned}\] La idea clave: todo el seguimiento de momento ocurre en la base de eigenvectores bien condicionada, simplificando la estabilidad numérica y el análisis teórico. SOAP combina los beneficios de Shampoo (estructura de curvatura explícita) y Adam (mecánica de momento probada), siendo más limpio y a menudo más estable que Shampoo completo. Las eigendescomposiciones se recalculan cada \(K\) pasos, amortizando el costo.

Parámetros iniciales \(\theta_0\), tasa de aprendizaje \(\eta\), \(\beta_1, \beta_2\), intervalo de eigendescomposición \(K\) Parámetros actualizados \(\theta_T\) Inicializar: \(L \gets \epsilon I_m\), \(R \gets \epsilon I_n\), \(m \gets 0\), \(v \gets 0\) \(G \gets \nabla f(\theta_{t-1})\) Actualizar Gram: \(L \gets L + G G^\top\), \(R \gets R + G^\top G\) \(Q_L, \Lambda_L \gets \text{eigh}(L)\), \(Q_R, \Lambda_R \gets \text{eigh}(R)\) \(G^{\text{rot}} \gets Q_L^\top G Q_R\) \(m \gets \beta_1 m + (1-\beta_1) G^{\text{rot}}\) \(v \gets \beta_2 v + (1-\beta_2) (G^{\text{rot}})^2\) \(u \gets m / (\sqrt{v} + \epsilon)\) \(\Delta \theta \gets Q_L u Q_R^\top\) \(\theta_t \gets \theta_{t-1} - \eta \cdot \Delta \theta\) \(\theta_T\)

Lion (EvoLved Sign Momentum).

Lion logra un sobrecosto de memoria mínimo al usar actualizaciones basadas en signo en lugar de escalado adaptativo completo:\[\begin{aligned} c_t &= \beta_1 m_t + (1-\beta_1) g_t \quad\text{(entrada de momento)} \\ \theta_{t+1} &= \theta_t - \eta \left(\text{sign}(c_t) + \lambda\theta_t\right) \quad\text{(actualización con operador signo)} \\ m_{t+1} &= \beta_2 m_t + (1-\beta_2) g_t \quad\text{(acumulación de momento)} \end{aligned}\] Todas las operaciones de escalado elemento a elemento se reemplazan con sign(), que produce \(\{-1, 0, +1\}\). Esto reduce drásticamente la memoria en comparación con métodos tipo Adam: Lion almacena solo el buffer de momento, sin varianza de segundo momento. La contrapartida: las actualizaciones basadas en signo sacrifican la adaptación de tasa de aprendizaje elemento a elemento que hace efectivo a Adam. Lion se posiciona no como un optimizador universalmente superior sino como una alternativa especializada de baja memoria y alto rendimiento para escenarios donde la memoria de activaciones domina y se puede sacrificar algo de sofisticación del optimizador. Funciona bien en regímenes de lotes grandes y cuando el rendimiento del hardware es la restricción principal.

Parámetros iniciales \(\theta_0\), tasa de aprendizaje \(\eta\), \(\beta_1, \beta_2\), decaimiento de pesos \(\lambda\) Parámetros actualizados \(\theta_T\) Inicializar: \(m \gets 0\) (buffer de momento) \(g \gets \nabla f(\theta_{t-1})\) \(c \gets \beta_1 m + (1-\beta_1) g\) \(\theta_t \gets \theta_{t-1} - \eta (\text{sign}(c) + \lambda \theta_{t-1})\) \(m \gets \beta_2 m + (1-\beta_2) g\) \(\theta_T\)

Sophia (Second-Order Hessian Information with Optimized Approximation).

Sophia utiliza estimaciones diagonales del Hessiano para escalado consciente de la curvatura sin el costo de memoria y cómputo de los métodos densos de segundo orden.\[\begin{aligned} m_t &= \beta_1 m_{t-1} + (1-\beta_1) g_t \quad\text{(momento de primer orden)} \\ h_t &= \beta_2 h_{t-(k-1)} + (1-\beta_2) \hat{h}_t \quad\text{(Hessiano diagonal, actualizado cada $k$ pasos)} \\ \text{clip}(x, C) &= \min(\max(x, -C), C) \quad\text{(recorte elemento a elemento)} \\ \theta_{t+1} &= \theta_t - \eta \cdot \text{clip}\left(\frac{m_t}{\max(\gamma h_t, \epsilon)}, 1\right) \end{aligned}\] donde \(\hat{h}_t\) es una estimación diagonal (e.g., estimador de traza de Hutchinson) y \(\gamma\) es un factor de escala. El Hessiano diagonal \(h_t\) captura la curvatura local, permitiendo que el optimizador tome pasos más pequeños en direcciones pronunciadas y pasos más grandes en direcciones planas. La operación de recorte \(\text{clip}(\cdot, 1)\) evita que los pasos adaptativos exploten. Sophia pertenece a la familia de métodos conscientes de la curvatura que buscan mejor condicionamiento sin el costo \(O(n^2)\) o \(O(n^3)\) de los métodos completos de segundo orden. Funciona particularmente bien en escenarios de ajuste fino de segunda pasada.

Parámetros iniciales \(\theta_0\), tasa de aprendizaje \(\eta\), \(\beta_1, \beta_2\), frecuencia de actualización del Hessiano \(k\), umbral de recorte \(C\) Parámetros actualizados \(\theta_T\) Inicializar: \(m \gets 0\), \(h \gets \epsilon\) (estimación diagonal del Hessiano) \(g \gets \nabla f(\theta_{t-1})\) \(m \gets \beta_1 m + (1-\beta_1) g\) \(\hat{h} \gets \text{HutchinsonEstimate}(g)\) \(h \gets \beta_2 h + (1-\beta_2) \hat{h}\) \(u \gets \frac{m}{\max(\gamma h, \epsilon)}\) \(u \gets \text{clip}(u, C)\) \(\theta_t \gets \theta_{t-1} - \eta \cdot u\) \(\theta_T\)

Muon y Turbo-Muon (Optimizadores Basados en Ortogonalidad).

Muon y Turbo-Muon son optimizadores orientados a la ortogonalidad que reformulan la geometría de actualización utilizando iteraciones polinomiales de Newton-Schulz para ortogonalización. Para una matriz de parámetros 2D \(W\) con gradiente \(G_t\): \[\begin{aligned} X_0 &= \frac{G_t}{\|G_t\|_F + \epsilon} \quad\text{(gradiente normalizado)} \\ A_k &= X_k X_k^\top \quad\text{(Gramiana)} \\ B_k &= b A_k + c A_k^2 \quad\text{(paso polinomial, coeficientes $b, c$ de Newton-Schulz)} \\ X_{k+1} &= a X_k + B_k X_k \quad\text{(iteración $k=0,1,\ldots,4$)} \\ W_{t+1} &= W_t - \eta X_K \quad\text{(actualización con dirección ortogonalizada)} \end{aligned}\] Muon realiza 5 iteraciones de Newton-Schulz para producir una dirección aproximadamente ortogonal, asegurando que las actualizaciones respeten restricciones geométricas. Turbo-Muon añade un paso de precondicionamiento casi-ortogonal (AOL) antes de las iteraciones, reduciendo el número de pasos de ortogonalización requeridos a 4. La justificación: las actualizaciones ortogonales preservan las normas durante el entrenamiento, evitando la deriva de norma observada en métodos basados en momento. Estos optimizadores muestran potencial en entrenamiento a gran escala pero requieren kernels CUDA personalizados para eficiencia. Contrapartida: alto cómputo por paso (multiplicaciones de matrices e iteraciones polinomiales) frente a una geometría de actualización fundamentalmente mejor condicionada.

Parámetros iniciales \(\theta\) (matrices), tasa de aprendizaje \(\eta\), iteraciones Newton-Schulz \(K\) Parámetros actualizados \(\theta\) \(G \gets \nabla f(W)\) \(X_0 \gets \frac{G}{\|G\|_F + \epsilon}\) \(A_k \gets X_k X_k^\top\) \(B_k \gets (3/2) A_k - (1/2) A_k^2\) \(X_{k+1} \gets B_k X_k\) \(W \gets W - \eta X_K\) \(\theta\)

Parámetros iniciales \(\theta\) (matrices), tasa de aprendizaje \(\eta\), iteraciones Newton-Schulz \(K'\) (típicamente 4) Parámetros actualizados \(\theta\) \(G \gets \nabla f(W)\) \(X_0 \gets \frac{G}{\|G\|_F + \epsilon}\) AOL (Almost-Orthogonal preconditioner): \(P \gets (1.5 I - 0.5 X_0 X_0^\top)\) \(X_0 \gets P X_0\) \(A_k \gets X_k X_k^\top\) \(B_k \gets (3/2) A_k - (1/2) A_k^2\) \(X_{k+1} \gets B_k X_k\) \(W \gets W - \eta X_{K'}\) \(\theta\)

Grupo Métodos Objetivo Principal Interpretación desde el Estudio
Línea base clásica SGD, AdamW, RAdam estabilidad y referencias base Definen el piso de comparación para las afirmaciones de optimizadores más nuevos.
Rediseño de momento Adan, AdEMAMix, MARS, Cautious AdamW adaptación de primer orden más rápida o segura Mejor cuando la velocidad de convergencia o la estabilidad ante gradiente ruidoso es la preocupación principal.
Simplificación de lotes grandes y programación LAMB, Schedule-Free AdamW robustez operacional a escala Reducen la fragilidad debida al crecimiento del tamaño de lote o la ingeniería de programación.
Eficiencia de memoria Adafactor, GaLore, APOLLO, APOLLO-Mini, Q-APOLLO, Lion reducción del estado del optimizador Más útil cuando la VRAM está dominada por el estado del optimizador en lugar de las activaciones; los métodos de la familia APOLLO reemplazan los momentos densos de AdamW con escalado estructurado proyectado o cuantizado.
Consciente de curvatura Shampoo, SOAP, Sophia mejor condicionamiento Preferir cuando una geometría más rica justifica la sobrecarga de implementación y cómputo.
Orientado a geometría Muon, Turbo-Muon estructura de actualización ortogonalizada Opciones especializadas para geometría matricial y modelado de representaciones.

Transformadores Densos, Recurrentes y Aumentados con Memoria

Este anexo sintetiza las familias densas, recurrentes y aumentadas con memoria de transformers. El campo ha evolucionado hacia varios paradigmas principales: atención densa global con variantes, compresión de cabezas clave-valor mediante atención por consultas agrupadas, compresión de estado recurrente con decaimiento, modelos de espacio de estado selectivos, integración numérica de profundidad continua y arquitecturas aumentadas con memoria. Comprender esta taxonomía ilumina las compensaciones fundamentales entre expresividad, costo computacional, huella de memoria y simplicidad de despliegue.

Atención Densa de Referencia: Estándar y Sigmoide

Atención Softmax Estándar

La atención multi-cabeza estándar calcula la similitud de producto punto escalado entre embeddings de tokens:

Entrada: Matriz de consulta \(\mathbf{Q} \in \mathbb{R}^{n \times d}\), Matriz de clave \(\mathbf{K} \in \mathbb{R}^{n \times d}\), Matriz de valor \(\mathbf{V} \in \mathbb{R}^{n \times d}\) \(\text{puntajes} \gets \frac{\mathbf{Q}\mathbf{K}^\top}{\sqrt{d}} \in \mathbb{R}^{n \times n}\) \(\text{pesos\_atencion} \gets \texttt{softmax}(\text{puntajes}, \text{eje}=1) \in \mathbb{R}^{n \times n}\) Salida: \(\mathbf{Y} = \text{pesos\_atencion} \cdot \mathbf{V} \in \mathbb{R}^{n \times d}\)

Para generación autorregresiva, el almacenamiento en caché KV guarda claves y valores pasados para evitar el recálculo \(\mathcal{O}(n^2)\). Sin embargo, este caché de crecimiento lineal ocupa \(\sim n \cdot d_{\text{oculto}}\) bytes, lo que puede consumir cientos de gigabytes para modelos de miles de millones de parámetros. La atención estándar logra una expresividad perfecta dentro de la ventana de contexto—cualquier token puede atender a cualquier otro token con pesos aprendidos—pero paga el precio del cómputo denso.

Atención Sigmoide

La atención sigmoide reemplaza el softmax por filas con una activación sigmoide elemento a elemento :

Entrada: \(\mathbf{Q}, \mathbf{K}, \mathbf{V}\) como arriba, sesgo aprendible \(\mathbf{b} \in \mathbb{R}^{n \times n}\) \(\text{logits} \gets \frac{\mathbf{Q}\mathbf{K}^\top}{\sqrt{d}} + \mathbf{b}\) \(\text{pesos\_atencion} \gets \sigma(\text{logits})\) Salida: \(\mathbf{Y} = \text{pesos\_atencion} \odot \mathbf{V}\)

A diferencia de softmax, la sigmoide no impone una distribución de probabilidad (los pesos no necesitan sumar 1), lo que permite una independencia de tokens más fuerte. El análisis teórico mediante mezcla de expertos muestra que la sigmoide alcanza una complejidad muestral superior: convergencia \(\mathcal{O}(n^{-0.51})\) para expertos ReLU frente a \(\mathcal{O}(n^{-0.24})\) de softmax. Sin embargo, el entrenamiento empírico reveló inestabilidades de gradiente a escala. El remedio es la norma híbrida—agregar normalización después de la salida de atención—que estabiliza los gradientes sin sacrificar los beneficios teóricos del enrutamiento elemento a elemento.

Atención por Consultas Agrupadas (GQA)

La atención por consultas agrupadas (GQA) tiende un puente entre la atención multi-cabeza (MHA) y la atención multi-consulta (MQA) al particionar las cabezas de consulta en grupos, cada uno compartiendo una sola cabeza clave-valor. Si \(h\) es el número total de cabezas de atención, \(h_k\) es el número de cabezas clave-valor, y \(G = h / h_k\) es el tamaño del grupo, entonces cada grupo de \(G\) cabezas de consulta comparte una cabeza KV:

Entrada: \(\mathbf{Q} \in \mathbb{R}^{n \times h \cdot d_h}\), \(\mathbf{K} \in \mathbb{R}^{n \times h_k \cdot d_h}\), \(\mathbf{V} \in \mathbb{R}^{n \times h_k \cdot d_h}\) \(\mathbf{K}_{\text{completo}} \gets \texttt{repeat\_interleave}(\mathbf{K}, G)\) \(\mathbf{V}_{\text{completo}} \gets \texttt{repeat\_interleave}(\mathbf{V}, G)\) \(\text{puntajes} \gets \frac{\mathbf{Q}\mathbf{K}_{\text{completo}}^\top}{\sqrt{d_h}} \in \mathbb{R}^{n \times n}\) \(\text{pesos\_atencion} \gets \texttt{softmax}(\text{puntajes}, \text{eje}=1)\) Salida: \(\mathbf{Y} = \text{pesos\_atencion} \cdot \mathbf{V}_{\text{completo}} \in \mathbb{R}^{n \times h \cdot d_h}\)

GQA interpola suavemente entre MHA (\(h_k = h\), \(G = 1\)) y MQA (\(h_k = 1\), \(G = h\)). La ventaja clave es un balance ajustable entre la huella del caché KV y la capacidad representacional. Cada cabeza KV adicional consume \(2 \cdot d_h \cdot n\) bytes extra en el caché, por lo que reducir \(h_k\) produce ahorros proporcionales de memoria.

Arquitecturas Recurrentes y Retentivas

Redes Retentivas (RetNet)

RetNet unifica tres paradigmas de cómputo: entrenamiento paralelo, inferencia recurrente y despliegue por fragmentos. Su innovación central es el mecanismo de retención, que utiliza una matriz de decaimiento exponencial fija para modelar la importancia temporal:

Forma paralela (entrenamiento): \(\text{matriz\_decaimiento}[i,j] \gets \gamma^{i-j}\) para \(i \geq j\), si no \(0\) \(\text{matriz\_decaimiento}[i,j] \gets 0\) para \(i < j\) \(\mathbf{Y}_{\text{paralelo}} \gets (\mathbf{Q}\mathbf{K}^\top \odot \text{matriz\_decaimiento}) \mathbf{V}\)

Forma recurrente (inferencia): \(\mathbf{s}_t \gets \gamma \mathbf{s}_{t-1} + \mathbf{k}_t \mathbf{v}_t^\top\) \(\mathbf{y}_t \gets \mathbf{q}_t \mathbf{s}_t\)

El escalar de decaimiento \(\gamma \in (0,1)\) controla la ventana temporal. RetNet utiliza retención multi-escala con diferentes valores de \(\gamma\) por cabeza (ej., \(\gamma = 1 - 2^{-5}, 1 - 2^{-6}, \ldots\)), permitiendo dependencias a corto y largo plazo simultáneamente. El modo recurrente por fragmentos divide las secuencias en fragmentos, procesa cada fragmento en paralelo y enhebra un estado recurrente entre fragmentos.

Mamba: Modelos de Espacio de Estado Selectivos

Mamba enmarca la recurrencia como un sistema dinámico de tiempo continuo con parámetros dependientes de la entrada, logrando tanto entrenamiento lineal como inferencia en tiempo constante:

Dinámica continua: \(h'(t) = \mathbf{A} h(t) + \mathbf{B} x(t)\), \(y(t) = \mathbf{C} h(t)\) Discretización con tamaño de paso \(\Delta_t\): \(\bar{\mathbf{A}}_t \gets \exp(\Delta_t \mathbf{A})\) \(\bar{\mathbf{B}}_t \gets (\Delta_t \mathbf{A})^{-1} (\exp(\Delta_t \mathbf{A}) - \mathbf{I}) \Delta_t \mathbf{B}_t\) Actualización recurrente: \(\Delta_t \gets \text{softplus}(\text{Lineal}(x_t))\) \(\mathbf{B}_t \gets \text{Lineal}(x_t)\), \(\mathbf{C}_t \gets \text{Lineal}(x_t)\) \(h_t \gets \bar{\mathbf{A}}_t h_{t-1} + \bar{\mathbf{B}}_t x_t\) \(y_t \gets \mathbf{C}_t h_t\)

La innovación crítica es que \(\mathbf{A}\) (la matriz del sistema) no depende de la entrada, pero \(\Delta_t\), \(\mathbf{B}_t\) y \(\mathbf{C}_t\) sí, haciendo que el sistema sea variante en el tiempo. Esta selectividad permite al modelo ignorar información irrelevante estableciendo \(\Delta_t\) cerca de cero, creando efectivamente una compuerta. Un algoritmo de escaneo paralelo consciente del hardware implementa la recurrencia eficientemente en GPUs fusionando el cómputo dentro de SRAM, evitando el costoso ancho de banda de HBM.

Transformers de Profundidad Continua: Integración EDO

Transformer EDO

El Transformer EDO interpreta la profundidad de la red como integración numérica de un sistema dinámico continuo, utilizando solucionadores Runge-Kutta de orden superior para reducir el error de truncamiento:

Formulación continua: \(\frac{dh(t)}{dt} = f_\theta(h(t), t)\) donde \(f_\theta\) es la subred del transformer Aproximación discreta Runge-Kutta-4: \(k_1 \gets f_\theta(h_t, t)\) \(k_2 \gets f_\theta(h_t + \tfrac{1}{2}k_1, t + \tfrac{1}{2}\Delta t)\) \(k_3 \gets f_\theta(h_t + \tfrac{1}{2}k_2, t + \tfrac{1}{2}\Delta t)\) \(k_4 \gets f_\theta(h_t + k_3, t + \Delta t)\) \(h_{t+1} \gets h_t + \frac{\Delta t}{6}(k_1 + 2k_2 + 2k_3 + k_4)\)

En lugar de las conexiones residuales simples de Euler \(h_{t+1} = h_t + f_\theta(h_t)\), el bloque RK4 calcula cuatro evaluaciones intermedias y las combina con los pesos clásicos de RK4. Para evitar gradientes que se desvanecen, la arquitectura introduce compuertas aprendidas que interpolan entre aproximaciones intermedias:

\(g \gets \sigma(\text{Lineal}([k_1, k_2, k_3, k_4]))\) \(h_{t+1} \gets h_t + g \cdot k_1 + (1-g) \cdot k_2\)

Esta formulación reduce el número efectivo de parámetros mediante el uso compartido de pesos—la misma \(f_\theta\) se evalúa múltiples veces—proporcionando un refinamiento de trayectoria más rico.

Memoria en Tiempo de Prueba: Titans

La arquitectura Titans introduce una dimensión ortogonal: en lugar de pesos estáticos, el modelo mantiene una memoria aprendible que se actualiza durante la inferencia basada en una señal impulsada por sorpresa:

Atención local a corto plazo: Aplicar atención estándar o dispersa dentro de una ventana de contexto fija \(c\) \(y_t^{\text{local}} \gets \text{Atencion}(q_t, k_{[t-c:t]}, v_{[t-c:t]})\) Señal de actualización de memoria (sorpresa): \(S_t \gets \eta_t S_{t-1} - \theta_t \nabla_\ell(\mathcal{M}_{t-1}; x_t)\) \(\mathcal{M}_t \gets (1 - \alpha_t) \mathcal{M}_{t-1} + S_t\) Recuperación de memoria a largo plazo: \(y_t^{\text{memoria}} \gets \mathcal{M}_t^* (q_t)\) Combinación de salida: \(y_t \gets y_t^{\text{local}} + \text{compuerta}(y_t^{\text{memoria}})\)

El módulo de memoria \(\mathcal{M}\) se actualiza literalmente durante el paso hacia adelante calculando gradientes de una pérdida asociativa y aplicando pasos de SGD con momento. Las tasas de decaimiento \(\eta_t, \theta_t, \alpha_t\) son en sí mismas dependientes de la entrada, permitiendo al modelo cambiar de paradigma de memoria cuando el contexto cambia.

Despacho de Mezclador Guiado por Patrón

El código base selecciona un mezclador por bloque a partir del layer_pattern configurado. La lógica de despacho impone la política sin entrenamiento para bloques de solo evaluación y enruta a la implementación de familia correspondiente.

Estados ocultos \(H\), patrón \(P\), índice de capa \(\ell\) \(m \gets P[\ell \bmod |P|]\) lanzar error de configuración/tiempo de ejecución (bloque sin entrenamiento en modo entrenar) \(H \gets \text{softmax-attention}(H)\) \(H \gets \text{sigmoid-attention}(H)\) \(H \gets \text{retention}(H)\) \(H \gets \text{selective-ssm}(H)\) \(H \gets \text{rk-step}(H)\) \(H \gets \text{sparse-attention-family}(H)\) \(H \gets \text{gated-attention-family}(H)\) \(H \gets \text{memory-augmented-attn}(H)\) \(H\)

El campo exhibe una progresión clara a lo largo de dos ejes: (i) eficiencia computacional, pasando de \(O(n^2)\) a \(O(n)\) u \(O(1)\), y (ii) adaptabilidad de memoria, pasando de pesos estáticos a modelos dinámicos actualizados en tiempo de prueba. La atención estándar sigue siendo la línea base de expresividad; Mamba y RetNet representan la frontera práctica de eficiencia; Titans introduce un eje de innovación ortogonal (aprendizaje en tiempo de prueba). La elección de arquitectura refleja la restricción fundamental de ingeniería: expresividad versus costo de despliegue. La familia de atención latente, que comprime el caché KV en un latente de rango bajo, se cubre en el Apéndice 15.

Familias de Atención Latente y de Rango Bajo

Este anexo cubre la familia de mecanismos de atención de compresión latente / de rango bajo de KV. Estas arquitecturas comprimen el estado clave–valor por token en un vector latente de rango bajo que es la única cantidad materializada en el caché KV durante la decodificación, luego reconstruyen las claves y valores completos de todas las cabezas al vuelo. La familia unifica diseños de consulta agrupada, latente, factorizado y latente temporal bajo un cuello de botella de rango bajo común.

Atención Latente Multi-Cabeza (MLA)

La Atención Latente Multi-Cabeza (MLA, por sus siglas en inglés) comprime el estado clave–valor por token en un único vector latente de rango bajo \(c_{KV}\) de rango \(r_{kv}\), el cual es la única cantidad materializada en el caché KV durante la decodificación. Un par de matrices de up-proyección reconstruye las claves y valores completos de todas las cabezas al vuelo, mientras que RoPE se aplica a los tensores de consulta y clave descomprimidos para preservar la estructura posicional. Los autores muestran que el ancho latente óptimo de Pareto se sitúa cerca de \(r_{kv} = d_{\text{oculto}} / 2\), punto en el cual MLA reduce a la mitad el caché KV pero iguala la calidad de la atención multi-cabeza (MHA) en modelos pequeños.

Formulación Matemática

\[c_{KV} = W_{DKV}\, x \in \mathbb{R}^{r_{kv}}, \qquad k = W_{UK}\, c_{KV}, \qquad v = W_{UV}\, c_{KV}, \qquad q = W_{Q}\, x.\] \[\tilde q = \text{RoPE}(q), \quad \tilde k = \text{RoPE}(k), \qquad \text{atencion} = \texttt{softmax}\!\left(\frac{\tilde q\, \tilde k^\top}{\sqrt{d_h}}\right) v.\]

Pseudocódigo Algorítmico

Entrada: estado oculto \(x \in \mathbb{R}^{n \times d}\), rango \(r_{kv}\), proyecciones \(W_{DKV}, W_{UK}, W_{UV}, W_{Q}\) \(c_{KV} \gets W_{DKV}\, x\) \(k \gets W_{UK}\, c_{KV}\), \(v \gets W_{UV}\, c_{KV}\) \(q \gets W_{Q}\, x\) \(\tilde q \gets \text{RoPE}(q)\), \(\tilde k \gets \text{RoPE}(k)\) \(\text{pesos} \gets \texttt{softmax}(\tilde q\, \tilde k^\top / \sqrt{d_h})\) Salida: \(\mathbf{Y} = \text{pesos} \cdot v\)

Características Clave

Atención Latente por Consultas Agrupadas (GQLA)

La Atención Latente por Consultas Agrupadas (GQLA, por sus siglas en inglés) es una modificación mínima de MLA que expone dos rutas de decodificación algebraicamente equivalentes sobre los mismos pesos entrenados: una ruta MQA-absorb (que fusiona la up-proyección en la consulta, óptima en hardware tipo H100) y una ruta GQA-expanded (que materializa claves/valores completos, óptima en hardware H20 / predicción multi-token). Las dos rutas son matemáticamente idénticas porque la up-proyección es lineal, de modo que \(\texttt{softmax}(q_{\text{absorbido}} \cdot c_{KV}^\top) = \texttt{softmax}((q \cdot W_{UK}^\top) \cdot c_{KV}^\top)\), permitiendo un despacho adaptativo al hardware sin reentrenamiento.

Formulación Matemática

Mismo latente que MLA: \[c_{KV} = W_{DKV}\, x, \qquad k = W_{UK}\, c_{KV}, \qquad v = W_{UV}\, c_{KV}, \qquad q = W_{Q}\, x.\] \[\text{Ruta A (MQA-absorb): } \text{atencion} = \texttt{softmax}\!\left(\frac{(q\, W_{UK}^\top)\, c_{KV}^\top}{\sqrt{d_h}}\right) (W_{UV}\, c_{KV}).\] \[\text{Ruta B (GQA-expanded): } \text{atencion} = \texttt{softmax}\!\left(\frac{q\, k^\top}{\sqrt{d_h}}\right) v, \quad k = W_{UK} c_{KV},\ v = W_{UV} c_{KV}.\]

Pseudocódigo Algorítmico

Entrada: \(x\), pesos \(W_{DKV}, W_{UK}, W_{UV}, W_{Q}\), bandera de hardware \(\text{hw} \in \{\text{H100}, \text{H20}\}\) \(c_{KV} \gets W_{DKV}\, x\) \(q \gets W_{Q}\, x\) \(q_{\text{abs}} \gets q\, W_{UK}^\top\) \(\text{pesos} \gets \texttt{softmax}(q_{\text{abs}}\, c_{KV}^\top / \sqrt{d_h})\) \(\mathbf{Y} \gets \text{pesos} \cdot (W_{UV}\, c_{KV})\) \(k \gets W_{UK}\, c_{KV}\), \(v \gets W_{UV}\, c_{KV}\) \(\text{pesos} \gets \texttt{softmax}(q\, k^\top / \sqrt{d_h})\) \(\mathbf{Y} \gets \text{pesos} \cdot v\) Salida: \(\mathbf{Y}\)

Características Clave

Atención Multi-Cabeza de Rango Bajo (MLRA)

La Atención Multi-Cabeza de Rango Bajo (MLRA, por sus siglas en inglés) refactoriza el latente único de MLA en \(L\) sub-cabezas disjuntas cada una de rango \(r/L\), de modo que el caché KV puede particionarse entre \(L\) dispositivos para una decodificación tensor-paralela de 4 vías (cada dispositivo carga sólo \(1/L\) del caché). Las up-proyecciones por sub-cabeza reconstruyen la porción correspondiente de las cabezas completas y se concatenan, logrando una aceleración de decodificación de 2.8\(\times\) sobre MLA preservando el presupuesto latente global.

Formulación Matemática

\[c_{KV} = [c_1, c_2, \ldots, c_L], \quad c_i \in \mathbb{R}^{r/L}, \qquad c_{KV} = W_{DKV}\, x.\] \[k_i = W_{UK}^{(i)}\, c_i, \quad v_i = W_{UV}^{(i)}\, c_i, \qquad k = [k_1; \ldots; k_L], \quad v = [v_1; \ldots; v_L].\] \[\text{atencion} = \texttt{softmax}\!\left(\frac{q\, k^\top}{\sqrt{d_h}}\right) v.\]

Pseudocódigo Algorítmico

Entrada: \(x\), número de sub-cabezas \(L\), proyecciones por sub-cabeza \(W_{UK}^{(i)}, W_{UV}^{(i)}\) \(c_{KV} \gets W_{DKV}\, x = [c_1, \ldots, c_L]\) \(k_i \gets W_{UK}^{(i)}\, c_i\), \(v_i \gets W_{UV}^{(i)}\, c_i\) \(k \gets \texttt{concat}(k_1, \ldots, k_L)\), \(v \gets \texttt{concat}(v_1, \ldots, v_L)\) \(\text{pesos} \gets \texttt{softmax}(q\, k^\top / \sqrt{d_h})\) Salida: \(\mathbf{Y} = \text{pesos} \cdot v\)

Características Clave

Atención Tucker

La Atención Tucker unifica MHA, GQA y MLA bajo una única factorización estilo Tucker de los tensores de pesos de consulta/clave/valor con rangos independientes \(q_{\text{rank}}, k_{\text{rank}}, v_{\text{rank}}\). Se recupera MHA cuando todos los rangos igualan el tamaño oculto, GQA cuando \(k_{\text{rank}} = v_{\text{rank}} < d\), y MLA cuando \(k_{\text{rank}} = v_{\text{rank}}\) es igual al rango latente. Como la factorización es una repas lineal de pesos, el método es totalmente compatible con FlashAttention y RoPE, y produce un orden de magnitud menos parámetros para métricas comparables.

Formulación Matemática

\[\mathbf{Q} = W_{Q,\text{core}}\, W_{Q,\text{factor}}\, x, \qquad \mathbf{K} = W_{K,\text{core}}\, W_{K,\text{factor}}\, x, \qquad \mathbf{V} = W_{V,\text{core}}\, W_{V,\text{factor}}\, x.\] \[\text{atencion} = \texttt{softmax}\!\left(\frac{\mathbf{Q}\, \mathbf{K}^\top}{\sqrt{d_h}}\right) \mathbf{V}.\] Casos especiales: MHA \(\Leftrightarrow q_{\text{rank}} = k_{\text{rank}} = v_{\text{rank}} = d\); GQA \(\Leftrightarrow k_{\text{rank}} = v_{\text{rank}} < d\); MLA \(\Leftrightarrow k_{\text{rank}} = v_{\text{rank}} = r_{kv}\).

Pseudocódigo Algorítmico

Entrada: \(x\), rangos \(q_{\text{rank}}, k_{\text{rank}}, v_{\text{rank}}\), matrices core/factor \(\mathbf{Q} \gets W_{Q,\text{core}}\, W_{Q,\text{factor}}\, x\) \(\mathbf{K} \gets W_{K,\text{core}}\, W_{K,\text{factor}}\, x\) \(\mathbf{V} \gets W_{V,\text{core}}\, W_{V,\text{factor}}\, x\) Aplicar RoPE a \(\mathbf{Q}, \mathbf{K}\) si se usa codificación posicional \(\text{pesos} \gets \texttt{softmax}(\mathbf{Q}\, \mathbf{K}^\top / \sqrt{d_h})\) Salida: \(\mathbf{Y} = \text{pesos} \cdot \mathbf{V}\)

Características Clave

Atención de Cabezas Entrelazadas (IHA)

La Atención de Cabezas Entrelazadas (IHA, por sus siglas en inglés) construye \(P\) pseudo-cabezas por cabeza original (típicamente \(P = H\)) donde cada consulta/clave/valor pseudo es una combinación lineal aprendida de todas las \(H\) cabezas originales. Esto induce hasta \(P^2\) patrones de atención distintos por cabeza con una sobrecarga de \(\mathcal{O}(H^2 P)\). Teóricamente, IHA necesita sólo \(\Theta(\sqrt{k}\, n^2)\) parámetros frente a \(\Theta(k\, n^2)\) de MHA en la tarea Polinomial; empíricamente entrega \(+10\)\(20\%\) en RULER de recuperación multi-clave, \(+5.8\%\) en GSM8K y \(+2.8\%\) en MATH-500.

Formulación Matemática

\[q_{\text{pseudo}}[p] = \sum_{h=1}^{H} \text{mix}_q[p, h]\, q[h], \quad k_{\text{pseudo}}[p] = \sum_{h} \text{mix}_k[p, h]\, k[h], \quad v_{\text{pseudo}}[p] = \sum_{h} \text{mix}_v[p, h]\, v[h].\] \[\text{atencion}_p = \texttt{softmax}\!\left(\frac{q_{\text{pseudo}}[p]\, k_{\text{pseudo}}[p]^\top}{\sqrt{d_h}}\right) v_{\text{pseudo}}[p], \qquad \mathbf{Y}[h] = \frac{1}{P} \sum_{p} \text{atencion}_p[h].\]

Pseudocódigo Algorítmico

Entrada: por cabeza \(q[h], k[h], v[h]\), matrices de mezcla \(\text{mix}_q, \text{mix}_k, \text{mix}_v \in \mathbb{R}^{P \times H}\) \(q_p \gets \sum_h \text{mix}_q[p,h]\, q[h]\) \(k_p \gets \sum_h \text{mix}_k[p,h]\, k[h]\), \(v_p \gets \sum_h \text{mix}_v[p,h]\, v[h]\) \(\text{atencion}_p \gets \texttt{softmax}(q_p\, k_p^\top / \sqrt{d_h})\, v_p\) Salida: \(\mathbf{Y}[h] \gets \frac{1}{P} \sum_p \text{atencion}_p[h]\)

Características Clave

Atención laTenT por Cabezas Agrupadas (GTA)

La Atención laTenT por Cabezas Agrupadas (GTA, por sus siglas en inglés) combina dos compresiones: (1) un mapa de atención compartido — un tensor de puntajes de atención por grupo de cabezas, reutilizado entre todas las cabezas del grupo, reduciendo el caché de claves; y (2) un decodificador de valores no lineal — el caché de valores se comprime a un latente mediante una down-proyección y se reconstruye por una up-proyección con compuerta SiLU antes de la proyección de salida. GTA reduce los FLOPs de atención hasta 62.5% frente a GQA, encoge el caché KV hasta 70%, y produce una aceleración de inferencia de 2\(\times\) de extremo a extremo.

Formulación Matemática

\[q_g = \texttt{mean}(q[\text{grupo } g]), \quad k_g = \texttt{mean}(k[\text{grupo } g]), \quad \text{atencion}_g = \texttt{softmax}\!\left(\frac{q_g\, k_g^\top}{\sqrt{d_h}}\right) \text{ (reutilizado en el grupo)}.\] \[v_{\text{latente}} = W_{DV}\, x, \qquad v = \text{SiLU}(W_{UV}\, v_{\text{latente}}), \qquad \mathbf{Y} = \text{atencion}_g \cdot v.\]

Pseudocódigo Algorítmico

Entrada: \(q, k\) por cabeza, oculto \(x\), partición de grupos \(\{g\}\) \(v_{\text{latente}} \gets W_{DV}\, x\) \(v \gets \text{SiLU}(W_{UV}\, v_{\text{latente}})\) \(q_g \gets \texttt{mean}(q[g])\), \(k_g \gets \texttt{mean}(k[g])\) \(\text{atencion}_g \gets \texttt{softmax}(q_g\, k_g^\top / \sqrt{d_h})\) \(\mathbf{Y}[g] \gets \text{atencion}_g \cdot v[g]\) Salida: \(\mathbf{Y}\)

Características Clave

Atención Latente Temporal Multi-Cabeza (MTLA)

La Atención Latente Temporal Multi-Cabeza (MTLA, por sus siglas en inglés) extiende MLA a lo largo del eje temporal: una hyper-red fusiona dinámicamente \(m\) vectores temporalmente adyacentes del caché KV en un único slot, reduciendo la longitud temporal por un factor de \(m\). Una máscara causal consciente del stride mantiene el entrenamiento paralelo consistente con la inferencia autorregresiva, produciendo una aceleración de decodificación de 5.3\(\times\) y una reducción de memoria GPU de 8.3\(\times\) frente a MHA en traducción de voz En–De.

Formulación Matemática

\[c_{KV}^{(t)} = W_{DKV}\, x^{(t)} \in \mathbb{R}^{r_{kv}} \text{ (latente por token)}.\] \[\bar c_{KV}^{(j)} = \sum_{i=0}^{m-1} \alpha_i\, c_{KV}^{(s j + i)}, \qquad \alpha_i = \texttt{sigmoid}(\text{HyperNet}(c_{KV}^{(s j + i)})),\] donde \(s\) es el stride y \(m\) la ventana de fusión. Las consultas atienden sobre slots fusionados \(\bar c_{KV}\) con una máscara causal consciente del stride \(M_{\text{stride}}\): \[\text{atencion} = \texttt{softmax}\!\left(\frac{q\, \bar k^\top}{\sqrt{d_h}} + M_{\text{stride}}\right) \bar v, \quad \bar k = W_{UK}\, \bar c_{KV},\ \bar v = W_{UV}\, \bar c_{KV}.\]

Pseudocódigo Algorítmico

Entrada: latentes por token \(c_{KV}^{(t)}\), ventana de fusión \(m\), stride \(s\) Fase de fusión (hyper-red): \(\alpha_i \gets \texttt{sigmoid}(\text{HyperNet}(c_{KV}^{(s j + i)}))\) para \(i = 0, \ldots, m-1\) \(\bar c_{KV}^{(j)} \gets \sum_{i=0}^{m-1} \alpha_i\, c_{KV}^{(s j + i)}\) \(\bar k \gets W_{UK}\, \bar c_{KV}\), \(\bar v \gets W_{UV}\, \bar c_{KV}\) \(\text{pesos} \gets \texttt{softmax}(q\, \bar k^\top / \sqrt{d_h} + M_{\text{stride}})\) Salida: \(\mathbf{Y} = \text{pesos} \cdot \bar v\)

Características Clave

Comparación y Síntesis Arquitectónica

Atención Convolucional Comprimida (CCA)

La Atención Convolucional Comprimida (CCA, por sus siglas en inglés) adopta un enfoque fundamentalmente diferente para la atención latente: en lugar de comprimir el caché KV y luego up-proyectar al ancho completo antes de atender (como MLA/GQLA/MLRA), CCA proyecta consultas, claves y valores a un latente compartido y realiza la operación de atención completa dentro de él. No hay matrices de up-proyección para Q/K/V — sólo una única up-proyección de salida \(\tilde{W}_O\) mapea la salida latente de vuelta al flujo residual. Esto reduce simultáneamente parámetros, caché KV, y FLOPs de atención por el factor de compresión \(C = E/\tilde{e}\), mientras que MLA sólo reduce el caché.

Para hacer viable la atención en el latente comprimido, CCA introduce tres innovaciones: (1) dos convoluciones causales sobre el tensor empaquetado q/k (una convolución de secuencia depth-wise y una convolución agrupada de canales por cabeza), (2) q-k-mean (añade la media pre-convolución de q y k a los valores post-convolución), y (3) value-shift (cada cabeza recibe la mitad de sus valores del token actual y la mitad del token anterior mediante dos proyecciones independientes). Tras estos pasos, se aplica normalización L2 de QK y una temperatura de clave aprendible \(\beta\), RoPE se aplica directamente en el latente (sin cabeza RoPE separada), y se computa la atención softmax estándar.

Formulación Matemática

\[\tilde{q}_{\text{pre}} = \tilde{W}_Q\, x, \qquad \tilde{k}_{\text{pre}} = \tilde{W}_K\, x, \qquad \tilde{e} = E / C.\] \[\tilde{q} = \text{Conv}(\tilde{q}_{\text{pre}}) + \tfrac{1}{2}(\tilde{q}_{\text{pre}} + \tilde{k}_{\text{pre}}), \qquad \tilde{k} = \text{Conv}(\tilde{k}_{\text{pre}}) + \tfrac{1}{2}(\tilde{q}_{\text{pre}} + \tilde{k}_{\text{pre}}).\] \[\tilde{v} = [\tilde{W}_{V_1}\, x_t \;\|\; \tilde{W}_{V_2}\, x_{t-1}], \qquad \hat{q} = \frac{\tilde{q} \sqrt{d_h}}{\|\tilde{q}\|}, \quad \hat{k} = \frac{\tilde{k} \sqrt{d_h}}{\|\tilde{k}\|} e^{\beta}.\] \[\text{atencion} = \texttt{softmax}\!\left(\frac{\text{RoPE}(\hat{q})\, \text{RoPE}(\hat{k})^\top}{\sqrt{d_h}}\right) \tilde{v}, \qquad \mathbf{Y} = \tilde{W}_O\, \text{atencion}.\]

Características Clave

Atención Convolucional Comprimida por Consultas Agrupadas (CCGQA)

La Atención Convolucional Comprimida por Consultas Agrupadas (CCGQA, por sus siglas en inglés) extiende CCA con compartición de cabezas clave/valor estilo GQA aplicada dentro del latente comprimido, y desacopla las tasas de compresión de query y KV: las consultas se comprimen por \(C_1\) y las claves/valores por \(C_2 \geq C_1\). La dimensión latente por cabeza \(d_h\) debe coincidir entre cabezas de query y clave, imponiendo la restricción \(C_2 / C_1 = n_h / n_{kv}\). Las cabezas KV se comparten por grupo (replicadas para coincidir con las cabezas de query), y el sesgo qk-mean usa operadores de broadcast/reducción \(B_{\text{group}}\) (replicar cabezas KV a cabezas query) y \(E_{\text{group}}\) (promediar cabezas query dentro de cada grupo). CCGQA logra la mejor pérdida reportada a 8\(\times\) reducción de caché KV sin pérdida de calidad frente a MHA.

Características Clave

La familia latente muestra una progresión clara a lo largo de dos ejes: (i) compresión de rango, pasando de cabezas completas (MHA) a un latente compartido (MLA) a sub-cabezas latentes particionadas (MLRA), y (ii) adaptividad de despliegue, pasando de una sola ruta de decodificación a despacho adaptativo al hardware (GQLA) y fusión temporal de caché (MTLA). La Atención Tucker proporciona el marco algebraico unificador: MHA, GQA y MLA son todos casos especiales de una factorización Tucker con elecciones de rango apropiadas. CCA y CCGQA toman un enfoque fundamentalmente diferente: en lugar de comprimir el caché KV y luego up-proyectar para atención a ancho completo (MLA/GQLA/MLRA), realizan atención completamente dentro del espacio latente comprimido, reduciendo no sólo el caché sino también los FLOPs de atención por el factor de compresión. CCGQA además desacopla las tasas de compresión de query y KV, logrando la mejor pérdida reportada a 8\(\times\) reducción de caché KV.

Mecanismos de Atención Dispersa Exhaustivos

Resumen Ejecutivo

Los mecanismos de atención dispersa abordan la prohibitiva complejidad computacional y de memoria \(\mathcal{O}(n^2)\) de la atención de producto punto escalado estándar al restringir el conjunto de pares clave-valor atendidos. La atención dispersa moderna abarca un rico espacio de diseño distinguido por cuatro dimensiones ortogonales: (i) patrón de dispersidad (geométrico fijo, dependiente de datos o basado en frecuencia), (ii) capacidad de entrenamiento (entrenado de extremo a extremo o solo inferencia), (iii) unidad de dispersidad (tokens individuales, ventanas locales o bloques), y (iv) mecanismo (enmascaramiento, selección, filtrado o compresión). Este anexo sintetiza siete familias principales de atención dispersa—Sparse Transformer, Longformer, BigBird, SparseK, NSA, SpargeAttn y FASA—proporcionando formulaciones matemáticas, pseudocódigo algorítmico y comparaciones arquitectónicas exhaustivas.

Sparse Transformer: Patrones Estrideados y Fijos Factorizados

Formulación Matemática

Sparse Transformer reduce la complejidad cuadrática a \(\mathcal{O}(n\sqrt{n})\) factorizando la atención dispersa en dos cabezas dispersas complementarias. Sea \(n\) la longitud de la secuencia y \(l = \lfloor\sqrt{n}\rfloor\) el stride.

Cabeza de atención estrideada

: Cada posición \(i\) atiende a cada \(l\)-ésima posición anterior: \[\mathcal{A}_i^{(\text{estrideada})} = \{j : j \leq i,\; (i - j) \bmod l = 0\}\]

Cabeza de atención fija

: Cada posición \(i\) atiende a posiciones dentro de su bloque local más columnas de resumen fijas: \[\mathcal{A}_i^{(\text{fija})} = \{j : \lfloor j/l \rfloor = \lfloor i/l \rfloor\} \cup \{j : j \bmod l \in \{l-c, \ldots, l-1\}\}\] donde \(c\) es un hiperparámetro que controla el número de columnas de resumen (típicamente \(c=1\) o \(c=2\)).

El cálculo de atención para cada cabeza \(h\) sigue las reglas estándar de producto punto escalado restringido al conjunto disperso: \[\text{Attn}_h(Q, K, V)_i = \text{softmax}\left(\frac{q_i^h K_{\mathcal{A}_i}^h\top}{\sqrt{d_k}}\right) V_{\mathcal{A}_i}^h\]

La idea clave es que con las dos cabezas factorizadas operando en paralelo a través de una profundidad de \(L\) capas transformer, cada posición puede alcanzar cualquier otra posición a través de un camino de longitud máxima \(L + 1\), preservando la alcanzabilidad de largo alcance con una fracción del costo de la atención densa.

Pseudocódigo Algorítmico

Consulta \(\mathbf{Q} \in \mathbb{R}^{n \times d}\), Clave \(\mathbf{K} \in \mathbb{R}^{n \times d}\), Valor \(\mathbf{V} \in \mathbb{R}^{n \times d}\) Stride \(l = \lfloor\sqrt{n}\rfloor\), columnas de resumen \(c \in \{1, 2\}\) Salida \(\mathbf{Y} \in \mathbb{R}^{n \times d}\) Cabeza 1: Atención Estrideada \(\mathcal{A}_i \gets \{j : j \leq i \text{ y } (i-j) \bmod l = 0\}\) \(\text{puntajes}_{i} \gets \mathbf{q}_i \mathbf{K}_{\mathcal{A}_i}^\top / \sqrt{d_k}\) \(\text{attn}_{i} \gets \text{softmax}(\text{puntajes}_{i})\) \(\mathbf{y}_i^{(1)} \gets \text{attn}_{i} \mathbf{V}_{\mathcal{A}_i}\) Cabeza 2: Atención de Bloque Fijo + Resumen \(\text{inicio\_bloque} \gets \lfloor i/l \rfloor \cdot l\), \(\text{fin\_bloque} \gets \min(i+1, \text{inicio\_bloque}+l)\) \(\mathcal{A}_i \gets [\text{inicio\_bloque}, \text{fin\_bloque}) \cup \{\text{columnas de las últimas } c \text{ columnas}\}\) \(\text{puntajes}_{i} \gets \mathbf{q}_i \mathbf{K}_{\mathcal{A}_i}^\top / \sqrt{d_k}\) \(\text{attn}_{i} \gets \text{softmax}(\text{puntajes}_{i})\) \(\mathbf{y}_i^{(2)} \gets \text{attn}_{i} \mathbf{V}_{\mathcal{A}_i}\) Concatenar: \(\mathbf{Y} = [\mathbf{y}^{(1)} \| \mathbf{y}^{(2)}]\) y proyectar mediante capa lineal de salida \(\mathbf{Y}\)

Características Clave

Longformer: Ventana Deslizante, Dilatación y Tokens Globales

Formulación Matemática

Longformer logra una complejidad lineal \(\mathcal{O}(n \cdot w)\) combinando tres patrones de atención complementarios.

Atención de ventana deslizante

: Vecindario local de tamaño \(w\): \[\mathcal{A}_i^{(\text{ventana})} = \{j : |i - j| \leq w/2\}\]

Ventana deslizante dilatada

: Atención con ventana y dilatación \(d\), saltando stride \(d+1\): \[\mathcal{A}_i^{(\text{dilatada})} = \{j : |i - j| \leq (w/2)(d+1) \text{ y } (i-j) \bmod (d+1) = 0\}\]

Atención global

: Tokens globales designados (ej., \([\text{CLS}]\)) atienden a todas las posiciones y todos atienden a ellos: \[\mathcal{A}_i^{(\text{global})} = \begin{cases} \{1, \ldots, n\} & \text{si } i \in \mathcal{G} \\ \mathcal{A}_i^{(\text{ventana})} \cup \mathcal{G} & \text{en otro caso} \end{cases}\]

Los tres patrones se aplican mediante proyecciones separadas. La atención local y global pueden usar las mismas proyecciones o unas separadas específicas para cada tarea.

Pseudocódigo Algorítmico

Consulta \(\mathbf{Q} \in \mathbb{R}^{n \times d}\), Clave \(\mathbf{K}\), Valor \(\mathbf{V}\), tamaño de ventana \(w\), dilatación \(d\), índices de tokens globales \(\mathcal{G}\) Salida \(\mathbf{Y}\) \(\mathcal{A}_i \gets \{1, \ldots, n\}\) Ventana local: \(\mathcal{A}^{(\text{local})} \gets [i - w/2, i + w/2] \cap [1, n]\) Desplazamientos dilatados: \(\mathcal{A}^{(\text{dilatada})} \gets \{j : (i-j) \bmod (d+1) = 0\} \cap \mathcal{A}^{(\text{rango dilatado})}\) Combinar: \(\mathcal{A}_i \gets \mathcal{A}^{(\text{local})} \cup \mathcal{A}^{(\text{dilatada})} \cup \mathcal{G}\) \(\text{puntajes}_i \gets \mathbf{q}_i \mathbf{K}_{\mathcal{A}_i}^\top / \sqrt{d_k}\) \(\text{attn}_i \gets \text{softmax}(\text{puntajes}_i)\) \(\mathbf{y}_i \gets \text{attn}_i \mathbf{V}_{\mathcal{A}_i}\) \(\mathbf{Y}\)

Características Clave

BigBird: Grafo Disperso Aleatorio, Local y Global

Formulación Matemática

BigBird preserva la aproximación universal y la completitud de Turing utilizando una combinación fundamentada de tres patrones de dispersidad.

Conexiones aleatorias

: Cada posición se conecta a \(r\) posiciones muestreadas aleatoriamente: \[\mathcal{A}_i^{(\text{aleatoria})} = \text{MuestraAleatoria}(\{1, \ldots, n\}, r)\]

Ventana local

: Vecindario de ventana deslizante: \[\mathcal{A}_i^{(\text{local})} = \{j : |i-j| \leq w/2\}\]

Tokens globales

: Anclas globales específicas de la tarea: \[\mathcal{A}_i^{(\text{global})} = \begin{cases} \{1, \ldots, n\} & \text{si } i \in \mathcal{G} \\ \mathcal{A}_i^{(\text{aleatoria})} \cup \mathcal{A}_i^{(\text{local})} \cup \mathcal{G} & \text{en otro caso} \end{cases}\]

La máscara dispersa compuesta \(M\) es: \[M_{ij} = \mathbf{1}[j \in \mathcal{A}_i^{(\text{aleatoria})} \cup \mathcal{A}_i^{(\text{local})} \cup \mathcal{A}_i^{(\text{global})}]\]

En la práctica, BigBird agrupa tokens en bloques de tamaño \(b\) y aplica la decisión de dispersidad a nivel de bloque, permitiendo implementaciones eficientes de bloques dispersos.

Garantía Teórica

Los autores demuestran que con \(O(1)\) conexiones aleatorias y tokens globales, el grafo disperso mantiene las mismas propiedades de aproximación universal y completitud de Turing que la atención densa. Formalmente, cualquier función computable puede representarse y cualquier secuencia de operaciones puede simularse dentro del grafo de conectividad de BigBird.

Pseudocódigo Algorítmico

Consulta \(\mathbf{Q}\), Clave \(\mathbf{K}\), Valor \(\mathbf{V}\), tamaño de bloque \(b\), enlaces aleatorios por bloque \(r\), índices globales \(\mathcal{G}\) Salida \(\mathbf{Y}\) Reformar en bloques: \(n_b = \lceil n / b \rceil\) bloques Ventana local: \(\mathcal{A}_j^{(\text{local})} = \text{posiciones cercanas en el bloque} \cup \text{posiciones frontera}\) Muestreo aleatorio de bloques: Muestrear \(r\) bloques uniformemente al azar, agregar todas las posiciones de esos bloques Global: Agregar todas las posiciones de tokens globales \(\mathcal{A}_j \gets \mathcal{A}_j^{(\text{local})} \cup \mathcal{A}_j^{(\text{aleatoria})} \cup \mathcal{G}\) \(\text{puntajes}_i \gets \mathbf{q}_i \mathbf{K}_{\mathcal{A}_i}^\top / \sqrt{d_k}\) \(\text{attn}_i \gets \text{softmax}(\text{puntajes}_i)\) \(\mathbf{y}_i \gets \text{attn}_i \mathbf{V}_{\mathcal{A}_i}\) \(\mathbf{Y}\)

Características Clave

Atención SparseK: Selección Diferencial Top-\(k\)

Formulación Matemática

SparseK permite dispersidad aprendible mediante un operador top-\(k\) diferenciable. Una red de puntuación \(\phi_\theta\) evalúa la importancia de cada par clave-valor:

\[u_j = \phi_\theta(\mathbf{k}_j, \mathbf{q}_i) \in \mathbb{R}\]

El operador SparseK selecciona los puntajes top-\(k\) manteniéndose diferenciable. Calcula un umbral \(\tau(u)\) tal que la suma de los puntajes activos sea igual a \(k\):

\[\text{SparseK}(u, k)_j = \max(u_j - \tau(u), 0), \quad \text{donde} \quad \sum_j \max(u_j - \tau, 0) = k\]

El umbral \(\tau\) se encuentra mediante bisección. La atención se convierte en:

\[m_j = \text{SparseK}(u, k)_j, \quad \text{Attn}_i = \text{softmax}\left(\frac{\mathbf{q}_i K_{\text{sel}}^\top}{\sqrt{d_k}}\right) V_{\text{sel}}\]

donde \(K_{\text{sel}}, V_{\text{sel}}\) contienen solo las entradas top-\(k\) (aquellas con \(m_j > 0\)).

Pseudocódigo Algorítmico

Consulta \(\mathbf{q} \in \mathbb{R}^d\), Matriz de clave \(\mathbf{K} \in \mathbb{R}^{n \times d}\), Matriz de valor \(\mathbf{V} \in \mathbb{R}^{n \times d}\) Red de puntuación \(\phi_\theta\), dispersidad objetivo \(k\) Salida de atención \(\mathbf{y}\) Calcular puntajes de importancia: \(u_j \gets \phi_\theta(\mathbf{k}_j, \mathbf{q})\) Calcular top-\(k\) diferenciable mediante umbral: \(u_{\text{ordenado}} \gets \text{ordenar}(u, \text{descendente}=\text{Verdadero})\) \(\text{suma\_acum} \gets \text{suma\_acumulada}(u_{\text{ordenado}})\) Encontrar \(\rho = \max\{i : u_{\text{ordenado}}[i] > 0 \text{ y suma\_acum}[i] \leq k\}\) \(\tau \gets (u_{\text{ordenado}}[\rho] - k) / (\rho + 1)\) \(m \gets \max(u - \tau, 0)\) Aplicar máscara y calcular atención: \(K_{\text{sel}} \gets K[m > 0]\), \(V_{\text{sel}} \gets V[m > 0]\) \(\text{puntajes} \gets \mathbf{q} K_{\text{sel}}^\top / \sqrt{d_k}\) \(\text{attn} \gets \text{softmax}(\text{puntajes})\) \(\mathbf{y} \gets \text{attn} \cdot V_{\text{sel}}\) \(\mathbf{y}\)

Características Clave

NSA (Native Sparse Attention): Ramas Jerárquicas Alineadas con el Hardware

Formulación Matemática

NSA descompone la atención dispersa en tres ramas paralelas que se combinan mediante compuertas aprendidas.

Rama de compresión

: Un MLP aprendible \(\varphi\) comprime bloques de clave-valor:

\[\tilde{K}_t^{\text{cmp}} = \left[\varphi(k_{id+1:id+l})\right]_{\substack{1 \leq i \leq \lfloor(t-l)/d\rfloor}} \quad, \quad \tilde{V}_t^{\text{cmp}} = \left[\varphi(v_{id+1:id+l})\right]\]

Rama de selección

: Los bloques de alta importancia se seleccionan basándose en puntajes comprimidos:

\[p_t^{\text{cmp}} = \text{softmax}(q_t^\top \tilde{K}_t^{\text{cmp}} / \sqrt{d}), \quad I_t = \mathrm{TopK}(p_t^{\text{cmp}}, n), \quad \tilde{K}_t^{\text{sel}} = \mathrm{Recolectar}(K, I_t)\]

Rama de ventana deslizante

: Contexto local fijo:

\[\tilde{K}_t^{\text{win}} = K_{t-w:t}, \quad \tilde{V}_t^{\text{win}} = V_{t-w:t}\]

Combinación con compuertas

: Las tres salidas de atención se combinan mediante compuertas aprendidas:

\[\alpha_t^{(\text{cmp})} = \sigma(\text{Lineal}_\text{cmp}(q_t)), \quad \alpha_t^{(\text{sel})} = \sigma(\text{Lineal}_\text{sel}(q_t)), \quad \alpha_t^{(\text{win})} = \sigma(\text{Lineal}_\text{win}(q_t))\]

\[y_t = \alpha_t^{(\text{cmp})} \cdot \text{Attn}(q_t, \tilde{K}^{\text{cmp}}, \tilde{V}^{\text{cmp}}) + \alpha_t^{(\text{sel})} \cdot \text{Attn}(q_t, \tilde{K}^{\text{sel}}, \tilde{V}^{\text{sel}}) + \alpha_t^{(\text{win})} \cdot \text{Attn}(q_t, \tilde{K}^{\text{win}}, \tilde{V}^{\text{win}})\]

Pseudocódigo Algorítmico

Consulta \(\mathbf{q}_t\), secuencias de Clave/Valor almacenadas en caché, tamaño de bloque \(l\), stride \(d\), conteo de selección \(n\), ventana \(w\) MLP de compresión \(\varphi\), redes de compuerta \(\text{Lineal}_{\text{cmp}}, \text{Lineal}_{\text{sel}}, \text{Lineal}_{\text{win}}\) Salida \(\mathbf{y}_t\) Rama de compresión: \(k_i^{\text{cmp}} \gets \varphi(\mathbf{K}_{id+1:id+l})\) \(v_i^{\text{cmp}} \gets \varphi(\mathbf{V}_{id+1:id+l})\) \(\tilde{\mathbf{K}}^{\text{cmp}} \gets [k_1^{\text{cmp}}, \ldots, k_{\lfloor t/d \rfloor}^{\text{cmp}}]\), \(\tilde{\mathbf{V}}^{\text{cmp}} \gets [v_1^{\text{cmp}}, \ldots, v_{\lfloor t/d \rfloor}^{\text{cmp}}]\) \(\mathbf{y}_t^{(\text{cmp})} \gets \text{SDPA}(\mathbf{q}_t, \tilde{\mathbf{K}}^{\text{cmp}}, \tilde{\mathbf{V}}^{\text{cmp}})\) Rama de selección: Calcular puntajes sobre comprimidos: \(\mathbf{s} \gets \text{softmax}(\mathbf{q}_t \tilde{\mathbf{K}}^{\text{cmp}\top} / \sqrt{d})\) Seleccionar los \(n\) bloques más importantes: \(I \gets \mathrm{TopK}(\mathbf{s}, n)\) Recolectar bloques completos: \(\tilde{\mathbf{K}}^{\text{sel}} \gets [\mathbf{K}_{I_i d+1:I_i d+l}]_i\), \(\tilde{\mathbf{V}}^{\text{sel}} \gets [\mathbf{V}_{I_i d+1:I_i d+l}]_i\) \(\mathbf{y}_t^{(\text{sel})} \gets \text{SDPA}(\mathbf{q}_t, \tilde{\mathbf{K}}^{\text{sel}}, \tilde{\mathbf{V}}^{\text{sel}})\) Rama de ventana: \(\mathbf{y}_t^{(\text{win})} \gets \text{SDPA}(\mathbf{q}_t, \mathbf{K}_{t-w:t}, \mathbf{V}_{t-w:t})\) Fusión con compuertas: \(\alpha^{(\text{cmp})} \gets \sigma(\text{Lineal}_{\text{cmp}}(\mathbf{q}_t))\), \(\alpha^{(\text{sel})} \gets \sigma(\text{Lineal}_{\text{sel}}(\mathbf{q}_t))\), \(\alpha^{(\text{win})} \gets \sigma(\text{Lineal}_{\text{win}}(\mathbf{q}_t))\) \(\mathbf{y}_t \gets \alpha^{(\text{cmp})} \mathbf{y}_t^{(\text{cmp})} + \alpha^{(\text{sel})} \mathbf{y}_t^{(\text{sel})} + \alpha^{(\text{win})} \mathbf{y}_t^{(\text{win})}\) \(\mathbf{y}_t\)

Características Clave

FASA: Atención Dispersa Consciente de la Frecuencia

Formulación Matemática

FASA es un método en tiempo de inferencia sin entrenamiento que explota la estructura del embedding de posición rotatorio (RoPE). Bajo RoPE, el embedding del token se rota por \(\theta_i = B^{-2(i-1)/d}\), descomponiendo el espacio \(d\)-dimensional en \(d/2\) fragmentos de frecuencia (FC).

Idea clave

: Solo un subconjunto pequeño (\(< 1\%\)) de los FC importa para la conciencia contextual; la mayoría codifica patrones posicionales.

Identificación de fragmento de frecuencia dominante

: Para cada capa \(l\) y cabeza \(h\), identificar FC dominantes mediante concordancia contextual (CA):

\[\text{CA}^{l,h,i} = \frac{|\text{TopK}(\alpha^{l,h}) \cap \text{TopK}(\alpha^{l,h,i})|}{K}\]

donde \(\alpha^{l,h}\) es la máscara de atención completa y \(\alpha^{l,h,i}\) es la máscara usando solo el FC \(i\). Los FC dominantes tienen CA alta—contribuyen significativamente al patrón de atención final.

Etapa de predicción de importancia de tokens (TIP)

: Usando solo FC dominantes, calcular importancia ligera por token:

\[S_t^{l,h} = \sum_{i \in \mathcal{I}_{\text{dom}}^{l,h}} \alpha^{l,h,i}(\mathbf{q}_t, \mathbf{K}_{1:t}), \quad \mathcal{T}_t = \text{TopK-Índices}(S_t, N_{\text{fac}})\]

Etapa de cálculo de atención enfocada (FAC)

: Calcular atención de precisión completa en los tokens seleccionados:

\[\hat{\alpha}_{\text{FAC}} = \text{softmax}\left(\frac{\mathbf{q}_t \mathbf{K}_{\mathcal{T}_t}^\top}{\sqrt{d}}\right), \quad \mathbf{o}_t = \hat{\alpha}_{\text{FAC}} \mathbf{V}_{\mathcal{T}_t}\]

Pseudocódigo Algorítmico

Consulta actual \(\mathbf{q}_t\), Clave/Valor almacenados en caché \(\mathbf{K}_{1:t}, \mathbf{V}_{1:t}\), base RoPE \(B\), FC dominantes \(\mathcal{I}_{\text{dom}}\) Presupuesto TIP \(N_{\text{tip}}\), presupuesto FAC \(N_{\text{fac}}\) Salida \(\mathbf{o}_t\) Etapa 1: Predicción de Importancia de Tokens (TIP) Calcular importancia desde FC dominantes: \(s_i \gets 0\) Rotar consulta y clave en FC \(fc\): \(\mathbf{q}^{(fc)}, \mathbf{k}_i^{(fc)}\) \(s_i^{(fc)} \gets \text{softmax}(\mathbf{q}^{(fc)} \mathbf{k}_i^{(fc)\top} / \sqrt{d})\) \(s_i \gets s_i + s_i^{(fc)}\) \(\mathcal{T}_t \gets \mathrm{TopK-Índices}([s_1, \ldots, s_t], N_{\text{fac}})\) Etapa 2: Cálculo de Atención Enfocada (FAC) \(\text{puntajes}_{\text{fac}} \gets \mathbf{q}_t \mathbf{K}_{\mathcal{T}_t}^\top / \sqrt{d}\) \(\alpha_{\text{fac}} \gets \text{softmax}(\text{puntajes}_{\text{fac}})\) \(\mathbf{o}_t \gets \alpha_{\text{fac}} \mathbf{V}_{\mathcal{T}_t}\) \(\mathbf{o}_t\)

Características Clave

SpargeAttn: Filtrado de Dos Etapas a Nivel de Bloques

Formulación Matemática

SpargeAttn es un método universal sin entrenamiento que predice qué bloques de la matriz de atención contendrán valores insignificantes y omite el cálculo para esos bloques.

Etapa 1 — Predicción dispersa

: Calcular importancia proxy de bajo costo \(\hat{s}_{ij}\) para el bloque \((i,j)\):

\[\hat{s}_{ij} = f_{\text{pred}}(\mathbf{Q}_i, \mathbf{K}_j; \text{hiperparámetros}), \quad \text{omitir si } \hat{s}_{ij} < \epsilon_1\]

Los predictores comunes incluyen similitud de media de bloque o estadísticas de autosimilitud.

Etapa 2 — Filtrado consciente de softmax

: Después de calcular \(\tilde{P}_{ij} = \text{softmax}(Q_i K_j^\top/\sqrt{d})\), verificar si la probabilidad máxima del bloque es insignificante en relación con el máximo de softmax en ejecución:

\[\text{omitir } P_{ij} V_j \quad \text{si} \quad \max(\tilde{P}_{ij}) < e^{m_{\text{antiguo}} - m_{\text{nuevo}}} \cdot \epsilon_2\]

donde \(m_{\text{antiguo}}, m_{\text{nuevo}}\) son máximos del softmax en línea en ejecución (calculados mediante numéricos estilo FlashAttention).

Pseudocódigo Algorítmico

Bloques de consulta \(\mathbf{Q}_i\) para \(i = 1, \ldots, n_b\), Bloques de clave \(\mathbf{K}_j\) para \(j = 1, \ldots, n_b\), Bloques de valor \(\mathbf{V}_j\) Umbral de predicción \(\epsilon_1\), umbral de softmax \(\epsilon_2\), tamaño de bloque \(b_s\) Salida \(\mathbf{Y}\) Inicializar: máximo de softmax en línea \(m_{\text{global}} \gets -\infty\) Inicializar: salida de fila de bloque \(\mathbf{Y}_i \gets 0\), máximo local \(m_i \gets -\infty\) Etapa 1: Predicción Dispersa Calcular importancia proxy: \(\hat{s}_{ij} \gets f_{\text{pred}}(\mathbf{Q}_i, \mathbf{K}_j)\) omitir este bloque \([i,j]\) continuar Etapa 2: Calcular y Filtrar \(\tilde{P}_{ij} \gets \text{softmax}(\mathbf{Q}_i \mathbf{K}_j^\top / \sqrt{d})\) \(m_{\text{bloque}} \gets \max(\tilde{P}_{ij})\) El bloque contribuye insignificantemente; omitir continuar Actualizar máximo global: \(m_i \gets \max(m_i, m_{\text{bloque}})\) Acumular: \(\mathbf{Y}_i \gets \mathbf{Y}_i + \tilde{P}_{ij} \mathbf{V}_j\) \(m_{\text{global}} \gets \max(m_{\text{global}}, m_i)\) \(\mathbf{Y}\)

Características Clave

MSA (MiniMax Sparse Attention): Atención Dispersa por Bloques con Rama de Índice Ligera

Formulación Matemática

MSA es un mecanismo de atención dispersa por bloques construido sobre atención agrupada por consultas (GQA) que combina una Rama de Índice ligera para la selección de bloques con una Rama Principal para atención softmax dispersa por bloques exacta sobre los bloques seleccionados. Sea \(N\) la longitud de la secuencia, \(B_k = 128\) el tamaño de bloque, y \(k = 16\) el número de bloques seleccionados por consulta (lo que yield un presupuesto fijo por consulta de \(k \cdot B_k = 2048\) tokens independientemente de \(N\)).

Rama de Índice

: Una proyección de baja dimensionalidad produce consultas de índice \(\mathbf{q}_t^{\text{idx}} \in \mathbb{R}^{d_{\text{idx}}}\) y representantes de bloque \(\mathbf{r}_b \in \mathbb{R}^{d_{\text{idx}}}\) para cada bloque KV \(b\). Los puntajes de índice por grupo GQA son: \[s_{t,b}^{(g)} = \mathbf{q}_t^{\text{idx},(g)} \cdot \mathbf{r}_b, \qquad \mathcal{I}_t^{(g)} = \mathrm{TopK}\left(\{s_{t,b}^{(g)}\}_{b=1}^{N/B_k},\; k\right)\] La entrada del índice está desconectada (stop-gradient), de modo que los gradientes no fluyen hacia atrás a través de la entrada del indexador; la Rama de Índice se entrena en su lugar mediante una pérdida de alineación KL entre su distribución de atención y la distribución de la Rama Principal. Debido a que softmax preserva el orden, los puntajes crudos de índice se alimentan directamente al operador top-\(k\) sin un softmax explícito (top-\(k\) sin exponencial), reduciendo el costo numérico.

Bloque local forzado

: El bloque que contiene la posición de consulta \(t\) siempre se incluye en \(\mathcal{I}_t^{(g)}\), garantizando cobertura de contexto local.

Rama Principal

: La atención estándar de producto punto escalado se calcula exactamente sobre la unión de los bloques seleccionados: \[\mathbf{o}_t^{(h)} = \mathrm{softmax}\left(\frac{\mathbf{q}_t^{(h)} \mathbf{K}_{\mathcal{I}_t}^{(h)\top}}{\sqrt{d_h}}\right) \mathbf{V}_{\mathcal{I}_t}^{(h)}\] donde \(\mathbf{K}_{\mathcal{I}_t}, \mathbf{V}_{\mathcal{I}_t}\) reúnen los tensores de clave/valor de precisión completa de los bloques seleccionados. La selección se realiza independientemente por grupo GQA, de modo que diferentes grupos de consulta dentro de la misma capa pueden atender a diferentes subconjuntos de bloques.

Pseudocódigo Algorítmico

Consulta \(\mathbf{Q} \in \mathbb{R}^{N \times d}\), Clave \(\mathbf{K}\), Valor \(\mathbf{V}\), tamaño de bloque \(B_k = 128\), bloques top-\(k\) \(k = 16\) Proyección de índice \(W_{\text{idx}}\) (entrada desconectada), representantes de bloque \(\{\mathbf{r}_b\}\) Salida \(\mathbf{Y} \in \mathbb{R}^{N \times d}\) Calcular representantes de bloque: \(\mathbf{r}_b \gets \mathrm{mean}(\mathbf{K}_{bB_k:(b+1)B_k})\) para \(b = 1, \ldots, N/B_k\) \(\mathbf{q}_t^{\text{idx}} \gets \mathrm{sg}(W_{\text{idx}} \mathbf{x}_t)\) Calcular puntajes de bloque: \(s_b \gets \mathbf{q}_t^{\text{idx}} \cdot \mathbf{r}_b\) Identificar bloque local: \(b_{\text{local}} \gets \lfloor t / B_k \rfloor\) \(\mathcal{I}_t^{(g)} \gets \mathrm{TopK}(\{s_b\}, k) \cup \{b_{\text{local}}\}\) Reunir KV seleccionado: \(\tilde{\mathbf{K}}_t \gets \mathrm{Gather}(\mathbf{K}, \mathcal{I}_t)\), \(\tilde{\mathbf{V}}_t \gets \mathrm{Gather}(\mathbf{V}, \mathcal{I}_t)\) Rama principal SDPA: \(\mathbf{y}_t \gets \mathrm{softmax}(\mathbf{q}_t \tilde{\mathbf{K}}_t^\top / \sqrt{d_h}) \tilde{\mathbf{V}}_t\) Agregar pérdida de alineación KL \(\mathcal{L}_{\text{KL}} = \mathrm{KL}(\text{dist índice} \,\|\, \text{dist principal})\) durante el entrenamiento \(\mathbf{Y}\)

Características Clave

SparDA (Atención Dispersa Desacoplada): Selección de Bloques Anticipada Guiada por Pronóstico

Formulación Matemática

SparDA introduce un esquema de atención dispersa desacoplado que aumenta las proyecciones estándar por capa \(Q, K, V\) con una cuarta proyección, el Pronóstico, que predice los bloques KV que serán necesarios en la siguiente capa. Esta anticipación permite solapar el prefetch CPU-a-GPU de los bloques seleccionados de la siguiente capa con la ejecución de la capa actual, ocultando la latencia de offload que afecta a las implementaciones de atención dispersa en hardware con memoria limitada.

Proyección de Pronóstico

: Para la entrada \(\mathbf{x} \in \mathbb{R}^{N \times d}\), \[\mathbf{F} = \mathbf{x} \mathbf{W}_F \in \mathbb{R}^{N \times H_{\text{kv}} \times d_f}\] con una cabeza de Pronóstico por grupo GQA, lo que reduce la sobrecarga de selección frente a los selectores multi-cabeza usados en trabajos anteriores.

Puntuación y selección de bloques

: Para cada consulta \(i\) y bloque KV \(b\) con representante \(\mathbf{r}_b\): \[S_{i,b} = \mathbf{F}_i \cdot \mathbf{r}_b, \qquad \mathcal{I}_i = \mathrm{TopK}(\{S_{i,b}\}_b, k)\]

Atención dispersa por bloques

: La atención estándar de producto punto escalado se calcula entonces sobre los bloques seleccionados: \[\mathbf{o}_i = \mathrm{softmax}\left(\frac{\mathbf{q}_i \mathbf{K}_{\mathcal{I}_i}^\top}{\sqrt{d_h}}\right) \mathbf{V}_{\mathcal{I}_i}\]

Entrenamiento

: SparDA añade menos del \(0.5\%\) de parámetros adicionales. Solo las proyecciones de Pronóstico se entrenan, emparejando la distribución de atención del selector disperso original (congelado)—una destilación ligera que preserva el comportamiento del modelo base mientras habilita el prefetch anticipado.

Pseudocódigo Algorítmico

Entrada \(\mathbf{x} \in \mathbb{R}^{N \times d}\), bloques de Clave/Valor en caché, bloques top-\(k\) \(k\) Proyecciones \(W_q, W_k, W_v, W_F\); selector base congelado \(\pi_{\text{orig}}\) Salida \(\mathbf{Y}\); bloques prefetched para la siguiente capa Calcular Pronóstico: \(\mathbf{F} \gets \mathbf{x} \mathbf{W}_F\) Calcular puntajes de bloque: \(S_{i,b} \gets \mathbf{F}_i \cdot \mathbf{r}_b\) para cada bloque \(b\) Seleccionar: \(\mathcal{I}_i \gets \mathrm{TopK}(\{S_{i,b}\}, k)\) Prefetch \(\mathbf{K}_{\mathcal{I}_i}, \mathbf{V}_{\mathcal{I}_i}\) de CPU a GPU para la siguiente capa Calcular SDPA dispersa por bloques sobre los bloques seleccionados de la capa actual: \(\mathbf{Y} \gets \mathrm{BlockSparseSDPA}(\mathbf{Q}, \mathbf{K}, \mathbf{V}, \{\mathcal{I}_i\})\) Pérdida de entrenamiento: \(\mathcal{L} \gets \mathrm{KL}(\text{dist Pronóstico} \,\|\, \pi_{\text{orig}})\) \(\mathbf{Y}\)

Características Clave

Espacio de Diseño y Criterios de Selección

Los siete métodos de atención dispersa ocupan posiciones complementarias en un espacio de diseño multidimensional:

Orientación de selección:

  1. Entrenamiento de nuevos modelos donde los recursos lo permitan: NSA o SparseK para máxima aceleración de inferencia; BigBird para garantía teórica.

  2. Comprensión de documentos de contexto largo: Longformer o FASA por simplicidad práctica; NSA para escala extrema.

  3. Aceleración de modelos existentes: FASA para LLMs basados en RoPE; SpargeAttn para cualquier arquitectura.

  4. Entornos con recursos limitados: Sparse Transformer por simplicidad y eficiencia probada a escala moderada.

Familias de Atención con Compuerta—Análisis Exhaustivo de Literatura

Resumen Ejecutivo: Compuertas para el Control de Memoria

El campo emergente de los mecanismos de atención con compuerta aborda un desafío fundamental en el modelado de secuencias: ¿cómo debe retenerse, olvidarse y actualizarse la información a medida que el modelo procesa nuevos tokens? Los estados recurrentes aditivos tradicionales acumulan toda la información sin borrado, lo que lleva a la saturación de memoria y a la incapacidad de adaptarse a contextos cambiantes. La atención softmax proporciona expresividad completa pero usa un caché KV de \(\mathcal{O}(Ld)\) durante la inferencia, limitando el tamaño de la ventana de contexto. Los mecanismos con compuerta proporcionan un punto intermedio: control selectivo sobre la supervivencia de la información.

El principio unificador entre las arquitecturas con compuerta es que las compuertas controlan qué información sobrevive. Las compuertas operan en tres niveles distintos:

  1. Decaimiento del estado recurrente (GLA, HGRN2): Compuertas multiplicativas sobre la matriz de memoria \(S_t\) controlan cuánto del estado anterior persiste en el siguiente paso.

  2. Intensidad de escritura en actualizaciones recurrentes (DeltaNet, Gated DeltaNet, Gated DeltaNet-2): Las compuertas controlan la magnitud y la dirección canalizada de la nueva información escrita en la memoria.

  3. Sesgo de logits softmax (FoX): Las compuertas inyectan sesgo de actualidad a nivel de token en el cálculo de logits de atención.

  4. Dispersidad post-atención (Gated Softmax): Las compuertas escalan selectivamente los canales de salida de SDPA.

Este apéndice sintetiza ocho arquitecturas principales de atención con compuerta publicadas entre 2023 y 2026, analizando sus fundamentos matemáticos, características de eficiencia en hardware y compensaciones empíricas.

1. Atención Lineal con Compuerta (GLA)

Fundamento Matemático

La Atención Lineal con Compuerta aumenta la atención lineal estándar (que usa un estado recurrente con valor de matriz) con decaimiento multiplicativo dependiente de los datos. La atención lineal estándar reformula el mecanismo softmax tradicional como una recurrencia sobre estados ocultos: \[\mathbf{S}_t = \mathbf{S}_{t-1} + \mathbf{v}_t \mathbf{k}_t^\top, \quad \mathbf{o}_t = \mathbf{S}_t \mathbf{q}_t\] donde el estado \(\mathbf{S}_t \in \mathbb{R}^{d_v \times d_k}\) acumula productos externos. Esta formulación puramente aditiva sufre de “sobrecarga de memoria”: la información se acumula monótonamente y no puede borrarse, degradando el rendimiento en tareas que requieren selección de contexto.

GLA introduce una matriz de compuerta diagonal \(\mathbf{G}_t \in [0,1]^{d_k \times d_k}\) dependiente de los datos: \[\mathbf{S}_t = \mathbf{G}_t \odot \mathbf{S}_{t-1} + \mathbf{v}_t \mathbf{k}_t^\top, \quad \mathbf{o}_t = \mathbf{S}_t \mathbf{q}_t\] La compuerta \(\mathbf{G}_t\) se parametriza con una estructura de producto externo: \[\mathbf{G}_t = \mathbf{1} \boldsymbol{\alpha}_t^\top, \quad \boldsymbol{\alpha}_t = \text{logsigmoid}\left(\mathbf{W}_{gk} \mathbf{x}_t\right) / c\] donde \(\mathbf{W}_{gk}\) es una proyección de rango bajo (\(\mathbb{R}^{d \to d_k}\)) y \(c \approx 16\) es un normalizador. La activación logsigmoid mapea \(\alpha_t \in \mathbb{R}\) a aproximadamente \([-1/2, 0]\), y la división por \(c\) contrae esto aún más para que esté cerca de la identidad en la inicialización. La compuerta resultante \(G_t = 1 + \alpha_t \approx 1\) cerca de la inicialización, luego aprende a decaer \((\alpha_t \to -\infty)\) información histórica.

Entrada \(\mathbf{x}_t\); estado anterior \(\mathbf{S}_{t-1}\) Proyecciones: \(W_q, W_k, W_v\) (estándar); \(W_{gk}\) (proyección de compuerta) Salida \(\mathbf{o}_t\) y estado actualizado \(\mathbf{S}_t\) \(\mathbf{q}_t \gets W_q \mathbf{x}_t\) \(\mathbf{k}_t \gets W_k \mathbf{x}_t\) \(\mathbf{v}_t \gets W_v \mathbf{x}_t\) Calcular compuerta: \(\boldsymbol{\alpha}_t \gets \text{logsigmoid}(W_{gk} \mathbf{x}_t) / 16\) Aplicar compuerta de producto externo: \(\mathbf{G}_t \gets \mathbf{1} \boldsymbol{\alpha}_t^\top\) Decaer estado anterior: \(\mathbf{S}_t^\text{decaimiento} \gets \mathbf{G}_t \odot \mathbf{S}_{t-1}\) Agregar nueva asociación: \(\mathbf{S}_t \gets \mathbf{S}_t^\text{decaimiento} + \mathbf{v}_t \mathbf{k}_t^\top\) Recuperar mediante consulta: \(\mathbf{o}_t^\text{crudo} \gets \mathbf{S}_t \mathbf{q}_t\) Aplicar compuerta de salida: \(\mathbf{o}_t \gets \text{GroupNorm}(\mathbf{o}_t^\text{crudo}) \otimes \text{SiLU}(W_g \mathbf{x}_t)\) \(\mathbf{o}_t\), \(\mathbf{S}_t\)

Entrenamiento Eficiente en Hardware

Para el entrenamiento paralelo, GLA usa un algoritmo por fragmentos que agrupa tokens en fragmentos \(C\) y calcula transiciones recurrentes en paralelo: \[\mathbf{O}_{[t]} = \overleftarrow{\mathbf{Q}}_{[t]} \mathbf{S}_{[t]}^\top + \left(\mathbf{Q}_{[t]} \mathbf{K}_{[t]}^\top \odot \mathbf{\Gamma}_{[t]}\right) \mathbf{V}_{[t]}\] donde \(\overleftarrow{\mathbf{Q}}_{[t]}\) atiende al estado en el límite del fragmento (retrospectiva), y \(\mathbf{\Gamma}_{[t]}\) es la máscara causal con escalado consciente del decaimiento: \[\mathbf{\Gamma}_{[t],ij} = \begin{cases} \prod_{l=j}^{i-1} \alpha_l & \text{si } i > j \text{ (retrospectiva)} \\ \prod_{l=1}^{i-j} \alpha_l & \text{si } i \le j \text{ (en-fragmento)} \end{cases}\] Este diseño maximiza las operaciones matmul susceptibles de aceleración mediante núcleos tensoriales, logrando una complejidad total subcuadrática \(\mathcal{O}(nLd^2/C)\) donde \(L\) es el número de cabezas de atención y \(C\) es el tamaño del fragmento.

Fortalezas y Limitaciones

Aspecto Fortalezas Limitaciones
Eficiencia computacional Entrenamiento subcuadrático mediante paralelismo por fragmentos. Inferencia con memoria constante \(O(d^2)\). Requiere kernels CUDA/Triton personalizados; no disponible en todos los frameworks.
Generalización de contexto Extiende entrenamiento de 2K tokens a más de 20K tokens con degradación de perplejidad insignificante. Aún rinde por debajo de softmax en benchmarks con mucha recuperación (aguja en el pajar).
Selectividad Decaimiento dependiente de los datos por dimensión de clave. La estructura de compuerta limita la selectividad por par clave-valor; no hay control directo sobre qué asociaciones específicas borrar.

2. DeltaNet: Atención Lineal con Corrección de Errores

Fundamento Matemático

DeltaNet aplica una regla de aprendizaje delta clásica a las actualizaciones de estado de la atención lineal. En lugar de acumulación aditiva, DeltaNet calcula la diferencia entre el valor predicho (recuperado de la memoria) y el valor objetivo, luego realiza una actualización de corrección de errores: \[\mathbf{S}_t = \mathbf{S}_{t-1}(\mathbf{I} - \beta_t \mathbf{k}_t \mathbf{k}_t^\top) + \beta_t \mathbf{v}_t \mathbf{k}_t^\top\] donde \(\beta_t \in (0,1)\) es un escalar de intensidad de escritura dependiente de los datos. Esta actualización puede descomponerse como una operación de borrado-escritura: \[\mathbf{v}_t^\text{anterior} = \mathbf{S}_{t-1} \mathbf{k}_t \quad \text{(predicción actual)}, \quad \mathbf{v}_t^\text{actualizado} = \beta_t \mathbf{v}_t + (1-\beta_t)\mathbf{v}_t^\text{anterior} \quad \text{(mezcla anterior/nuevo)}\] de modo que: \[\mathbf{S}_t = \mathbf{S}_{t-1} - \mathbf{v}_t^\text{anterior}\mathbf{k}_t^\top + \mathbf{v}_t^\text{actualizado}\mathbf{k}_t^\top\]

La idea clave es que esta regla de actualización minimiza una pérdida de ECM en línea en cada paso temporal: \[\mathcal{L}_t(\mathbf{S}) = \tfrac{1}{2}\|\mathbf{S}\mathbf{k}_t - \mathbf{v}_t\|^2 \Rightarrow \nabla_{\mathbf{S}} \mathcal{L}_t = (\mathbf{S}\mathbf{k}_t - \mathbf{v}_t)\mathbf{k}_t^\top\]

Un paso de SGD con tasa de aprendizaje \(\beta_t\) produce la actualización de la regla delta. Esta conexión con el entrenamiento en tiempo de prueba (TTT) proporciona fundamentación teórica: DeltaNet optimiza directamente la predicción de valores en tiempo de inferencia.

Entrenamiento Paralelo Eficiente

La matriz de transición de DeltaNet \(\mathbf{I} - \beta_t \mathbf{k}_t \mathbf{k}_t^\top\) es una matriz de Householder generalizada (actualización de rango 1 a la identidad). Para el entrenamiento por fragmentos, DeltaNet usa la representación WY, que representa el producto de \(m\) de estas actualizaciones de rango 1 de forma compacta: \[\prod_{i=1}^{m} (\mathbf{I} - \beta_i \mathbf{k}_i \mathbf{k}_i^\top) = \mathbf{I} - \mathbf{W}\mathbf{Y}^\top\] donde \(\mathbf{W}, \mathbf{Y} \in \mathbb{R}^{d \times m}\) se construyen recursivamente. Esta factorización permite paralelismo rico en matmul sin materializar el producto completo, manteniendo el entrenamiento por fragmentos eficiente.

Fragmento de entrada \(\mathbf{X}_{[t]}\); estado anterior \(\mathbf{S}_{t-1}\) Consultas normalizadas L2 \(\hat{\mathbf{Q}}_t\), claves \(\hat{\mathbf{K}}_t\), valores \(\mathbf{V}_t\) Salida \(\mathbf{O}_{[t]}\) y estado actualizado \(\mathbf{S}_t\) Fase por fragmentos: Normalizar: \(\hat{\mathbf{k}}_i \gets \hat{\mathbf{K}}_t[i] / \|\hat{\mathbf{K}}_t[i]\|\), \(\hat{\mathbf{q}}_i \gets \hat{\mathbf{Q}}_t[i] / \|\hat{\mathbf{Q}}_t[i]\|\) Calcular intensidad de escritura: \(\beta_i \gets \text{sigmoid}(W_\beta \mathbf{x}_i)\) Predicción: \(\hat{\mathbf{v}}^\text{pred} \gets \mathbf{S}_{i-1}^\text{en-fragmento} \hat{\mathbf{k}}_i\) Mezcla consciente del error: \(\mathbf{v}_i^\text{actualización} \gets \beta_i(\mathbf{v}_i - \hat{\mathbf{v}}^\text{pred})\) Borrar-escribir: \(\mathbf{S}_i^\text{en-fragmento} \gets \mathbf{S}_{i-1}^\text{en-fragmento} - \hat{\mathbf{v}}^\text{pred}\hat{\mathbf{k}}_i^\top + (\beta_i \mathbf{v}_i + (1-\beta_i)\hat{\mathbf{v}}^\text{pred})\hat{\mathbf{k}}_i^\top\) Salida: \(\mathbf{o}_i \gets \mathbf{S}_i^\text{en-fragmento} \hat{\mathbf{q}}_i\) Fase entre fragmentos: Usar representación WY de los productos de transición \(\mathbf{O}_{[t]}\), \(\mathbf{S}_{t}\)

Fortalezas y Limitaciones

Aspecto Fortalezas Limitaciones
Recuperación asociativa Recuperación perfecta en el benchmark MQAR (Recuperación Asociativa Multi-Consulta); la semántica de corrección de errores se ajusta naturalmente a patrones de recuperación. Sin olvido global, la memoria aún se satura en longitudes de secuencia extremas; requiere mecanismos de reinicio periódico para contexto ilimitado.
Teoría Fundamentada en optimización de ECM en línea; conexión clara con el paradigma de entrenamiento en tiempo de prueba. Requiere claves normalizadas L2 para estabilidad numérica; la normalización de doble ancho añade sobrecarga.
Rendimiento La representación WY permite entrenamiento eficiente por fragmentos. Ligeramente más lento que Mamba2 por token debido a matrices de transición más ricas (rango 1 en lugar de diagonales).

3. Gated DeltaNet: Síntesis de Compuerta y Corrección de Errores

Fundamento Matemático

Gated DeltaNet sintetiza las fortalezas de GLA y DeltaNet combinando una compuerta de decaimiento \(\alpha_t\) (de GLA) con la compuerta de intensidad de escritura \(\beta_t\) (de DeltaNet): \[\mathbf{S}_t = \mathbf{S}_{t-1}\left(\alpha_t (\mathbf{I} - \beta_t \mathbf{k}_t \mathbf{k}_t^\top)\right) + \beta_t \mathbf{v}_t \mathbf{k}_t^\top\] Reescribiendo para mayor claridad: \[\mathbf{S}_t = \alpha_t \mathbf{S}_{t-1}(\mathbf{I} - \beta_t \mathbf{k}_t \mathbf{k}_t^\top) + \beta_t \mathbf{v}_t \mathbf{k}_t^\top\] Las dos compuertas son complementarias:

Desde una perspectiva de aprendizaje en línea, Gated DeltaNet corresponde a: \[\min_{\mathbf{S}_t} \|\mathbf{S}_t - \alpha_t \mathbf{S}_{t-1}\|_F^2 - 2\langle \mathbf{S}_t \mathbf{k}_t, \beta_t(\mathbf{v}_t - \alpha_t \mathbf{S}_{t-1} \mathbf{k}_t)\rangle\] que introduce un decaimiento de pesos adaptativo \(\alpha_t\) en una actualización tipo SGD—análogo al decaimiento de pesos desacoplado en la optimización de aprendizaje profundo.

Fragmento de entrada \(\mathbf{X}_{[i]}\); estado anterior \(\mathbf{S}_{i-1}\); tamaño de fragmento \(C\) Proyecciones: \(W_q, W_k, W_v, W_\alpha, W_\beta\) Salida \(\mathbf{O}_{[i]}\) y estado \(\mathbf{S}_i\) Cálculo en-fragmento: \(\mathbf{q}_j \gets W_q \mathbf{x}_j\), \(\mathbf{k}_j \gets W_k \mathbf{x}_j\), \(\mathbf{v}_j \gets W_v \mathbf{x}_j\) \(\alpha_j \gets \text{sigmoid}(W_\alpha \mathbf{x}_j)\), \(\beta_j \gets \text{sigmoid}(W_\beta \mathbf{x}_j)\) Aplicar compuerta combinada: \(\mathbf{S}_j \gets \alpha_j \mathbf{S}_{j-1}(\mathbf{I} - \beta_j \mathbf{k}_j \mathbf{k}_j^\top) + \beta_j \mathbf{v}_j \mathbf{k}_j^\top\) \(\mathbf{o}_j \gets \mathbf{S}_j \mathbf{q}_j\) Recurrencia entre fragmentos: \(\mathbf{S}_i \gets \mathbf{S}_C\) del en-fragmento; propagar entre fragmentos mediante máscaras \(\prod \alpha\) acumulativas Compuerta de salida: \(\mathbf{O}_{[i]} \gets \text{GroupNorm}(\mathbf{O}^\text{crudo}) \otimes \text{SiLU}(W_g \mathbf{X}_{[i]})\) \(\mathbf{O}_{[i]}\), \(\mathbf{S}_i\)

Rendimiento Empírico y Compensaciones

Gated DeltaNet se ha integrado en los modelos de producción Qwen3-Next y Qwen3.5 de Alibaba. Empíricamente: \[\begin{array}{l|cccc} \textbf{Tarea} & \textbf{Gated DeltaNet} & \textbf{Mamba2} & \textbf{DeltaNet} & \textbf{GLA} \\ \hline \text{Modelado de Lenguaje} & \mathbf{1.0\times} & 1.08\times & 1.05\times & 1.12\times \\ \text{Recuperación Asociativa} & \mathbf{1.0\times} & --(sin perfecto) & \mathbf{1.0\times} & 0.75 \\ \text{Extrapolación de Longitud} & \mathbf{1.0\times} & 0.98\times & 0.96\times & 0.94\times \\ \text{Rendimiento (tokens/seg)} & 0.85\times & \mathbf{1.0\times} & 0.82\times & 0.88\times \end{array}\] Gated DeltaNet logra el mejor equilibrio entre diversas tareas a costa de un rendimiento ligeramente reducido debido a matrices de transición más ricas.

4. HGRN2: Compuerta Jerárquica con Expansión de Producto Externo

Fundamento Matemático

HGRN2 usa una expansión de estado basada en producto externo con compuertas de olvido acotadas inferiormente de forma jerárquica. La actualización de estado es: \[\mathbf{S}_t = \text{diag}(\mathbf{g}_t) \cdot \mathbf{S}_{t-1} + \mathbf{v}_t \mathbf{k}_t^\top, \quad \mathbf{o}_t = \mathbf{S}_t \mathbf{q}_t\] donde \(\mathbf{g}_t \in [b_\ell, 1]^d\) es una compuerta de olvido con cota inferior para la capa \(\ell\). Las cotas satisfacen: \[0 \le b_{\ell_{\text{poco profunda}}} < b_{\ell_{\text{media}}} < b_{\ell_{\text{profunda}}} \le 1\] es decir, las cotas aumentan (se vuelven menos restrictivas) en las capas más profundas. La compuerta en sí se calcula como: \[\mathbf{g}_t = b_\ell + (1 - b_\ell) \cdot \sigma(W_g \mathbf{x}_t)\] donde \(\sigma\) es sigmoide. Cuando \(W_g\) produce logits débilmente negativos, \(\mathbf{g}_t \approx b_\ell\) (retención forzada en capas superficiales). Cuando las salidas son fuertemente positivas, \(\mathbf{g}_t \approx 1\) (refresco de memoria en cualquier capa).

La estructura jerárquica anima a diferentes capas a especializarse en diferentes escalas temporales: las capas superficiales modelan dependencias locales (alta retención debido a la cota \(b_\ell\)), mientras que las capas profundas capturan estructura de largo alcance (compuerta flexible con cota superior alta).

Entrada \(\mathbf{x}_t\); estado anterior \(\mathbf{S}_{t-1}\); índice de capa \(\ell \in [0, L-1]\) Cotas no decrecientes: \(0 \le b_0 < b_1 < \cdots < b_{L-1} \le 1\) Salida \(\mathbf{o}_t\) y estado \(\mathbf{S}_t\) Cota de retención específica de capa: \(b \gets b_\ell\) Proyectar: \(\mathbf{q}_t \gets W_q \mathbf{x}_t\), \(\mathbf{k}_t \gets W_k \mathbf{x}_t\), \(\mathbf{v}_t \gets W_v \mathbf{x}_t\) Calcular compuerta de olvido con cota: \(\mathbf{g}_t \gets b + (1-b) \cdot \sigma(W_g \mathbf{x}_t)\) Multiplicación diagonal (vectorizada): \(\mathbf{S}_t \gets \mathbf{S}_{t-1} \circ \text{diag}(\mathbf{g}_t) + \mathbf{v}_t \mathbf{k}_t^\top\) Recuperar: \(\mathbf{o}_t \gets \mathbf{S}_t \mathbf{q}_t\) Normalización opcional: \(\mathbf{o}_t \gets \text{RMSNorm}(\mathbf{o}_t)\) \(\mathbf{o}_t\), \(\mathbf{S}_t\)

Escalado y Resultados Empíricos

A escala de 3B en 100B tokens, HGRN2 supera ligeramente a Mamba2 y a los Transformers con arquitectura LLaMA en modelado de lenguaje. La compuerta jerárquica proporciona modelado temporal multi-escala sin variantes arquitectónicas explícitas por capa. Sin embargo, la compuerta diagonal con valor vectorial (en oposición a la selección elemento a elemento) proporciona menos flexibilidad por elemento que las variantes de regla delta.

5. Forgetting Transformer (FoX): Compuerta en el Espacio de Logits Softmax

Fundamento Matemático

Forgetting Transformer (FoX), propuesto por Lin et al. , incrusta una compuerta de olvido directamente en los logits de atención softmax. En lugar de reemplazar softmax con recurrencia lineal, FoX preserva la expresividad completa de softmax mientras añade control de actualidad mediante un sesgo de logit dependiente de los datos.

Para cada posición de token \(t\) y todas las claves \(j \le t\), calcular un escalar de compuerta de olvido: \[f_t = \sigma(w_f^\top \mathbf{x}_t + b_f)\] El sesgo de logit en la posición \((i,j)\) es el producto acumulativo log-olvido: \[d_{ij} = \sum_{l=j+1}^{i} \log f_l = \log \prod_{l=j+1}^{i} f_l\] La salida de atención completa se convierte en: \[\mathbf{O} = \text{softmax}\left(\frac{\mathbf{Q}\mathbf{K}^\top}{\sqrt{d_k}} + \mathbf{D}\right) \mathbf{V}\] donde \(\mathbf{D}_{ij} = d_{ij}\). Equivalentemente: \[\text{Atencion}(i,j) = \frac{\exp(\mathbf{q}_i^\top \mathbf{k}_j / \sqrt{d_k} + d_{ij})}{\sum_{j'=1}^{i} \exp(\mathbf{q}_i^\top \mathbf{k}_{j'} / \sqrt{d_k} + d_{ij'})}\]

Esta ponderación reduce el peso de los tokens más antiguos multiplicativamente: un token de hace 10 pasos se escala por \(\prod_{l=j+1}^{i} f_l\), que es típicamente mucho menor que 1 si \(f_t < 1\) en promedio.

El mecanismo es matemáticamente equivalente a una variante aprendible dependiente de los datos de ALiBi (Atención con Sesgos Lineales), donde trabajos anteriores usaban \(d_{ij} = -\infty \cdot |i-j|\) fijo o \(d_{ij} = -(i-j)\).

Consultas \(\mathbf{Q}\), claves \(\mathbf{K}\), valores \(\mathbf{V}\); entrada \(\mathbf{X}\) Parámetros de compuerta de olvido: \(w_f \in \mathbb{R}^d\), \(b_f \in \mathbb{R}\) Salida de atención \(\mathbf{O}\) Calcular compuertas de olvido: \(f_t \gets \sigma(w_f^\top \mathbf{x}_t + b_f)\) Calcular sesgos acumulativos de log-olvido: \(d_{ij} \gets \sum_{l=j+1}^{i} \log f_l\) SDPA estándar con sesgo: Calcular puntajes: \(\mathbf{S} \gets \mathbf{Q}\mathbf{K}^\top / \sqrt{d_k}\) Agregar sesgo: \(\mathbf{S} \gets \mathbf{S} + \mathbf{D}\) Aplicar softmax: \(\mathbf{A} \gets \text{softmax}(\mathbf{S}, \text{dim}=-1)\) Ponderar valores: \(\mathbf{O} \gets \mathbf{A} \mathbf{V}\) \(\mathbf{O}\)

Integración con FlashAttention

La ventaja clave de FoX es la compatibilidad con FlashAttention y las implementaciones optimizadas existentes. Los sesgos de olvido se añaden en el cálculo de logits softmax, que ya es una operación central en el algoritmo por bloques de FlashAttention. La sobrecarga es: \[\text{Sobrecarga} \approx 0.5--2\% \text{ del tiempo de pared}\] ya que la adición de sesgo se amortiza entre las operaciones matmul.

Fortalezas y Limitaciones

FoX logra resultados de última generación en extrapolación de longitud, recuperación casi perfecta de aguja en el pajar y comprensión superior de contexto largo en comparación con los Transformers. Sin embargo, sigue siendo \(\mathcal{O}(L^2 d)\) en entrenamiento y \(\mathcal{O}(L d)\) por paso en inferencia con caché KV, limitando las longitudes de secuencia extremas.

6. Atención con Compuerta (Post-SDPA Sigmoide)

Fundamento Matemático

El Mejor Artículo de NeurIPS 2025 del equipo de Qwen propone aplicar una compuerta sigmoide después de la atención de producto punto escalado (SDPA): \[\mathbf{Y} = \text{SDPA}(\mathbf{Q}, \mathbf{K}, \mathbf{V}) = \text{softmax}\left(\frac{\mathbf{Q}\mathbf{K}^\top}{\sqrt{d_k}}\right) \mathbf{V}\] \[\mathbf{Y}' = \mathbf{Y} \odot \sigma\left(\mathbf{X} \mathbf{W}_\theta\right)\] donde el puntaje de compuerta \(\sigma(\mathbf{X} \mathbf{W}_\theta)\) puede tener forma \(\mathbb{R}^{n \times q \times d_k}\) (compuerta elemento a elemento por cabeza de consulta) o \(\mathbb{R}^{n \times q}\) (compuerta fija por cabeza). En más de 30 variantes y modelos MoE de 15B + densos de 1.7B entrenados en 3.5T tokens, el equipo encontró:

Consultas \(\mathbf{Q}\), Claves \(\mathbf{K}\), Valores \(\mathbf{V}\); entrada \(\mathbf{X}\) Matriz de proyección de compuerta \(W_g \in \mathbb{R}^{d \to d_{\text{compuerta}}}\) donde \(d_{\text{compuerta}} \in \{1, d_k\}\) Salida con compuerta \(\mathbf{Y}'\) SDPA estándar: Calcular atención: \(\mathbf{A} \gets \text{softmax}(\mathbf{Q}\mathbf{K}^\top / \sqrt{d_k})\) Ponderar valores: \(\mathbf{Y} \gets \mathbf{A} \mathbf{V}\) Calcular compuertas: Proyectar entrada: \(\mathbf{G} \gets \mathbf{X} W_g\) Aplicar sigmoide: \(\mathbf{G} \gets \sigma(\mathbf{G})\) Aplicar compuerta: Transmitir y escalar: \(\mathbf{Y}' \gets \mathbf{Y} \cdot \mathbf{G}\) Modulación elemento a elemento: \(\mathbf{Y}' \gets \mathbf{Y} \odot \mathbf{G}\) \(\mathbf{Y}'\)

Hallazgos Clave

7. Gated DeltaNet-2: Borrado y Escritura Canalizados Decouplados

Fundamento Matemático

Gated DeltaNet-2 aborda una limitación compartida de Gated DeltaNet y Kimi Delta Attention (KDA): ambos usan una única compuerta delta escalar \(\beta_t\) para controlar simultáneamente (i) cuánto contenido antiguo se borra en la dirección de lectura del eje de claves y (ii) cuánto valor nuevo se escribe en el eje de valores. Gated DeltaNet-2 desacopla estos dos roles en una compuerta de borrado canalizada \(\mathbf{b}_t\) (eje de claves) y una compuerta de escritura canalizada \(\mathbf{w}_t\) (eje de valores), heredando además el decaimiento canalizado \(\boldsymbol{\alpha}_t\) de KDA. Con estado \(\mathbf{S}_t \in \mathbb{R}^{d_k \times d_v}\), decaimiento \(\mathbf{D}_t = \mathrm{Diag}(\boldsymbol{\alpha}_t)\), dirección de borrado \(\mathbf{e}_t = \mathbf{b}_t \odot \mathbf{k}_t\) y objetivo de escritura \(\mathbf{z}_t = \mathbf{w}_t \odot \mathbf{v}_t\), la actualización de estado es: \[\mathbf{S}_t = \left(\mathbf{I} - \mathbf{k}_t \mathbf{e}_t^\top\right) \mathbf{D}_t \, \mathbf{S}_{t-1} + \mathbf{k}_t \mathbf{z}_t^\top, \qquad \mathbf{o}_t = \mathbf{S}_t^\top \mathbf{q}_t\] o, expandiendo los productos de las compuertas: \[\mathbf{S}_t = \left(\mathbf{I} - \mathbf{k}_t (\mathbf{b}_t \odot \mathbf{k}_t)^\top\right) \mathbf{D}_t \, \mathbf{S}_{t-1} + \mathbf{k}_t (\mathbf{w}_t \odot \mathbf{v}_t)^\top\] Las dos compuertas se producen mediante proyecciones lineales independientes seguidas de sigmoide: \[\mathbf{b}_t = \sigma(\mathbf{W}_b \mathbf{x}_t), \qquad \mathbf{w}_t = \sigma(\mathbf{W}_w \mathbf{x}_t)\] y el decaimiento canalizado sigue una parametrización de log-decaimiento (calculada en fp32 para evitar pérdida de precisión en productos acumulativos largos): \[\mathbf{g}_t = \mathbf{a} - \mathrm{softplus}(\boldsymbol{\delta}), \qquad \boldsymbol{\alpha}_t = \exp(\mathbf{g}_t)\] Los roles estructurales de las dos compuertas son complementarios:

Reducciones. Fijar \(\mathbf{b}_t = \beta_t \mathbf{1}_{d_k}\) y \(\mathbf{w}_t = \beta_t \mathbf{1}_{d_v}\) recupera KDA; colapsar además \(\boldsymbol{\alpha}_t\) a un escalar recupera Gated DeltaNet. Desde la perspectiva de aprendizaje en línea/pesos rápidos, la actualización es el minimizador de: \[\mathcal{L}_t(\mathbf{S}) = \tfrac{1}{2}\|\mathbf{S} - \mathbf{D}_t \mathbf{S}_{t-1}\|_F^2 - 2\left\langle \mathbf{S}^\top \mathbf{k}_t,\; \mathbf{z}_t - (\mathbf{D}_t \mathbf{S}_{t-1})^\top \mathbf{e}_t \right\rangle\]

Entrada \(\mathbf{x}_t\); estado previo \(\mathbf{S}_{t-1} \in \mathbb{R}^{d_k \times d_v}\) Proyecciones: \(W_q, W_k, W_v, W_b, W_w\); parámetros de log-decaimiento \(\mathbf{a}, \boldsymbol{\delta}\) Salida \(\mathbf{o}_t\) y estado \(\mathbf{S}_t\) \(\mathbf{q}_t \gets \mathrm{normalize}(W_q \mathbf{x}_t)\), \(\mathbf{k}_t \gets \mathrm{normalize}(W_k \mathbf{x}_t)\), \(\mathbf{v}_t \gets \mathrm{silu}(W_v \mathbf{x}_t)\) \(\mathbf{b}_t \gets \sigma(W_b \mathbf{x}_t)\) \(\mathbf{w}_t \gets \sigma(W_w \mathbf{x}_t)\) \(\boldsymbol{\alpha}_t \gets \exp(\mathbf{a} - \mathrm{softplus}(\boldsymbol{\delta}))\) Dirección de borrado: \(\mathbf{e}_t \gets \mathbf{b}_t \odot \mathbf{k}_t\); objetivo de escritura: \(\mathbf{z}_t \gets \mathbf{w}_t \odot \mathbf{v}_t\) Decaer estado: \(\mathbf{S}_t \gets \mathrm{Diag}(\boldsymbol{\alpha}_t)\, \mathbf{S}_{t-1}\) Lectura: \(\mathbf{r}_t \gets \mathbf{S}_t^\top \mathbf{e}_t\) Actualización delta: \(\mathbf{S}_t \gets \mathbf{S}_t - \mathbf{k}_t \mathbf{r}_t^\top + \mathbf{k}_t \mathbf{z}_t^\top\) Recuperar: \(\mathbf{o}_t \gets \mathbf{S}_t^\top \mathbf{q}_t\) Compuerta de salida: \(\mathbf{o}_t \gets \mathrm{GroupNorm}(\mathbf{o}_t) \odot \mathrm{silu}(W_g \mathbf{x}_t)\) \(\mathbf{o}_t\), \(\mathbf{S}_t\)

El algoritmo de entrenamiento por fragmentos extiende la representación WY de KDA absorbiendo el decaimiento canalizado en una recurrencia delta asimétrica sobre un estado normalizado por decaimiento, permitiendo paralelismo rico en matmuls en tensor cores. Como \(\mathbf{b}_t\) y \(\mathbf{w}_t\) son operadores diagonales por canal que varían por fila, el atajo de post-escalado escalar de KDA se rompe: el paso hacia atrás requiere una inversión WY consciente de las compuertas que incorpora las compuertas en cada producto escalar que acumula el gradiente.

Rendimiento Empírico y Compromisos

A 1.3B parámetros entrenados con 100B tokens FineWeb-Edu, Gated DeltaNet-2 supera a Mamba-2, Mamba-3, Gated DeltaNet y KDA en modelado de lenguaje, razonamiento de sentido común y—más notablemente—recuperación de contexto largo del mundo real y RULER (especialmente multi-key needle-in-a-haystack). Su rendimiento en H100 se mantiene casi plano (\(38.0 \to 36.1\) Kt/s) al crecer la longitud de secuencia de 2K a 16K, donde el de un Transformer cae bruscamente. Los estudios de ablación muestran que la compuerta de borrado \(\mathbf{b}_t\) explica la mayor parte de la ganancia; la compuerta de escritura \(\mathbf{w}_t\) aporta una mejora adicional menor. La variante híbrida (Gated DeltaNet-2 recurrente + atención de ventana deslizante) reduce aún más la brecha con los modelos de atención pura en tareas que requieren agregación de evidencia local.

Compromisos de Gated DeltaNet-2 a escala 1.3B / 100B tokens .
Aspecto Fortaleza Limitación
Recuperación La mejor entre modelos delta recurrentes en multi-key NIAH. La variante recurrente aún supera al Transformer en NQ/DROP.
Rendimiento Escalado casi plano 2K\(\to\)16K; pequeña sobrecarga vs KDA. Requiere un nuevo kernel Triton WY consciente de las compuertas.
Memoria Estado de inferencia constante \(\mathcal{O}(d^2)\). Rango de borrado de autovalores negativos \([0,2]\) no da ganancia consistente a 1.3B.

8. Kimi Delta Attention (KDA): Compuerta de Decaimiento Canalizada para la Regla Delta

Fundamento Matemático

Kimi Delta Attention es el módulo central de Kimi Linear y extiende Gated DeltaNet con una compuerta de decaimiento canalizada de grano más fino. Mientras que Gated DeltaNet usa un único decaimiento escalar por cabeza \(\alpha_t\) junto con la compuerta escalar de escritura delta \(\beta_t\), KDA reemplaza el decaimiento escalar con un decaimiento por canal de clave \(\boldsymbol{\alpha}_t \in \mathbb{R}^{d_k}\), parametrizado mediante una formulación de log-decaimiento y aplicado como una matriz diagonal \(\mathbf{D}_t = \mathrm{diag}(\boldsymbol{\alpha}_t)\) antes de la actualización de la regla delta. La regla delta en sí retiene una compuerta de escritura escalar por cabeza \(\beta_t\): \[\mathbf{S}_t = (\mathbf{I} - \beta_t \mathbf{k}_t \mathbf{k}_t^\top)\, \mathbf{D}_t\, \mathbf{S}_{t-1} + \beta_t \mathbf{v}_t \mathbf{k}_t^\top, \qquad \mathbf{o}_t = \mathbf{S}_t^\top \mathbf{q}_t\] El decaimiento canalizado sigue una parametrización de log-decaimiento (calculada en fp32 por estabilidad numérica en productos acumulativos largos): \[\mathbf{g} = \mathbf{a} - \mathrm{softplus}(\boldsymbol{\delta}), \qquad \boldsymbol{\alpha}_t = \exp(\mathbf{g})\] donde \(\mathbf{a}\) y \(\boldsymbol{\delta}\) son parámetros aprendidos por canal. Esto da a cada canal de clave una escala temporal de olvido independiente, permitiendo al modelo retener algunos canales más tiempo que otros dentro de la misma cabeza.

Reducción a Gated DeltaNet

: Cuando \(\boldsymbol{\alpha}_t\) colapsa a un escalar (es decir, todos los canales comparten el mismo decaimiento), KDA se reduce exactamente a Gated DeltaNet. El decaimiento canalizado es por tanto una generalización estricta que añade selectividad por canal sobre el decaimiento/escritura escalares de Gated DeltaNet.

Entrenamiento por fragmentos

: Un algoritmo por fragmentos ad hoc usa una variante Diagonal-Plus-Low-Rank (DPLR) especializada de la matriz de transición para mantener la eficiencia en hardware. El producto de las transiciones por paso \((\mathbf{I} - \beta_t \mathbf{k}_t \mathbf{k}_t^\top)\mathbf{D}_t\) admite una descomposición DPLR que permite paralelismo rico en matmuls en tensor cores preservando la estructura de decaimiento canalizado.

Entrada \(\mathbf{x}_t\); estado previo \(\mathbf{S}_{t-1} \in \mathbb{R}^{d_k \times d_v}\) Proyecciones: \(W_q, W_k, W_v, W_\beta\); parámetros de log-decaimiento \(\mathbf{a}, \boldsymbol{\delta}\) Salida \(\mathbf{o}_t\) y estado \(\mathbf{S}_t\) \(\mathbf{q}_t \gets W_q \mathbf{x}_t\), \(\mathbf{k}_t \gets W_k \mathbf{x}_t\), \(\mathbf{v}_t \gets W_v \mathbf{x}_t\) \(\beta_t \gets \mathrm{sigmoid}(W_\beta \mathbf{x}_t)\) \(\boldsymbol{\alpha}_t \gets \exp(\mathbf{a} - \mathrm{softplus}(\boldsymbol{\delta}))\) \(\mathbf{D}_t \gets \mathrm{diag}(\boldsymbol{\alpha}_t)\) Decaer estado: \(\mathbf{S}_t \gets \mathbf{D}_t \mathbf{S}_{t-1}\) Lectura: \(\mathbf{r}_t \gets \mathbf{S}_t^\top \mathbf{k}_t\) Actualización delta: \(\mathbf{S}_t \gets \mathbf{S}_t - \beta_t \mathbf{k}_t \mathbf{r}_t^\top + \beta_t \mathbf{v}_t \mathbf{k}_t^\top\) Recuperar: \(\mathbf{o}_t \gets \mathbf{S}_t^\top \mathbf{q}_t\) Compuerta de salida: \(\mathbf{o}_t \gets \mathrm{GroupNorm}(\mathbf{o}_t) \odot \mathrm{silu}(W_g \mathbf{x}_t)\) \(\mathbf{o}_t\), \(\mathbf{S}_t\)

Rendimiento Empírico y Compromisos

KDA está desplegado en Kimi Linear, un modelo híbrido (3B activados / 48B parámetros totales) que combina capas KDA con Multi-head Latent Attention (MLA). Kimi Linear supera a un baseline de MLA completa en todas las tareas evaluadas, reduce el caché KV hasta un \(75\%\), y logra hasta \(6\times\) de throughput de decodificación para contexto de 1M de tokens. El decaimiento canalizado es el principal impulsor de la ganancia: permite control fino sobre qué canales de clave persisten, mejorando el recuerdo de contexto largo frente a Gated DeltaNet con decaimiento escalar.

Compromisos de KDA en Kimi Linear (3B activados / 48B total) .
Aspecto Fortaleza Limitación
Recuperación El decaimiento canalizado mejora el recuerdo de contexto largo frente a baselines de decaimiento escalar; desplegado en Kimi Linear (híbrido 3B/48B). El estado recurrente matricial \(\mathcal{O}(d^2)\) es más pesado que la atención lineal con compuerta diagonal.
Rendimiento Hasta \(6\times\) de throughput de decodificación a 1M de contexto; \(75\%\) de reducción de caché KV frente a MLA completa. Requiere kernels por fragmentos conscientes de DPLR para eficiencia en hardware.
Memoria Estado de inferencia constante \(\mathcal{O}(d^2)\) (recurrente matricial). El cálculo log-decaimiento en fp32 añade sobrecarga; la reducción a Gated DeltaNet pierde selectividad por canal.

Principio Unificado de Compuerta

Las ocho arquitecturas comparten un principio común: la compuerta es un mecanismo para controlar el flujo de información y la retención selectiva de memoria. Las decisiones de diseño específicas divergen a lo largo de varias dimensiones:

  1. Ubicación de la compuerta: Actualizaciones de estado recurrente (GLA, DeltaNet, Gated DeltaNet, Gated DeltaNet-2, HGRN2) versus espacio de logits/salida softmax (FoX, Gated Softmax, RetNet).

  2. Granularidad de control: Por dimensión (GLA, HGRN2 diagonal), por clave (DeltaNet), por token (FoX), por cabeza (Gated Softmax) o borrado/escritura canalizados decouplados (Gated DeltaNet-2).

  3. Dependencia de datos: Completamente dependiente de datos (GLA, DeltaNet, Gated DeltaNet, Gated DeltaNet-2, FoX, Gated Softmax) versus esquemas fijos (RetNet con decaimiento exponencial).

  4. Compensación de expresividad: Eficiencia recurrente lineal (GLA, DeltaNet, Gated DeltaNet, Gated DeltaNet-2, HGRN2, RetNet) versus expresividad completa de softmax (FoX, Gated Softmax).

Implementación y Orientación Práctica

Cuándo Usar Cada Arquitectura

  1. GLA: Inferencia rápida con contextos moderados a largos (2K–20K tokens), cuando los kernels CUDA personalizados son aceptables y el rendimiento de recuperación no es crítico.

  2. DeltaNet: Fuerte recuperación asociativa y tareas de aprendizaje en contexto; bueno para tareas sintéticas (MQAR) y pruebas de asociación clave-valor.

  3. Gated DeltaNet: Modelos de producción que requieren el mejor equilibrio de recuperación, olvido y rendimiento (probado en Qwen3-Next; ICLR 2025).

  4. Gated DeltaNet-2: Cargas de recuperación de contexto largo (multi-key NIAH) donde el borrado/escritura canalizado decouplado da el recuerdo más fuerte; cuando se dispone de un kernel WY consciente de las compuertas.

  5. RetNet: Inferencia extremadamente eficiente sin almacenamiento en caché KV; adecuado para despliegues en dispositivos móviles/de borde o modelos de juguete.

  6. HGRN2: Jerarquías temporales multi-escala; cuando los límites de olvido específicos por capa son deseables.

  7. FoX: Extrapolación de longitud y comprensión de contexto largo; cuando el entrenamiento cuadrático es aceptable y no se desea reemplazar softmax.

  8. Gated Softmax: Mejora rápida para modelos softmax existentes con cambios mínimos de código; mejor para profesionales que desean ganancias inmediatas sin una reestructuración importante.

Consideraciones de Hardware

Objetivo de Hardware Arquitecturas Recomendadas Notas
GPU (H100/A100) Gated Softmax, FoX, Gated DeltaNet, Gated DeltaNet-2 Implementaciones maduras de softmax/lineal. GLA/DeltaNet requieren kernels personalizados.
TPU (alta memoria) GLA, DeltaNet, Gated DeltaNet, Gated DeltaNet-2, HGRN2 Hardware soporta matmuls eficientes; los métodos recurrentes lineales brillan.
Móvil/Borde RetNet, Gated Softmax ligero Inferencia con memoria constante es crítica.

Normalización, Cuantización, Enrutamiento de Profundidad y Algoritmos de Ejecución

Este anexo recopila el detalle a nivel de implementación para las variantes de normalización, cuantización ternaria estilo BitNet, enrutamiento adaptativo de profundidad (Mixture-of-Depths), memoria condicional (Engram), embeddings factorizados y los algoritmos de ejecución (controles de estabilidad del paso de entrenamiento, enrutador de inferencia SBERT) que soportan la tubería impulsada por configuración. (Las conexiones residuales restringidas por variedad de mHC se documentan por separado en el Anexo 9.) Las secciones principales difieren a este anexo para las formulaciones matemáticas y el pseudocódigo; las claves bibliográficas citadas aquí se resuelven contra docs/bibliography/.

Variantes de Normalización: LayerNorm, RMSNorm, pRMSNorm, Tanh Dinámico, Erf Dinámico y FlashNorm

La normalización determina cómo se controla la escala de activación a través de la profundidad. En este repositorio, la normalización no es solo una elección de modelado sino también una cuestión de compatibilidad con el esquema, porque solo ciertos valores son actualmente aceptados por norm_type. El contrato del esquema es: \[\texttt{norm\_type} \in \{\texttt{layer\_norm}, \texttt{dynamic\_tanh}, \texttt{derf}, \texttt{rms\_norm}, \texttt{prms\_norm}, \texttt{flash\_norm}\}\] Las formulaciones más relevantes para este código base son:

LayerNorm (Línea Base)

LayerNorm es el normalizador por defecto; centra y reescala cada token por su media y varianza por token: \[\mu = \frac{1}{d}\sum_{i=1}^{d} x_i, \quad \sigma^2 = \frac{1}{d}\sum_{i=1}^{d}(x_i - \mu)^2, \quad y_i = \gamma_i \frac{x_i - \mu}{\sqrt{\sigma^2 + \epsilon}} + \beta_i.\]

RMSNorm

RMSNorm elimina la centralización de la media y solo reescala por la magnitud de la raíz cuadrada media : \[\mathrm{RMS}(x)=\sqrt{\frac{1}{d}\sum_{i=1}^{d}x_i^2+\epsilon},\qquad y_i=\gamma_i\frac{x_i}{\mathrm{RMS}(x)}.\] En comparación con LayerNorm, RMSNorm es computacionalmente más simple (sin resta de la media de características) y se usa a menudo cuando es importante reducir la sobrecarga de normalización (p. ej., Llama, GPT-NeoX). Tiene una escala \(\gamma\) aprendible por dimensión pero sin término de bias.

RMSNorm Parcial (pRMSNorm)

pRMSNorm reduce aún más la sobrecarga estimando el RMS de solo el primer \(p\)% de las dimensiones ocultas: \[\mathrm{RMS}(x)=\sqrt{\frac{1}{k}\sum_{i=1}^{k}x_i^2+\epsilon},\qquad k=\lceil d\cdot p\rceil,\] explotando el supuesto de que las neuronas dentro de una capa son aproximadamente i.i.d. La misma escala \(\gamma\) se aplica a todas las dimensiones. La razón parcial \(p\) se controla mediante el campo de configuración prms_partial_ratio (por defecto \(6.25\%\)). El paper reporta que se pueden lograr resultados competitivos con tan solo el \(6.25\%\) de las entradas, aunque puede surgir inestabilidad de gradiente con razones muy pequeñas.

Tanh Dinámico (DyT)

El Tanh Dinámico propone reemplazar la normalización explícita con un mapeo elemento a elemento acotado : \[\mathrm{DyT}(x)=\tanh(\alpha x)\] donde \(\alpha\) se aprende. La idea central es que la contracción no lineal acotada puede proporcionar un escalado de señal estable sin calcular explícitamente estadísticas de normalización por token.

Erf Dinámico (Derf)

Derf extiende la misma dirección libre de normalización usando un mapeo basado en la función error : \[\mathrm{Derf}(x)=\mathrm{erf}(\alpha x+s)\] con escala/desplazamiento aprendibles. Los resultados reportados en el trabajo citado indican un rendimiento superior al de DyT y las líneas base de normalización comunes en múltiples dominios.

FlashNorm (RMSNorm sin pesos)

FlashNorm no es una nueva normalización matemática; es una reescritura algebraica exacta del ubicuo par “\(\mathrm{RMSNorm} \to \mathrm{Lineal}\)” que (i) elimina la escala aprendible por dimensión \(\mathbf{g}\) al plegarla en los pesos de la capa lineal subsecuente, y (ii) difiere la reducción escalar RMS a la salida de la multiplicación matricial, de modo que el matmul (unidad matricial) y la reducción RMS (unidad vectorial) se ejecuten en paralelo. Tres proposiciones formalizan la reescritura.

Proposición 1 (Plegado de pesos).

Dada la activación \(\mathbf{a}\in\mathbb{R}^{n}\), el peso RMSNorm \(\mathbf{g}\in\mathbb{R}^{n}\) y una lineal subsecuente \(\mathbf{W}\in\mathbb{R}^{n\times k}\), \[\mathbf{z}=\mathrm{RMSNorm}(\mathbf{a})\mathbf{W}=\frac{\mathbf{a}}{\mathrm{RMS}(\mathbf{a})}\mathbf{W}^{*},\qquad W^{*}_{i,j}=g_{i}\cdot W_{i,j}\ \Leftrightarrow\ \mathbf{W}^{*}=\operatorname{diag}(\mathbf{g})\mathbf{W}.\] La escala por dimensión \(\mathbf{g}\) se vuelve redundante y se pliega en \(\mathbf{W}\) una única vez al cargar el modelo. El módulo autónomo FlashNorm de este repositorio aplica esto directamente: no tiene parámetros aprendibles (la escala está destinada a ser absorbida por la proyección subsecuente).

Proposición 2 (Normalización diferida).

Para una lineal sin bias \(\mathbf{W}^{*}\), la conmutatividad escalar–matricial produce \[\frac{\mathbf{a}}{\mathrm{RMS}(\mathbf{a})}\mathbf{W}^{*}=\left(\mathbf{a}\mathbf{W}^{*}\right)\cdot\frac{1}{\mathrm{RMS}(\mathbf{a})}.\] El matmul \(\mathbf{a}\mathbf{W}^{*}\) y la reducción RMS son independientes entre sí; en hardware con unidades matriciales y vectoriales diferenciadas se ejecutan en paralelo, y solo una multiplicación vectorial–escalar los sincroniza. El módulo fusionado FlashNormLinear implementa esta reescritura: en la ruta sin bias calcula el matmul sobre la entrada no normalizada y multiplica el resultado por el RMS recíproco por token. Cuando la lineal tiene bias \(\mathbf{c}\), la reescritura deja de ser exacta (Observación 1 del paper): \(\left(\mathbf{a}\mathbf{W}^{*}+\mathbf{c}\right)/\mathrm{RMS}(\mathbf{a})\neq\mathbf{a}\mathbf{W}^{*}/\mathrm{RMS}(\mathbf{a})+\mathbf{c}\); la capa entonces aplica el escalar a la entrada primero y deja que la lineal añada su bias como de costumbre.

Proposición 3 (Cancelación de RMS).

Por la invariancia de escala de RMS, \(\mathrm{RMS}(\alpha\mathbf{a})=\alpha\,\mathrm{RMS}(\mathbf{a})\). Por tanto, un patrón “\(\mathrm{RMSNorm}\to\mathrm{Lineal}\to\mathrm{RMSNorm}\)” permite que el primer RMSNorm se elimine por completo: \[\mathrm{RMSNorm}\!\left(\frac{\mathbf{a}}{\mathrm{RMS}(\mathbf{a})}\mathbf{W}^{*}\right)=\mathrm{RMSNorm}\!\left(\mathbf{a}\mathbf{W}^{*}\right).\] Esta cancelación es relevante para la normalización QKV (Gemma 4) y la normalización latente MLA (DeepSeek-V2, Mistral Small 4); no se aplica automáticamente en este repositorio pero se documenta por completitud.

Composición con RMS parcial.

FlashNorm se compone naturalmente con el truco pRMSNorm (§18, subsección pRMSNorm): cuando flashnorm_partial_ratio \(=p>0\), el RMS se estima solo de los primeros \(k=\lceil d\cdot p\rceil\) elementos de la entrada, reduciendo aún más el costo de la reducción RMS en la unidad vectorial.

Interacción con BitNet.

Plegar un \(\mathbf{g}\) de coma flotante en el tensor de pesos ternarios de BitNet \(\{-1,0,+1\}\) destruiría la cuantización, y BitLinear aplica su propio LayerNorm interno antes de la cuantización de activaciones, el cual necesita la entrada normalizada. El módulo fusionado FlashNormBitLinear por tanto recurre a la composición secuencial \(\mathrm{FlashNorm}\to\mathrm{BitLinear}\): el matmul y la reducción RMS aún se ejecutan en paralelo, pero la multiplicación escalar post-matmul de la Prop. 2 se sacrifica. El plegado de \(\mathbf{g}\) en coma flotante en un tensor de pesos de 1.58 bits se deja a trabajo futuro a nivel kernel.

Pseudocódigo PyTorch.

Entrada: activación \(\mathbf{a}\in\mathbb{R}^{T\times n}\), peso RMSNorm \(\mathbf{g}\in\mathbb{R}^{n}\), lineal \(\mathbf{W}\in\mathbb{R}^{n\times k}\), bias \(\mathbf{c}\in\mathbb{R}^{k}\) o None // Prop. 1: plegado de pesos al cargar \(\mathbf{W}^{*}\gets \mathbf{g}\odot\mathbf{W}\) \(\mathbf{g}\gets \mathbf{1}\) // Prop. 2: paso forward con RMS diferida (ruta sin bias) \(\mathbf{b}\gets \mathbf{a}\mathbf{W}^{*\top}\) \(\mathrm{rms\_inv}\gets \mathrm{rsqrt}(\mathrm{mean}(\mathbf{a}^{2})+\varepsilon)\) retornar \(\mathbf{b}\cdot\mathrm{rms\_inv}\) // Observación 1: la ruta con bias es secuencial; matmul y RMS aún paralelizan retornar \((\mathbf{a}\cdot\mathrm{rms\_inv})\mathbf{W}^{*\top}+\mathbf{c}\)

Latencia reportada (GPU NVIDIA T4).

El paper reporta las siguientes aceleraciones sobre la operación norm-then-project, con un despacho adaptativo que cae al camino secuencial en el régión limitada por memoria (decodificación):

Escala Tokens Secuencial (ms) FlashNorm (ms) Aceleración Notas
SmolLM2-135M 4096 0.704 0.468 \(+33.6\%\) limitada por cómputo (prefill)
SmolLM2-135M 8192 0.929 0.599 \(+35.5\%\) limitada por cómputo (prefill)
Llama-7B 1024 1.882 1.654 \(+12.1\%\) limitada por cómputo (prefill)
Llama-7B 4096 7.628 6.570 \(+13.9\%\) limitada por cómputo (prefill)

Validación de plegado sin pérdida.

El plegado de pesos (Prop. 1) es matemáticamente exacto; el paper verificó salidas bit-idénticas en tres checkpoints abiertos:

Modelo Precisión Resultado
SmolLM2-135M fp16 diff máxima \(=0.0\), similitud coseno \(=1.0\), texto idéntico
Llama-3.2-1B fp32 generación voraz bit-idéntica
Llama-3.1-8B fp32 generación voraz bit-idéntica

La preservación de calidad en lm-evaluation-harness (wikitext word_ppl, MMLU 5-shot, HellaSwag 0-shot) se mantiene dentro del ruido del benchmark (peor \(\Delta=+0.0017\) word_ppl).

Comparación

Método Fórmula Estadísticas Necesarias Notas
LayerNorm \(\gamma_i (x_i - \mu)/\sqrt{\sigma^2 + \epsilon} + \beta_i\) media + varianza Por defecto; centrado y reescalado completo .
RMSNorm \(\gamma_i x_i/\sqrt{\frac{1}{d}\sum_j x_j^2+\epsilon}\) Solo RMS Menor sobrecarga; línea base ampliamente usada .
pRMSNorm \(\gamma_i x_i/\sqrt{\frac{1}{k}\sum_{j\le k} x_j^2+\epsilon}\) RMS parcial RMS del primer \(p\)% de dims; prms_partial_ratio por defecto \(6.25\%\) .
Tanh Dinámico \(\tanh(\alpha x)\) ninguna Transformación acotada libre de normalización; reemplazo directo .
Erf Dinámico \(\mathrm{erf}(\alpha x+s)\) ninguna Alternativa libre de normalización; mejora sobre DyT .
FlashNorm \(x_i/\sqrt{\frac{1}{d}\sum_j x_j^2+\epsilon}\) (sin pesos) Solo RMS Reescritura exacta de RMSNorm\(\to\)Lineal: pliega \(\mathbf{g}\) en \(\mathbf{W}\) (Prop. 1), difiere el escalar RMS a la salida del matmul (Prop. 2); 12–35% de reducción de latencia en GPU T4 .

Ruta de Cuantización Ternaria BitNet

Cuando use_bitnet=true, las capas BitLinear reemplazan a nn.Linear estándar con cuantización ternaria de pesos (\(-1, 0, +1\)) siguiendo BitNet . Dado el tensor de pesos \(W\), un escalado práctico es: \[s=\text{mean}(|W|),\qquad \tilde{W}=\text{clip}\left(\text{round}\left(\frac{W}{s}\right),-1,1\right).\] El mapeo empaquetado utiliza dos bits por símbolo de peso para eficiencia de almacenamiento. Esto permite una compresión significativa (\(\sim 32\times\) frente a FP32) pero es experimental y puede afectar la calidad del modelo; es más adecuado para el despliegue de inferencia.

La cuantización de activaciones para la ruta INT8 es: \[q=\text{round}\left(x\cdot\frac{127}{\max(|x|)+\epsilon}\right),\qquad q\in[-128,127]\] con des-cuantización \(x\approx q/\alpha\). Para \(N\) parámetros, las estimaciones de tamaño antes de metadatos y sobrecarga de empaquetado son: \[\text{Tamaño FP32}\approx 4N,\quad \text{Tamaño FP16}\approx 2N,\quad \text{Tamaño 1.58-bit}\approx \frac{1.58}{8}N\] lo que se alinea con objetivos de despliegue ligero .

Enrutamiento de Tokens Mixture-of-Depths (MoD)

Cuando use_mixture_of_depths=true, cada bloque del transformer puntúa los tokens con un enrutador ligero. Solo el subconjunto superior de mixture_of_depths_capacity_ratio se actualiza; los tokens omitidos pasan sin cambios . Esto asigna más profundidad a los tokens destacados, reduciendo el cómputo por capa.

Entrada: estados ocultos \(H \in \mathbb{R}^{n \times d}\), enrutador \(R\), ratio de capacidad \(\rho\) \(\text{puntajes} \gets R(H)\) \(\mathcal{S} \gets \texttt{top-k}(\text{puntajes}, k=\lceil \rho \cdot n \rceil)\) \(H_{\text{actualizar}} \gets \texttt{bloque}(H[\mathcal{S}])\) \(H[\mathcal{S}] \gets H_{\text{actualizar}}\) Salida: \(H\)

Configuración

Memoria Condicional Engram

Engram (engram_attn) implementa memoria condicional mediante búsqueda N-gram escalable . Construye tablas de búsqueda basadas en hash para contextos N-gram desde tamaño 2 hasta engram_max_ngram_size, con cabezas hash independientes por orden N-gram. Una convolución causal depthwise (engram_kernel_size) proporciona contexto de corto alcance antes de la búsqueda N-gram.

Entrada: flujo de tokens \(x_{1:n}\), órdenes N-gram \(\{2, \ldots, N\}\), cabezas hash por orden \(H\) \(h_{\text{conv}} \gets \text{DepthwiseConv1d}(x_{1:n}, k=\texttt{engram\_kernel\_size})\) \(\text{ctx}_t^{(k)} \gets x_{t-k+1:t}\) \(\text{lookup}^{(k)}_t \gets \text{HashTable}^{(k)}[\text{hash}(\text{ctx}_t^{(k)})]\) \(y_t \gets \sum_{k} \text{lookup}^{(k)}_t + h_{\text{conv},t}\) Salida: \(y_{1:n}\)

Configuración

Tamaño oculto total de Engram = \((\texttt{max\_ngram\_size} - 1) \times \texttt{n\_heads\_per\_ngram} \times \texttt{embed\_dim\_per\_head}\).

Embeddings Factorizados y Convolución de Embedding

Embeddings Factorizados

Cuando use_factorized_embedding=true, la matriz de embedding se factoriza en dos matrices más pequeñas, reduciendo parámetros de \(O(V \times H)\) a \(O(V \times R + R \times H)\) donde \(R = \texttt{factorized\_embedding\_dim}\).

Convolución de Embedding

Cuando use_embedding_conv=true, se aplica una Conv1d depthwise sobre el flujo de embeddings antes del primer bloque transformer, con tamaño de kernel embedding_conv_kernel. Esto proporciona un filtro ligero de contexto local sobre embeddings de tokens.

Controles de Estabilidad del Paso de Entrenamiento

El paso de entrenamiento guiado por esquema aplica acumulación de gradientes, recorte de norma global, guardas de explosión post-recorte y reintentos acotados de NaN/Inf. El gradiente acumulado es: \[g_{\text{acc}}=\frac{1}{K}\sum_{i=1}^{K} g_i,\quad K=\texttt{gradient\_accumulation\_steps}\] \[g_{\text{clip}} = g_{\text{acc}}\cdot \min\left(1,\frac{\tau}{\|g_{\text{acc}}\|_2+\epsilon}\right),\quad \tau=\texttt{grad\_clip\_max\_norm}\] luego los guardas de desbordamiento usan inf_post_clip_threshold y lógica de reintentos limitada por max_nan_retries.

Flujo de lotes, configuración \(C\) Inicializar contador de reintentos \(r\gets 0\) Acumular gradientes para \(K=C.\texttt{gradient\_accumulation\_steps}\) micro-lotes Aplicar recorte de norma global con \(\tau=C.\texttt{grad\_clip\_max\_norm}\) restaurar estado seguro / saltar paso; \(r \gets r+1\) continue detener entrenamiento con estado de fallo ejecutar paso del optimizador seleccionado por optimizer_class actualizar scheduler (cosine, constant, o linear_warmup_then_constant) guardar checkpoint rodante y podar a max_rolling_checkpoints actualizar mejores checkpoints hasta num_best_checkpoints emitir CSV + telemetría según gradient_log_interval y telemetry_log_interval

Enrutador de Modo de Inferencia SBERT

El despachador de inferencia SBERT selecciona entre puntuación de similitud, búsqueda sobre corpus, agrupamiento y codificación persistente sobre un único codificador compartido . La similitud coseno y la pérdida de regresión son: \[\text{cos}(e_1,e_2)=\frac{e_1^\top e_2}{\|e_1\|\|e_2\|},\qquad \mathcal{L}_{\text{cos}}=\left(\text{cos}(e_1,e_2)-y\right)^2\] con \(y\in[-1,1]\) en este pipeline.

modo \(m\), modelo \(E\), entradas \(X\) retornar \(\cos(E(x_1),E(x_2))\) retornar top-\(k\) por producto-punto/coseno contra embeddings del corpus retornar etiquetas de clustering sobre \(E(X)\) retornar embeddings serializados \(E(X)\)

Funciones de Activación

Este anexo documenta la librería completa de funciones de activación disponibles en el modelo. La librería proporciona 43 funciones de activación feed-forward: 40 activaciones elementales y 3 variantes de FFN con compuerta. Las activaciones se agrupan en cinco familias, siguiendo la taxonomía de Dubey et al.  y la visión analítica de Lederer , y se añade la Rational Activation Function (RAF) aprendible de Fang et al. .

La selección se controla mediante el campo de configuración ffn_activation (un enumerado de cadenas) y se despacha en tiempo de ejecución mediante una factoría que replica el patrón de las capas de normalización (Anexo 7).

\[\texttt{ffn\_activation} \in \{\texttt{silu},\;\texttt{gelu},\;\dots,\; \texttt{raf},\;\texttt{swiglu},\;\texttt{geglu},\;\texttt{reglu}\}\]

Familia Clásica / Sigmoid–Tanh (12 activaciones)

La familia clásica comprende activaciones suaves, sin estado, basadas en funciones logísticas y algebraicas . Todas comparten monotonicía o casi-monotonicía y son continuamente derivables.

\[\begin{aligned} \text{Sigmoid}(x) &= \frac{1}{1+e^{-x}} & \text{Rango: } (0,1),\;\text{monótona, suave} & \quad \text{\citep{lederer2021activations}} \\[4pt] \text{Tanh}(x) &= \frac{e^{x}-e^{-x}}{e^{x}+e^{-x}} = 2\,\sigma(2x)-1 & \text{Rango: } (-1,1),\;\text{monótona, suave} & \quad \text{\citep{lederer2021activations}} \\[4pt] \text{Arctan}(x) &= \arctan(x) & \text{Rango: } (-\tfrac{\pi}{2},\tfrac{\pi}{2}),\;\text{monótona, suave} & \quad \text{\citep{lederer2021activations}} \\[4pt] \text{Softsign}(x) &= \frac{x}{1+|x|} & \text{Rango: } (-1,1),\;\text{suave, deriv.\ una vez en 0} & \quad \text{\citep{lederer2021activations}} \\[4pt] \text{Elliott}(x) &= \frac{x}{1+|x|} & \text{Alias de Softsign (notación ``elliottsig'' del survey)} & \quad \text{\citep{lederer2021activations}} \\[4pt] \text{Identity}(x) &= x & \text{Rango: } (-\infty,\infty),\;\text{lineal, }C^\infty & \quad \text{(interna)} \end{aligned}\]

\[\begin{aligned} \text{Softplus}(x) &= \log(1+e^{x}) & \text{Rango: } [0,\infty),\;\text{suave, }C^\infty & \quad \text{\citep{glorot2011softplus}} \\[4pt] \text{Mish}(x) &= x\,\tanh\!\big(\text{softplus}(x)\big) = x\,\tanh\!\big(\log(1+e^{x})\big) & \text{Rango: } [\approx{-0.31},\infty),\;\text{no monótona, suave} & \quad \text{\citep{misra2019mish}} \\[4pt] \text{GELU}(x) &= x\,\Phi(x) = x\cdot\tfrac{1}{2}\Big(1+\text{erf}\!\Big(\frac{x}{\sqrt{2}}\Big)\Big) & \text{Rango: } (\approx{-0.17},\infty),\;\text{suave, probabilística} & \quad \text{\citep{hendrycks2016gelu}} \\[4pt] \text{GELU-tanh}(x) &= \tfrac{x}{2}\Big(1+\tanh\!\Big(\sqrt{\tfrac{2}{\pi}} (x+0.044715\,x^{3})\Big)\Big) & \text{Aproximación con tanh de GELU (más rápida)} & \quad \text{\citep{hendrycks2016gelu}} \\[4pt] \text{ReLU}(x) &= \max(0,x) & \text{Rango: } [0,\infty),\;\text{tramos lineales, no suave en 0} & \quad \text{\citep{nair2010relu}} \\[4pt] \text{SiLU}(x) &= x\,\sigma(x) = \frac{x}{1+e^{-x}} & \text{Rango: } (\approx{-0.278},\infty),\;\text{no monótona, suave} & \quad \text{\citep{elfwing2018silu}} \end{aligned}\]

SiLU (Sigmoid Linear Unit) es la activación por defecto (ffn_activation=silu). Cuando \(\beta=1\), el Swish paramétrico se reduce a SiLU. GELU y su aproximación con tanh son el estándar en BERT y GPT-2/3 . Mish  es una composición auto-regularizada, no monótona, de Softplus y Tanh, que supera a Swish en varios benchmarks.

Familia Rectificada (12 activaciones)

La familia de rectificadores extiende ReLU con pendientes aprendibles, variantes acotadas y formas hiperbólicas rectificadas .

\[\begin{aligned} \text{LeakyReLU}(x) &= \begin{cases} x & x\ge 0 \\ a\,x & x < 0 \end{cases}, \quad a=0.01 & \text{Rango: } (-\infty,\infty) & \quad \text{\citep{maas2013leakyrelu}} \\[4pt] \text{ReLU6}(x) &= \min\!\big(\max(0,x),\,6\big) & \text{Rango: } [0,6],\;\text{acotada, amigable para coma fija} & \quad \text{\citep{howard2017mobile}} \\[4pt] \text{HardSwish}(x) &= x\cdot\frac{\text{ReLU6}(x+3)}{6} & \text{Rango: } (\approx{-1.67},\infty),\;\text{aprox.\ barata de Swish} & \quad \text{\citep{howard2019hardswish}} \\[4pt] \text{PReLU}(x) &= \max(0,x)+\mathbf{p}\odot\min(0,x) & \text{Pendiente por canal aprendible } \mathbf{p},\;\text{init 0.25} & \quad \text{\citep{he2015prelu}} \\[4pt] \text{AbsReLU}(x) &= \max(0,x)-\max(0,-x) = x\;\text{rectificado a rampa de signo} & \text{Rango: } (-\infty,\infty) & \quad \text{\citep{dubey2021activations}} \\[4pt] \text{NLReLU}(x) &= \beta\,\log\!\big(1+\max(0,x)\big) & \text{Rango: } [0,\infty),\;\beta=1.0,\;\text{compresión logarítmica} & \quad \text{\citep{dubey2021activations}} \end{aligned}\]

\[\begin{aligned} \text{BReLU}(x) &= \min\!\big(\max(0,x),\,t\big),\quad t=1.0 & \text{Rango: } [0,t],\;\text{rectificador acotado} & \quad \text{\citep{dubey2021activations}} \\[4pt] \text{VReLU}(x) &= |x| & \text{Rango: } [0,\infty),\;\text{rectificador simétrico} & \quad \text{\citep{dubey2021activations}} \\[4pt] \text{Hexpo}(x) &= a\,\max(0,x)-c\,\max(0,-x),\quad a{=}c{=}1.0 & \text{Rectificador asimétrico bilateral} & \quad \text{\citep{dubey2021activations}} \\[4pt] \text{PenalizedTanh}(x) &= \max\!\big(0,\,\tanh(x)\big) & \text{Rango: } [0,1),\;\text{tanh rectificado, suave cerca de 0} & \quad \text{\citep{dubey2021activations}} \\[4pt] \text{DisReLU}(x) &= \max(0,\,x-\delta),\quad \delta=0.0 & \text{ReLU desplazado a la derecha} & \quad \text{\citep{dubey2021activations}} \\[4pt] \text{LiSHT}(x) &= x\,\tanh(x) & \text{Rango: } [0,\infty)\;\text{(magnitud), no monótona, suave} & \quad \text{\citep{roy2019lisht}} \end{aligned}\]

PReLU  convierte la pendiente negativa en un parámetro aprendible por canal, permitiendo a la red aprender la fuga óptima por característica. HardSwish  es la aproximación barata de Swish usada en MobileNetV3. ReLU6  se introdujo en MobileNetV1 por su compatibilidad con cuantización de coma fija.

Familia Exponencial / ELU (12 activaciones)

La familia exponencial-lineal proporciona saturación negativa suave y variantes auto-normalizadoras . Varios miembros introducen parámetros aprendibles por canal.

\[\begin{aligned} \text{ELU}(x) &= \begin{cases} x & x\ge 0 \\ \alpha(e^{x}-1) & x<0 \end{cases}, \quad \alpha=1.0 & \text{Rango: } (-\alpha,\infty) & \quad \text{\citep{clevert2016elu}} \\[4pt] \text{SELU}(x) &= \lambda\,\text{ELU}_{\alpha'}(x) & \alpha'{\approx}1.6733,\;\lambda{\approx}1.0507, & \quad \text{\citep{klambauer2017selu}} \\ & & \text{auto-normalizadora (media 0, var 1)} & \notag \\[4pt] \text{CELU}(x) &= \begin{cases} x & x\ge 0 \\ \alpha(e^{x/\alpha}-1) & x<0 \end{cases}, \quad \alpha=1.0 & \text{Derivable una vez en 0 para cualquier } \alpha & \quad \text{\citep{barron2017celu}} \\[4pt] \text{PELU}(x) &= \begin{cases} \tfrac{\alpha}{\beta}\,x & x\ge 0 \\ \alpha(e^{x/\beta}-1) & x<0 \end{cases} & \alpha,\beta\text{ aprendibles por canal} & \quad \text{\citep{trottier2017pelu}} \\[4pt] \text{MPELU}(x) &= \text{ReLU}(x)+\beta\cdot\text{ELU}_{\alpha}(x)\cdot\mathbb{1}_{x<0} & \alpha,\beta\text{ aprendibles por canal} & \quad \text{\citep{dubey2021activations}} \end{aligned}\]

\[\begin{aligned} \text{FELU}(x) &= \begin{cases} x & x\ge 0 \\ \alpha(e^{x}-1) & x<0 \end{cases} & \alpha\text{ aprendible, acotado a } [0,1] & \quad \text{\citep{dubey2021activations}} \\[4pt] \text{EELU}(x) &= \beta\,\text{ReLU}(x)+\alpha(e^{x}-1)\cdot\mathbb{1}_{x<0} & \alpha,\beta\text{ aprendibles por canal} & \quad \text{\citep{dubey2021activations}} \\[4pt] \text{PDELU}(x) &= \begin{cases} x & x\ge 0 \\ \alpha(e^{x/\alpha}-1)+(1-\alpha)\,x & x<0 \end{cases} & \alpha\text{ aprendible, interpola CELU--identidad} & \quad \text{\citep{dubey2021activations}} \\[4pt] \text{PREU}(x) &= \beta\,\text{ReLU}(x)+\alpha(e^{x}-1)\cdot\mathbb{1}_{x<0}^{\le 0} & \alpha,\beta\text{ aprendibles por canal} & \quad \text{\citep{dubey2021activations}} \\[4pt] \text{SoftExp}(x) &= \begin{cases} \tfrac{1}{\alpha}\big(e^{\alpha x}-1\big)+\alpha & \alpha>0 \\ x & \alpha=0 \\ -\tfrac{1}{\alpha}\ln\!\big(1-\alpha(x+\alpha)\big) & \alpha<0 \end{cases} & \alpha\text{ aprendible; interp.\ exp/lineal/log} & \quad \text{\citep{godfrey2015softexp}} \end{aligned}\]

\[\begin{aligned} \text{ELiSH}(x) &= \begin{cases} x\,\sigma(x) & x\ge 0 \\ (e^{x}-1)\,\sigma(x) & x<0 \end{cases} & \text{Rama pos.\ Swish, rama neg.\ con compuerta ELU} & \quad \text{\citep{basirat2019elish}} \\[4pt] \text{HardELiSH}(x) &= \begin{cases} x\cdot\text{hard\_sigmoid}(x) & x\ge 0 \\ (e^{x}-1)\cdot\text{hard\_sigmoid}(x) & x<0 \end{cases} & \text{Variante con sigmoide rígida de ELiSH} & \quad \text{\citep{basirat2019elish}} \end{aligned}\]

donde \(\text{hard\_sigmoid}(x)=\text{ReLU6}(x+3)/6\).

ELU  aporta saturación negativa suave. SELU  induce auto-normalización con \(\alpha'{\approx}1.6733\), \(\lambda{\approx}1.0507\) fijos. CELU  es derivable una vez en 0 para cualquier \(\alpha\) (a diferencia de ELU). PELU  hace ambos \(\alpha,\beta\) aprendibles por canal. Las variantes paramétricas (MPELU, FELU, EELU, PDELU, PREU) generalizan ELU y PReLU introduciendo parámetros aprendibles por canal para las ramas negativa y positiva. SoftExp  interpola continuamente entre los regímenes logarítmico (\(\alpha<0\)), lineal (\(\alpha=0\)) y exponencial (\(\alpha>0\)). ELiSH y HardELiSH  combinan comportamientos de Swish y ELU mediante una definición a tramos.

Swish y Activaciones Paramétricas

Swish  es una familia parametrizada por una pendiente \(\beta\): \[\text{Swish}_\beta(x) = x\,\sigma(\beta x) = \frac{x}{1+e^{-\beta x}}.\] Cuando \(\beta=1\) se obtiene SiLU (el valor por defecto). Con \(\beta\) grande se recupera ReLU; con \(\beta\to 0\) se aproxima a la función lineal \(x/2\).

Referencias: Swish , Maxout .

Funciones de Activación Racionales (RAF)

Siguiendo a Fang et al. , una Rational Activation Function es una razón aprendible de dos polinomios de bajo grado (un aproximante de Padé): \[F(x) = \frac{P(x)}{Q(x)} = \frac{\displaystyle\sum_{j=0}^{m} a_j\, x^{j}} {1 + R(x)}\] donde \(\mathbf{a}\in\mathbb{R}^{m+1}\) y \(\mathbf{b}\in\mathbb{R}^{n}\) son aprendibles, y el término del denominador \(R(x)\) depende de la versión. La configuración por defecto coincide con el artículo: grado \((m,n)=(5,4)\), versión “A” (segura), inicializada mediante un ajuste por mínimos cuadrados a GELU en \([-3,3]\).

La implementación admite cinco variantes de denominador:

Escalado de entrada RAFT. Dado que un aproximante de Padé es un aproximador universal fiable sólo en un intervalo acotado, el modelo RAFT preprocesa las pre-activaciones de cada token con un escalado min–max por token hacia \([-3,3]\): \[\tilde{x} = \frac{x-\min(x)}{\max(x)-\min(x)}\cdot 6 - 3.\] Se activa con ffn_activation_config.raf_input_scaling (por defecto false).

Objetivos de inicialización. Los coeficientes racionales pueden inicializarse ajustándose a cualquiera de las siguientes funciones objetivo: gelu (por defecto), relu, leaky_relu, leaky_relu_0.1, sigmoid, tanh, swish/silu, o identity. El ajuste usa una resolución por mínimos cuadrados sobre 2001 muestras uniformemente espaciadas en \([-3,3]\).

Congelado. Fijar raf_trainable=false congela los parámetros racionales, útil para ajuste eficiente en parámetros. Las RAF congeladas se emparejan típicamente con una tasa de aprendizaje separada (mayor) para el resto de parámetros de la red.

Nota sobre el nombre. El acrónimo RAF significa Rational Activation Function, no “Rectified”; corresponde a la razón polinómica aprendible descrita arriba.

Variantes de FFN con Compuerta: SwiGLU, GEGLU, ReGLU

SwiGLU, GEGLU y ReGLU  son unidades feed-forward con compuerta que reemplazan el bloque estándar \(\text{Linear}\to\text{activación}\to\text{Linear}\). Poseen sus propias proyecciones lineales y, por tanto, se implementan como módulos FFN, no como activaciones elementales: \[\text{GatedFFN}(x) = \text{dropout}\!\Big(\, W_{\text{down}}\Big(\text{act}(x\,W_{\text{gate}}) \odot (x\,W_{\text{up}})\Big)\Big),\] donde \(W_{\text{gate}}, W_{\text{up}}\in\mathbb{R}^{d\times d_{\text{ff}}}\) y \(W_{\text{down}}\in\mathbb{R}^{d_{\text{ff}}\times d}\). La función de compuerta es:

Cuando ffn_activation es uno de swiglu/geglu/reglu, la capa feed-forward sustituye los bloques FFN densos y MoE por un FFN con compuerta construido con la misma clase de proyección (BitLinear bajo BitNet). El sesgo está desactivado por defecto.

Esquema de Configuración

El objeto ffn_activation_config agrupa todos los parámetros de las activaciones aprendibles. Es opcional y se ignora para activaciones sin estado.

Guía de Selección

El siguiente árbol de decisión ayuda a elegir la activación:

Con cuantización BitNet, silu puede ser más robusta que las activaciones suaves que dependen de un cálculo de gradiente preciso. Las activaciones aprendibles (raf, prelu, swish_trainable) añaden parámetros pero pueden adaptarse a la distribución de la tarea.

Hyper-Connexiones Restringidas por Variedad (mHC)

Este anexo documenta la integración de las Hyper-Connexiones Restringidas por Variedad (Manifold-Constrained Hyper-Connections, mHC) , un marco de conexiones residuales que reemplaza el residual de identidad estándar por un flujo residual de \(n\) streams cuya matriz de mezcla de flujo se restringe al politopo de Birkhoff. El cuerpo principal difiere a este anexo la formulación matemática, los detalles de implementación y los resultados reportados; las claves bibliográficas citadas aquí se resuelven contra docs/bibliography/.

Motivación: la Propiedad de Mapeo de Identidad

La conexión residual estándar propaga señales a través de la profundidad sin modificación: con \(x_l \in \mathbb{R}^{C}\) y una función de capa \(F\), \[x_{l+1} = x_l + F(x_l, W_l),\] de modo que, recursivamente, \(x_L = x_l + \sum_{i=l}^{L-1} F(x_i, W_i)\). El término directo \(x_l\) (el mapeo de identidad) permite que la información fluya de capas superficiales a profundas sin cambios, lo que He et al.  identificaron como clave para el entrenamiento estable de redes muy profundas.

Las Hyper-Connections (HC) ensanchan el flujo residual por un factor de expansión \(n\): el flujo pasa a ser \(x_l \in \mathbb{R}^{n \times C}\) mientras que la función interna \(F\) de cada capa sigue operando en dimensión \(C\). Tres mapeos lineales aprendibles gobiernan el flujo en cada capa:

La propagación de una sola capa es \[x_{l+1} = H^{\text{res}}_l x_l + \big(H^{\text{post}}_l\big)^{\!\top} F\big(H^{\text{pre}}_l x_l, W_l\big),\] y, recursivamente, la señal profunda-a-superficial está gobernada por el mapeo compuesto \(\prod_{i=L-1}^{l} H^{\text{res}}_{i+1}\). Debido a que \(H^{\text{res}}_l\) no está restringida en HC, este compuesto se desvía de la identidad, la norma del flujo no se conserva y la señal hacia adelante/hacia atrás puede amplificarse o atenuarse sin límite. En un modelo MoE de 27B parámetros los autores reportan magnitudes de ganancia compuesta con picos cercanos a \(3000\) (frente a \(1\) para la identidad), correlacionadas con picos de norma de gradiente y una subida inesperada de pérdida alrededor del paso 12k. HC además multiplica el costo de acceso a memoria por aproximadamente \(n\) (el “muro de memoria”).

Formulación

Sea \(x_l \in \mathbb{R}^{n \times C}\) el flujo en la capa \(l\). Los coeficientes se calculan a partir del flujo aplanado \(\tilde{x}_l = \operatorname{vec}(x_l) \in \mathbb{R}^{1 \times nC}\): \[\tilde{H}_l = \frac{1}{r_l}\Big(\alpha \odot \big(\tilde{x}_l\, \varphi_l\big)\Big) + b_l, \qquad r_l = \frac{\|\tilde{x}_l\|_2}{\sqrt{nC}},\] donde \(\varphi_l \in \mathbb{R}^{nC \times (n^2+2n)}\) es una proyección lineal aprendida, \(b_l \in \mathbb{R}^{1 \times (n^2+2n)}\) un sesgo aprendido y \(\alpha^{\text{pre}}, \alpha^{\text{post}}, \alpha^{\text{res}} \in \mathbb{R}\) son escalares de compuerta aprendibles inicializados a un valor pequeño (\(0.01\) en el paper y en este código base). El escalado por \(1/r_l\) es matemáticamente equivalente a RMSNorm sobre el flujo aplanado, con la escala por dimensión absorbida en \(\varphi_l\). Los tres bloques de coeficientes son entonces: \[H^{\text{pre}}_l = \sigma\big(\tilde{H}^{\text{pre}}_l\big), \qquad H^{\text{post}}_l = 2\,\sigma\big(\tilde{H}^{\text{post}}_l\big), \qquad H^{\text{res}}_l = \mathrm{SK}\big(\exp(\tilde{H}^{\text{res}}_l)\big),\] donde \(\sigma\) es la sigmoide logística (que impone no negatividad y evita la cancelación de señal por coeficientes de signo mixto) y \(\mathrm{SK}(\cdot)\) es la proyección Sinkhorn–Knopp sobre el conjunto de matrices doblemente estocásticas \[\mathcal{M}^{\text{res}} = \big\{\, H \in \mathbb{R}^{n \times n} \;:\; H \ge 0,\;\; H\,\mathbf{1}_n = \mathbf{1}_n,\;\; \mathbf{1}_n^{\top} H = \mathbf{1}_n^{\top} \,\big\},\] es decir, el politopo de Birkhoff (la envolvente convexa de las matrices de permutación). Partiendo de \(M^{(0)} = \exp(\tilde{H}^{\text{res}}_l)\), la proyección alterna normalizaciones de filas y columnas, \[M^{(t)} = T_c\big(T_r(M^{(t-1)})\big),\] para \(t = 1, \ldots, t_{\max}\) rondas (\(t_{\max} = 20\) por defecto tanto en el paper como en este código base). Finalmente, la entrada de capa y el flujo actualizado son \[F^{\text{pre}}_l = H^{\text{pre}}_l x_l \in \mathbb{R}^{1 \times C}, \qquad x_{l+1} = H^{\text{res}}_l x_l + \big(H^{\text{post}}_l\big)^{\!\top} \otimes F\big(F^{\text{pre}}_l, W_l\big).\]

Propiedades de la Restricción de Variedad

Restringir \(H^{\text{res}}_l\) al politopo de Birkhoff restaura el comportamiento de conservación del residual de identidad y garantiza tres propiedades :

  1. Preservación de norma: la norma espectral satisface \(\|H^{\text{res}}_l\|_2 \le 1\) (mapeo no expansivo), mitigando la explosión de gradientes.

  2. Cerradura composicional: las matrices doblemente estocásticas son cerradas bajo multiplicación, por lo que el compuesto \(\prod_i H^{\text{res}}_{i}\) sigue siendo doblemente estocástico a profundidad arbitraria, preservando la propiedad de mapeo de identidad entre cualesquiera dos profundidades.

  3. Interpretación geométrica: como el politopo de Birkhoff es la envolvente convexa de las matrices de permutación, \(H^{\text{res}}_l x\) es una combinación convexa de permutaciones de características, es decir, un mecanismo monótono de mezcla de información entre streams.

Cuando \(n = 1\) la condición doblemente estocástica degenera al escalar \(1\), recuperando el mapeo de identidad exacto. Con \(t_{\max}\) finito la proyección es aproximada, y la ganancia compuesta hacia atrás se desvía de \(1\) pero permanece acotada (alrededor de \(1.6\) en las ejecuciones de 27B del paper, una reducción de  3 órdenes de magnitud frente a los \(\approx 3000\) de HC).

Implementación en Frankenstein Transformer

mHC es un reemplazo opcional de la conexión residual estándar, controlado por el sub-objeto model.mhc (esquema jerárquico) o por las claves planas use_mhc, con additionalProperties: false a nivel de sub-objeto:

El módulo vive en src/model/mhc.py:

Cableado en src/model/frankenstein_model.py:

Ejemplo de configuración: configs/examples/es_arch_mhc_adamw.yaml.

Resultados Reportados

El paper evalúa mHC (y HC) con \(n = 4\), \(t_{\max} = 20\) e inicialización de \(\alpha\) en \(0.01\) sobre modelos MoE estilo DeepSeek-V3 (atención MLA, RoPE, RMSNorm, balance de carga sin pérdida auxiliar) de 3B a 27B parámetros :

Residuales de Atención (AttnRes)

Este anexo documenta la integración de los Residuales de Atención (AttnRes) , una generalización de la conexión residual que reemplaza la suma residual de coeficiente unitario fijo por atención softmax aprendida sobre la profundidad. El cuerpo principal delega a este anexo la formulación matemática, las cuatro estrategias disponibles (estándar, sin residual, Full AttnRes, Block AttnRes), el cableado de implementación, la integración con mHC y Mixture-of-Depths, y los resultados reportados. Las claves de bibliografía citadas aquí se resuelven contra docs/bibliography/.

Motivación: De una Suma Fija a Atención sobre la Profundidad

La conexión residual estándar propaga señales a través de la profundidad sin modificar: con \(x_l \in \mathbb{R}^{C}\) y una función de capa \(F\), \[x_{l+1} = x_l + F(x_l, W_l),\] de modo que, recursivamente, \(x_L = x_l + \sum_{i=l}^{L-1} F(x_i, W_i)\). El término identidad \(x_l\) (el mapeo de identidad) permite que la información fluya de capas superficiales a profundas sin cambios, lo que He et al.  identificaron como clave para el entrenamiento estable de redes muy profundas. Las redes Highway generalizan esto con compuertas elemento-a-elemento aprendidas \(\mathbf{g}_l \in [0, 1]^{C}\), \[x_{l+1} = (1 - \mathbf{g}_l) \odot x_l + \mathbf{g}_l \odot F(x_l, W_l),\] que interpolan entre la ruta de identidad y la ruta de transformación con pesos dependientes de la entrada.

Los Residuales de Atención dan el siguiente paso: en lugar de ponderar un único estado comprimido \(x_l\), la capa \(l\) atiende sobre todas las salidas de capas anteriores. Sea \(v_0 = h_1\) (el embedding de tokens) y \(v_i = F(x_i, W_i)\) para \(i \ge 1\). AttnRes computa, para cada capa \(l\), \[q_l = w_l, \qquad k_i = \mathrm{RMSNorm}(v_i), \qquad \alpha_{i \to l} = \mathrm{softmax}_i(q_l^{\top} k_i), \qquad x_{l+1} = \sum_{i=0}^{l} \alpha_{i \to l} \, v_i,\] donde \(w_l \in \mathbb{R}^{C}\) es un pseudo-query aprendido por capa, inicializado a cero según el paper. Con la inicialización a cero, el softmax es uniforme, por lo que AttnRes degenera a un promedio equiponderado de todas las salidas previas — igualando el residual estándar en el paso cero y evitando volatilidad de entrenamiento. RMSNorm sobre las keys evita que las capas con magnitudes naturalmente grandes dominen el softmax (ablación en el paper: § 5.3).

Cuatro Estrategias

El campo de esquema model.residuals.type selecciona una de las cuatro estrategias, cada una implementada como un módulo separado bajo src/model/residuals/.

Residual Estándar ("standard")

La estrategia por defecto, retrocompatible: \[x_{l+1} = x_l + F(x_l, W_l).\] Sin estado, sin parámetros extra, sin cómputo extra. Implementada como un pass-through no-op en StandardResidual que delega el merge a HybridLayer.

Sin Residual ("none", experimental)

Elimina la conexión skip por completo: \[x_{l+1} = F(x_l, W_l).\] Sin estado, sin parámetros extra. Útil solo como sonda de ablación; el término identidad es crítico para arquitecturas profundas (paper § 2.1) y el entrenamiento suele ser inestable sin él. Implementado como NoResidual.

Residuales de Atención Completa ("full_attn", paper § 3.1)

Cada capa atiende sobre todas las salidas de capas anteriores: \[x_{l+1} = \sum_{i=0}^{l} \alpha_{i \to l} \, v_i, \qquad \alpha_{i \to l} = \mathrm{softmax}_i\!\big(w_l^{\top} \mathrm{RMSNorm}(v_i)\big).\] Añade \(L \cdot C\) parámetros (\(L\) = profundidad lógica = num_layers \(\times\) num_loops, \(C\) = hidden_size), un vector de query por capa. La memoria y el cómputo crecen como \(O(L \, d)\) por token; a profundidad típica (\(L < 1000\)) esto es insignificante. Implementado como FullAttentionResidual; soporta attnres_gradient_checkpoint para envolver la atención en torch.utils.checkpoint en ejecuciones con restricciones de memoria.

Residuales de Atención por Bloques ("block_attn", paper § 3.2)

Particiona las \(L\) capas lógicas en \(N\) bloques de \(S = \lceil L / N \rceil\) capas cada uno. Dentro de un bloque las salidas de capa se acumulan como suma parcial estándar \(b_n^i\); a través de los bloques la atención se aplica sobre las \(N\) representaciones de bloque completas y la suma parcial en curso. Para la capa \(l\) en el bloque \(n\), \[x_{l+1} = \sum_{m=0}^{n} \alpha_{m \to l} \, v_m, \qquad \alpha_{m \to l} = \mathrm{softmax}_m\!\big(w_l^{\top} \mathrm{RMSNorm}(v_m)\big),\] con \(v_m = b_m\) para \(m < n\) y \(v_n = b_n^{i_l}\) (la suma parcial intra-bloque actual). \(N\) interpola entre Full AttnRes (\(N = L\), un bloque por capa) y residuales estándar (\(N = 1\), el embedding aislado como \(b_0\)). El sweet spot empírico del paper es \(N \approx 8\); este código base usa \(N = 8\) por defecto y valida \(N \le L\). Implementado como BlockAttentionResidual, que sigue el Algoritmo 1 del paper (cómputo en dos fases con fusión online-softmax).

Implementación en Frankenstein Transformer

El paquete src/model/residuals/ aloja una clase por estrategia (StandardResidual, NoResidual, FullAttentionResidual, BlockAttentionResidual) más un ResidualBase abstracto que define los hooks del ciclo de vida set_streams, register_state, reset_state, forward y finalize. La factoría build_residual(config) en src/model/residuals/factory.py selecciona la clase correcta desde FrankensteinModelConfig.

Cableado en src/model/frankenstein_encoder.py:

Cableado en src/model/hybrid_layer.py:

Esquema (jerárquico, con los renombres a claves planas entre paréntesis) y valores por defecto:

Integración con mHC y Mixture-of-Depths

La estrategia residual es ortogonal a mHC y Mixture-of-Depths (MoD): todas las combinaciones están soportadas. Los modos de interacción son:

mHC \(\times\) AttnRes (mhc_stream_mode).

Cuando use_mhc=true y el residual es full_attn o block_attn, la atención sobre la profundidad se aplica por stream ("independent") o sobre la proyección aplanada \(nC\)-dimensional ("joint"). El modo independent ejecuta \(n\) atenciones en paralelo, una por stream — coincidiendo con el encuadre del paper donde cada stream es una "vista" paralela del residual. El modo joint trata los \(n\) streams como un único residual grueso, más expresivo pero más hambriento de parámetros. Las proyecciones de coeficientes de mHC (\(\varphi_l\), \(b_l\), compuertas \(\alpha\)) no se ven afectadas; AttnRes añade sus propios parámetros encima.

Mixture-of-Depths \(\times\) AttnRes.

MoD opera dentro de una capa (selecciona qué tokens reciben la actualización completa de capa) y es ortogonal a la elección residual. Cuando use_mixture_of_depths=true junto con un residual AttnRes, solo los tokens seleccionados por MoD contribuyen al buffer de salidas de capa (Full AttnRes) o a la suma parcial intra-bloque (Block AttnRes); el resto pasa sin cambios y se re-ensambla mediante la lógica existente de MoD. MoD es mutuamente excluyente con mHC (se lanza un ValueError en HybridLayer._init__ si ambos están habilitados); las combinaciones correspondientes son \((\text{no\_mHC}, \text{MoD}, \text{AttnRes})\), \((\text{mHC}, \text{no\_MoD}, \text{AttnRes})\), o \((\text{mHC}, \text{no\_MoD}, \text{no\_AttnRes})\).

Resultados Reportados

El paper valida AttnRes mediante leyes de escalado, ablaciones y una extensión Kimi Linear de 48B parámetros:

Configuraciones de ejemplo: configs/examples/full_attn_res_adamw.yaml, configs/examples/block_attn_res_adamw.yaml, configs/examples/mhc_full_attn_res_adamw.yaml.

Vision Transformer: Predicción de Parches, Clasificación y Segmentación

Este anexo documenta la clase de modelo frankenstein_vit, una implementación del Vision Transformer (ViT) que reutiliza la pila de HybridLayer agnóstica de modalidad del encoder. Soporta tres tareas: predicción autosupervisada de parches enmascarados, clasificación de imágenes y segmentación de imágenes (por-pixel o estilo EoMT ).

Embedding de Parches y Codificación Posicional

Embedding de Parches.

La imagen de entrada \(x \in \mathbb{R}^{H \times W \times C}\) se divide en \(N = HW/P^2\) parches no solapados de \(P \times P\), proyectados linealmente a \(D\) dimensiones mediante una Conv2d (Ec. 1 del paper ViT). La secuencia de entrada se construye como \[z_0 = [x_\text{class};\; x_p^1 E;\; \dots;\; x_p^N E] + E_\text{pos},\] donde \(E \in \mathbb{R}^{P^2 C \times D}\) es la matriz de proyección de parches y \(E_\text{pos}\) es la codificación posicional.

Codificación Posicional.

Por defecto, se usa una nn.Parameter aprendible 1D de forma \((1, N+1, D)\), fiel al paper ViT. La alternativa none confía en RoPE/HoPE dentro de los mezcladores de atención, delegando la codificación posicional a los componentes de atención reutilizables.

Token [CLS].

Un token aprendible opcional se antepone a la secuencia de parches para clasificación. La salida en la posición 0 alimenta la cabeza de clasificación.

Predicción de Parches Enmascarados (Autosupervisado)

El preentrenamiento autosupervisado sigue el esquema de enmascaramiento estilo BERT del Apéndice B.1.2 del paper ViT: se corrompe el \(50\%\) de los parches, de los cuales el \(80\%\) se reemplaza por un token de máscara, el \(10\%\) por un parche aleatorio y el \(10\%\) se mantiene sin cambios.

Se soportan tres objetivos de reconstrucción:

  1. Color medio de 3 bits: cross-entropy sobre \(512\) clases (mejor desempeño reportado).

  2. Parche 4\(\times\)4 submuestreado de 3 bits: \(16 \times 512\) cabeceras de cross-entropy.

  3. L2 de parche completo: MSE sobre los píxeles crudos (estilo MAE ).

El modelo predice solo en las posiciones enmascaradas; la pérdida se calcula exclusivamente sobre los parches corrompidos, evitando que la reconstrucción trivial de parches no enmascarados domine la señal de aprendizaje.

Clasificación de Imágenes

Pooling.

La representación de salida se obtiene del token [CLS] (posición 0) o mediante Global Average Pooling (GAP) sobre todos los parches.

Cabeza.

Una capa lineal \(\text{Linear}(D, K)\) inicializada en cero, siguiendo ViT Sec. 3.2, para fine-tuning estable sobre las clases \(K\).

Pérdida.

Cross-entropy estándar sobre las \(K\) clases.

Segmentación de Imágenes

Dos tipos de cabeza, seleccionados por el campo de esquema seg_head_type:

Cabeza Por-Pixel (pixel)

Cada token de parche se proyecta a num_seg_classes canales mediante una \(\text{Linear}(D, \text{num\_seg\_classes})\), se redimensiona a \((H/P, W/P)\) y luego un upsampler de convoluciones transpuestas estilo ViTDet lo escala a la resolución completa \((H, W)\). La pérdida combina cross-entropy + Dice. Se soporta segmentación 1D en escala de grises (2 clases) y multicolor no solapada (\(N+1\) clases).

Encoder-only Mask Transformer (eomt)

Basado en EoMT :

Reutilización de la Infraestructura Existente

Los 34 mezcladores de atención (excepto engram_attn, que requiere IDs de tokens), 6 normas, 4 residuales, 42 activaciones y 23 optimizadores se reutilizan sin cambios mediante HybridLayer, que es agnóstica de modalidad y opera sobre tensores de forma \((B, S, D)\).

La clase FrankensteinViT refleja el patrón envoltorio de FrankensteinDecoder: posee un PatchEmbed + una pila de HybridLayer + una cabeza específica de tarea, y fuerza mode=’encoder’ en tiempo de ejecución.

Pseudocódigo en PyTorch

El siguiente pseudocódigo ilustra el paso forward para la tarea de clasificación:

Entrada: pixel_values \(\in \mathbb{R}^{B \times C \times H \times W}\) \(x \gets \texttt{patch\_embed}(\texttt{pixel\_values})\) \(x \gets [\texttt{cls\_token}];\, x\) \(x \gets x + \texttt{pos\_embed}\) \(x \gets \texttt{dropout}(x)\) \(x \gets \texttt{layer}(x)\) \(x \gets \texttt{final\_norm}(x)\) \(\texttt{logits} \gets \texttt{head}(x[:, 0])\) Salida: logits \(\in \mathbb{R}^{B \times K}\)