Capire i layer di attenzione nei Transformers
Questo studio usa autoencoder sparsi per interpretare i risultati degli strati di attenzione nei transformer.
― 6 leggere min
Indice
- La Sfida dell'Interpretabilità
- Cosa Sono gli Sparse Autoencoders?
- Metodologia
- Analisi delle Caratteristiche
- Risultati
- Identificazione delle Famiglie di Caratteristiche
- Intuizioni Qualitative
- Comprendere le Teste di Induzione Ridondanti
- Analisi del Circuito
- Risultati sul Circuito di Identificazione dell'Oggetto Indiretto
- Conclusione
- Direzioni Future
- Fonte originale
- Link di riferimento
Capire come funzionano le reti neurali è una grande sfida nella scienza. Una delle aree su cui ci concentriamo è come analizzare cosa succede dentro i layer di attenzione dei modelli, in particolare dei transformer. Questi modelli sono usati in tanti ambiti, come l'elaborazione del linguaggio.
Gli Sparse Autoencoders (SAEs) sono strumenti che ci aiutano a capire meglio questi modelli. Prendono dati complessi e li suddividono in parti più semplici che sono più facili da interpretare. In questo lavoro, applichiamo gli SAEs agli output dei layer di attenzione nei transformer per vedere quali intuizioni possiamo raccogliere.
La Sfida dell'Interpretabilità
Man mano che i modelli diventano più complessi, diventano anche più difficili da capire. Sapere cosa fa ogni parte del modello è fondamentale per il debugging e per migliorare le performance. Un compito chiave in questo campo è capire come interpretare i dati ad alta dimensione di questi modelli.
I Meccanismi di Attenzione giocano un ruolo significativo nel funzionamento dei transformer. Tuttavia, spesso producono output che sono difficili da interpretare. In poche parole, quando guardiamo i loro output, vogliamo sapere cosa stanno realmente facendo e perché.
Cosa Sono gli Sparse Autoencoders?
Gli sparse autoencoders sono un tipo di modello di machine learning progettato per imparare rappresentazioni efficienti dei dati. Funzionano costringendo il modello a usare solo alcune delle "caratteristiche" disponibili per rappresentare i dati in input. Questa scarsità aiuta a creare output più interpretabili.
In questo studio, applichiamo gli sparse autoencoders agli output dei layer di attenzione nei transformer. Il nostro obiettivo è suddividere questi output in caratteristiche o componenti più semplici e comprensibili.
Metodologia
Per applicare gli sparse autoencoders agli output dei layer di attenzione, concatenamo gli output di tutte le teste di attenzione in un layer. Questo ci dà una rappresentazione combinata che dovrebbe catturare l'essenza di cosa sta facendo il meccanismo di attenzione.
Una volta che abbiamo gli output combinati, addestriamo lo sparse autoencoder. Il suo compito è imparare a ricreare gli output di attenzione originali usando meno caratteristiche. Questo processo ci aiuta a identificare quali caratteristiche sono più importanti per interpretare il comportamento del modello.
Analisi delle Caratteristiche
Dopo aver addestrato i nostri sparse autoencoders, possiamo analizzare le caratteristiche che hanno appreso. Cataloghiamo queste caratteristiche in diversi gruppi in base a cosa sembrano rappresentare. Ad esempio, possiamo trovare caratteristiche che si riferiscono a contesti a lungo raggio, contesti a breve raggio e vari compiti di ragionamento induttivo.
Esaminando queste caratteristiche, possiamo ottenere intuizioni sui ruoli specifici che ogni testa di attenzione gioca nel modello complessivo. Questo ci aiuta a capire come i layer di attenzione contribuiscono alle previsioni del modello.
Risultati
Identificazione delle Famiglie di Caratteristiche
Attraverso la nostra analisi, abbiamo scoperto diverse famiglie di caratteristiche che i layer di attenzione utilizzano. Abbiamo identificato tre categorie principali: caratteristiche di contesto a lungo raggio, caratteristiche di contesto a breve raggio e caratteristiche di induzione. Ognuna di queste gioca un ruolo diverso nel modo in cui il modello elabora le informazioni.
- Caratteristiche di contesto a lungo raggio sembrano aiutare il modello a ricordare informazioni da molto prima in un testo. Permettono al modello di mantenere la rilevanza su passaggi più lunghi.
- Caratteristiche di contesto a breve raggio aiutano a capire le relazioni tra parole o frasi che sono più vicine tra loro.
- Caratteristiche di induzione sono interessanti perché aiutano il modello a prevedere cosa verrà dopo in base ai modelli visti prima nel testo.
Intuizioni Qualitative
Abbiamo anche esaminato più da vicino le caratteristiche apprese dai nostri sparse autoencoders nel contesto di specifici transformer, come GPT-2. Abbiamo scoperto che la maggior parte delle teste di attenzione nel modello GPT-2, circa il 90%, sono polisemantiche. Questo significa che servono a più scopi a seconda dei dati in input.
Questa polisemia aggiunge un livello di complessità all'interpretazione delle teste di attenzione. Suggerisce che una singola testa potrebbe svolgere più di un compito, il che può rendere la comprensione del comportamento del modello più impegnativa.
Comprendere le Teste di Induzione Ridondanti
Una delle scoperte intriganti del nostro studio riguarda le teste di induzione nel modello. Molti modelli, incluso GPT-2, hanno quelle che sembrano essere teste di induzione ridondanti. La nostra analisi fornisce un quadro più chiaro del perché esista questa ridondanza.
Abbiamo scoperto che alcune teste di induzione si specializzano in induzione a lungo prefisso, mentre altre si concentrano sull'induzione a breve prefisso. Questo significa che usano strategie diverse per fare previsioni su cosa verrà dopo in una sequenza. Chiarendo questi ruoli, possiamo capire meglio la funzione di ciascuna testa.
Analisi del Circuito
Oltre a valutare le caratteristiche di attenzione, abbiamo utilizzato i nostri sparse autoencoders per analizzare circuiti specifici nel modello, come il circuito di Identificazione dell'Oggetto Indiretto (IOI). Questo circuito aiuta il modello a determinare l'oggetto corretto in frasi con più soggetti.
Interpretando le caratteristiche SAE in questo contesto, abbiamo scoperto che il modello presta attenzione alla posizione di certi token, in particolare in relazione alla parola "e". Questa informazione posizionale influisce significativamente su come il modello prevede i risultati.
Risultati sul Circuito di Identificazione dell'Oggetto Indiretto
La nostra analisi del compito IOI ha rivelato che alcune caratteristiche si attivano quando il modello identifica token duplicati o mantiene il focus su soggetti chiave. In sostanza, abbiamo trovato che il modello utilizza questi segnali posizionali per migliorare le sue previsioni.
Abbiamo convalidato i nostri risultati sperimentando con variazioni nella struttura della frase, che hanno mostrato quanto sia critico il token "e" nel guidare l'attenzione del modello. Questo tipo di analisi ci permette di individuare caratteristiche specifiche che migliorano la comprensione della dinamica delle frasi.
Conclusione
Anche se abbiamo fatto passi significativi nell'interpretare i layer di attenzione usando gli sparse autoencoders, ci sono ancora molte domande a cui rispondere. Il nostro lavoro evidenzia l'utilità di questi autoencoders nel suddividere il comportamento complesso del modello in caratteristiche più semplici e interpretabili.
Continuando questa ricerca, intendiamo esplorare ulteriori layer e circuiti all'interno dei modelli transformer, esaminando anche modelli più grandi. In questo modo, speriamo di migliorare la nostra comprensione di come funzionano questi modelli e di perfezionare i loro design per migliori prestazioni in vari ambiti.
Direzioni Future
Ci sono diverse direzioni promettenti per la ricerca futura in quest'area. Un approccio consiste nell'applicare gli sparse autoencoders a modelli transformer più grandi e valutare se possiamo scoprire comportamenti ancora più complessi.
Inoltre, puntiamo a raffinare la nostra metodologia per tener conto di sfumature più specifiche nel comportamento del modello. Questo potrebbe comportare il testare gli effetti di diversi dataset di addestramento o esaminare quanto bene i nostri risultati si generalizzano attraverso vari compiti.
Infine, speriamo di contribuire al campo più ampio dell'interpretabilità meccanica offrendo strumenti e tecniche che altri possono utilizzare per capire i propri modelli. Promuovendo una comunità di ricercatori focalizzata sull'interpretabilità, possiamo lavorare per costruire sistemi AI trasparenti di cui gli utenti possono fidarsi.
Titolo: Interpreting Attention Layer Outputs with Sparse Autoencoders
Estratto: Decomposing model activations into interpretable components is a key open problem in mechanistic interpretability. Sparse autoencoders (SAEs) are a popular method for decomposing the internal activations of trained transformers into sparse, interpretable features, and have been applied to MLP layers and the residual stream. In this work we train SAEs on attention layer outputs and show that also here SAEs find a sparse, interpretable decomposition. We demonstrate this on transformers from several model families and up to 2B parameters. We perform a qualitative study of the features computed by attention layers, and find multiple families: long-range context, short-range context and induction features. We qualitatively study the role of every head in GPT-2 Small, and estimate that at least 90% of the heads are polysemantic, i.e. have multiple unrelated roles. Further, we show that Sparse Autoencoders are a useful tool that enable researchers to explain model behavior in greater detail than prior work. For example, we explore the mystery of why models have so many seemingly redundant induction heads, use SAEs to motivate the hypothesis that some are long-prefix whereas others are short-prefix, and confirm this with more rigorous analysis. We use our SAEs to analyze the computation performed by the Indirect Object Identification circuit (Wang et al.), validating that the SAEs find causally meaningful intermediate variables, and deepening our understanding of the semantics of the circuit. We open-source the trained SAEs and a tool for exploring arbitrary prompts through the lens of Attention Output SAEs.
Autori: Connor Kissane, Robert Krzyzanowski, Joseph Isaac Bloom, Arthur Conmy, Neel Nanda
Ultimo aggiornamento: 2024-06-25 00:00:00
Lingua: English
URL di origine: https://arxiv.org/abs/2406.17759
Fonte PDF: https://arxiv.org/pdf/2406.17759
Licenza: https://creativecommons.org/licenses/by/4.0/
Modifiche: Questa sintesi è stata creata con l'assistenza di AI e potrebbe presentare delle imprecisioni. Per informazioni accurate, consultare i documenti originali collegati qui.
Si ringrazia arxiv per l'utilizzo della sua interoperabilità ad accesso aperto.
Link di riferimento
- https://www.overleaf.com/learn/latex/Positioning_images_and_tables
- https://robertzk.github.io/circuit-explorer
- https://huggingface.co/ckkissane/attn-saes-gpt2-small-all-layers/tree/main
- https://ckkissane.github.io/attn-sae-gpt2-small-viz/
- https://colab.research.google.com/drive/1hZVEM6drJNsopLRd7hKajp_2v6mm_p70?usp=sharing
- https://huggingface.co/ckkissane/tinystories-1M-SAES/blob/main/concat-z-gelu-21-l1-lr-sweep-3/gelu-2l_L1_Hcat_z_lr1.00e-03_l12.00e%2B00_ds16384_bs4096_dc1.00e-07_rie50000_nr4_v78.pt
- https://ckkissane.github.io/attn-sae-gelu-2l-viz/
- https://colab.research.google.com/drive/10zBOdozYR2Aq2yV9xKs-csBH2olaFnsq?usp=sharing
- https://robertzk.github.io/gpt2-small-saes/
- https://wandb.ai/jbloom/gemma_2b_hook_z/artifacts/model/sae_group_gemma-2b_blocks.6.attn.hook_z_16384/v1/files
- https://www.neuronpedia.org/gpt2-small/att-kk
- https://github.com/ckkissane/attention-output-saes
- https://huggingface.co/datasets/NeelNanda/c4-code-tokenized-2b
- https://huggingface.co/datasets/Skylion007/openwebtext
- https://huggingface.co/datasets/HuggingFaceFW/fineweb
- https://vast.ai/
- https://www.paperspace.com/
- https://www.paperspace.com/deployments
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_0_1.html#feature_num_23303
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_0_3.html#feature_num_15142
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_0_8.html#feature_num_9455
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_0_8.html#feature_num_3583
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_0_8.html#feature_num_4149
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_0_1.html
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_0_5.html
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_0_9.html
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_0_9.html#feature_num_18663
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_0_9.html#feature_num_16907
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_1_5.html#feature_num_11308
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_1_0.html#feature_num_23309
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_1_6.html#feature_num_6571
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_1_6.html#feature_num_14559
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_1_6.html#feature_num_19420
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_1_6.html#feature_num_23126
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_1_5.html
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_1_8.html
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_2_0.html#feature_num_23851
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_2_9.html#feature_num_21398
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_2_9.html#feature_num_24315
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_2_9.html#feature_num_22897
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_2_2.html#feature_num_5123
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_2_5.html#feature_num_15000
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_2_0.html
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_2_3.html
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_2_5.html
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_2_7.html
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_2_9.html
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_3_6.html#feature_num_6799
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_3_7.html#feature_num_5123
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_3_9.html#feature_num_20873
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_3_9.html#feature_num_16086
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_3_9.html#feature_num_20837
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_3_0.html
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_3_2.html
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_3_6.html
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_3_11.html
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_4_0.html#feature_num_19344
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_4_0.html#feature_num_85
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_4_5.html#feature_num_14547
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_4_5.html#feature_num_23576
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_4_2.html#1328
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_4_10.html#feature_num_20979
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_4_5.html
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_4_7.html
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_4_11.html
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_5_1.html
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_5_5.html
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_6_9.html#feature_num_19625
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_6_3.html#feature_num_22083
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_6_3.html#feature_num_24144
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_6_7.html#feature_num_15065
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_6_3.html
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_6_5.html
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_6_7.html
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_6_9.html
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_6_11.html
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_7_10.html#feature_num_11308
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_7_1.html#feature_num_21707
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_7_9.html#feature_num_28587
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_7_9.html#feature_num_31787
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_7_2.html
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_7_5.html
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_7_8.html
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_7_9.html
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_7_10.html
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_8_4.html#feature_num_20055
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_8_5.html#feature_num_15566
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_8_8.html#feature_num_14739
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_8_6.html#feature_num_674
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_8_1.html
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_8_5.html
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_8_8.html
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_9_0.html#feature_num_16056
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_9_0.html#feature_num_21955
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_9_10.html#feature_num_8127
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_9_7.html#feature_num_2997
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_9_0.html
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_9_2.html
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_9_9.html
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_10_5.html#feature_num_6174
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_10_5.html#feature_num_8327
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_10_11.html#feature_num_14525
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_10_11.html#feature_num_619
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_10_10.html#feature_num_6954
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_10_1.html
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_10_4.html
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_10_5.html
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_10_6.html
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_10_10.html
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_10_11.html
- https://robertzk.github.io/gpt2-small-saes/cards/top_features_11_3.html
- https://www.neuronpedia.org/gpt2-small/3-res-jb/19755
- https://www.neuronpedia.org/gpt2-small/3-res-jb/14186