Visibilidad IA

Arquitectura RetNet (Retentive Network): qué es, cómo funciona y cómo combina entrenamiento paralelo, procesamiento recurrente y contexto de largo alcance

La arquitectura RetNet (Retentive Network) es una familia de modelos de aprendizaje profundo diseñada para combinar tres capacidades especialmente importantes en los modelos de lenguaje: entrenamiento paralelizable, generación autorregresiva eficiente y procesamiento de secuencias extensas.

Su principal innovación es un mecanismo denominado Retention, o retención, que permite calcular dependencias entre tokens utilizando tres modalidades matemáticamente relacionadas: procesamiento paralelo, procesamiento recurrente y procesamiento recurrente por fragmentos.

RetNet fue presentada en julio de 2023 por Yutao Sun, Li Dong, Shaohan Huang, Shuming Ma, Yuqing Xia, Jilong Xue, Jianyong Wang y Furu Wei en el artículo científico Retentive Network: A Successor to Transformer for Large Language Models.

El trabajo fue desarrollado por investigadores vinculados a Microsoft Research y otras instituciones académicas, y propuso una alternativa a los Transformers autorregresivos convencionales para construir grandes modelos de lenguaje.

En un Transformer con autoatención causal, las dependencias entre tokens se calculan mediante consultas, claves y valores. Durante la generación incremental, suele utilizarse una caché de claves y valores (KV cache) que aumenta conforme crece el historial.

RetNet introduce una estrategia diferente: mantiene estados recurrentes que acumulan información relevante mediante un mecanismo de decaimiento temporal.

De este modo, la memoria del estado de retención puede mantenerse acotada por las dimensiones del modelo, sin crecer con cada nuevo token como ocurre en una caché KV convencional sin restricciones.

La arquitectura también utiliza Multi-Scale Retention, un mecanismo de múltiples cabezas de retención que permite combinar información de distintas escalas temporales.

Una característica especialmente importante es que la misma operación de retención puede calcularse de tres maneras, dependiendo del escenario.

Durante el entrenamiento, la representación paralela permite aprovechar las GPU. Durante la generación, la representación recurrente facilita actualizaciones incrementales. Para documentos extensos, la representación recurrente por fragmentos combina el procesamiento paralelo dentro de cada bloque con estados que transmiten información entre bloques.

En sus experimentos originales, los investigadores observaron resultados competitivos de modelado del lenguaje y ventajas de memoria, latencia y rendimiento de generación en determinadas configuraciones frente a Transformers de referencia.

Estas ventajas deben interpretarse dentro del contexto experimental de 2023: no constituyen una garantía de superioridad frente a todos los modelos actuales.

En esta guía exploraremos qué es RetNet, cómo funciona el mecanismo Retention, en qué consiste Multi-Scale Retention, cómo se relacionan sus tres modalidades de cálculo y cuáles son sus diferencias con RWKV, Mamba y los Transformers tradicionales. También incluiremos ejemplos prácticos en Python y los metadatos necesarios para publicar el artículo en WordPress.


¿Qué es la arquitectura RetNet?

RetNet es una arquitectura neuronal autorregresiva que utiliza mecanismos de retención para modelar dependencias temporales dentro de una secuencia.

Su nombre procede de Retentive Network, que puede traducirse como «red de retención».

La arquitectura está diseñada para procesar secuencias de tokens y aprender representaciones útiles para predecir sus siguientes elementos.

A primera vista, RetNet comparte algunos componentes con los Transformers convencionales.

Utiliza embeddings, bloques residuales, normalización, transformaciones lineales y redes feed-forward.

Sin embargo, sustituye el mecanismo central de autoatención por un operador denominado Retention.

Este operador combina información procedente de posiciones anteriores utilizando claves, valores, consultas y factores de decaimiento.

Su funcionamiento presenta una relación matemática con determinadas variantes de atención lineal y con actualizaciones recurrentes de estado.

La principal ventaja es que permite elegir diferentes estrategias de cálculo sin cambiar la función matemática fundamental que se desea ejecutar, siempre que se respeten las mismas parametrizaciones y condiciones numéricas.

RetNet ofrece tres modalidades:

  • Parallel Retention: procesa secuencias completas mediante operaciones matriciales.
  • Recurrent Retention: actualiza estados internos conforme llegan nuevos tokens.
  • Chunkwise Recurrent Retention: procesa fragmentos en paralelo y transmite estados entre ellos.

Esta flexibilidad convierte RetNet en una arquitectura relevante para estudiar cómo combinar el entrenamiento paralelo con la inferencia recurrente.

Origen y desarrollo de RetNet

Los Transformers introducidos en 2017 transformaron el procesamiento del lenguaje natural mediante mecanismos de autoatención.

Posteriormente, modelos como GPT demostraron que el procesamiento autorregresivo podía escalarse hasta grandes modelos generativos.

Sin embargo, la atención completa presenta limitaciones cuando aumenta la longitud de la secuencia.

Durante el entrenamiento, la matriz conceptual de atención crece cuadráticamente respecto al número de tokens.

Durante la generación, los Transformers suelen mantener una caché KV con las representaciones históricas necesarias para continuar calculando atención.

Esta caché permite evitar cálculos redundantes, pero también requiere memoria adicional que crece con el número de posiciones retenidas.

Para abordar estos problemas surgieron diversas arquitecturas eficientes.

Transformer-XL introdujo memoria recurrente entre segmentos.

Longformer y BigBird utilizaron patrones de atención dispersa.

Linformer desarrolló proyecciones de baja dimensión.

Performer y Linear Transformer estudiaron la atención basada en kernels y estadísticas acumuladas.

Mamba introdujo modelos de espacio de estados selectivos.

RWKV combinó mezcla temporal ponderada con inferencia recurrente.

