⏱️ Lectura: 16 min

En 1982, el físico John Hopfield publicó un modelo de red neuronal que, cuatro décadas después, resultó ser la base conceptual del mecanismo de atención que sostiene a GPT, Claude y Gemini. La idea central es la memoria asociativa: una red que guarda patrones completos y los recupera a partir de una versión incompleta o ruidosa, sin usar direcciones exactas como la memoria de una computadora.

📑 En este artículo
  1. TL;DR
  2. ¿Qué es la memoria asociativa?
  3. Por qué importa entender este modelo
  4. Cómo funciona una red de Hopfield
  5. Ejemplos prácticos: recuperación asociativa en cuatro líneas de Python
  6. Cómo empezar a experimentar con memoria asociativa
  7. Casos de uso reales de la memoria asociativa
  8. Errores comunes y buenas prácticas
  9. Comparativa: Hopfield clásica, moderna y atención de los transformers
  10. Profundizando: de la energía discreta al softmax continuo
  11. Preguntas frecuentes
    1. ¿Qué diferencia hay entre la memoria asociativa y la memoria RAM de una computadora?
    2. ¿Las redes de Hopfield siguen usándose hoy?
    3. ¿Por qué se dice que la atención de los transformers es una forma de memoria asociativa?
    4. ¿Cuántos patrones puede guardar una red de Hopfield?
    5. ¿Qué es una red de Hopfield moderna o continua?
    6. ¿Necesito entender cálculo para seguir este modelo?
  12. Referencias
    1. 📚 Artículos relacionados

El investigador Alex Wang reconstruyó ese vínculo en un ensayo reciente: mostró, paso a paso, cómo partir solo de la idea de guardar y recuperar patrones alcanza para derivar la fórmula de atención sin memorizarla de un paper.

TL;DR

  • Una red de Hopfield recupera un patrón completo a partir de una versión incompleta o ruidosa de ese patrón.
  • La energía de la red baja en cada actualización hasta estabilizarse en el patrón memorizado más parecido.
  • El mecanismo de atención de un transformer calcula la misma recuperación por similitud entre vectores.
  • Las matrices Query, Key y Value convierten esa búsqueda asociativa en multiplicaciones paralelas en GPU.
  • Treinta y cinco años después, el paper de atención de 2017 formaliza esa equivalencia matemática.

¿Qué es la memoria asociativa?

La memoria asociativa es un modelo de almacenamiento donde un patrón completo se recupera a partir de una parte de sí mismo o de una versión con ruido, sin usar una dirección exacta como en la memoria de una computadora tradicional; las redes de Hopfield son su implementación clásica.

En una memoria RAM, pedís el dato ubicado en la dirección 0x4F2A y la máquina te lo entrega sin importar qué tan parecido sea a lo que buscabas. La memoria direccionable por contenido invierte ese orden: entrás con un fragmento del dato, un patrón corrupto o incompleto, y el sistema te devuelve el patrón almacenado más parecido. Es la misma lógica que usa tu cerebro cuando reconocés una canción a partir de tres notas.

Por qué importa entender este modelo

La red de Hopfield nació en biofísica, no en ingeniería de software: Hopfield buscaba explicar cómo el cerebro recupera recuerdos completos a partir de pistas parciales. Durante años quedó como una curiosidad de los cursos de redes neuronales, superada en la práctica por arquitecturas más flexibles.

El giro llegó cuando varios investigadores notaron que la regla de actualización de una red de Hopfield continua se parece, término a término, a la fórmula de atención que popularizó el paper Attention Is All You Need en 2017. Entender la recuperación asociativa deja de ser arqueología académica: explica por qué la atención a veces converge a un token equivocado, lo mismo que una red de Hopfield puede estabilizarse en un mínimo de energía incorrecto, y por qué ampliar el contexto cambia la capacidad efectiva de memoria del modelo.

Para quien ajusta prompts o diseña agentes, esta lectura explica un fenómeno conocido: un dato repetido varias veces en el contexto se recupera con más fuerza que uno mencionado una sola vez. En términos de energía, un patrón reforzado varias veces crea un pozo más profundo y más fácil de encontrar para la red.

Hopfield formuló su modelo en 1982, antes de que existieran las GPU modernas. Foto de Numan Ali en Unsplash

Cómo funciona una red de Hopfield

