Sparse Autoencoders (SAE)
Un autoencoder disperso (SAE) divide las activaciones de una red en numerosas características, de las que solo unas pocas están activas a la vez; es una herramienta fundamental para interpretar los LLM.
Un autoencoder disperso (SAE) es un autoencoder entrenado para reconstruir su entrada a través de una capa oculta en la que solo unas pocas unidades se activan para una entrada determinada. En la investigación actual sobre IA, los SAE se entrenan con las activaciones internas de un modelo de lenguaje grande (LLM) o de un modelo de visión, con muchas más unidades ocultas que dimensiones de entrada, de modo que cada unidad oculta, denominada característica o latente, tiende a activarse ante un concepto reconocible por las personas. Son una herramienta fundamental de la interpretabilidad mecanicista: el trabajo de Anthropic de 2024, Scaling Monosemanticity, entrenó SAE con hasta 34 millones de características sobre las activaciones de Claude 3 Sonnet y encontró características para conceptos como el puente Golden Gate, los errores de código y el engaño.
Por qué las características dispersas ayudan a la interpretabilidad#
Las neuronas individuales de los modelos grandes suelen ser polisémicas y responder a varios conceptos sin relación entre sí. La hipótesis de superposición, estudiada en Toy Models of Superposition de Anthropic, explica por qué: una capa con d dimensiones puede representar muchos más de d conceptos como direcciones casi ortogonales, siempre que solo haya unos pocos activos a la vez. Un SAE busca ese conjunto sobredimensionado de direcciones. Su código disperso para una activación indica cuáles de esas pocas direcciones están presentes y con qué intensidad, algo mucho más fácil de leer que miles de valores neuronales mezclados.
Cómo funciona un autoencoder disperso#
El codificador asigna un vector de activaciones a un vector mucho más amplio de variables latentes, seguido de una ReLU, y el decodificador reconstruye la activación como una suma ponderada de sus columnas, de modo que cada columna del decodificador es la dirección de una característica. El entrenamiento minimiza el error de reconstrucción más una restricción de dispersidad. La opción clásica es una penalización L1 sobre las variables latentes, una forma de regularización; los SAE TopK de OpenAI conservan solo las k variables latentes más grandes por entrada y se escalaron hasta un SAE con 16 millones de variables latentes sobre las activaciones de GPT-4; y los SAE JumpReLU de Google DeepMind ponen a cero cada variable latente por debajo de un umbral aprendido. Una vez entrenados, los valores latentes de un SAE se utilizan principalmente de dos maneras:
El ejemplo simplificado de abajo empaqueta 64 direcciones de características conocidas en 32 dimensiones, de modo que ninguna dimensión individual corresponde a una característica, y entrena un SAE TopK para recuperarlas:
import torch
import torch.nn.functional as F
torch.manual_seed(0)
# Toy activations: 64 feature directions packed into 32 dimensions (superposition), ~3 active per sample
features = F.normalize(torch.randn(64, 32), dim=1)
acts = (torch.rand(8192, 64) * (torch.rand(8192, 64) < 0.05)) @ features
encoder, decoder = torch.nn.Linear(32, 256), torch.nn.Linear(256, 32) # 256 latents: 8x overcomplete
optimizer = torch.optim.Adam([*encoder.parameters(), *decoder.parameters()], lr=1e-3)
for step in range(3000):
# TopK sparsity: keep each sample's 4 largest latents and zero the rest
values, idx = encoder(acts).topk(4, dim=-1)
latents = torch.zeros(len(acts), 256).scatter(-1, idx, F.relu(values))
loss = (decoder(latents) - acts).pow(2).sum(-1).mean()
optimizer.zero_grad()
loss.backward()
optimizer.step()
directions = F.normalize(decoder.weight.T, dim=1) # one learned direction per latent
print(f"Unexplained variance: {loss.item() / (acts - acts.mean(0)).pow(2).sum(-1).mean().item():.3f}")
print(f"Features matching a single neuron: {(features.abs().max(dim=1).values > 0.9).sum().item()} of 64")
print(f"Features matching an SAE latent: {((directions @ features.T).max(dim=0).values > 0.9).sum().item()} of 64")Con un máximo de 4 variables latentes activas por muestra, el SAE deja sin explicar el 7,1 % de la varianza. Ninguna de las 64 características incorporadas se alinea con una sola dimensión de entrada con una similitud del coseno superior a 0,9, mientras que las 64 se alinean con la dirección del decodificador de alguna variable latente del SAE.
Aplicaciones#
- Descubrimiento de características: Los investigadores etiquetan cada variable latente recopilando las entradas que más la activan, a menudo con un LLM que redacta la etiqueta, y utilizan las características para auditar qué representa un modelo.
- Dirección: Fijar una característica en un valor alto cambia el comportamiento, de forma muy similar a añadir un vector de dirección. En mayo de 2024, Anthropic lanzó brevemente Golden Gate Claude, una versión con la característica del puente amplificada, de modo que el puente aparecía en casi todas las respuestas.
- Trazado de circuitos: Los grafos de atribución de Anthropic de 2025 utilizan transcodificadores entre capas, una variante de SAE que lee las activaciones de una capa y reconstruye las salidas de las capas MLP posteriores, para trazar cálculos de varios pasos dentro de Claude 3.5 Haiku.
- Conjuntos de SAE abiertos: Gemma Scope de Google DeepMind publicó SAE JumpReLU para cada capa de Gemma 2 2B y 9B, y Gemma Scope 2 añade SAE y transcodificadores para los modelos Gemma 3, de 270M a 27B parámetros. La biblioteca SAELens entrena y carga esos SAE.
- Modelos de visión: Los SAE entrenados con activaciones de CLIP y Vision Transformer también encuentran conceptos visuales interpretables. Un SAE necesita un conjunto de datos de vectores de activación, y
model.embed()en Ultralytics YOLO26 devuelve un vector de activación promediado por imagen de cualquier índice de capa; por defecto, devuelve el de la penúltima capa.
Limitaciones#
Los SAE reconstruyen las activaciones de forma imperfecta, y sustituir las activaciones de una capa por su reconstrucción aumenta de forma medible la pérdida del modelo. Las características que encuentran dependen del tamaño del diccionario y de la ejecución del entrenamiento, ya que los SAE más amplios dividen una característica en varias más precisas y algunas variables latentes nunca se activan. En marzo de 2025, el equipo de interpretabilidad de Google DeepMind informó de que los detectores basados en características SAE rendían peor que los detectores lineales simples al detectar intenciones dañinas en indicaciones fuera de distribución, y anunció que daría menos prioridad a la investigación fundamental sobre SAE, aunque seguiría considerándolos una herramienta entre varias.
SAE frente a conceptos relacionados#
- Autoencoder estándar: Comprime los datos a través de un cuello de botella más estrecho que la entrada para comprimirlos o reducir su dimensionalidad. Un SAE amplía la capa oculta e impone dispersidad para separar conceptos.
- Sonda lineal: Entrena un clasificador supervisado para detectar un concepto elegido de antemano. Un SAE es no supervisado y descubre características sin etiquetas.
- Ingeniería de representaciones (RepE): Encuentra direcciones conceptuales comparando las activaciones de indicaciones emparejadas, mientras que las características SAE proceden únicamente de la reconstrucción.
- Codificación dispersa: Método anterior de aprendizaje de diccionarios que los SAE aproximan con una sola pasada del codificador, en lugar de optimizar cada entrada. Olshausen y Field (1996) demostraron que un código disperso aprendido a partir de imágenes naturales produce filtros localizados, orientados y similares a bordes que recuerdan a los campos receptivos de las células simples de la corteza visual primaria.