RetNet apareció en este contexto como una propuesta centrada en una idea: utilizar una misma formulación de retención que admita procesamiento paralelo, recurrente y por fragmentos.

Los investigadores demostraron que este enfoque podía utilizarse para entrenar y desplegar modelos de lenguaje de gran escala.

El problema que intenta resolver RetNet

RetNet aborda tres dificultades relacionadas entre sí.

1. Coste del entrenamiento

En un Transformer de atención completa, la cantidad de relaciones de atención puede crecer como:

[
O(L^2)
]

Donde (L) representa la longitud de la secuencia.

Este comportamiento puede dificultar el procesamiento de documentos largos.

RetNet proporciona modalidades alternativas de cálculo que permiten reducir el coste para secuencias extensas.

2. Memoria durante la generación

Un Transformer causal puede reutilizar claves y valores históricos mediante una caché KV.

Esta caché normalmente crece con la cantidad de tokens almacenados.

RetNet utiliza estados recurrentes cuyo tamaño puede permanecer constante respecto al número de tokens ya procesados.

3. Diferencias entre entrenamiento e inferencia

Durante el entrenamiento resulta conveniente procesar muchas posiciones simultáneamente.

Durante la generación autorregresiva, los tokens se producen uno por uno.

RetNet permite representar la retención mediante distintas estrategias computacionales apropiadas para cada escenario.

Estas tres características constituyen el fundamento de su diseño.

¿Qué es el mecanismo Retention?

Retention es el operador central de RetNet.

Su función consiste en combinar información de posiciones anteriores mediante una ponderación temporal.

El mecanismo mantiene una relación conceptual con la autoatención basada en Query, Key y Value.

Sin embargo, utiliza un factor explícito de decaimiento que controla la contribución de posiciones anteriores.

Consideremos una secuencia:

[
x_1,x_2,\ldots,x_L
]

Cada posición genera representaciones:

[
q_t,\quad k_t,\quad v_t
]

Donde:

  • (q_t) representa una consulta.
  • (k_t) representa una clave.
  • (v_t) representa un valor.

RetNet combina las representaciones históricas mediante pesos que dependen tanto del contenido como de la distancia temporal.

Una forma simplificada de expresar la salida de retención es:

[
o_t=
\sum_{j=1}^{t}
\gamma^{t-j}
(q_t^\top k_j)
v_j
]

Donde:

  • (t) representa la posición actual.
  • (j) representa una posición anterior.
  • (\gamma) es un factor de retención.
  • (\gamma^{t-j}) atenúa contribuciones según su antigüedad.

En esta expresión se omiten, para facilitar la explicación, detalles de codificación posicional, normalización y parametrización de las múltiples cabezas.

A diferencia de softmax convencional, la expresión no normaliza las puntuaciones mediante una distribución softmax sobre todas las posiciones anteriores.

El mecanismo original de RetNet utiliza otros procedimientos de normalización y estabilización.

¿Qué significa Retention Decay?

Retention Decay es el factor que controla la reducción de influencia de información histórica.

Podemos representarlo mediante:

[
0<\gamma<1
]

Cuando (\gamma) está relativamente cerca de cero, las contribuciones antiguas pierden influencia rápidamente.

Cuando (\gamma) está cerca de uno, pueden mantenerse durante más posiciones.

Por ejemplo, si:

[
\gamma=0.9
]

una contribución situada cinco posiciones atrás recibe el factor:

[
0.9^5=0.59049
]

Si utilizamos:

[
\gamma=0.99
]

la misma distancia produce:

[
0.99^5\approx0.951
]

Esto ilustra cómo diferentes factores de decaimiento permiten representar distintas escalas temporales.

El valor de decaimiento no determina por sí solo la calidad de la memoria.

Las contribuciones también dependen de las representaciones Key, Query y Value, del entrenamiento y de los demás componentes de la arquitectura.

Multi-Scale Retention: retención de múltiples escalas

Una de las características principales de RetNet es Multi-Scale Retention (MSR).

Este mecanismo permite utilizar varias cabezas de retención con diferentes escalas temporales.

La idea es que no todas las dependencias lingüísticas tienen la misma duración.

Por ejemplo, algunas relaciones son locales:

«inteligencia artificial».

Otras pueden abarcar numerosas frases.

Un documento también puede introducir un concepto en la primera sección y utilizarlo posteriormente.

Para modelar estos comportamientos, diferentes cabezas pueden utilizar distintos factores de decaimiento.

Una cabeza puede concentrarse en información reciente.

Otra puede conservar influencia de un horizonte más amplio.

¿Cómo se combinan las cabezas?

Cada cabeza calcula una representación de retención.

Posteriormente, sus resultados se combinan mediante transformaciones aprendidas.

El diseño original utiliza mecanismos de normalización por cabezas y compuertas para controlar la salida combinada.

De esta manera, el modelo puede integrar información de diferentes escalas.

La existencia de múltiples escalas no garantiza una recuperación perfecta de información antigua.

Simplemente proporciona distintas dinámicas de retención que el modelo puede aprender a utilizar.

La arquitectura interna de un bloque RetNet

RetNet utiliza bloques que recuerdan estructuralmente a los bloques Transformer.

Un bloque típico contiene:

Normalización de entrada

Prepara las representaciones antes del mecanismo temporal.

Multi-Scale Retention

Combina información contextual mediante múltiples cabezas de retención.

Gated Retention

Utiliza una compuerta aprendida para regular la contribución de la salida temporal.

Conexión residual

Combina la representación original con la salida del mecanismo de retención.

Red feed-forward

Aplica transformaciones no lineales a cada posición.

Segunda conexión residual

Integra el resultado de la transformación feed-forward con el flujo principal de representaciones.

Los modelos completos apilan múltiples bloques RetNet.