Una red de Hopfield clásica tiene N neuronas binarias, cada una con valor +1 o -1. Para memorizar un patrón, la red no lo guarda en una celda: lo codifica en una matriz de pesos W usando la regla de Hebb, donde cada peso W_ij se calcula como el producto de los valores i y j del patrón, con la diagonal en cero para que ninguna neurona se refuerce a sí misma.

La regla de Hebb funciona porque el producto p_i × p_j es positivo cuando dos neuronas coinciden en el patrón memorizado y negativo cuando difieren. Al sumar esos productos en la matriz W, cada par de neuronas aprende a reforzarse o inhibirse según qué tan seguido coincidieron en los patrones guardados: es la versión matemática de la plasticidad hebbiana que se resume desde los años cincuenta como «las neuronas que se disparan juntas, se conectan juntas».

Para recuperar un patrón a partir de una entrada corrupta, la red actualiza cada neurona una por una: cada neurona suma las señales que recibe de las demás, ponderadas por los pesos, y toma el signo de esa suma como su nuevo valor. Repetir esta actualización empuja al sistema hacia abajo en una función de energía E = -0.5 × xᵗWx. Como los pesos son simétricos, cada actualización asíncrona garantiza que la energía nunca sube, así que el sistema converge a un mínimo estable: el patrón memorizado más cercano a la entrada.

Hay dos formas de aplicar la actualización: asíncrona (una neurona a la vez, en orden aleatorio) o sincrónica (todas a la vez). La garantía de que la energía nunca sube solo vale para la actualización asíncrona con pesos simétricos; actualizar todas las neuronas al mismo tiempo puede hacer que el sistema oscile entre dos estados sin converger nunca, un detalle que casi siempre se omite en las explicaciones simplificadas del modelo.

Ese mínimo estable es, por definición, el recuerdo recuperado. La memoria asociativa funciona porque la red no busca una dirección: cae en un pozo de energía que coincide con el patrón original.

flowchart TD
    A["Patron de entrada con ruido"] --> B["Calcular energia de la red"]
    B --> C["Actualizar una neurona segun el signo de su entrada"]
    C --> D{"Bajo la energia?"}
    D -- "Si" --> C
    D -- "No, se estabilizo" --> E["Patron memorizado recuperado"]

La capacidad de una red de Hopfield clásica es limitada: la teoría clásica de Amit, Gutfreund y Sompolinsky de 1985 ubica el límite práctico alrededor del 14% del número de neuronas antes de que los patrones memorizados empiecen a mezclarse entre sí, lo que se conoce como crosstalk. Con 100 neuronas, eso son apenas 14 patrones distintos antes de que la recuperación empiece a fallar.

Ejemplos prácticos: recuperación asociativa en cuatro líneas de Python

El ejemplo más simple cabe en una red de 4 neuronas. Guardamos el patrón [1, -1, 1, -1] y luego le mostramos una versión con un bit invertido, para ver si la red lo corrige:

import numpy as np

pattern = np.array([1, -1, 1, -1])
W = np.outer(pattern, pattern)
np.fill_diagonal(W, 0)

corrupted = np.array([1, -1, -1, -1])  # un bit invertido respecto al original
recovered = np.sign(W @ corrupted)
print(recovered)

La salida es exactamente el patrón original, aunque la entrada tenía un bit distinto:

[ 1 -1  1 -1]

La neurona corrupta, la tercera, que entró en -1 en vez de 1, recibe una señal neta de +3 desde las otras tres neuronas, así que su signo se corrige en una sola actualización. Con patrones más largos la corrección necesita varias rondas, pero el mecanismo es idéntico.

El segundo ejemplo guarda dos patrones a la vez, [1, -1, 1, -1] y [1, 1, -1, -1], que son ortogonales entre sí:

patterns = [np.array([1, -1, 1, -1]), np.array([1, 1, -1, -1])]
W = sum(np.outer(p, p) for p in patterns)
np.fill_diagonal(W, 0)

corrupted = np.array([1, -1, -1, -1])
recovered = np.sign(W @ corrupted)
print(recovered)

La red sigue recuperando [ 1 -1 1 -1] aunque ahora guarda dos patrones, porque al ser ortogonales no interfieren entre sí. Si agregás un tercer patrón correlacionado con alguno de los dos, el riesgo de crosstalk aparece mucho antes del límite del 14% mencionado arriba.

Cómo empezar a experimentar con memoria asociativa

Para correr los ejemplos anteriores en tu máquina solo necesitás Python 3 y NumPy. En Linux y macOS:

python3 -m pip install numpy
python3 hopfield_demo.py

En Windows, el mismo comando usando python en vez de python3 desde PowerShell o CMD.

