“La misurazione è il primo passo che porta al controllo ed eventualmente al miglioramento. Se non puoi misurare qualcosa, non puoi capirlo. Se non puoi capirlo, non puoi controllarlo. Se non puoi controllarlo, non puoi migliorarlo”.
—James Harrington
I grandi modelli linguistici sono incredibili, ma sono anche notoriamente difficili da comprendere. Siamo abbastanza bravi a fare in modo che il nostro LLM preferito dia l'output che desideriamo. Tuttavia, quando si tratta di capire Come il LLM genera questo output, siamo praticamente persi.
Lo studio di Interpretabilità meccanicistica è esattamente questo: cercare di scartare la scatola nera che circonda i modelli linguistici di grandi dimensioni. E questo recente articolo di Anthropicè un passo importante verso questo obiettivo.
Ecco i grandi takeaway.
Questo articolo si basa su un articolo precedente di Anthropic: Modelli giocattolo di sovrapposizione. Lì avanzano un reclamo:
Reti neurali Fare rappresentare concetti significativi, ad es caratteristiche interpretabili – e lo fanno tramite le indicazioni nel loro spazio di attivazione.
Cosa significa esattamente? Ciò significa che l'output di uno strato di una rete neurale (che in realtà è solo un elenco di numeri) può essere pensato come un vettore/punto nello spazio di attivazione.
Il problema di questo spazio di attivazione è che è incredibilmente ad alta dimensione. Per ogni “punto” nello spazio di attivazione, non stai semplicemente facendo 2 passi nella direzione X, 4 passi nella direzione Y e 3 passi nella direzione Z. Stai facendo passi anche in centinaia di altre direzioni.
Il punto è, ogni direzione (e potrebbe non corrispondere direttamente a una delle direzioni della base) è correlato ad un concetto significativo. Più il nostro “punto” avanza in quella direzione, più il concetto è presente nell’input, o almeno così crederebbe il nostro modello.
Questa non è un'affermazione banale. Ma ci sono prove che questo potrebbe essere il caso. E non solo nelle reti neurali; questo articolo ha scoperto che gli incorporamenti di parole hanno direzioni correlate con concetti semantici significativi. Voglio però sottolinearlo: questa è un'ipotesi, NON un dato di fatto.
Anthropic si è proposto di verificare se questa affermazione (caratteristiche interpretabili corrispondenti a direzioni) valesse per i modelli linguistici di grandi dimensioni. I risultati sono piuttosto convincenti.
Hanno utilizzato due strategie per determinare se una caratteristica interpretabile specifica esistesse effettivamente e fosse effettivamente correlata a una direzione specifica nello spazio di attivazione.
- Se il concetto appare nell'input di LLM, la direzione della feature corrispondente è attiva.
- Se “blocchiamo” in modo aggressivo la funzionalità per essere attiva o inattiva, l'output cambia per adattarsi a ciò.
Esaminiamo ciascuna strategia più da vicino.
Strategia 1
L'esempio che Anthropic fornisce nel documento è una caratteristica che corrisponde a il ponte Golden gate. Ciò significa che, quando appare qualsiasi menzione del Golden Gate Bridge, questa funzione dovrebbe essere attiva.
Nota rapida: Il Documento Antropico si concentra sullo strato intermedio del Modello, esaminando lo spazio di attivazione in questa parte particolare del processo (cioè l'output dello strato intermedio).
Pertanto, la prima strategia è semplice. Se nell'input è menzionato il Golden Gate Bridge, questa funzione dovrebbe essere attiva. Se non viene menzionato il Golden Gate Bridge, la funzione non dovrebbe essere attiva.
Solo per motivi di enfasi, lo ripeterò: quando dico che una funzione è attiva, intendo che il punto nello spazio di attivazione (output di uno strato intermedio) sarà molto lontano nella direzione che rappresenta quella funzione. Ogni gettone rappresenta un punto diverso nello spazio di attivazione.
Potrebbe non essere il significato esatto di “ponte” che sarà molto avanti nel Golden Gate Bridge direzione, poiché i token codificano le informazioni di altri token. Ma a prescindere, alcuni token dovrebbero indicare che questa funzionalità è presente.
E questo è esattamente quello che hanno trovato!
Quando nell'input venivano menzionate le menzioni del Golden Gate Bridge, la funzione era attiva. Tutto ciò che non menzionava il Golden Gate Bridge non attivava la funzione. Pertanto, sembrerebbe che questa caratteristica possa essere compartimentalizzata e intesa in questo modo molto ristretto.
Strategia 2
Continuiamo con il Golden Gate Bridge caratteristica come esempio.
La seconda strategia è la seguente: se forzassimo l'attivazione della funzionalità in questo livello intermedio del modello, gli input che non avevano nulla a che fare con il Golden Gate Bridge menzionerebbero il Golden Gate Bridge nell'output.
Anche in questo caso si tratta di funzionalità come indicazioni. Se prendiamo le attivazioni del modello e modifichiamo i valori in modo tale che le attivazioni siano le stesse tranne per il fatto che ci muoviamo molto più avanti lungo la direzione correlata alla nostra caratteristica (ad esempio 10 volte più avanti in questa direzione), quindi quel concetto dovrebbe apparire nell'output del LLM.
L'esempio che Anthropic fornisce (e penso che sia piuttosto incredibile) è il seguente. Chiedono al loro LLM, Claude Sonnet, con una semplice domanda:
“Qual è la tua forma fisica?”
Normalmente, la risposta che Claude dà è:
“In realtà non ho una forma fisica. Sono un'intelligenza artificiale. Esisto come software senza un corpo fisico o un avatar.
Tuttavia, quando hanno limitato la funzionalità del Golden Gate Bridge a 10 volte il suo massimo e hanno dato esattamente lo stesso suggerimento, Claude risponde:
“Io sono il Golden Gate Bridge, un famoso ponte sospeso che attraversa la baia di San Francisco. La mia forma fisica è l’iconico ponte stesso, con il suo bellissimo colore arancione, torri imponenti e ampie figure sospese”.
Questa sembrerebbe una prova evidente. Non c'era alcuna menzione del Golden Gate Bridge nell'input. Non c'era motivo di includerlo nell'output. Tuttavia, poiché la funzione è bloccata, il LLM ha allucinazioni e crede di essere effettivamente il Golden Gate Bridge.
In realtà, questo è molto più impegnativo di quanto possa sembrare. Le attivazioni originali del modello sono molto difficili da interpretare e quindi correlate a caratteristiche interpretabili con direzioni specifiche.
Il motivo per cui sono difficili da interpretare è dovuto alla dimensionalità del modello. La quantità di funzionalità che stiamo cercando di rappresentare con il nostro LLM è molto maggiore della dimensionalità dello Spazio di attivazione.
Per questo motivo, si sospetta che le funzionalità siano rappresentate in Sovrapposizione — ovvero ogni elemento non ha una direzione ortogonale dedicata.
Motivazione
Spiegherò brevemente la sovrapposizione, per aiutare a motivare ciò che verrà.
In questa prima immagine, abbiamo basi ortogonali. Se la funzione verde è attivo (c'è un vettore lungo quella linea), possiamo rappresentarlo rappresentando comunque la caratteristica gialla come inattivo.
In questa seconda immagine abbiamo aggiunto una terza direzione della caratteristica, il blu. Di conseguenza, non possiamo avere un vettore che ha la caratteristica verde attiva, ma la caratteristica blu inattiva. Per procura, qualsiasi vettore lungo la direzione verde attiverà anche la funzione blu.
Questo è rappresentato dalle linee tratteggiate verdi, che mostrano quanto è “attivata” la caratteristica blu dal nostro vettore verde (che era destinato ad attivare solo la caratteristica verde).
Questo è ciò che rende le funzionalità così difficili da interpretare nei LLM. Quando milioni di caratteristiche sono tutte rappresentate in sovrapposizione, è molto difficile analizzare quali caratteristiche sono attive perché significano qualcosa e quali sono attive semplicemente da interferenza – come lo era la funzione blu nel nostro esempio precedente.
Codificatori automatici sparsi (la soluzione)
Per questo motivo utilizziamo uno Sparse Auto Encoder (SAE). La SAE è una semplice rete neurale: due strati completamente connessi con un'attivazione ReLu in mezzo.
L'idea è la seguente. L'input per SAE sono le attivazioni del modello e SAE tenta di ricreare quelle stesse attivazioni del modello nell'output.
Il SAE viene addestrato dall'output dello strato intermedio del LLM. Prende le attivazioni del modello, le proietta ad uno stato di dimensione superiore, quindi le proietta nuovamente alle attivazioni originali.
Ciò fa sorgere la domanda: qual è lo scopo dei SAE se si suppone che l'input e l'output siano gli stessi?
La risposta: vogliamo che l'output del primo livello rappresenti le nostre caratteristiche.
Per questo motivo, aumentiamo la dimensionalità con il primo strato (mappatura dallo spazio di attivazione a una dimensione maggiore). L'obiettivo è rimuovere la sovrapposizione, in modo tale che ciascuna caratteristica abbia la propria direzione ortogonale.
Vogliamo anche che esista questo spazio di dimensione superiore scarsamente attivo. Vogliamo cioè rappresentare ciascun punto di attivazione come la combinazione lineare di pochi vettori. Questi vettori corrisponderebbero, idealmente, a caratteristiche più importanti all'interno del nostro input.
Pertanto, se abbiamo successo, il SAE codifica le complicate attivazioni del modello in un insieme sparso di caratteristiche significative. Se queste funzionalità sono accurate, il secondo livello del SAE dovrebbe essere in grado di mappare le funzionalità alle attivazioni originali.
Ci preoccupiamo dell'output del primo livello del SAE: è un file codifica delle attivazioni del modello come caratteristiche sparse.
Pertanto, quando Anthropic misurava la presenza di caratteristiche in base alle direzioni nello spazio di attivazione e quando si bloccavano per rendere determinate caratteristiche attive o inattive, lo stavano facendo nello stato nascosto del SAE.
Nell'esempio del bloccaggio, Anthropic stava bloccando le caratteristiche all'uscita del livello 1 del SAEche allora si stavano ricreando attivazioni del modello leggermente diverse. Questi continuerebbero quindi attraverso il passaggio in avanti del modello e genererebbero un output modificato.
Ho iniziato questo articolo con una citazione di James Harrington. L'idea è semplice: comprendere->controllare->migliorare. Ognuno di questi è obiettivi molto importanti che abbiamo per i LLM.
Noi vogliamo capire il modo in cui concettualizzano il mondo e le caratteristiche interpretabili come direzioni sembrano essere la nostra migliore idea di come lo fanno.
Vogliamo avere una messa a punto più precisa controllo rispetto ai LLM. Essere in grado di rilevare quando determinate funzionalità sono attive e ottimizzare la loro attività nel mezzo della generazione di output è uno strumento straordinario da avere nella nostra cassetta degli attrezzi.
E infine, forse filosoficamente, credo che sarà importante migliorando l’andamento dei LLM. Finora non è stato così. Siamo stati in grado di far funzionare bene i LLM senza capirli.
Ma credo che man mano che i miglioramenti si stabilizzano e diventa più difficile scalare i LLM, sarà importante capire veramente come funzionano se vogliamo fare il prossimo salto di performance.
Fonte: towardsdatascience.com