Posteriormente, las representaciones finales pueden utilizarse para producir distribuciones de probabilidad sobre el vocabulario y predecir tokens.

Las tres modalidades de procesamiento de RetNet

La característica que distingue a RetNet es la existencia de tres formas de ejecutar el mecanismo de retención.

Aunque utilizan diferentes estrategias de cálculo, están relacionadas por la misma estructura matemática.

1. Parallel Retention

La representación paralela utiliza operaciones matriciales para procesar numerosas posiciones simultáneamente.

Esta modalidad resulta especialmente apropiada para entrenamiento.

2. Recurrent Retention

La representación recurrente procesa tokens incrementalmente.

Mantiene un estado interno que se actualiza con cada token.

Esta modalidad resulta especialmente apropiada para generación autorregresiva.

3. Chunkwise Recurrent Retention

La representación por fragmentos combina las dos anteriores.

Dentro de cada fragmento se utiliza cálculo paralelo.

Entre fragmentos se transmite un estado recurrente.

Esta modalidad resulta interesante para secuencias extensas.

Comprender estas tres estrategias es fundamental para estudiar RetNet.

Parallel Retention: procesamiento paralelo

En la representación paralela, RetNet puede calcular relaciones entre diferentes posiciones de una secuencia mediante operaciones matriciales.

Consideremos tres matrices:

[
Q=XW_Q
]

[
K=XW_K
]

[
V=XW_V
]

Donde (X) representa las entradas.

El modelo también incorpora información posicional relativa mediante representaciones complejas equivalentes a operaciones de rotación.

La máscara de retención puede expresarse como:

[
D_{t,j}=
\begin{cases}
\gamma^{t-j}, & j\leq t\
0, & j>t
\end{cases}
]

La salida paralela se representa conceptualmente como:

[
\operatorname{Retention}(X)=
(QK^T\odot D)V
]

Donde (\odot) representa una multiplicación elemento a elemento.

La máscara realiza dos funciones.

Primero, aplica causalidad para impedir que una posición utilice información futura.

Segundo, introduce decaimiento temporal sobre las contribuciones anteriores.

La ventaja es que el cálculo puede expresarse mediante operaciones matriciales paralelizables.

Sin embargo, una implementación directa de esta fórmula puede construir una matriz cuadrática durante el entrenamiento.

Por tanto, Parallel Retention no elimina automáticamente el coste cuadrático de una representación matricial densa.

La modalidad recurrente por fragmentos proporciona otra estrategia cuando la secuencia es extensa.

Recurrent Retention: procesamiento incremental

La representación recurrente calcula el mismo tipo de operación utilizando un estado acumulado.

En una formulación simplificada, el estado se actualiza como:

[
S_t=
\gamma S_{t-1}+k_tv_t^T
]

Donde:

  • (S_t) representa el estado actual.
  • (S_{t-1}) representa el estado anterior.
  • (k_t) representa la clave actual.
  • (v_t) representa el valor actual.
  • (\gamma) representa el factor de retención.

La salida se calcula mediante:

[
o_t=q_t^TS_t
]

En el artículo original, los estados y las consultas incluyen también el tratamiento de posiciones y otras operaciones necesarias para la implementación completa.

La propiedad fundamental es que el estado se actualiza utilizando solamente su valor anterior y la información del token actual.

Esto permite procesar una secuencia de manera incremental.

¿Por qué es eficiente?

Porque el modelo no necesita recorrer explícitamente todas las claves y valores históricos en cada paso.

El coste por actualización depende de las dimensiones del estado.

Si esas dimensiones permanecen constantes, el coste de retención por token no crece con la longitud del historial.

Esta propiedad es especialmente importante durante la generación autorregresiva.

Chunkwise Recurrent Retention: procesamiento recurrente por fragmentos

La tercera modalidad combina paralelismo y recurrencia.

Su objetivo consiste en aprovechar las ventajas de ambos procedimientos.

Supongamos que tenemos una secuencia de 8.192 tokens.

En lugar de procesarla como una sola matriz cuadrática, podemos dividirla en bloques de 256 tokens.

Obtenemos:

[
8192/256=32
]

fragmentos.

Dentro de cada fragmento, el mecanismo puede utilizar operaciones paralelas.

Entre fragmentos, se transmite un estado recurrente.

Por ejemplo:

Fragmento 1 → Estado 1

Fragmento 2 + Estado 1 → Estado 2

Fragmento 3 + Estado 2 → Estado 3

Y así sucesivamente.

¿Qué ventajas ofrece?

Permite aprovechar operaciones matriciales dentro de cada bloque.

También evita construir una matriz de atención completa sobre toda la secuencia.

Al mantener fijo el tamaño del fragmento y las dimensiones internas, el coste del procesamiento puede crecer linealmente respecto a la longitud global.

¿Qué ocurre con los fragmentos anteriores?

Sus contribuciones se resumen en el estado recurrente.

El siguiente fragmento utiliza ese estado como contexto adicional.

Sin embargo, esta memoria comprimida no equivale a conservar individualmente todos los tokens anteriores.

La recuperación de información específica puede estar limitada por la capacidad del estado y los mecanismos aprendidos.

Formulación matemática de la equivalencia recurrente

Podemos demostrar la relación entre retención paralela y recurrente utilizando un ejemplo sencillo.

Consideremos la actualización:

[
S_t=\gamma S_{t-1}+k_tv_t^T
]

Con estado inicial:

[
S_0=0
]

La primera actualización es:

[
S_1=k_1v_1^T
]

La segunda:

[
S_2=\gamma k_1v_1^T+k_2v_2^T
]

La tercera:

[
S_3=\gamma^2k_1v_1^T+
\gamma k_2v_2^T+
k_3v_3^T
]

En general:

[
S_t=
\sum_{j=1}^{t}
\gamma^{t-j}k_jv_j^T
]

