Seguendo la storia di Zephyra, l'intelligenza artificiale antropica si è impegnata a estrarre caratteristiche significative in un modello. L'idea alla base di questa indagine è capire come interagiscono tra loro i diversi componenti di una rete neurale e quale ruolo gioca ciascun componente.
Secondo il giornale “Verso la monosemanticità: scomposizione di modelli linguistici con l'apprendimento del dizionario†uno Sparse Autoencoder è in grado di estrarre con successo caratteristiche significative da un modello. In altre parole, gli Autoencoder Sparsi aiutano ad abbattere il problema della “polisemanticità” – attivazioni neurali che corrispondono a diversi significati/interpretazioni contemporaneamente concentrandosi su caratteristiche scarsamente attivanti che contengono un’unica interpretazione – in altre parole, sono più unidirezionali.
Per capire come è fatto il tutto, abbiamo questi bellissimi manufatti Codificatori automatici E Codificatori automatici sparsi dal prof. Tom Sì che spiegano il funzionamento dietro le quinte di questi meccanismi fenomenali.
(Tutte le immagini sottostanti, se non diversamente specificato, sono del Prof. Tom Yeh dai post di LinkedIn sopra menzionati, che ho modificato con il suo permesso.)
Per iniziare, esploriamo innanzitutto cos'è un Autoencoder e come funziona.
Immagina che uno scrittore abbia la sua scrivania ricoperta di diversi fogli: alcuni sono i suoi appunti per la storia che sta scrivendo, altri sono copie delle bozze finali, altri ancora sono illustrazioni per la sua storia ricca di azione. Ora, in mezzo a questo caos, è difficile trovare le parti importanti, soprattutto quando lo scrittore ha fretta e l'editore è al telefono chiedendo un libro entro due giorni. Per fortuna, lo scrittore ha un assistente molto efficiente: questo assistente si assicura che la scrivania in disordine venga pulita regolarmente, raggruppando oggetti simili, organizzando e mettendo le cose al posto giusto. E se e quando necessario, l'assistente recuperava gli articoli corretti per lo scrittore, aiutandolo a rispettare le scadenze fissate dal suo editore.
Bene, il nome di questo assistente è Autoencoder. Ha principalmente due funzioni: codifica e decodifica. La codifica si riferisce alla condensazione dei dati di input e all'estrazione delle caratteristiche essenziali (organizzazione). La decodifica è il processo di ricostruzione dei dati originali dalla rappresentazione codificata, mirando a ridurre al minimo la perdita di informazioni (recupero).
Ora diamo un'occhiata a come funziona questo assistente.
Dato: quattro esempi di formazione X1, X2, X3, X4.
(1) Automatico
Il primo passo è copiare gli esempi di formazione negli obiettivi Sì. Il lavoro dell'Autoencoder è quello di ricostruire questi esempi di allenamento. Poiché gli obiettivi sono gli stessi esempi di formazione, la parola 'Automatico' viene utilizzato il che in greco significa 'se stesso'.
(2) Codifica: Livello 1 +ReLU
Come abbiamo visto in tutti i nostri modelli precedenti, una semplice matrice di peso e bias abbinata a ReLU è potente ed è in grado di fare miracoli. Pertanto, utilizzando il primo livello di codifica riduciamo la dimensione del set di funzionalità originale da 4×4 a 3×4.
Un breve riepilogo:
Trasformazione lineare : Il vettore di incorporamento dell'input viene moltiplicato per la matrice dei pesi W e quindi sommato con il vettore di polarizzazione B,
z = Wx+BDove W è la matrice dei pesi, x è la nostra parola incorporata e B è il vettore di polarizzazione.
Funzione di attivazione ReLU : Successivamente, applichiamo la ReLU a questo intermedio z.
ReLU restituisce il massimo in termini di elementi dell'input e zero. Matematicamente, H = massimo{0,z}.
(3) Codifica: Livello 2 + ReLU
L'output del livello precedente viene elaborato dal secondo livello Encoder che riduce ulteriormente la dimensione dell'input a 2×3. È qui che avviene l'estrazione delle funzionalità rilevanti. Questo livello è anche chiamato “collo di bottiglia” poiché gli output in questo livello hanno caratteristiche molto inferiori rispetto alle caratteristiche di input.
(4) Decodificatore: Livello 1 + ReLU
Una volta completato il processo di codifica, il passo successivo è decodificare le funzionalità rilevanti per ricostruire “retro” l'output finale. Per fare ciò, moltiplichiamo le funzionalità dell'ultimo passaggio con i pesi e i bias corrispondenti e applichiamo il livello ReLU. Il risultato è una matrice 3×4.
(5) Decodificatore: Livello 2 + ReLU
Un secondo livello di decodifica (peso, bias + ReLU) si applica all'output precedente per fornire il risultato finale che è la matrice 4×4 ricostruita. Lo facciamo per tornare alla dimensione originale per confrontare i risultati con il nostro obiettivo originale.
(6) Gradienti di perdita e retropropagazione
Una volta ottenuto l'output dal livello del decodificatore, calcoliamo i gradienti dell'errore quadratico medio (MSE) tra il uscite (Y) e il obiettivi (Y'). Per fare ciò, troviamo 2*(Y-Y') che ci fornisce i gradienti finali che attivano il processo di backpropagation e aggiorna di conseguenza i pesi e i bias.
Ora che abbiamo capito come funziona l'Autoencoder, è tempo di esplorare come funziona variazione sparsa è in grado di ottenere l'interpretabilità per modelli linguistici di grandi dimensioni (LLM).
Per cominciare, supponiamo che ci venga dato:
- L'output di un trasformatore dopo che lo strato feed-forward lo ha elaborato, ovvero supponiamo di avere le attivazioni del modello per cinque token (X). Sono buoni ma non fanno luce su come il modello arriva alla sua decisione o fa le previsioni.
La domanda principale qui è:
È possibile mappare ogni attivazione (3D) in uno spazio di dimensione superiore (6D) che possa aiutare nella comprensione?
(1) Codificatore: strato lineare
Il primo passo nel livello Encoder è moltiplicare l'input X con i pesi del codificatore e aggiungere bias (come fatto nel primo passaggio di un codificatore automatico).
(2) Codifica: ReLU
Il passaggio secondario successivo consiste nell'applicare la funzione di attivazione ReLU per aggiungere non linearità e sopprimere le attivazioni negative. Questa soppressione porta molte funzionalità a essere impostate su 0, il che abilita il concetto di scarsità, ovvero la produzione di funzionalità sparse e interpretabili F.
L'interpretabilità avviene quando abbiamo solo una o due caratteristiche positive. Se esaminiamo f6possiamo vedere X2 E X3 sono positivi e si può dire che entrambi hanno in comune la “montagna”.
(3) Decodificatore: ricostruzione
Una volta terminato con l'encoder, procediamo alla fase del decodificatore. Moltiplichiamo F con i pesi del decodificatore e aggiungere bias. Questo produce X'che è la ricostruzione di X da caratteristiche interpretabili.
Come fatto in un Autoencoder, vogliamo X' essere il più vicino possibile X possibile. Per garantire ciò, è essenziale un’ulteriore formazione.
(4) Decodificatore: Pesi
Come passaggio intermedio, calcoliamo la norma L2 per ciascuno dei pesi in questo passaggio. Li teniamo da parte per utilizzarli successivamente.
Norma L2
Conosciuta anche come norma euclidea, la norma L2 calcola la grandezza di un vettore utilizzando la formula: ||x||â‚‚ = √(Σáμ¢ xáμ¢Â2).
In altre parole, somma i quadrati di ciascun componente e poi calcola la radice quadrata del risultato. Questa norma fornisce un modo semplice per quantificare la lunghezza o la distanza di un vettore nello spazio euclideo.
Come accennato in precedenza, uno Sparse Autoencoder prevede una formazione approfondita per ottenere la ricostruzione X' più vicino a X. Per illustrarlo, procediamo ai passaggi successivi di seguito:
(5) Sparsità: perdita L1
L'obiettivo qui è ottenere il maggior numero possibile di valori prossimi allo zero/zero. Lo facciamo invocando Scarsità L1 penalizzare i valori assoluti dei pesi: l’idea centrale è che vogliamo rendere la somma il più piccola possibile.
L1-perdita
La perdita L1 viene calcolata come la somma dei valori assoluti dei pesi: L1 = λΣ|w|, dove λ è un parametro di regolarizzazione.
Ciò incoraggia molti pesi a diventare zero, semplificando il modello e quindi migliorandolo interpretabilità.
In altre parole, L1 aiuta a focalizzare l’attenzione sulle caratteristiche più rilevanti prevenendo al tempo stesso l’overfitting, migliorando la generalizzazione del modello e riducendo la complessità computazionale.
(6) Sparsità: gradiente
Il prossimo passo è calcolare L1i gradienti di cui -1 per valori positivi. Pertanto, per tutti i valori di f >0 il risultato sarà impostato su -1.
Fonte: towardsdatascience.com