Guardá el código de los dos ejemplos en un archivo hopfield_demo.py y ejecutalo: no hay API keys, ni dependencias externas, ni GPU necesaria para esta escala de red.

Casos de uso reales de la memoria asociativa

  • Corrección de errores didáctica: los cursos de redes neuronales usan redes de Hopfield para mostrar cómo un sistema distribuido corrige ruido sin un algoritmo de corrección explícito, por ejemplo recuperando una imagen binaria completa a partir de la mitad de sus píxeles.
  • Modelos basados en energía: las máquinas de Boltzmann y los modelos de difusión comparten la misma lógica de minimizar una función de energía hasta estabilizarse en un patrón válido, generando un dato nuevo al dejar que el sistema caiga hacia un mínimo de esa superficie.
  • Capas de atención alternativas: el paper Hopfield Networks is All You Need (2020) propone capas de Hopfield continuo como reemplazo directo de las capas de atención en un transformer, con capacidad de almacenamiento exponencial en vez de lineal.
  • Interpretabilidad de modelos de lenguaje: pensar la atención como recuperación asociativa permite tratar un fallo de memoria del modelo como una convergencia a un mínimo de energía equivocado, en vez de un misterio de caja negra sin explicación.
El paper «Hopfield Networks is All You Need» se publicó en 2020, treinta y ocho años después del modelo original.

Errores comunes y buenas prácticas

El error más frecuente es sobrecargar la red: guardar más patrones de los que su capacidad permite produce recuperaciones mezcladas, donde la red converge a un patrón espurio que no es ninguno de los memorizados. La solución clásica es reducir la cantidad de patrones o usar patrones poco correlacionados entre sí, como en el ejemplo ortogonal de arriba.

Otro error es romper la simetría de la matriz de pesos W. La garantía de convergencia depende de que W sea simétrica (W_ij = W_ji); si entrenás la red con una regla distinta a Hebb sin verificar la simetría, perdés la garantía matemática de que la energía solo baja, y el sistema puede oscilar sin estabilizarse nunca.

Por último, es común confundir la red de Hopfield clásica, binaria y con actualización iterativa, con su versión moderna continua, que recupera un patrón en un solo paso usando softmax. Son parientes matemáticos, pero tienen propiedades de capacidad y convergencia distintas; tratarlas como intercambiables lleva a conclusiones equivocadas sobre qué tan parecida es la atención real a la red original de 1982.

Comparativa: Hopfield clásica, moderna y atención de los transformers

La tabla resume las tres versiones del mismo principio, de la más antigua a la más usada en producción hoy:

Modelo Regla de actualización Capacidad Relación con la atención
Hopfield clásica (1982) Signo de la suma ponderada, iterativa ~0,14 × N patrones Ancestro conceptual, actualización discreta
Hopfield moderna continua (2020) Softmax sobre similitudes, un solo paso Exponencial en N Matemáticamente equivalente a una capa de atención
Atención de un transformer Softmax(QKᵗ/√d)·V Limitada por la ventana de contexto Caso particular de recuperación asociativa continua

Profundizando: de la energía discreta al softmax continuo

La versión moderna de la red de Hopfield, descrita en Hopfield Networks is All You Need, cambia las neuronas binarias por vectores continuos y reemplaza la regla de actualización por una función de energía basada en log-sum-exp. El resultado de minimizar esa energía en un solo paso es, término a término, la fórmula de atención: softmax de la similitud entre una consulta y un conjunto de llaves, multiplicada por los valores asociados.

En el lenguaje de un transformer, la consulta (Query) es el patrón corrupto o parcial que entra a la red; las llaves (Key) son los patrones memorizados contra los que se compara por similitud; y los valores (Value) son lo que efectivamente se recupera cuando una llave coincide. La diferencia frente a Hopfield clásica es que la recuperación no itera: el softmax calcula de una sola vez una combinación ponderada de todos los valores, pesada por qué tan parecida es cada llave a la consulta.

sequenceDiagram
    participant Q as Consulta (Query)
    participant K as Llaves memorizadas (Key)
    participant V as Valores asociados (Value)
    Q->>K: compara similitud con cada llave
    K-->>Q: devuelve un peso de similitud por llave
    Q->>V: combina los valores segun esos pesos
    V-->>Q: patron recuperado por asociacion