Si calculamos:

[
o_t=q_t^TS_t
]

obtenemos:

[
o_t=
\sum_{j=1}^{t}
\gamma^{t-j}
(q_t^Tk_j)v_j
]

Esta ecuación coincide con la formulación simplificada de retención ponderada.

Por tanto, la misma operación puede calcularse acumulando estados o evaluando una suma sobre las posiciones anteriores.

Este resultado proporciona la base matemática de la dualidad entre las formas paralela y recurrente.

RetNet y la codificación posicional xPos

RetNet utiliza información posicional para distinguir las posiciones dentro de una secuencia.

El artículo original relaciona su formulación con xPos, una técnica de representación posicional relativa.

En determinadas formulaciones, las consultas y claves incorporan factores complejos dependientes de la posición.

Esto permite introducir información sobre distancias y fases relativas.

Una representación simplificada utiliza:

[
e^{it\theta}
]

Donde:

  • (t) representa la posición.
  • (\theta) representa parámetros asociados con la frecuencia.

Estos factores permiten representar relaciones posicionales mediante operaciones de rotación.

El mecanismo recuerda conceptualmente a otras técnicas de codificación posicional rotatoria.

Sin embargo, los detalles de xPos y la formulación de retención no son idénticos a cualquier implementación de RoPE.

La codificación posicional constituye un componente importante para mantener coherencia entre los cálculos paralelos y recurrentes.

¿Qué es Gated Multi-Scale Retention?

RetNet utiliza un mecanismo de compuerta para regular la información producida por sus cabezas de retención.

Una representación conceptual puede expresarse como:

[
Y=
\operatorname{Gate}(X)
\odot
\operatorname{MSR}(X)
]

Donde:

  • (\operatorname{MSR}(X)) representa el resultado de Multi-Scale Retention.
  • (\operatorname{Gate}(X)) representa una transformación aprendida.
  • (\odot) representa una multiplicación elemento a elemento.

El mecanismo original incorpora normalización, una activación de compuerta y proyecciones de salida.

La finalidad es controlar cómo se incorpora la información temporal a las representaciones finales.

Esta estrategia se relaciona conceptualmente con los mecanismos de compuertas utilizados en otras arquitecturas recurrentes.

Sin embargo, no debe confundirse directamente con las compuertas de LSTM, GRU o RWKV.

Cada arquitectura utiliza una formulación diferente.

¿Por qué RetNet puede reducir la memoria de inferencia?

Durante generación autorregresiva, un Transformer convencional suele almacenar claves y valores de posiciones anteriores.

Si la secuencia continúa creciendo, la caché KV también aumenta, salvo que se utilicen restricciones o mecanismos especiales.

RetNet utiliza un estado recurrente para cada cabeza de retención.

El tamaño del estado depende de las dimensiones internas del modelo.

Por tanto, puede permanecer constante respecto a la longitud histórica de la secuencia.

Ejemplo conceptual

Supongamos que procesamos:

1.000 tokens.

Después:

10.000 tokens.

Finalmente:

100.000 tokens.

En un Transformer con caché KV convencional sin restricciones, la memoria destinada a claves y valores aumenta con el número de posiciones retenidas.

En RetNet recurrente, el tamaño estructural del estado de retención puede permanecer constante.

Sin embargo, el modelo sigue necesitando memoria para pesos, activaciones y otros componentes.

Además, conservar un estado compacto no significa que pueda recuperar todos los detalles de los 100.000 tokens anteriores.

Complejidad computacional de RetNet

La complejidad de RetNet depende de la modalidad utilizada.

ModalidadEstrategiaEscalabilidad respecto a longitud
ParalelaMatrices de retención completasPuede presentar coste cuadrático
RecurrenteActualización de estado por tokenCoste constante por token con dimensiones fijas
Recurrente por fragmentosParalelismo local y estado entre bloquesCoste lineal con tamaño de bloque fijo

Esta distinción es importante.

No sería correcto afirmar que todas las formas de cálculo de RetNet tienen siempre complejidad lineal.

La ventaja principal está en poder utilizar diferentes algoritmos para distintas etapas.

Durante entrenamiento, la representación paralela facilita aprovechar aceleradores.

Durante inferencia, la representación recurrente evita que el coste del estado de retención crezca con la longitud del historial.

Durante procesamiento de secuencias largas, el método por fragmentos proporciona un equilibrio entre paralelismo y escalabilidad.

RetNet frente a Transformer convencional

CaracterísticaTransformer causal convencionalRetNet
Mecanismo temporalAutoatenciónRetention
Softmax de atenciónSí, habitualmenteNo como mecanismo central
Multi-headMulti-Head AttentionMulti-Scale Retention
Decaimiento temporal explícitoNo necesariamenteSí
Entrenamiento paraleloSíSí
Generación recurrenteNo como formulación centralSí
Caché KV crecienteHabitualNo necesaria en modo recurrente
Procesamiento por fragmentosDepende de implementaciónModalidad central
Complejidad de inferencia por tokenDepende del historial y optimizacionesConstante respecto al historial con dimensiones fijas

RetNet conserva una organización general similar a la de los Transformers.

Sin embargo, cambia cómo se calcula la información contextual.

En lugar de utilizar necesariamente una distribución softmax sobre todos los tokens anteriores, combina representaciones mediante retención ponderada.

La diferencia más importante es que esa operación admite una formulación recurrente compacta.

RetNet frente a RWKV

La arquitectura RWKV, estudiada en la Entrada 115, también combina entrenamiento paralelizable con generación recurrente.

Ambas utilizan mecanismos de ponderación temporal y estados acumulativos.

Sin embargo, presentan diferencias.

RWKV utiliza Receptance Weighted Key Value, Time Mixing y Channel Mixing.

