Febrero 2026
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.
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:
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.
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).
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) .
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 .
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.
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:
Campos de formulario impulsados por esquemas con títulos de parámetros y descripciones detalladas
Información sobre herramientas en tiempo real y texto de ayuda para cada opción de configuración
Vista previa YAML en vivo y funcionalidad de descarga
Comandos CLI generados para entrenamiento, despliegue, inferencia y flujos de trabajo SBERT
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.
Este trabajo realiza las siguientes contribuciones principales:
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.
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.
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) .
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.
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.
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.
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.
Este documento está organizado como una referencia técnica que aborda cuatro preocupaciones operativas:
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.
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.
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).
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.
Despliegue e Inferencia: Las Secciones 6 y 7 describen el despliegue cuantizado y los flujos de trabajo de incrustación de oraciones.
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.
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.1 y 5 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.
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.
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.
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.
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:
Más de 35 mezcladores de secuencia que abarcan atención densa, bloques recurrentes/retentivos, patrones de atención dispersa, mecanismos con compuerta, enrutamiento adaptativo por profundidad y capas de memoria condicional, todos seleccionables mediante un único campo YAML.
23 familias de optimizadores con un sistema de enrutamiento de hiperparámetros con prefijos que permite control por grupo de parámetros a través de embeddings, capas de normalización, bloques de atención y redes feed-forward.
Modos de entrenamiento duales que soportan tanto modelado de lenguaje enmascarado (MLM) estilo encoder como predicción del siguiente token autorregresiva (AR) estilo decoder, con flujos de trabajo de ajuste fino especializados para cada uno.
Validación estricta de esquemas mediante
restricciones additionalProperties: false que previenen
errores de configuración antes de que comience el entrenamiento,
asegurando reproducibilidad entre experimentos.
Flujos de trabajo de extremo a extremo que abarcan despliegue cuantizado (empaquetado de pesos ternarios, activaciones INT8) y entrenamiento de sentence embeddings inspirado en SBERT .
Interfaz de configuración web que proporciona renderizado de formularios basado en esquemas con documentación en línea, validación en tiempo real y generación de comandos CLI.
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.
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:
model_class
model
training
El campo model_class determina la variante
arquitectónica instanciada por el pipeline de entrenamiento. Se soportan
dos opciones:
frankenstein: Modelos encoder de arquitectura mixta que soportan diversos mecanismos de atención (estándar, sigmoide, retentiva, espacio de estados, dispersa y mezcladores con compuerta) con MoE (Mezcla de Expertos) y características avanzadas. Optimizado para entrenamiento bidireccional tipo encoder con objetivos de modelado de lenguaje enmascarado (MLM).
frankensteindecoder: Decoder causal
autorregresivo para generación de siguiente token estilo LLM. Permite el
enmascaramiento de atención causal para tareas de generación secuencial
de texto. Cuando se selecciona esta clase, en tiempo de ejecución se
fuerza mode=’decoder’.
El campo model.mode controla el comportamiento de
enmascaramiento de atención en todo el modelo:
encoder: Utiliza atención bidireccional donde todos los tokens atienden a todos los demás tokens en la secuencia. Adecuado para tareas de preentrenamiento de modelado de lenguaje enmascarado (MLM) donde el modelo aprende a predecir tokens enmascarados aleatoriamente basándose en el contexto completo.
decoder: Utiliza enmascaramiento causal donde
cada token solo puede atender a tokens anteriores en la secuencia.
Requerido para tareas autorregresivas (AR) de predicción del siguiente
token, como modelado de lenguaje y generación de texto. Cuando
model_class=’frankensteindecoder’, el sistema fuerza
automáticamente mode=’decoder’ en tiempo de
ejecución.
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.
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}\}\]
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.
El campo training.task determina el objetivo de
entrenamiento, trabajando en conjunto con model.mode para
definir cómo aprende el modelo:
Modo: Requiere mode=’encoder’ para
atención bidireccional.
Objetivo: Enmascarar aleatoriamente tokens en la secuencia de entrada (típicamente 15%) y entrenar al modelo para predecir los tokens enmascarados basándose en el contexto bidireccional completo.
Caso de Uso: Preentrenamiento de encoders para aprendizaje de representaciones, siguiendo la metodología BERT . El modelo aprende representaciones bidireccionales que capturan contexto tanto de izquierda como de derecha.
Configuración: Utiliza el parámetro
mlm_probability para controlar la fracción de
enmascaramiento.
causal_lm).Modo: Requiere mode=’decoder’ para
enmascaramiento causal.
Objetivo: Predicción autorregresiva del siguiente token — cada posición \(i\) predice el token \(i+1\) dados solo los tokens precedentes. La cross-entropy se calcula sobre todas las posiciones desplazadas sin enmascarar (no hay enmascaramiento), a diferencia del MLM que supervisa solo posiciones enmascaradas aleatoriamente.
Caso de Uso: Generación de lenguaje y tareas estilo LLM siguiendo la metodología GPT. El modelo aprende dependencias secuenciales con atención causal donde cada token solo puede atender a tokens precedentes.
Clase de Modelo: Establecer
task=’causal_lm’ y
model_class=’frankensteindecoder’; el esquema y el runtime
requieren la clase decoder para esta tarea (el enmascaramiento causal
solo lo proporciona el decoder).
Configuración: Reutiliza
training.optimizer; el dataset de streaming almacena las
secuencias sin enmascarar (labels == input_ids) para que el
trainer pueda calcular la pérdida de siguiente token
desplazada.
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.
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.
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.
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.
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):
Residual estándar
(residual_type="standard"): el residual de identidad
clásico , \(x_{l+1} = x_l + F(x_l, W_l)\). Sin estado,
sin parámetros extra.
Sin residual (residual_type="none",
experimental): \(x_{l+1} = F(x_l,
W_l)\), eliminando la conexión skip por completo. Útil solo como
sonda de ablación.
Residuales de Atención
(residual_type="full_attn" o "block_attn")
: reemplazan
la suma residual de coeficiente unitario fijo por atención softmax
aprendida sobre la profundidad. Cada capa atiende sobre todas las
salidas de capas anteriores (Full AttnRes) o sobre un pequeño conjunto
de representaciones acumuladas por bloque (Block AttnRes). Añade \(L \cdot C\) parámetros (un vector de query
aprendido \(\mathbf{w}_l\) por capa).
Los queries inicializados a cero hacen que la atención inicial sea un
promedio equiponderado, igualando el residual estándar en el paso
cero.
Hyper-Connexiones Restringidas por Variedad
(residual_type combinado con mhc.enabled=true,
documentado por separado en el Apéndice 20): el
residual de n streams cuya matriz de mezcla de flujo se
restringe al politopo de Birkhoff mediante Sinkhorn–Knopp.
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.
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.
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.
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.
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.
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.
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.
Memoria Condicional (1): Engram proporciona memoria en tiempo de prueba mediante operaciones de lectura/escritura aprendidas sobre un banco de memoria externo.
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í.
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.
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.
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.
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.
El stack de despliegue utiliza empaquetado ternario de pesos más cuantización de activaciones INT8 para producir artefactos eficientes.
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.
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:
Similitud: puntuación por pares entre dos oraciones.
Búsqueda: \(k\) vecinos más cercanos sobre un corpus.
Clustering: agrupación de embeddings (ej., k-means).
Codificación: exportación persistente de embeddings para recuperación posterior.
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.
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.
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.
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).
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.
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.
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.
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:
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.
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).
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).
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.
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.
Varias limitaciones y direcciones prometedoras para trabajo futuro surgen del diseño e implementación de este sistema:
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.
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.
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.
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.
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.
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.
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.
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.
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.
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 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:
Mucho ruido: Alguien está hablando y es muy importante para ti.
Ignoras el resto: Tu cerebro automáticamente enfoca la atención en esa persona, ignorando otros sonidos.
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.
Veamos cómo un transformer entiende la palabra “come” en dos contextos diferentes:
El transformer, al procesar “come”, pregunta internamente:
¿Qué tan relevante es “El”? Poco (es solo un artículo). Atención baja.
¿Qué tan relevante es “gato”? Muy relevante (es el sujeto, quien come). Atención alta.
¿Qué tan relevante es “pescado”? Muy relevante (es lo que se come). Atención alta.
Por lo tanto, la representación mental de “come” se enfoca principalmente en “gato” y “pescado”.
Aquí el transformer pregunta en un contexto diferente:
¿Qué tan relevante es “restaurante”? Muy relevante (es el sujeto). Atención alta.
¿Qué tan relevante es “beneficio”? Muy relevante (se ve afectado). Atención alta.
¿Qué tan relevante es “márgenes”? Muy relevante (es lo que se consume). Atención alta.
La palabra “come” obtiene una representación completamente diferente porque “atiende” a palabras distintas en contextos distintos.
Detrás del cambio de atención hay matemáticas. Aquí está la versión simplificada sin demasiado detalle técnico:
Cada palabra en la oración se transforma en tres versiones:
Consulta: “¿Qué información necesito saber?”
Clave: “¿Qué información tengo?”
Valor: “Aquí está mi información importante.”
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.
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).
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á).
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.
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:
Persona 1: “Me enfoco en las relaciones sujeto-verbo.”
Persona 2: “Busco el objeto directo.”
Persona 3: “Sigo la información sobre el tiempo verbal.”
Persona 4: “Busco modificadores y adjetivos.”
Cada “cabeza” aprende a enfocarse en diferentes patrones del lenguaje. Juntas, capturan una comprensión mucho más rica que una sola cabeza.
Los transformers procesan información en múltiples capas (generalmente de 12 a 48 para modelos prácticos). Imagina editar un ensayo:
Primera pasada: Corriges ortografía y gramática básica.
Segunda pasada: Mejoras la claridad y la estructura de las oraciones.
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).
El mecanismo de atención fue revolucionario porque:
Paralelismo: Encuentra contexto para cualquier palabra con cualquier otra palabra, sin procesarlas secuencialmente (a diferencia de sistemas anteriores). Esto lo hace muy rápido.
Flexibilidad: Aprende qué patrones buscar automáticamente a partir de los datos, sin necesidad de programar reglas manualmente.
Escalabilidad: Funciona desde textos pequeños hasta contextos con millones de palabras.
Capacidades generales: El mismo mecanismo funciona para traducción, resumen, preguntas-respuestas, generación de texto, visión por computadora y más.
A pesar del extraordinario éxito de los transformers, presentan desafíos:
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.
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.
Los transformers fueron diseñados para TPUs y GPUs potentes. Ejecutarlos en teléfonos o dispositivos integrados es un desafío.
Para resolver estos desafíos, la investigación ha propuesto muchas variantes:
Atención Dispersa: En lugar de comparar cada palabra con TODAS las demás, compara solo con un subconjunto estratégico (vecinos cercanos, patrones periódicos). Reduce la complejidad de \(\mathcal{O}(n^2)\) a \(\mathcal{O}(n \log n)\) o \(\mathcal{O}(n)\).
Modelos Recurrentes: Como Mamba, incorporan aspectos de las antiguas redes neuronales recurrentes pero con mejor eficiencia moderna.
Atención con Compuerta: Mecanismos que aprenden selectivamente qué información pasar hacia adelante, reduciendo las necesidades de almacenamiento.
Cuantización: Usar números más pequeños (enteros en lugar de decimales) para reducir la memoria sin perder demasiada precisión.
Estas innovaciones son lo que este kit de herramientas (Frankenstein) te permite experimentar fácilmente.
Un transformer es una red neuronal que entiende el contexto del lenguaje muy bien.
El mecanismo de atención permite que cada palabra “se enfoque” en qué otras palabras son relevantes para entender su significado.
La atención funciona calculando la compatibilidad entre cada palabra (consulta) y todas las demás (claves), luego combinando información basada en esa compatibilidad (valores).
Múltiples cabezas de atención exploran diferentes patrones en paralelo.
Múltiples capas refinan progresivamente la comprensión.
El principal desafío es que la atención estándar tiene complejidad cuadrática, lo que es costoso para textos largos.
Muchas soluciones modernas (atención dispersa, modelos recurrentes, cuantización) abordan estos desafíos, y este kit de herramientas te permite explorarlas todas.
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.
El objeto raíz del esquema tiene cinco propiedades de nivel superior.
Todas son opcionales excepto training, que es
obligatorio:
base_model (string) — Identificador de modelo
HuggingFace o ruta local para preentrenamiento continuo o ajuste fino
SBERT. Cuando se establece, model_class y
model no son obligatorios (la arquitectura se infiere del
checkpoint).
tokenizer (object) — Configuración del tokenizador
con campos name_or_path (string), use_fast
(bool) y trust_remote_code (bool). Obligatorio cuando se
usa base_model con la tarea mlm.
model_class (enum) — Variante de arquitectura del
modelo: frankenstein (codificador de arquitectura mixta) o
frankensteindecoder (decodificador causal autorregresivo).
Obligatorio cuando base_model no está establecido.
model (object) — Parámetros de arquitectura del
modelo (ver §11.2). Obligatorio cuando
base_model no está establecido.
training (object, obligatorio) —
Configuración de entrenamiento (ver §11.3).
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.
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.
| 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.
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.
| 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 |
El objeto training controla todo el pipeline de
entrenamiento. El único campo obligatorio es task. La
Tabla 3 enumera todos los campos 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(). |
El objeto training.optimizer tiene dos campos:
optimizer_class (enum, obligatorio) — Uno de 23
algoritmos 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, q_apollo.
parameters (object) — Hiperparámetros del
optimizador con claves prefijadas en el formato
<optimizador>-<grupo>_<param>.
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):
Grupos de tasa de aprendizaje:
lr_embeddings, lr_norms,
lr_attention, lr_other
Grupos de decaimiento de peso:
wd_embeddings, wd_norms,
wd_attention, wd_other
Grupos beta: betas_embeddings,
betas_norms, betas_attention,
betas_other
Grupos epsilon: eps_embeddings,
eps_norms, eps_attention,
eps_other
Nota: los parámetros de los mezcladores ODE, RetNet y Mamba se
enrutan al grupo attention en lugar de tener grupos
dedicados.
La Tabla 4 enumera los sufijos globales adicionales soportados por cada optimizador (prefijados por el nombre del optimizador).
| 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 |
El objeto training.sbert configura el ajuste fino
Sentence-BERT. Es obligatorio cuando training.task=sbert.
Los campos clave incluyen:
dataset_name (string) — Identificador de dataset
HuggingFace o ruta local.
dataset_type (enum) —
paired_similarity, triplets o
qa.
columns (object) — Sobrescrituras opcionales de
nombres de columna para campos del dataset.
query_prefix / document_prefix (string)
— Texto antepuesto a campos de consulta/documento durante la
tokenización.
output_dir (string) — Directorio para artefactos
SBERT.
batch_size (int) — Ejemplos por lote. Típico:
16–64.
gradient_accumulation_steps (int) — Pasos de
acumulación para SBERT.
max_grad_norm (float) — Umbral de recorte de
gradiente. Típico: 0.5–2.0.
epochs (int) — Pasadas completas por el dataset
SBERT. Típico: 1–10.
warmup_steps (int) — Pasos para calentamiento de
LR.
evaluation_steps (int) — Evaluar cada N
pasos.
checkpoint_save_steps (int) — Guardar checkpoint
rotativo cada N pasos.
resume_from_checkpoint (bool) — Reanudar desde el
último checkpoint.
learning_rate (float) — LR inicial. Típico: \(1\times10^{-5}\) a \(1\times10^{-4}\).
max_train_samples / max_eval_samples
(int) — Limitar muestras de entrenamiento/evaluación.
max_seq_length (int) — Longitud máxima de tokens
para textos de entrada. Típico: 128–512.
pooling_mode (enum) — mean,
cls o max.
trust_remote_code (bool) — Permitir código
personalizado del repositorio del modelo.
use_amp (bool) — Activar precisión mixta
FP16.
resample_balanced (bool) — Remuestrear a
distribución balanceada sobre puntajes de similitud.
standardize_scores (bool) — Normalizar puntajes de
similitud con puntuación Z.
resample_std (float) — Desviación estándar objetivo
cuando standardize_scores=true.
optimizer (object) — Optimizador personalizado para
SBERT (mismas clases que el entrenamiento MLM).
wandb_project (string) — Nombre del proyecto Weights
& Biases para telemetría.
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:
additionalProperties: false se aplica en todos los
niveles de anidamiento. Cualquier clave no reconocida en cualquier
objeto desencadena un error de validación.
model.dims.hidden_size debe ser divisible por
model.dims.num_heads. La dimensión por cabeza es \(\texttt{hidden\_size} /
\texttt{num\_heads}\).
model.dims.num_kv_heads debe dividir
model.dims.num_heads exactamente cuando se usa Atención por
Consultas Agrupadas.
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.
Cuando base_model está configurado,
training.task es obligatorio. Si task=mlm,
tokenizer.name_or_path también es obligatorio.
task: mlm requiere training.optimizer;
task: sbert requiere training.sbert;
task: causal_lm requiere training.optimizer y
model_class=’frankensteindecoder’.
bitnet_routers=true requiere
use_bitnet=true. La bandera no tiene efecto en caso
contrario.
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.
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.
model_class: frankensteindecoder fuerza
model.dims.mode: decoder en tiempo de ejecución. Establecer
model.dims.mode: encoder con esta clase se
sobrescribe.
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.
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.
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.
| 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é | |
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.
| 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\) | |
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.
| 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) | |
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.
| 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\) | |
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.
| 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)\) | sí | |
| 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)\) | sí | |
| mpelu | Exponencial | ELU + \(\alpha,\beta\) aprendibles | sí | |
| felu / eelu / pdelu / preu | Exponencial | variantes ELU c/ params aprendibles | sí | |
| softexp | Exponencial | interpolación exp/lineal/log | sí | |
| elish / hardelish | Exponencial | Swish \(\cup\) ramas ELU con compuerta | no | |
| Aprendibles / Adaptativas (4) | ||||
| swish_trainable | Aprendible | \(x\,\sigma(\beta x)\), \(\beta\) entrenable | sí | |
| maxout | Aprendible | \(\max_{i}(W_i x+b_i)\) | sí | |
| raf | Aprendible | \(P(x)/Q(x)\) Padé\((5,4)\), versión A | sí | |
| Variantes FFN con compuerta (3) | ||||
| swiglu | Compuerta | \(\text{SiLU}(xW_g)\odot(xW_u)\,W_d\) | sí | |
| geglu | Compuerta | \(\text{GELU}(xW_g)\odot(xW_u)\,W_d\) | sí | |
| reglu | Compuerta | \(\text{ReLU}(xW_g)\odot(xW_u)\,W_d\) | sí | |
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.
| 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) |
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.
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 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 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\)
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 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 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 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\)
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\)
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\)
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 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 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\)
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 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.
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 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 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\)
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 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 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 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 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 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. |
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.
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.
Complejidad de entrenamiento: \(\mathcal{O}(n^2 \cdot d)\) tiempo, \(\mathcal{O}(n^2)\) espacio (materialización de la matriz de atención).
Complejidad de inferencia: \(\mathcal{O}(n)\) tiempo por token, \(\mathcal{O}(n)\) espacio (caché KV).
Fortalezas: Expresividad incomparable; recuperación perfecta del historial; altamente paralelizable.
Debilidades: El cuello de botella cuadrático prohíbe contextos muy largos; el caché KV domina la memoria durante la generación.
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.
Complejidad de entrenamiento: \(\mathcal{O}(n^2 \cdot d)\) (idéntico al estándar), pero las operaciones elemento a elemento permiten una aceleración de inferencia del 17% mediante FlashSigmoid.
Complejidad de inferencia: \(\mathcal{O}(n)\) por token con caché KV (asintóticamente igual, pero con factores constantes más bajos).
Fortalezas: Supera la competencia de suma cero; evita la sincronización por filas; implementación eficiente en hardware.
Debilidades: Requiere estabilización cuidadosa (norma híbrida); inestabilidad de entrenamiento a grandes escalas sin pérdida auxiliar.
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.
Complejidad de entrenamiento: \(\mathcal{O}(n^2 \cdot h \cdot d_h)\) (idéntico a MHA tras la expansión de cabezas).
Complejidad de inferencia: \(\mathcal{O}(n)\) por token, espacio de caché KV \(\mathcal{O}(h_k \cdot n \cdot d_h)\).
Fortalezas: Balance flexible de cabezas; probado a escala (Llama 2 y 3 usan \(h_k = 8\) cabezas KV con \(h = 32\) cabezas de consulta); reduce el caché KV en factor \(G \times\); soporta inferencia rápida con FlashAttention.
Debilidades: Menos cabezas KV pueden reducir la capacidad representacional en modelos pequeños; requerir que \(h_k\) divida a \(h\) restringe las opciones arquitectónicas.
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.
Complejidad de entrenamiento: \(\mathcal{O}(n^2 \cdot d)\) (paralela), o \(\mathcal{O}(n \cdot c \cdot d)\) (recurrente por fragmentos con tamaño de fragmento \(c\)).
Complejidad de inferencia: \(\mathcal{O}(1)\) por token, \(\mathcal{O}(d^2)\) espacio de estado (matriz fija).
Fortalezas: Inferencia en tiempo constante; triple paradigma de cómputo; consolidación multi-escala.
Debilidades: El decaimiento fijo impone un sesgo inductivo rígido; puede truncar patrones de largo alcance aprendidos.
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.
Complejidad de entrenamiento: \(\mathcal{O}(n \cdot d)\) mediante escaneo consciente del hardware (lineal en la longitud de la secuencia).
Complejidad de inferencia: \(\mathcal{O}(1)\) por token, \(\mathcal{O}(d)\) estado (vector oculto).
Fortalezas: Logra entrenamiento lineal e inferencia constante simultáneamente; práctico en secuencias largas (millones de tokens).
Debilidades: La compresión del vector de estado puede debilitar la copia exacta y la recuperación asociativa densa en comparación con la atención completa.
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.
Complejidad de entrenamiento: \(\mathcal{O}(k \cdot n^2 \cdot d)\) donde \(k\) es el orden RK (4 para RK4).
Complejidad de inferencia: \(\mathcal{O}(k \cdot n)\) por token (mayor sobrecarga constante).
Fortalezas: Precisión significativamente mayor en tareas de generación (BLEU de última generación); eficiente en parámetros mediante uso compartido de pesos.
Debilidades: Alto costo de cómputo por paso; la latencia de inferencia aumenta por un factor constante \(k\); requiere compuertas complejas para la estabilidad.
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.
Complejidad de entrenamiento: Aproximadamente \(\mathcal{O}(c^2 + n \cdot f)\) donde \(c\) es la ventana local y \(f\) es la sobrecarga de actualización de memoria.
Complejidad de inferencia: \(\mathcal{O}(c^2)\) atención local más \(\mathcal{O}(1)\) recuperación de memoria por token.
Fortalezas: Maneja longitudes de contexto extremas; permite recuperación asociativa real; la memoria se adapta a la entrada.
Debilidades: Significativamente más complejo; la inferencia incluye cálculos de gradientes; mayor sobrecarga de coordinació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.
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.
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.
\[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.\]
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\)
Complejidad de entrenamiento: \(\mathcal{O}(n^2 \cdot d)\) (atención completa sobre cabezas descomprimidas).
Complejidad de inferencia: \(\mathcal{O}(n)\) por token, espacio de caché KV \(\mathcal{O}(r_{kv} \cdot n)\) (sólo latente).
Entrenable: totalmente entrenable; \(r_{kv}\) es un hiperparámetro (óptimo de Pareto \(\approx d/2\)).
Fortalezas: reduce a la mitad el caché KV frente a MHA con calidad equivalente; compatible con RoPE; cuello de botella latente limpio.
Limitaciones: la up-proyección añade FLOPs de decodificación; el rango latente es un presupuesto global fijo compartido entre cabezas.
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.
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}.\]
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}\)
Complejidad de entrenamiento: \(\mathcal{O}(n^2 \cdot d)\), idéntica a MLA.
Complejidad de inferencia: \(\mathcal{O}(n)\) por token, estado latente \(\mathcal{O}(r_{kv} \cdot n)\); ruta elegida por hardware.
Entrenable: se entrena una sola vez; las dos rutas de decodificación reutilizan los mismos pesos.
Fortalezas: decodificación adaptativa al hardware sin pérdida de calidad; la equivalencia algebraica garantiza consistencia.
Limitaciones: mismas compensaciones de rango latente que MLA; la selección de ruta es una heurística de despliegue.
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.
\[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.\]
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\)
Complejidad de entrenamiento: \(\mathcal{O}(n^2 \cdot d)\) (atención completa sobre cabezas concatenadas).
Complejidad de inferencia: \(\mathcal{O}(n)\) por token, estado \(\mathcal{O}(r_{kv} \cdot n)\) particionado entre \(L\) dispositivos.
Entrenable: totalmente entrenable; \(L\) controla la granularidad de partición.
Fortalezas: aceleración de decodificación de 2.8\(\times\); particionamiento limpio tensor-paralelo de 4 vías del caché; preserva el presupuesto latente total.
Limitaciones: requiere que \(L\) divida a \(r_{kv}\); más matrices de proyección que MLA; all-reduce inter-dispositivo en la salida.
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.
\[\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}\).
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}\)
Complejidad de entrenamiento: \(\mathcal{O}(n^2 \cdot d)\) sobre los tensores reconstruidos.
Complejidad de inferencia: \(\mathcal{O}(n)\) por token; tamaño de caché gobernado por \(k_{\text{rank}}\).
Entrenable: los rangos son hiperparámetros; la factorización es una repas de pesos directa.
Fortalezas: unifica MHA/GQA/MLA; reducción de parámetros de un orden de magnitud con métricas equivalentes; compatible con FlashAttention/RoPE.
Limitaciones: dos matmuls por proyección añaden latencia; la selección de rango es un problema de ajuste por tarea.
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.
\[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].\]
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]\)
Complejidad de entrenamiento: \(\mathcal{O}(n^2 \cdot H \cdot P)\) con \(P \approx H\), es decir \(\mathcal{O}(n^2 \cdot H^2)\).
Complejidad de inferencia: \(\mathcal{O}(n)\) por token con caché KV; sobrecarga extra de mezcla \(\mathcal{O}(H^2 P)\).
Entrenable: las matrices de mezcla se aprenden; \(P\) es un hiperparámetro.
Fortalezas: eficiencia de parámetros \(\Theta(\sqrt{k})\) en Polinomial; grandes ganancias en recuperación y razonamiento.
Limitaciones: costo de mezcla cuadrático en cabezas; más patrones de atención a computar; latencia añadida con \(H\) grande.
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.
\[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.\]
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}\)
Complejidad de entrenamiento: \(\mathcal{O}(n^2 \cdot G \cdot d_h)\) donde \(G\) es el número de grupos (frente a \(H\) cabezas en GQA).
Complejidad de inferencia: \(\mathcal{O}(n)\) por token; caché de valores \(\mathcal{O}(r_v \cdot n)\), caché de claves reducido por compartición de grupo.
Entrenable: la asignación de grupo y el rango latente son entrenables/hiperparámetros.
Fortalezas: hasta 62.5% de reducción de FLOPs de atención, 70% de encogimiento de caché KV, 2\(\times\) de aceleración de extremo a extremo.
Limitaciones: el mapa compartido reduce la diversidad por cabeza; el decodificador no lineal añade latencia; el agrupamiento debe elegirse con cuidado.
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.
\[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}.\]
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\)
Complejidad de entrenamiento: \(\mathcal{O}(n^2 \cdot d / m)\) sobre la secuencia fusionada (longitud \(\lceil n/m \rceil\)) más costo de la hyper-red.
Complejidad de inferencia: \(\mathcal{O}(n/m)\) por token sobre slots fusionados; estado \(\mathcal{O}(r_{kv} \cdot n / m)\).
Entrenable: la hyper-red y la ventana de fusión \(m\) se aprenden/eliges; la máscara consciente del stride garantiza consistencia.
Fortalezas: aceleración de decodificación de 5.3\(\times\), reducción de memoria GPU de 8.3\(\times\) frente a MHA; compresión temporal ortogonal a la compresión de rango.
Limitaciones: la ventana de fusión puede difuminar detalle temporal fino; la hyper-red añade cómputo; el diseño de la máscara no es trivial.
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.
\[\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}.\]
Complejidad de entrenamiento: \(\mathcal{O}(n^2 \cdot d / C)\) (atención en latente comprimido, \(C{\times}\) menos FLOPs que MHA).
Complejidad de inferencia: \(\mathcal{O}(n)\) por token, espacio de caché KV \(\mathcal{O}(\tilde{e} \cdot n)\).
Entrenable: \(C\), tamaños de kernel de conv, y los tres trucos (convs, qk-mean, value-shift) son configurables.
Fortalezas: Reduce params, caché Y FLOPs simultáneamente; RoPE se integra nativamente; \(>\)2\(\times\) menos params que MLA a igual compresión.
Limitaciones: No elimina la cuadrática \(S^2\) (sólo la divide por \(C\)); conv/qk-mean/v-shift añaden sesgo inductivo; se necesita kernel fusionado para la aceleración teórica.
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.
Complejidad de entrenamiento: \(\mathcal{O}(n^2 \cdot d / C_1)\) (el término \(S^2\) escala por \(1/C_1\); los términos de proyección por \(1/C_1 + 1/C_2\)).
Complejidad de inferencia: \(\mathcal{O}(n)\) por token, espacio de caché KV \(\mathcal{O}(\tilde{e}_{kv} \cdot n)\) (comprimido por \(C_2\), compartido por grupo).
Entrenable: \(C_1\), \(C_2\), \(n_{kv}\), y todos los trucos CCA son configurables. Restricción: \(C_2/C_1 = n_h/n_{kv}\).
Fortalezas: Compresión desacoplada permite frontera de Pareto suave; misma intensidad aritmética que GQA; mejor pérdida a 8\(\times\) reducción de caché.
Limitaciones: Misma cuadrática \(S^2\) (sólo reducida por \(C_1\)); se necesita kernel fusionado; dos proyecciones de valor añaden complejidad.
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.
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 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.
: 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\}\]
: 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.
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}\)
Complejidad: \(\mathcal{O}(n\sqrt{n} \cdot d)\) durante el entrenamiento; \(\mathcal{O}(n)\) por token durante la generación.
Entrenable: Sí; retropropagación completa a través de las posiciones seleccionadas.
Patrón de dispersidad: Fijo e independiente de los datos; los patrones no se adaptan al contenido.
Fortaleza: Alcanzabilidad estructurada que garantiza dependencias de largo alcance; demostrado efectivo en secuencias largas (Enwik8, imágenes de texto).
Limitación: Los patrones fijos pueden pasar por alto relaciones importantes pero no contiguas; requiere kernels CUDA personalizados para eficiencia práctica.
Longformer logra una complejidad lineal \(\mathcal{O}(n \cdot w)\) combinando tres patrones de atención complementarios.
: Vecindario local de tamaño \(w\): \[\mathcal{A}_i^{(\text{ventana})} = \{j : |i - j| \leq w/2\}\]
: 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\}\]
: 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.
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}\)
Complejidad: \(\mathcal{O}(n \cdot w)\) donde \(w\) es el tamaño de ventana (lineal cuando \(w \ll n\)).
Entrenable: Sí; reemplazo directo para la atención estándar.
Cobertura: Con \(L\) capas y tamaño de ventana \(w\), el campo receptivo crece a \(L \times w\), cubriendo toda la secuencia con redes poco profundas.
Fortaleza: Práctico para tareas a nivel de documentos; la dilatación expande los campos receptivos locales con sobrecarga mínima; los tokens globales proporcionan correspondencia consulta-documento.
Limitación: El tamaño de ventana sigue siendo un hiperparámetro de diseño; subóptimo para tareas que requieren patrones de atención densos.
BigBird preserva la aproximación universal y la completitud de Turing utilizando una combinación fundamentada de tres patrones de dispersidad.
: Cada posición se conecta a \(r\) posiciones muestreadas aleatoriamente: \[\mathcal{A}_i^{(\text{aleatoria})} = \text{MuestraAleatoria}(\{1, \ldots, n\}, r)\]
: Vecindario de ventana deslizante: \[\mathcal{A}_i^{(\text{local})} = \{j : |i-j| \leq w/2\}\]
: 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.
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.
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}\)
Complejidad: \(\mathcal{O}(n)\) o casi lineal en implementación óptima de bloques dispersos.
Entrenable: Sí.
Base teórica: Mantiene demostrablemente la aproximación universal y la completitud de Turing con conectividad dispersa.
Fortaleza: Rendimiento sólido en documentos largos para preguntas-respuestas, resúmenes y tareas de genómica.
Limitación: El muestreo aleatorio introduce varianza y no determinismo; el ajuste de los hiperparámetros \(r, w, g\) sigue dependiendo de la tarea.
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\)).
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}\)
Complejidad: \(\mathcal{O}(n \cdot d)\) durante el entrenamiento (lineal en la longitud de la secuencia); \(\mathcal{O}(k)\) por token durante la generación.
Entrenable: Sí; flujo de gradiente de extremo a extremo a través del operador SparseK.
Generación incremental: Soporta generación autorregresiva eficiente con memoria constante.
Fortaleza: Se integra perfectamente en arquitecturas LLM existentes; mínimo ajuste fino necesario.
Limitación: El acceso a memoria disperso de la selección top-\(k\) puede limitar la eficiencia de caché en algunos hardwares; la red de puntuación añade sobrecarga.
NSA descompone la atención dispersa en tres ramas paralelas que se combinan mediante compuertas aprendidas.
: 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]\]
: 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)\]
: Contexto local fijo:
\[\tilde{K}_t^{\text{win}} = K_{t-w:t}, \quad \tilde{V}_t^{\text{win}} = V_{t-w:t}\]
: 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}})\]
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\)
Complejidad: \(\mathcal{O}(t/d + n \cdot l + w)\) tokens atendidos por paso (significativamente reducido frente a \(\mathcal{O}(t)\) para densa).
Entrenable: Sí; entrenamiento directo con todas las ramas diferenciables.
Alineación con hardware: Diseñado para utilización eficiente de núcleos tensoriales; la compresión y selección reducen la presión sobre el ancho de banda de memoria.
Fortaleza: 11.6\(\times\) de aceleración en decodificación y 9\(\times\) de aceleración hacia adelante en secuencias de 64k; supera a la atención completa en muchas tareas.
Limitación: Requiere kernels Triton/CUDA personalizados; la arquitectura multi-rama compleja aumenta la sobrecarga de ingeniería.
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).
: Solo un subconjunto pequeño (\(< 1\%\)) de los FC importa para la conciencia contextual; la mayoría codifica patrones posicionales.
: 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.
: 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}})\]
: 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}\]
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\)
Complejidad: TIP es \(\mathcal{O}(t \cdot N_{\text{tip}})\); FAC es \(\mathcal{O}(N_{\text{fac}} \cdot d)\).
Entrenable: No; optimización de inferencia sin entrenamiento.
Aplicabilidad: Requiere modelos basados en RoPE; extendido a ALiBi y MLA con modificaciones.
Fortaleza: Precisión cercana a la óptima con \(\leq 256\) tokens de entre millones; hasta 2.56\(\times\) de aceleración en decodificación; ortogonal a la cuantización.
Limitación: Requiere calibración fuera de línea; la identificación de FC dominantes añade sobrecarga de preprocesamiento.
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.
: 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.
: 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).
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}\)
Complejidad: Empírica \(\mathcal{O}(n^2 \cdot s)\) donde \(s\) es la fracción de bloques no omitidos (típicamente 0.2–0.5).
Entrenable: No; aceleración plug-and-play para modelos existentes.
Universalidad: Funciona en modelos de lenguaje, modelos de difusión de imágenes y generación de video.
Fortaleza: 2.5–5\(\times\) de aceleración comparado con métodos densos o dispersos anteriores; compatible con cuantización (integración SageAttention).
Limitación: La aceleración depende de la dispersidad inherente; la granularidad a nivel de bloque puede pasar por alto patrones más finos; se requiere ajuste de umbral por familia de modelos.
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\)).
: 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.
: El bloque que contiene la posición de consulta \(t\) siempre se incluye en \(\mathcal{I}_t^{(g)}\), garantizando cobertura de contexto local.
: 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.
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}\)
Complejidad: Rama de índice \(\mathcal{O}(H_{\text{kv}} \cdot d_{\text{idx}} \cdot N^2)\); Rama principal \(\mathcal{O}(H_q \cdot d_h \cdot N \cdot k \cdot B_k)\). Presupuesto por consulta fijo en \(k \cdot B_k = 2048\) tokens independientemente de \(N\).
Entrenable: Sí; de extremo a extremo (la Rama de Índice se entrena mediante una pérdida de alineación KL, no es solo inferencia).
Estado: Caché KV \(\mathcal{O}(N)\) (tamaño GQA); sin expansión de la dimensión de estado recurrente.
Fortaleza: Desplegado en el modelo 109B MiniMax-M3, MSA logra una reducción de cómputo de atención por token de \(28.4\times\) a contexto de 1M, con \(14.2\times\) en prefill y \(7.6\times\) en decodificación en GPUs H800.
Limitación: La granularidad de selección es fija a nivel de bloque (\(B_k = 128\)); el bloque local forzado y la selección independiente por grupo aumentan la complejidad de ingeniería y requieren kernels personalizados de bloques dispersos.
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.
: 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.
: 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)\]
: 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}\]
: 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.
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}\)
Complejidad: Pronóstico \(\mathcal{O}(H_{\text{kv}} \cdot d_f \cdot N \cdot N_{\text{bloques}})\); Atención principal \(\mathcal{O}(H_q \cdot d_h \cdot N \cdot k \cdot B_k)\).
Entrenable: Sí; solo las proyecciones de Pronóstico se entrenan (\(<0.5\%\) parámetros extra).
Fortaleza: En dos modelos sparse-pretrained de 8B, SparDA logra hasta \(1.25\times\) en prefill y \(1.7\times\) en decodificación sobre el baseline de offload de atención dispersa, y hasta \(5.3\times\) throughput de decodificación frente a un baseline disperso sin offload.
Limitación: Requiere un pipeline de offload CPU–GPU y un selector base congelado; el beneficio anticipado depende de que la demanda de bloques de la siguiente capa sea predecible a partir del Pronóstico actual.
Los siete métodos de atención dispersa ocupan posiciones complementarias en un espacio de diseño multidimensional:
Patrones geométricos/fijos (Sparse Transformer, Longformer): Simples de implementar y analizar, pero los patrones no se adaptan al contenido.
Selección aprendida (SparseK, NSA): Permiten adaptación mediante redes de selección entrenables, a costa de mayor complejidad de implementación.
Aceleración sin entrenamiento (FASA, SpargeAttn): Permiten aceleración directa de modelos existentes sin reentrenamiento, adecuados para sistemas desplegados.
Garantías teóricas (BigBird): Proporcionan demostraciones formales de completitud expresiva, importantes para comprender los márgenes de seguridad.
Orientación de selección:
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.
Comprensión de documentos de contexto largo: Longformer o FASA por simplicidad práctica; NSA para escala extrema.
Aceleración de modelos existentes: FASA para LLMs basados en RoPE; SpargeAttn para cualquier arquitectura.
Entornos con recursos limitados: Sparse Transformer por simplicidad y eficiencia probada a escala moderada.
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:
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.
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.
Sesgo de logits softmax (FoX): Las compuertas inyectan sesgo de actualidad a nivel de token en el cálculo de logits de atención.
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.
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\)
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.
| 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. |
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.
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}\)
| 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). |
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:
\(\alpha_t \to 0\) borra rápidamente el estado histórico: \(\mathbf{S}_t \approx \beta_t \mathbf{v}_t \mathbf{k}_t^\top\) (reinicio de contexto).
\(\alpha_t \to 1\) recupera el comportamiento puro de regla delta: \(\mathbf{S}_t \approx \mathbf{S}_{t-1}(\mathbf{I} - \beta_t \mathbf{k}_t \mathbf{k}_t^\top) + \beta_t \mathbf{v}_t \mathbf{k}_t^\top\) (actualizaciones dirigidas).
\(\beta_t \to 0\) omite la escritura pero decae: \(\mathbf{S}_t \approx \alpha_t \mathbf{S}_{t-1}\) (olvido puro).
\(\beta_t \to 1\) reemplaza la memoria agresivamente: \(\mathbf{S}_t \approx \alpha_t \mathbf{S}_{t-1} + \mathbf{v}_t \mathbf{k}_t^\top\) (reemplazo).
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\)
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.
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\)
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.
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}\)
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.
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.
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ó:
La compuerta por cabeza añade solo \(\sim 1.6M\) parámetros a un modelo de 15B (sobrecarga insignificante).
Las compuertas efectivas son dispersas: activación media \(\approx 0.116\) (es decir, el 88% son cero o casi cero).
Las compuertas actúan como filtros dependientes de la consulta, suprimiendo canales de bajo valor mientras preservan señales de alto valor.
Las compuertas eliminan demostrablemente el fenómeno de sumidero de atención, donde el patrón de atención se vuelve dominado por un único token temprano.
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}'\)
Supresión del sumidero de atención: La compuerta rompe el ciclo de retroalimentación donde softmax se concentra en el primer token, permitiendo una atención más equilibrada.
Estabilidad de entrenamiento: Los modelos con compuerta toleran tasas de aprendizaje más grandes (\(+30\%\) mayor \(\eta_{max}\) estable).
Sobrecarga mínima: El impacto en latencia es solo del \(1.6\%\) en GPUs H100; el rendimiento cae como máximo \(2-3\%\).
Mejora en la ley de escalado: Mejora la pérdida en todas las escalas de modelo, desde 800M hasta 110B parámetros de forma consistente.
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:
\(\mathbf{b}_t\) (eje de claves) hace que la dirección de lectura sea selectiva por canal: determina qué canales de clave se eliminan antes de escribir.
\(\mathbf{w}_t\) (eje de valores) hace que el objetivo de escritura sea selectivo por canal: determina qué canales de valor se depositan en memoria.
\(\boldsymbol{\alpha}_t\) (por canal de clave) proporciona decaimiento global, como en KDA.
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.
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.
| 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. |
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.
: 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.
: 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\)
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.
| 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. |
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:
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).
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).
Dependencia de datos: Completamente dependiente de datos (GLA, DeltaNet, Gated DeltaNet, Gated DeltaNet-2, FoX, Gated Softmax) versus esquemas fijos (RetNet con decaimiento exponencial).
Compensación de expresividad: Eficiencia recurrente lineal (GLA, DeltaNet, Gated DeltaNet, Gated DeltaNet-2, HGRN2, RetNet) versus expresividad completa de softmax (FoX, Gated Softmax).
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.
DeltaNet: Fuerte recuperación asociativa y tareas de aprendizaje en contexto; bueno para tareas sintéticas (MQAR) y pruebas de asociación clave-valor.
Gated DeltaNet: Modelos de producción que requieren el mejor equilibrio de recuperación, olvido y rendimiento (probado en Qwen3-Next; ICLR 2025).
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.
RetNet: Inferencia extremadamente eficiente sin almacenamiento en caché KV; adecuado para despliegues en dispositivos móviles/de borde o modelos de juguete.
HGRN2: Jerarquías temporales multi-escala; cuando los límites de olvido específicos por capa son deseables.
FoX: Extrapolación de longitud y comprensión de contexto largo; cuando el entrenamiento cuadrático es aceptable y no se desea reemplazar softmax.
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.
| 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. |
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/.
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 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 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.
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.
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.
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 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.
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).
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.
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.
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.
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.
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}\)
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) |
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).
| 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 . |
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 .
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\)
use_mixture_of_depths: bool — habilitar enrutamiento
MoD de tokens.
mixture_of_depths_capacity_ratio: float en \((0, 1]\) — fracción de tokens actualizados
por capa.
mixture_of_depths_router_aux_loss_weight: float
\(\ge 0\) — peso de pérdida auxiliar
para regularización del enrutador.
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}\)
engram_max_ngram_size: int \(\ge 2\) — orden N-gram más alto (por
defecto 3).
engram_n_heads_per_ngram: int \(\ge 1\) — cabezas hash por orden N-gram
(por defecto 4).
engram_embed_dim_per_head: int \(\ge 1\) — dimensión de embedding por cabeza
hash (por defecto 32).
engram_kernel_size: int \(\ge 1\) — ancho del kernel de conv causal
depthwise (por defecto 4).
engram_seed: int — semilla hash para
reproducibilidad (por defecto 42).
Tamaño oculto total de Engram = \((\texttt{max\_ngram\_size} - 1) \times \texttt{n\_heads\_per\_ngram} \times \texttt{embed\_dim\_per\_head}\).
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}\).
use_factorized_embedding: bool — habilitar
factorización.
factorized_embedding_dim: int \(\ge 1\) — dimensión intermedia (típico:
64–256).
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.
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
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)\)
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}\}\]
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.
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.
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 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\).
Swish (swish): \(\beta\) fijo (por defecto 1.0, configurado
mediante ffn_activation_config.swish_beta). Sin parámetros
aprendibles.
SwishTrainable (swish_trainable):
\(\beta\) es un parámetro aprendible
por canal, inicializado a 1.0. Equivalente a SiLU al inicio, se adapta
durante el entrenamiento.
Maxout (maxout): calcula \(k\) proyecciones lineales y toma el máximo
elemento a elemento: \(\max_{i=0}^{k-1}(W_i x
+ b_i)\). Aproximador universal de cualquier función continua con
suficientes piezas. El número de parámetros aumenta por un factor \(k\) (por defecto \(k=2\), configurado mediante
ffn_activation_config.maxout_pieces).
Referencias: Swish , Maxout .
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:
Versión A (por defecto, “segura”): \(Q(x)=1+\sum_{k}|b_k\, x^{k+1}|\) (valor absoluto por término). Garantiza \(Q(x)\ge 1\), sin división por cero.
Versión B: \(Q(x)=1+\big|\sum_{k} b_k\, x^{k+1}\big|\) (valor absoluto de la suma completa). También garantiza \(Q(x)\ge 1\).
Versión C: \(Q(x)=0.1+\big|\sum_{k} b_k\, x^{k}\big|\) con un suelo de \(0.1\). Denominador mínimo \(0.1\).
Versión D: como B, pero inyecta ruido multiplicativo uniforme \(U(1-\varepsilon, 1+\varepsilon)\) sobre los pesos del denominador sólo durante el entrenamiento (\(\varepsilon=0.1\)). Efecto de regularización.
Versión N (“no segura”): \(Q(x)=1+\sum_{k} b_k\, x^{k+1}\) sin valor absoluto. Puede tener polos (ceros del denominador); usar con cuidado.
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.
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:
SwiGLU (swiglu): \(\text{act}=\text{SiLU}\) (por defecto,
usado en Llama, PaLM).
GEGLU (geglu): \(\text{act}=\text{GELU}\) (usado en algunas
variantes de T5).
ReGLU (reglu): \(\text{act}=\text{ReLU}\) (la opción más
barata).
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.
El objeto ffn_activation_config agrupa todos los
parámetros de las activaciones aprendibles. Es opcional y se ignora para
activaciones sin estado.
raf_degrees: \([m,n]\) grados numerador/denominador del
Padé (enteros \(\ge 1\)). Por defecto:
\([5,4]\).
raf_version: forma del denominador, uno de
A (por defecto), B, C,
D, N.
raf_approx_func: objetivo de inicialización. Uno de
gelu (por defecto), relu,
leaky_relu, leaky_relu_0.1,
sigmoid, tanh, swish,
silu, identity.
raf_trainable: congela los parámetros racionales
cuando es false. Por defecto: true.
raf_input_scaling: escalado min–max por token a
\([-3,3]\) antes del racional
(preprocesamiento RAFT). Por defecto: false.
prelu_init: pendiente negativa inicial para PReLU.
Por defecto: \(0.25\).
elu_alpha: constante de saturación de ELU. Por
defecto: \(1.0\).
celu_alpha: constante de saturación de CELU. Por
defecto: \(1.0\).
swish_beta: \(\beta\) fijo para Swish / \(\beta\) inicial para SwishTrainable. Por
defecto: \(1.0\).
leaky_relu_slope: pendiente negativa para LeakyReLU.
Por defecto: \(0.01\).
maxout_pieces: número de piezas lineales \(k\) para Maxout (entero \(\ge 1\)). Por defecto: \(2\).
Claves adicionales de la familia ELU paramétrica:
pelu_alpha, mpelu_alpha,
mpelu_beta, felu_alpha,
eelu_alpha, eelu_beta,
pdelu_alpha, preu_alpha,
preu_beta, softexp_alpha. Todas por defecto
\(1.0\) (excepto
softexp_alpha que por defecto es \(0.0\)).
El siguiente árbol de decisión ayuda a elegir la activación:
Por defecto seguro \(\to\) silu (SiLU/Swish\(_1\), usado en Llama, PaLM).
Estabilidad clásica \(\to\) gelu o
relu.
No monótona suave \(\to\) mish o
swish.
Amigable para móvil \(\to\) hardswish o
relu6.
Forma por tarea aprendible \(\to\) raf, prelu,
swish_trainable, o maxout.
Redes auto-normalizadoras \(\to\) selu (con
AlphaDropout).
FFN con compuerta (proyecciones propias) \(\to\) swiglu,
geglu, o reglu.
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.
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/.
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:
\(H^{\text{pre}}_l \in \mathbb{R}^{1 \times n}\) agrega el flujo de dimensión \(nC\) a la entrada de capa de dimensión \(C\);
\(H^{\text{post}}_l \in \mathbb{R}^{1 \times n}\) proyecta la salida de la capa de vuelta al flujo;
\(H^{\text{res}}_l \in \mathbb{R}^{n \times n}\) mezcla características dentro del flujo residual.
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”).
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).\]
Restringir \(H^{\text{res}}_l\) al politopo de Birkhoff restaura el comportamiento de conservación del residual de identidad y garantiza tres propiedades :
Preservación de norma: la norma espectral satisface \(\|H^{\text{res}}_l\|_2 \le 1\) (mapeo no expansivo), mitigando la explosión de gradientes.
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.
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).
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:
enabled (use_mhc, bool, por defecto
false): reemplazar el residual estándar por el flujo
residual de \(n\) streams.
expansion_rate (mhc_expansion_rate, int
\(\ge 1\), por defecto \(4\)): factor de expansión del flujo \(n\); el flujo pasa a ser \(n \times \texttt{hidden\_size}\) mientras
los internos de la capa permanecen en hidden_size. \(1\) recupera el mapeo de
identidad.
sinkhorn_iters (mhc_sinkhorn_iters, int
\(\ge 1\), por defecto \(20\)): rondas de normalización
Sinkhorn–Knopp \(t_{\max}\).
gating_init (mhc_gating_init, float
\(> 0\), por defecto \(0.01\)): valor inicial de los escalares de
compuerta \(\alpha\).
checkpoint (mhc_checkpoint, bool, por
defecto false): gradient checkpointing en capas mHC,
intercambiando cómputo por memoria para mitigar el aumento de \(\sim n{\times}\) en la memoria de
activaciones del flujo residual de \(n\) streams.
full_prec_under_bitnet
(mhc_full_prec_under_bitnet, bool, por defecto
true): mantener la proyección de coeficientes \(\varphi_l\) como nn.Linear de
precisión completa incluso cuando use_bitnet es
true, evitando el ruido de cuantización ternaria en los
pequeños coeficientes mHC; cuando es false (y BitNet está
activado), \(\varphi_l\) usa
BitLinear.
El módulo vive en src/model/mhc.py:
SinkhornKnoppFunction
(torch.autograd.Function): el pase hacia adelante aplica
las normalizaciones alternadas de filas y columnas de \(\exp(\cdot)\); el pase hacia atrás
recomputa la iteración completa bajo torch.enable_grad y
diferencia a través de ella, obteniendo el producto Jacobiano-vector
exacto (la estrategia de recomputación en chip descrita en el
paper).
ManifoldHyperConnections (nn.Module):
contiene \(\varphi_l\)
(proj), \(b_l\)
(bias) y los tres escalares de compuerta
alpha_pre, alpha_post, alpha_res;
expone fpre (proyectar el flujo a la entrada de capa),
recombine (actualizar el flujo con la salida de la capa) y
mappings (calcular \(H^{\text{pre}},
H^{\text{post}}, H^{\text{res}}\)).
Cableado en src/model/frankenstein_model.py:
HybridLayer gana módulos opcionales
mhc_attn y mhc_ffn (un módulo mHC por función
de capa); la ruta _forward_dense_mhc ejecuta atención y FFN
como funciones de capa sobre el flujo compartido \((B, S, n, C)\).
FrankensteinTransformer expande el embedding de
dimensión \(C\) a \((B, S, n, C)\) al entrar mediante
mhc_in_proj y lo colapsa de vuelta a \(C\) mediante mhc_out_proj
antes de la cabeza.
Los parámetros mHC se enrutan al grupo de parámetros
other del optimizador.
mHC es incompatible con
use_mixture_of_depths: el enrutamiento MoD de
tokens opera sobre un flujo \(C\)-dimensional único, en conflicto con el
flujo residual de \(n\) streams; se
lanza un ValueError si ambos están habilitados.
Ejemplo de configuración:
configs/examples/es_arch_mhc_adamw.yaml.
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 :
Estabilidad: mHC elimina las subidas de pérdida de HC (p. ej., cerca del paso 12k en el modelo de 27B) y mantiene acotada la ganancia residual compuesta (\(\approx 1.6\) frente a picos de HC de \(\approx 3000\)).
Calidad: en el modelo de 27B, mHC mejora la pérdida final de entrenamiento en \(0.021\) sobre la línea base, supera a la línea base en los 8 benchmarks de evaluación (BBH, DROP, GSM8K, HellaSwag, MATH, MMLU, PIQA, TriviaQA) y a HC en 7 de 8, con las mayores ganancias en tareas de razonamiento (\(+2.1\) BBH, \(+2.3\) DROP sobre HC).
Escalado: la mejora relativa de pérdida sobre la línea base se mantiene a través de escalas de cómputo (3B \(\to\) 9B \(\to\) 27B) y a través de 1T tokens de escalado de datos.
Sobrecarga: con kernels fusionados (TileLang), cálculo de coeficientes en precisión mixta, recomputación selectiva y solapamiento de comunicación DualPipe, mHC añade solo \(6.7\%\) de tiempo adicional de entrenamiento con \(n = 4\) en el modelo de 27B.
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/.
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).
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/.
"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.
"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.
"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.
"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).
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:
FrankensteinEncoder posee el módulo
ResidualBase como self.residual; la factoría
se invoca una vez en __init__.
Antes del bucle de profundidad en loop, el encoder llama a
reset_state y, para variantes AttnRes, a
set_embedding(x) para que la atención sobre la profundidad
conozca la fuente \(v_0 =
h_1\).
Tras cada llamada a HybridLayer, si
self.residual.is_attn_res es true, el encoder aplica
x = self.residual(layer_idx, x) para sobrescribir el flujo
con la agregación atendida. Para estrategias sin estado
(standard, none) este paso se omite y
HybridLayer continúa aplicando su propio merge residual
internamente.
Cableado en src/model/hybrid_layer.py:
HybridLayer lee residual_type de la
configuración y despacha el merge residual según corresponda. Para
standard el merge es el original
x = residual + mixer(norm(x)); para none el
skip se elimina (x = mixer(norm(x))); para las variantes
AttnRes la capa realiza el merge estándar internamente porque la
atención sobre la profundidad se aplica externamente por el
encoder.
_forward_dense_mhc (la ruta mHC) no se ve afectada
porque mHC tiene su propia residual de expansión de flujos; combinar
AttnRes con mHC lo maneja el campo mhc_stream_mode del
módulo residual.
Esquema (jerárquico, con los renombres a claves planas entre paréntesis) y valores por defecto:
model.residuals.type (residual_type,
enum [standard, none, full_attn, block_attn], default
standard): selecciona la estrategia.
model.residuals.full_attn.init_query_zero
(full_attn_init_query_zero, bool, default
true): inicializa a cero los vectores de query por capa
\(\mathbf{w}_l\).
model.residuals.full_attn.use_rmsnorm_keys
(full_attn_use_rmsnorm_keys, bool, default
true): aplica RMSNorm sobre las keys antes del producto
punto.
model.residuals.block_attn.num_blocks
(block_attn_num_blocks, int \(\ge
1\), default \(8\)): número de
representaciones de bloque \(N\);
validado \(N \le L\).
model.residuals.block_attn.init_query_zero
(block_attn_init_query_zero, bool, default
true): inicializa a cero los vectores de query por
capa.
model.residuals.block_attn.use_rmsnorm_keys
(block_attn_use_rmsnorm_keys, bool, default
true): RMSNorm sobre las keys.
model.residuals.mhc_stream_mode
(attnres_mhc_stream_mode, enum
[independent, joint], default independent):
cómo AttnRes interactúa con el residual de n streams de mHC.
model.residuals.gradient_checkpoint
(attnres_gradient_checkpoint, bool, default
false): envuelve la atención AttnRes en gradient
checkpointing.
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_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.
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})\).
El paper valida AttnRes mediante leyes de escalado, ablaciones y una extensión Kimi Linear de 48B parámetros:
Leyes de escalado: tanto Full como Block AttnRes superan consistentemente al baseline PreNorm a través de cinco tamaños de modelo. A 5.6 PFLOP/s-días, Block AttnRes alcanza pérdida \(1.692\) versus \(1.714\) del baseline — equivalente a una ventaja de cómputo de \(1.25 \times\). La brecha entre Full y Block AttnRes se reduce con la escala (Full \(1.737\) vs. Block \(1.746\) en el modelo de 16 capas).
Ablaciones: la atención softmax dependiente de la entrada (\(1.737\)) supera al mezclado escalar independiente de la entrada (\(1.749\)) y a la atención sigmoid (\(1.741\)). RMSNorm sobre las keys es esencial (Full \(1.737\) vs. \(1.743\) sin ella; Block \(1.746\) vs. \(1.750\)). La agregación multi-cabeza sobre la profundidad (\(\texttt{H} = 16\)) perjudica a Block AttnRes (\(1.752\) vs. \(1.746\)), indicando que la mezcla óptima es en gran medida uniforme a través de los canales. La atención de ventana deslizante sobre las últimas \(W = 8\) capas se queda corta frente a Block AttnRes (\(1.764\) vs. \(1.746\)).
Extensión Kimi Linear: un modelo Kimi Linear de 48B parámetros (3B activados) con Block AttnRes (\(N \approx 9\), \(S = 6\)) pre-entrenado sobre 1.4T tokens mejora al baseline en los 14 benchmarks downstream (MMLU-Pro, GPQA-Diamond, BBH, HellaSwag, TriviaQA, GSM8K, MGSM, Math, CMath, HumanEval, MBPP, CMMLU, C-Eval, ARC-C). Las mayores ganancias son en razonamiento multi-paso (GPQA-Diamond \(+7.5\), Minerva Math \(+3.6\)) y generación de código (HumanEval \(+3.1\)). El análisis de la dinámica de entrenamiento muestra que AttnRes mitiga la dilución PreNorm: las magnitudes del estado oculto permanecen acotadas a lo largo de la profundidad y las normas del gradiente se distribuyen más uniformemente entre capas.
Sobrecosto: el sobrecosto de entrenamiento es marginal cuando no se habilita paralelismo de pipeline; con paralelismo de pipeline Block AttnRes añade \(<4\%\) de sobrecosto end-to-end (caching cross-stage elimina transferencias redundantes) y \(<2\%\) de sobrecosto de latencia de inferencia (cómputo en dos fases con fusión online-softmax).
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.
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 ).
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.
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.
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.
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:
Color medio de 3 bits: cross-entropy sobre \(512\) clases (mejor desempeño reportado).
Parche 4\(\times\)4 submuestreado de 3 bits: \(16 \times 512\) cabeceras de cross-entropy.
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.
La representación de salida se obtiene del token [CLS] (posición 0) o mediante Global Average Pooling (GAP) sobre todos los parches.
Una capa lineal \(\text{Linear}(D, K)\) inicializada en cero, siguiendo ViT Sec. 3.2, para fine-tuning estable sobre las clases \(K\).
Cross-entropy estándar sobre las \(K\) clases.
Dos tipos de cabeza, seleccionados por el campo de esquema
seg_head_type:
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).
eomt)Basado en EoMT :
El backbone se divide en \(L_1\) (solo parches) + \(L_2\) (parches + \(K\) consultas aprendibles).
La MHSA dentro de los bloques \(L_2\) procesa los cuatro cuadrantes de atención (parche\(\leftrightarrow\)parche, consulta\(\leftrightarrow\)consulta, consulta\(\leftrightarrow\)parche, parche\(\leftrightarrow\)consulta) en una sola operación.
Módulo de máscara: logits de clase lineales + MLP de 3 capas para el embedding de máscara, producto punto con \(\tilde{F}_4\) escalado.
Pérdida: BCE (\(\times5\)) + Dice (\(\times5\)) + CE (\(\times2\)) con emparejamiento húngaro.
Recocido de máscara: \(P_\text{mask}\) decae polinomialmente (factor \(0.9\)) a \(0\) en inferencia, lo que revierte el modelo a un ViT plano, \(4\times\) más rápido.
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.
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}\)