Hypernetworks
Una hiperrred es una red neuronal que genera los pesos de otra red a partir de una entrada, como una incrustación de tarea. Abarca usos y un ejemplo en PyTorch.
Una hiperred es una red neuronal cuya salida son los pesos de otra red, llamada red objetivo o principal. En vez de aprender un único conjunto fijo de pesos del modelo, la red objetivo recibe pesos que la hiperred calcula a partir de una entrada de condicionamiento, como un identificador de tarea, un perfil de usuario, una descripción de texto o una imagen de ejemplo, de modo que una sola hiperred entrenada puede producir un modelo especializado distinto para cada entrada en una pasada hacia delante. En el artículo HyperNetworks de Google Brain de 2016, David Ha, Andrew Dai y Quoc Le utilizaron hiperredes pequeñas para generar los pesos de redes convolucionales y recurrentes profundas; hoy la idea aparece en el aprendizaje continuo, la personalización de modelos de difusión y la búsqueda de arquitecturas neuronales.
Cómo funcionan las hiperredes#
Durante el entrenamiento, solo se aprenden los parámetros propios de la hiperred. La entrada de condicionamiento, a menudo una representación incrustada aprendida por tarea o capa, pasa por la hiperred para generar los pesos de la red objetivo; la red objetivo procesa los datos reales con esos pesos y la retropropagación transmite el gradiente de pérdida a través de los pesos generados hasta la hiperred:
Ha y sus colaboradores distinguieron las hiperredes estáticas, que generan una sola vez los pesos de cada capa a partir de una representación vectorial asociada a esa capa, de las hiperredes dinámicas, que recalculan los pesos para cada entrada o paso temporal, como hacía su HyperLSTM en cada paso de una secuencia. Los pesos generados son tensores normales en tiempo de ejecución, por lo que la red de destino puede tener cualquier arquitectura, incluida una capa Transformer cuyas proyecciones de atención procedan de la hiperred. El principal problema de ingeniería es el tamaño de la salida: una capa con millones de pesos necesitaría una hiperred con millones de salidas por capa. Los diseños prácticos generan los pesos en bloques, cada uno a partir de su propia representación vectorial del bloque; generan solo pequeños factores de bajo rango para cada actualización de pesos o solo una escala y un desplazamiento por canal, como en la modulación lineal por características (FiLM).
Ejemplo de hiperred en PyTorch#
Este ejemplo de PyTorch entrena una hiperred con una familia de tareas: ondas sinusoidales con distintas amplitudes y fases. Para cada tarea genera los 97 pesos de una pequeña red objetivo, y solo se entrena la hiperred:
import math
import torch
from torch import nn
torch.manual_seed(0)
x = torch.linspace(-math.pi, math.pi, 64)
# Hypernetwork: maps a task (amplitude, phase) to all 97 weights of a 1-32-1 target network
hyper = nn.Sequential(nn.Linear(2, 128), nn.ReLU(), nn.Linear(128, 97))
optimizer = torch.optim.Adam(hyper.parameters(), lr=1e-3)
def target(x, w):
"""Run the target network with weights w produced by the hypernetwork."""
return torch.relu(x[:, None] * w[:32] + w[32:64]) @ w[64:96] + w[96]
# Train only the hypernetwork, on a new random sine task at every step
for step in range(5000):
task = torch.rand(2) * torch.tensor([2.0, math.pi])
loss = ((target(x, hyper(task)) - task[0] * torch.sin(x + task[1])) ** 2).mean()
optimizer.zero_grad()
loss.backward()
optimizer.step()
# Unseen task: one forward pass of the hypernetwork produces the target network's weights
y = 1.5 * torch.sin(x + 1.0)
with torch.no_grad():
mse = ((target(x, hyper(torch.tensor([1.5, 1.0]))) - y) ** 2).mean()
print(f"Unseen task MSE: {mse:.3f} with generated weights, {(y**2).mean():.3f} predicting zero")Imprime Unseen task MSE: 0.010 with generated weights, 1.132 predicting zero. La red objetivo para la amplitud 1.5 y la fase 1.0 nunca se entrenó; sus pesos procedían de una sola llamada a la hiperred, que aprendió cómo cambian los pesos adecuados en toda la familia de tareas.
Aplicaciones#
- Aprendizaje continuo: una hiperred condicionada por tarea almacena una pequeña representación incrustada por tarea y regenera sus pesos bajo demanda. El entrenamiento de una nueva tarea incluye una penalización que mantiene sin cambios las salidas de la hiperred para las representaciones incrustadas de tareas anteriores, lo que contrarresta el olvido catastrófico.
- Personalización de modelos generativos: HyperDreamBooth predice un pequeño conjunto de pesos personalizados para un modelo de difusión de texto a imagen a partir de una sola foto de una cara y luego los refina brevemente; personaliza el modelo en unos 20 segundos, 25 veces más rápido que DreamBooth, y los pesos personalizados son 10 000 veces más pequeños que un modelo DreamBooth.
- Búsqueda de arquitecturas neuronales: las hiperredes de grafos leen una arquitectura candidata como un grafo y predicen sus pesos, de modo que las candidatas pueden ordenarse según su precisión de validación con los pesos predichos, en vez de entrenarlas una por una.
- Clasificación de cero disparos: los autores de CLIP describen su codificador de texto como una hiperred que genera los pesos de un clasificador lineal a partir de los nombres de las clases, lo que permite a CLIP clasificar imágenes en categorías que nunca vio como etiquetas de entrenamiento.
Los detectores de vocabulario abierto aplican la misma idea a la detección. YOLOE-26 de Ultralytics, basado en YOLO26, codifica una vez cada nombre de clase pasado a set_classes() con MobileCLIP2, un codificador de texto compacto al estilo de CLIP, y utiliza las representaciones incrustadas resultantes como pesos para puntuar cada región candidata frente a cada clase. La exportación incorpora esas representaciones incrustadas a una convolución 1x1 ordinaria en la cabeza de detección.
Hiperredes frente a términos relacionados#
- Ajuste fino: adapta un conjunto fijo de pesos a una nueva tarea mediante pasos de gradiente con los datos de esa tarea. Una hiperred entrenada produce los pesos para una tarea nueva en una sola pasada hacia delante, solo con la entrada de condicionamiento de la tarea.
- Met aprendizaje: el objetivo más amplio de aprender a adaptarse rápidamente a tareas nuevas. Las hiperredes son una forma de implementarlo, asignando directamente una descripción de la tarea o unos pocos ejemplos a los pesos.
- Mezcla de expertos (MoE): dirige cada entrada a unas pocas subredes expertas fijas, entre muchas disponibles. Una hiperred calcula pesos nuevos para cada entrada o tarea en lugar de seleccionar entre los ya almacenados.
- Programadores de pesos rápidos: redes que escriben los pesos a corto plazo de otra red a medida que se procesa una secuencia; una idea de principios de los años noventa. La autoatención lineal en los Transformers es formalmente equivalente a uno de estos programadores de pesos rápidos.