RetNet utiliza un mecanismo de retención con múltiples escalas, codificación posicional y tres modalidades explícitas de cálculo.

CaracterísticaRWKVRetNet
Mecanismo principalWeighted Key ValueMulti-Scale Retention
Decaimiento temporalSíSí
Estados recurrentesSíSí
Entrenamiento paralelizableSíSí
Tres modalidades explícitasDepende de versiónParalela, recurrente y por fragmentos
Posiciones relativasSegún versiónIncorporadas a retención
CompuertasReceptanceGated Retention
Enfoque originalRNN escalable para LLMDualidad de retención y recurrencia

Ambas arquitecturas muestran que es posible construir grandes modelos de lenguaje sin utilizar atención softmax convencional como mecanismo principal.

Sin embargo, sus parámetros, estados y reglas de actualización no son idénticos.

RetNet frente a Mamba y Mamba-2

RetNet también puede compararse con los modelos de espacio de estados selectivos.

Mamba utiliza un modelo SSM donde determinados parámetros cambian según la entrada.

Mamba-2 desarrolla Structured State Space Duality para relacionar modelos de estado y atención estructurada.

RetNet utiliza una retención ponderada con decaimiento temporal y formulaciones equivalentes de procesamiento.

CaracterísticaRetNetMambaMamba-2
FundamentoRetentionSSM selectivoSSM estructurado
Estado recurrenteSíSíSí
Atención softmax convencionalNoNoNo
Decaimiento explícitoSíTransición de estadoTransición estructurada
Entrenamiento paraleloSíSelective ScanAlgoritmo SSD
Procesamiento por fragmentosSíSegún algoritmoSí, central en SSD
Innovación principalTres modalidades de retenciónSelección dependiente de entradaDualidad SSM-atención

Estas arquitecturas presentan similitudes en sus objetivos de eficiencia.

Sin embargo, RetNet no debe describirse simplemente como una variante de Mamba.

Sus investigaciones originales y sus mecanismos matemáticos pertenecen a líneas de desarrollo diferentes.

RetNet frente a Linear Transformer

Linear Transformer utiliza funciones kernel para calcular atención mediante estadísticas acumuladas.

RetNet también permite una formulación recurrente con estados derivados de claves y valores.

Sin embargo, incorpora decaimiento temporal y mecanismos posicionales específicos.

En una formulación simplificada, Linear Transformer acumula:

[
S_t=S_{t-1}+\phi(k_t)v_t^T
]

RetNet incorpora un factor de retención:

[
S_t=\gamma S_{t-1}+k_tv_t^T
]

Estas expresiones muestran una similitud estructural.

Ambas utilizan estados acumulativos.

La diferencia es que RetNet incorpora un decaimiento explícito y una parametrización de retención específica.

Además, las versiones completas utilizan distintos procedimientos de normalización y transformación de características.

Por ello, la similitud de las ecuaciones simplificadas no significa que las arquitecturas sean equivalentes.

Resultados experimentales de RetNet

Los investigadores evaluaron RetNet en tareas de modelado del lenguaje y compararon su comportamiento con distintos modelos de referencia.

Escalabilidad del entrenamiento

Los experimentos mostraron que RetNet podía entrenarse utilizando operaciones paralelas y mantener un rendimiento competitivo de modelado del lenguaje.

Calidad de predicción

El artículo comunicó resultados favorables de escalabilidad y perplejidad bajo las configuraciones evaluadas.

Memoria de inferencia

Durante generación recurrente, el tamaño del estado de retención no necesita crecer con la longitud histórica de la misma manera que una caché KV convencional.

Rendimiento de generación

Los investigadores observaron ventajas de throughput y latencia en determinados experimentos con modelos de gran tamaño.

Contextos largos

La representación recurrente por fragmentos permitió estudiar un procesamiento eficiente de secuencias extensas.

Los resultados originales respaldan la utilidad de la arquitectura.

Sin embargo, no deben interpretarse como una clasificación actual frente a todas las implementaciones optimizadas de Transformers, RWKV o Mamba.

Aplicaciones prácticas de RetNet

1. Modelado del lenguaje

RetNet puede utilizarse como arquitectura base para entrenar modelos autorregresivos de predicción de tokens.

2. Generación de texto

Su formulación recurrente permite generar secuencias utilizando estados actualizables.

3. Procesamiento de documentos extensos

La modalidad recurrente por fragmentos puede resultar útil para procesar secuencias largas con memoria controlada.

4. Sistemas de inferencia incremental

RetNet puede utilizarse en investigaciones donde la latencia por token y el tamaño de la memoria recurrente son factores relevantes.

5. Modelos de lenguaje locales

Las propiedades de inferencia recurrente pueden resultar interesantes para arquitecturas diseñadas para ejecutarse con memoria limitada.

La viabilidad depende del checkpoint y del hardware.

6. Investigación sobre memoria neuronal

RetNet proporciona un mecanismo de referencia para estudiar decaimiento temporal y estados acumulativos.

7. Arquitecturas híbridas

Los principios de retención pueden combinarse con otros mecanismos de procesamiento dentro de diseños especializados.

8. Sistemas de inteligencia artificial generativa

RetNet puede servir como componente de modelos generativos, siempre que esté integrado en un sistema entrenado adecuadamente.

Ejemplo práctico: crear un modelo RetNet con Python

La implementación oficial de RetNet se encuentra dentro del proyecto TorchScale de Microsoft.

El repositorio está disponible en:

La instalación documentada utiliza:

pip install torch torchscale

Después, podemos crear una instancia de RetNet.

import torch
from torchscale.architecture.config import RetNetConfig
from torchscale.architecture.retnet import RetNetDecoder
config = RetNetConfig(
vocab_size=32000
)
model = RetNetDecoder(config)
print(model)

Este ejemplo utiliza las interfaces documentadas por el repositorio oficial.