flowchart LR
    A["Embeddings de entrada"] --> B["Matriz Query"]
    A --> C["Matriz Key"]
    A --> D["Matriz Value"]
    B --> E["Similitud Query-Key"]
    C --> E
    E --> F["Softmax sobre las similitudes"]
    F --> G["Suma ponderada de Values"]
    D --> G
    G --> H["Salida de la capa de atencion"]

La versión continua agrega un parámetro adicional, llamado beta (equivalente al factor 1/√d de la fórmula de atención), que controla qué tan dura es la recuperación. Con beta bajo, la red devuelve un promedio difuso de todos los patrones parecidos a la consulta, como una memoria borrosa; con beta alto, converge a un único patrón memorizado, igual que la red clásica de 1982. Los transformers modernos operan en un punto intermedio: ni promedian todo el contexto por igual ni recuperan un solo token, sino una combinación pesada donde pocos tokens dominan la salida.

Esta lectura no dice que los ingenieros que diseñaron el paper de atención de 2017 partieron de Hopfield; muestra que dos caminos de investigación distintos convergen en la misma fórmula. Lo que sí permite es derivar la atención desde una intuición física, recuperar un recuerdo completo, en vez de memorizarla como una fórmula de álgebra lineal sin motivo aparente.

💭 Clave: la capacidad exponencial de la Hopfield moderna es la razón matemática de que ampliar el contexto de un modelo de lenguaje no multiplique linealmente su capacidad de «recordar»: la relación es mucho más favorable que en la red clásica de 1982.

📖 Resumen en Telegram: Ver resumen

Tu próximo paso: abrí una terminal, pegá el código de los dos ejemplos en hopfield_demo.py y probá qué pasa si agregás un tercer patrón correlacionado con los otros dos, hasta que la recuperación empiece a fallar.

📬 Recibí lo nuevo en tu email

Te avisamos de artículos grandes (1-2 por mes).

Preguntas frecuentes

¿Qué diferencia hay entre la memoria asociativa y la memoria RAM de una computadora?

La RAM recupera un dato por su dirección exacta, sin importar su contenido. La memoria direccionable por contenido, en cambio, recupera un patrón completo a partir de una parte de él o de una versión con ruido, comparando similitud en vez de direcciones.

¿Las redes de Hopfield siguen usándose hoy?

La versión clásica de 1982 se usa casi exclusivamente con fines didácticos, por su baja capacidad de almacenamiento. Su versión continua moderna, en cambio, es la base teórica de propuestas activas de investigación para rediseñar capas de atención.

¿Por qué se dice que la atención de los transformers es una forma de memoria asociativa?

Porque la fórmula de atención, softmax de la similitud entre consulta y llaves multiplicada por valores, es matemáticamente equivalente a un paso de actualización de una red de Hopfield continua. Ambas resuelven el mismo problema: recuperar el patrón almacenado más parecido a una consulta parcial.

¿Cuántos patrones puede guardar una red de Hopfield?

La red clásica binaria guarda, de forma confiable, alrededor del 14% del número de sus neuronas antes de que los patrones empiecen a mezclarse. La versión continua moderna eleva esa cifra a un crecimiento exponencial respecto al número de neuronas.

¿Qué es una red de Hopfield moderna o continua?

Es la versión descrita en 2020 que reemplaza las neuronas binarias por vectores continuos y la regla de actualización iterativa por un softmax de un solo paso, logrando mayor capacidad y una conexión matemática directa con el mecanismo de atención.

¿Necesito entender cálculo para seguir este modelo?

No para la intuición: alcanza con álgebra de vectores y la idea de que un sistema cae hacia un mínimo de energía, como una pelota que rueda por una superficie hasta el punto más bajo. El cálculo aparece recién cuando se quiere derivar formalmente la versión continua de 2020.

Referencias

📱 ¿Te gusta este contenido? Únete a nuestro canal de Telegram @programacion donde publicamos a diario lo más relevante de tecnología, IA y desarrollo. Resúmenes rápidos, contenido fresco todos los días.

Imagen destacada: Foto de Logan Voss en Unsplash

¿Te sirvió? ¿Te dio otro error? Contalo abajo: las preguntas se responden y le sirven al siguiente que llegue.

Dejar un comentario

Andrés Morales

Desarrollador e investigador en inteligencia artificial. Escribe sobre modelos de lenguaje, frameworks, herramientas para devs y lanzamientos open source. Cubre papers de ML, ecosistema de startups tech y tendencias de programación.

0 Comentarios

Deja un comentario

Marcador de posición del avatar

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Podés incluir código entre <code>…</code> o, para varias líneas, <pre><code>…</code></pre>.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.