Sparse Autoencoders (SAE)
Un autoencoder sparso (SAE) scompone le attivazioni di una rete in numerose caratteristiche, di cui solo poche sono attive contemporaneamente: è uno strumento fondamentale per interpretare gli LLM.
Un autoencoder sparso (SAE) è un autoencoder addestrato a ricostruire il proprio input attraverso un livello nascosto in cui, per ogni input, si attivano solo poche unità. Nella ricerca attuale sull'IA, gli SAE vengono addestrati sulle attivazioni interne di un modello linguistico di grandi dimensioni (LLM) o di un modello visivo, con un numero di unità nascoste molto superiore alle dimensioni dell'input; di conseguenza, ogni unità nascosta, detta feature o variabile latente, tende ad attivarsi in corrispondenza di un concetto riconoscibile dagli esseri umani. Sono uno strumento centrale dell'interpretabilità meccanicistica: nel lavoro Scaling Monosemanticity del 2024, Anthropic ha addestrato SAE con fino a 34 milioni di feature sulle attivazioni di Claude 3 Sonnet, individuando feature associate a concetti come il Golden Gate Bridge, gli errori nel codice e l'inganno.
Perché le feature sparse aiutano l'interpretabilità#
I singoli neuroni nei modelli di grandi dimensioni sono spesso polisemantici e rispondono a diversi concetti non correlati. L'ipotesi della sovrapposizione, studiata in Toy Models of Superposition di Anthropic, spiega il motivo: un livello con d dimensioni può rappresentare molti più di d concetti come direzioni quasi ortogonali, purché solo pochi siano attivi contemporaneamente. Un SAE ricerca quell'insieme sovracompleto di direzioni. Il suo codice sparso per un'attivazione elenca le poche direzioni presenti e la loro intensità: è molto più facile da leggere di migliaia di valori neuronali mescolati.
Come funziona un autoencoder sparso#
Il codificatore mappa un vettore di attivazioni in un vettore di variabili latenti molto più ampio, seguito da una ReLU; il decodificatore ricostruisce poi l'attivazione come somma pesata delle proprie colonne, perciò ogni colonna del decodificatore corrisponde alla direzione di una feature. L'addestramento minimizza l'errore di ricostruzione insieme a un vincolo di sparsità. La scelta classica è una penalità L1 sulle variabili latenti, una forma di regolarizzazione; le SAE TopK di OpenAI mantengono solo le k variabili latenti più grandi per input e sono state scalate fino a un SAE con 16 milioni di variabili latenti sulle attivazioni di GPT-4; le SAE JumpReLU di Google DeepMind azzerano invece ogni variabile latente al di sotto di una soglia appresa. Una volta addestrate, le variabili latenti di un SAE vengono impiegate principalmente in due modi:
L'esempio giocattolo qui sotto codifica 64 direzioni di feature note in 32 dimensioni, in modo che nessuna singola dimensione corrisponda a una feature, e addestra una SAE TopK per recuperarle:
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 al massimo 4 variabili latenti attive per campione, la SAE lascia inspiegato il 7,1% della varianza. Nessuna delle 64 feature inserite corrisponde a una singola dimensione di input con una similarità coseno superiore a 0,9, mentre tutte e 64 corrispondono alla direzione del decodificatore di una variabile latente della SAE.
Applicazioni#
- Scoperta di feature: i ricercatori assegnano un'etichetta a ogni variabile latente raccogliendo gli input che la attivano maggiormente, spesso facendo scrivere l'etichetta a un LLM, e usano le feature per verificare cosa rappresenta un modello.
- Orientamento: fissare una feature a un valore elevato modifica il comportamento, un po' come aggiungere un vettore di orientamento. Nel maggio 2024 Anthropic ha rilasciato brevemente Golden Gate Claude, una versione con la feature del ponte amplificata, così che il ponte comparisse in quasi tutte le risposte.
- Tracciamento dei circuiti: i grafi di attribuzione di Anthropic del 2025 usano transcodificatori tra livelli, una variante degli SAE che legge le attivazioni di un livello e ricostruisce le uscite di livelli MLP successivi, per tracciare calcoli in più passaggi all'interno di Claude 3.5 Haiku.
- Suite SAE aperte: Gemma Scope di Google DeepMind ha rilasciato SAE JumpReLU per ogni livello di Gemma 2 2B e 9B; Gemma Scope 2 aggiunge SAE e transcodificatori per i modelli Gemma 3, da 270M a 27B parametri. La libreria SAELens addestra e carica SAE di questo tipo.
- Modelli visivi: anche gli SAE addestrati sulle attivazioni di CLIP e Vision Transformer individuano concetti visivi interpretabili. Un SAE richiede un dataset di vettori di attivazione;
model.embed()in Ultralytics YOLO26 restituisce un vettore di attivazione mediato con pooling per ogni immagine, a partire da qualsiasi indice di livello; per impostazione predefinita usa il penultimo livello.
Limiti#
Gli SAE ricostruiscono le attivazioni in modo imperfetto, e sostituire le attivazioni di un livello con la ricostruzione aumenta in modo misurabile la perdita del modello. Le feature individuate dipendono dalle dimensioni del dizionario e dall'esecuzione di addestramento: gli SAE più ampi suddividono una feature in diverse feature più specifiche, e alcune variabili latenti non si attivano mai. Nel marzo 2025 il team di interpretabilità di Google DeepMind ha riferito che i probe basati su feature SAE hanno ottenuto risultati inferiori ai semplici probe lineari nel rilevare intenti dannosi in prompt fuori distribuzione; ha inoltre dichiarato che avrebbe ridotto la priorità della ricerca fondamentale sugli SAE, continuando però a considerarli uno dei vari strumenti a disposizione.
SAE e concetti correlati#
- Autoencoder standard: comprime i dati attraverso un collo di bottiglia più stretto dell'input, per la compressione o la riduzione della dimensionalità. Un SAE amplia il livello nascosto e impone la sparsità per separare i concetti.
- Probe lineare: addestra un classificatore supervisionato per rilevare un concetto scelto in anticipo. Un SAE è non supervisionato e scopre feature senza etichette.
- Ingegneria delle rappresentazioni (RepE): individua direzioni concettuali confrontando le attivazioni di prompt accoppiati, mentre le feature SAE derivano dalla sola ricostruzione.
- Codifica sparsa: il metodo più datato di apprendimento del dizionario, che gli SAE approssimano con un'unica passata del codificatore anziché con un'ottimizzazione per ogni input. Olshausen e Field (1996) hanno dimostrato che un codice sparso appreso da immagini naturali produce filtri localizzati, orientati e simili a bordi, che ricordano i campi recettivi delle cellule semplici nella corteccia visiva primaria.