El programa crea una arquitectura RetNet con parámetros inicializados de acuerdo con la configuración.

No carga automáticamente un modelo de lenguaje entrenado.

Por tanto, no generará texto coherente sin un procedimiento de entrenamiento o sin utilizar pesos preentrenados compatibles.

La compatibilidad de la biblioteca con versiones recientes de PyTorch debe verificarse en el entorno elegido.

Ejemplo educativo: implementar Retention con NumPy

Para comprender la formulación recurrente, podemos construir una implementación sencilla de retención.

Este ejemplo utiliza claves, valores, consultas y un factor de decaimiento.

No reproduce todos los componentes de RetNet, como xPos, múltiples cabezas, normalización o compuertas.

Su objetivo es demostrar cómo funciona el estado recurrente.

Primero, instalamos NumPy:

pip install numpy

Después, ejecutamos:

import numpy as np
rng = np.random.default_rng(42)
sequence_length = 6
key_dim = 4
value_dim = 3
queries = rng.normal(
size=(sequence_length, key_dim)
)
keys = rng.normal(
size=(sequence_length, key_dim)
)
values = rng.normal(
size=(sequence_length, value_dim)
)
gamma = 0.9
state = np.zeros((key_dim, value_dim))
outputs = []
for t in range(sequence_length):
state = (
gamma * state
+ np.outer(keys[t], values[t])
)
output = queries[t] @ state
outputs.append(output)
outputs = np.stack(outputs)
print("Output shape:", outputs.shape)
print(outputs)

El programa mantiene una matriz de estado.

Cada token modifica ese estado utilizando su clave y valor.

El factor gamma atenúa progresivamente las contribuciones anteriores.

La consulta actual utiliza el estado para generar una representación de salida.

Este procedimiento ilustra la idea fundamental de Recurrent Retention.

Ejemplo: demostrar la equivalencia entre retención paralela y recurrente

Una de las propiedades más interesantes de RetNet es que la misma operación de retención puede calcularse utilizando una formulación paralela o recurrente.

Podemos comprobarlo mediante NumPy.

El siguiente ejemplo implementa exactamente la misma retención simplificada de ambas maneras.

import numpy as np
rng = np.random.default_rng(7)
length = 8
key_dim = 5
value_dim = 3
Q = rng.normal(size=(length, key_dim))
K = rng.normal(size=(length, key_dim))
V = rng.normal(size=(length, value_dim))
gamma = 0.85
# Método 1: formulación paralela
positions = np.arange(length)
distance = (
positions[:, None]
- positions[None, :]
)
decay_mask = np.where(
distance >= 0,
gamma ** np.maximum(distance, 0),
0.0
)
scores = Q @ K.T
parallel_output = (
(scores * decay_mask) @ V
)
# Método 2: formulación recurrente
state = np.zeros((key_dim, value_dim))
recurrent_output = []
for t in range(length):
state = (
gamma * state
+ np.outer(K[t], V[t])
)
recurrent_output.append(
Q[t] @ state
)
recurrent_output = np.stack(recurrent_output)
print("Parallel output:")
print(parallel_output)
print("Recurrent output:")
print(recurrent_output)
print(
"Equivalent:",
np.allclose(
parallel_output,
recurrent_output,
atol=1e-10
)
)

El programa calcula las salidas mediante dos procedimientos.

La formulación paralela construye una matriz de relaciones y aplica una máscara causal con decaimiento.

La formulación recurrente actualiza un estado interno en cada posición.

Ambas producen el mismo resultado matemático para este ejemplo.

El objetivo es ilustrar el fundamento de RetNet.

La implementación completa incorpora operaciones adicionales, por lo que la equivalencia numérica entre sus tres modalidades también debe considerar esos detalles.

Ejemplo de procesamiento recurrente por fragmentos

Podemos ampliar el ejercicio anterior para procesar la secuencia en bloques.

import numpy as np
rng = np.random.default_rng(9)
length = 12
chunk_size = 4
key_dim = 4
value_dim = 2
Q = rng.normal(size=(length, key_dim))
K = rng.normal(size=(length, key_dim))
V = rng.normal(size=(length, value_dim))
gamma = 0.92
state = np.zeros((key_dim, value_dim))
chunkwise_outputs = []
for start in range(0, length, chunk_size):
end = min(start + chunk_size, length)
for t in range(start, end):
state = (
gamma * state
+ np.outer(K[t], V[t])
)
output = Q[t] @ state
chunkwise_outputs.append(output)
chunkwise_outputs = np.stack(
chunkwise_outputs
)
print(
"Output shape:",
chunkwise_outputs.shape
)

Este ejemplo divide la secuencia en fragmentos y conserva el estado entre ellos.

Sin embargo, utiliza un bucle recurrente incluso dentro de cada fragmento.

Por tanto, no implementa la optimización paralela interna de Chunkwise Recurrent Retention.

Su propósito es mostrar cómo puede mantenerse la continuidad del estado entre bloques.

La implementación real de RetNet combina operaciones matriciales dentro de los fragmentos con propagación recurrente entre ellos.

¿Qué significa recurrent_chunk_size?

En implementaciones de RetNet, el parámetro de tamaño de fragmento controla cuántas posiciones se agrupan para determinadas operaciones.

Por ejemplo:

recurrent_chunk_size = 256

puede utilizarse para organizar el procesamiento en bloques de 256 tokens, según la configuración.

La elección influye en:

  • El paralelismo disponible.
  • La memoria temporal necesaria.
  • La cantidad de operaciones matriciales.
  • La propagación del estado entre bloques.
  • La latencia del procesamiento.

Un bloque más grande no siempre es mejor.

Un tamaño excesivo puede incrementar la memoria temporal.

Un bloque demasiado pequeño puede reducir la eficiencia del cálculo matricial.

La configuración adecuada debe determinarse mediante pruebas.

RetNet y el procesamiento del lenguaje en español

RetNet es una arquitectura general de procesamiento secuencial.

No depende de un idioma específico.

Por tanto, puede utilizarse como base para construir modelos entrenados en español.

Sin embargo, la arquitectura por sí sola no contiene conocimientos lingüísticos.

Para desarrollar una aplicación son necesarios un tokenizador, datos adecuados y parámetros entrenados.

Por ejemplo, podría utilizarse RetNet para investigar generación de texto, modelado de lenguaje o procesamiento de secuencias empresariales en español.

También podrían desarrollarse sistemas especializados utilizando corpus técnicos.

No obstante, es importante considerar la disponibilidad real de checkpoints.

La existencia de una implementación de arquitectura no significa que exista un modelo preentrenado adecuado para cualquier idioma o tarea.

Para proyectos empresariales conviene comparar la calidad con modelos ya disponibles antes de asumir el coste de entrenamiento de una arquitectura nueva.

Ventajas de RetNet

Entrenamiento paralelo

La representación paralela permite procesar numerosas posiciones simultáneamente.

Inferencia recurrente

La generación puede realizarse utilizando estados internos actualizables.

Memoria recurrente acotada

El tamaño del estado de retención no necesita crecer con toda la longitud del historial.

Procesamiento por fragmentos

La modalidad Chunkwise Recurrent permite combinar paralelismo y recurrencia.

Múltiples escalas temporales

Multi-Scale Retention proporciona diferentes factores de decaimiento para modelar dependencias de distintas duraciones.

Flexibilidad computacional

La misma operación de retención admite varias estrategias de ejecución.

Arquitectura orientada a grandes modelos

El estudio original evaluó su escalabilidad para modelado de lenguaje autorregresivo.

Limitaciones de RetNet

Aunque RetNet ofrece ventajas, presenta varias limitaciones.

La primera está relacionada con la compresión de la información histórica.

El estado recurrente tiene una capacidad limitada.

Por ello, conservar un estado de tamaño fijo no garantiza recordar todos los detalles anteriores.

Otra limitación es que las diferentes modalidades requieren implementaciones cuidadosas para mantener la equivalencia matemática y la estabilidad numérica.

La representación paralela también puede presentar un coste cuadrático si se calcula mediante matrices densas.

Por tanto, no debe asumirse que toda ejecución de RetNet tiene automáticamente complejidad lineal.

Además, los resultados de rendimiento dependen del hardware y de la implementación.

Los Transformers modernos utilizan técnicas optimizadas como FlashAttention y diferentes estrategias de gestión de caché.

Esto puede modificar considerablemente las comparaciones prácticas.

También existen limitaciones relacionadas con la disponibilidad de modelos preentrenados y herramientas especializadas.

Finalmente, RetNet no garantiza automáticamente una mejor capacidad de comprensión, razonamiento o generación de texto que otras arquitecturas.

Estas propiedades dependen del entrenamiento, los datos y la escala del modelo.

RetNet y la inteligencia artificial generativa

RetNet resulta especialmente relevante para los modelos generativos autorregresivos.

Durante la generación, el sistema produce tokens sucesivamente.

Cada nuevo token modifica el estado recurrente.

Posteriormente, el estado actualizado contribuye a calcular la siguiente predicción.

La ausencia de una caché KV histórica convencional puede reducir las necesidades de memoria durante secuencias largas.

Sin embargo, una memoria recurrente compacta no equivale a una memoria semántica ilimitada.

Los modelos pueden olvidar o comprimir información relevante.

Para aplicaciones empresariales que necesitan recuperar datos exactos, puede resultar conveniente complementar el modelo con mecanismos de recuperación externa.

Por ejemplo, un sistema RAG puede utilizar una base documental para recuperar información antes de generar una respuesta.

RetNet puede formar parte de un sistema generativo, pero no constituye por sí misma una arquitectura de agentes ni un sistema completo de recuperación documental.

Importancia de RetNet en la evolución de los modelos de lenguaje

La principal aportación de RetNet consiste en demostrar que un mecanismo temporal puede diseñarse desde el principio para admitir múltiples estrategias computacionales.

Su representación paralela facilita el entrenamiento.

Su representación recurrente reduce el coste de procesar nuevos tokens.

Su representación por fragmentos proporciona una estrategia eficiente para secuencias largas.

Además, Multi-Scale Retention permite modelar diferentes escalas temporales mediante factores de decaimiento.

Estas innovaciones contribuyen a conectar la investigación sobre atención, recurrencia y memoria neuronal.

RetNet comparte objetivos con arquitecturas como RWKV, Linear Transformer y Mamba, pero utiliza un mecanismo propio.

Su estudio ayuda a comprender que la eficiencia de un modelo no depende solamente de reducir operaciones.

También depende de diseñar una formulación matemática que admita diferentes algoritmos según la etapa de ejecución.

Preguntas frecuentes sobre RetNet

¿Qué es RetNet en inteligencia artificial?

RetNet es una arquitectura neuronal autorregresiva que utiliza mecanismos de retención para combinar entrenamiento paralelo, inferencia recurrente y procesamiento eficiente de secuencias largas.

¿Qué significa RetNet?

RetNet significa Retentive Network, o red de retención.

¿Quién desarrolló RetNet?

Fue presentada en 2023 por Yutao Sun, Li Dong, Shaohan Huang, Shuming Ma, Yuqing Xia, Jilong Xue, Jianyong Wang y Furu Wei.

¿Qué es Retention?

Es un mecanismo que combina representaciones de consultas, claves y valores utilizando ponderación temporal y factores de decaimiento.

¿Qué es Multi-Scale Retention?

Es un mecanismo que utiliza diferentes cabezas de retención para representar dependencias de distintas escalas temporales.

¿Qué es Parallel Retention?

Es una formulación que permite procesar numerosas posiciones simultáneamente mediante operaciones matriciales.

¿Qué es Recurrent Retention?

Es una formulación que mantiene y actualiza un estado interno conforme llegan nuevos tokens.

¿Qué es Chunkwise Recurrent Retention?

Es una modalidad que combina procesamiento paralelo dentro de fragmentos con estados recurrentes que transmiten información entre bloques.

¿RetNet utiliza autoatención softmax?

No como mecanismo central. Utiliza retención ponderada y procedimientos propios de normalización.

¿RetNet necesita una caché KV?

No necesita una caché KV histórica convencional durante su modalidad recurrente. Utiliza estados internos de retención.

¿RetNet tiene complejidad lineal?

Su modalidad recurrente por fragmentos puede ofrecer coste lineal respecto a la longitud total cuando el tamaño de los bloques y las dimensiones permanecen constantes. La modalidad paralela densa puede tener coste cuadrático.

¿RetNet es una red neuronal recurrente?

Puede ejecutarse recurrentemente, aunque su arquitectura también admite representaciones paralelas y por fragmentos.

¿Cuál es la diferencia entre RetNet y RWKV?

RWKV utiliza Weighted Key Value, Time Mixing y Receptance. RetNet utiliza Multi-Scale Retention y tres modalidades explícitas de cálculo.

¿Cuál es la diferencia entre RetNet y Mamba?

Mamba utiliza modelos de espacio de estados selectivos. RetNet utiliza un mecanismo de retención con decaimiento temporal y estados acumulados.

¿Qué significa Time Decay?

Es un mecanismo que controla cómo disminuye la influencia de información anterior conforme aumenta su distancia temporal.

¿RetNet puede procesar documentos largos?

Sí. Su modalidad recurrente por fragmentos está diseñada para procesar secuencias extensas con memoria controlada. Esto no garantiza recuperar todos los detalles históricos.

¿RetNet puede generar texto?

Sí. La arquitectura está diseñada para modelado autorregresivo y puede utilizarse para generación si dispone de parámetros entrenados.

¿RetNet puede utilizarse con Python?

Sí. Microsoft proporciona una implementación de RetNet dentro de la biblioteca TorchScale.

¿RetNet funciona con español?

Puede entrenarse para español, pero la calidad depende del tokenizador, los datos y los pesos del modelo.

¿RetNet es mejor que Transformer?

Puede ofrecer ventajas de memoria y latencia en determinados escenarios, pero no es universalmente superior. La elección depende de la tarea, el modelo y el entorno.

¿Por qué es importante estudiar RetNet?

Porque demuestra cómo combinar entrenamiento paralelo, generación recurrente y procesamiento por fragmentos mediante distintas representaciones de un mismo mecanismo de retención.

Conclusión

La arquitectura RetNet representa una contribución importante a la investigación sobre grandes modelos de lenguaje eficientes.

Su innovación principal es el mecanismo Retention, que permite combinar información histórica utilizando consultas, claves, valores y factores de decaimiento temporal.

La característica más destacada es que la operación admite tres modalidades de cálculo: paralela, recurrente y recurrente por fragmentos.

Esta flexibilidad permite aprovechar el paralelismo durante el entrenamiento y mantener estados compactos durante la generación.

Además, Multi-Scale Retention proporciona múltiples escalas temporales para representar dependencias de distinta duración.

Aunque RetNet ofrece ventajas computacionales interesantes, sus estados recurrentes tienen capacidad limitada y sus resultados deben evaluarse frente a modelos y sistemas actuales.

Para estudiantes, investigadores y desarrolladores de inteligencia artificial, RetNet ofrece una lección fundamental:

Una arquitectura neuronal puede mejorar su eficiencia no solamente reduciendo la complejidad matemática de sus operaciones, sino diseñando mecanismos que puedan calcularse de forma paralela durante el entrenamiento y recurrente durante la inferencia.

Comprender RetNet permite profundizar en los fundamentos de retención temporal, memoria recurrente, atención estructurada, cálculo por fragmentos y optimización de modelos generativos.


Referencias y fuentes oficiales

  1. Sun, Y., Dong, L., Huang, S., Ma, S., Xia, Y., Xue, J., Wang, J. y Wei, F. (2023). Retentive Network: A Successor to Transformer for Large Language Models. arXiv. https://arxiv.org/abs/2307.08621
  2. Microsoft Research. Retentive Network: A Successor to Transformer for Large Language Models. https://www.microsoft.com/en-us/research/publication/retentive-network-a-successor-to-transformer-for-large-language-models/
  3. Microsoft. RetNet — Repositorio del proyecto. https://github.com/microsoft/unilm/tree/master/retnet
  4. Microsoft. TorchScale — Implementación de RetNet. https://github.com/microsoft/torchscale
  5. Microsoft. RetNetDecoder — Código de arquitectura. https://github.com/microsoft/torchscale/blob/main/torchscale/architecture/retnet.py
  6. Hugging Face. Retentive Network — Artículo científico. https://huggingface.co/papers/2307.08621
  7. Peng, B. et al. (2023). RWKV: Reinventing RNNs for the Transformer Era. https://arxiv.org/abs/2305.13048
  8. Gu, A. y Dao, T. (2023). Mamba: Linear-Time Sequence Modeling with Selective State Spaces. https://arxiv.org/abs/2312.00752
  9. Katharopoulos, A. et al. (2020). Transformers are RNNs: Fast Autoregressive Transformers with Linear Attention. https://arxiv.org/abs/2006.16236

Solicitar Análisis Gratuito
Solicitar Análisis Gratuito

Visibilidad IA

Contact

Menu

(c) 2025-2026  Todos los derechos reservados | Designed by Benelux-IT