L'architettura transformer è un tipo di rete neurale costruita attorno alla self-attention. Invece di basarsi soprattutto su un'elaborazione passo dopo passo, permette a ogni token di raccogliere informazioni dagli altri token rilevanti nella sequenza.
Per questo i transformer funzionano bene nel linguaggio e in altri compiti su sequenze. Se una parola dipende da un'altra parola molto lontana, l'attenzione fornisce al modello un collegamento diretto tra le due.
Cosa significa architettura transformer
Un blocco transformer fa più che applicare una sola formula, ma la self-attention è l'idea centrale. Nella self-attention, ogni token produce tre vettori:
- una query, che rappresenta ciò che questo token sta cercando
- una key, che rappresenta ciò che questo token offre per il confronto
- un value, che è l'informazione che può essere trasmessa
Se le rappresentazioni dei token sono disposte in una matrice , una testa di attenzione in genere costruisce
dove , e sono matrici apprese.
La formula standard della scaled dot-product attention è
Qui è la dimensione delle key. Il ridimensionamento tramite aiuta a evitare che i punteggi grezzi del prodotto scalare diventino troppo grandi quando la dimensione cresce.
La softmax viene applicata riga per riga. Ogni riga risponde alla domanda di un token: "Quanta attenzione dovrei dare agli altri token?"
Come funziona la self-attention in parole semplici
La self-attention di solito non sceglie un solo token ignorando tutti gli altri. Costruisce invece una media pesata dei vettori value.
Se un token corrisponde fortemente alla key di un altro token, quel token riceve un peso maggiore. Se la corrispondenza è debole, il peso è minore. L'output per un token è quindi una combinazione di informazioni della sequenza che tiene conto del contesto.
Questo aiuta con l'accordo soggetto-verbo, il riferimento dei pronomi e altre relazioni a lunga distanza. Il modello non ha bisogno che l'informazione attraversi molti passaggi intermedi prima di diventare disponibile.
Esempio svolto di self-attention
Prendi una query e due token candidati in una singola testa di attenzione. Per mantenere semplici i calcoli, usa .
Supponi che il token corrente abbia query
e che i due token candidati abbiano
con value
I punteggi grezzi di attenzione sono i prodotti scalari:
Poiché , il fattore di scala è , quindi i punteggi ridimensionati restano e .
Ora applica la softmax a questi due punteggi:
L'output dell'attenzione è la combinazione pesata
L'idea chiave è semplice: l'output finisce più vicino a perché la query corrisponde a più fortemente che a .
Questo è lo schema di base all'interno di un modello molto più grande. I transformer reali fanno la stessa cosa in dimensioni più alte e su molti token contemporaneamente, ma l'idea aritmetica è la stessa.
Cos'altro c'è dentro un blocco transformer
Un transformer è più di una sola formula di attenzione. Un blocco standard di solito contiene:
- multi-head attention, così il modello può apprendere contemporaneamente diversi tipi di relazioni
- una rete feedforward position-wise, che trasforma la rappresentazione di ogni token dopo l'attenzione
- connessioni residue, che aiutano a preservare e affinare l'informazione attraverso i livelli
- layer normalization, che aiuta a stabilizzare l'addestramento
Nell'architettura transformer originale per compiti sequence-to-sequence, il modello aveva uno stack encoder e uno stack decoder.
- L'encoder usa self-attention sulla sequenza di input.
- Il decoder usa self-attention mascherata, così una posizione non può guardare in avanti ai token futuri dell'output.
- Il decoder può anche usare cross-attention, dove le query provengono dal decoder e key e value provengono dall'output dell'encoder.
Molti modelli linguistici moderni usano solo il lato decoder. L'idea centrale dell'attenzione è ancora presente, ma l'architettura complessiva è specializzata per la previsione del token successivo.
Perché i transformer hanno bisogno di informazioni posizionali
La sola attenzione è equivariante rispetto alle permutazioni dei token di input. In parole semplici, se applichi solo l'attenzione allo stesso insieme di vettori token senza aggiungere la posizione, il modello non sa intrinsecamente quale token venga prima.
Per questo i transformer aggiungono informazioni posizionali, come embedding di posizione appresi o codifiche posizionali. Senza questo segnale aggiuntivo, compiti sensibili all'ordine come il linguaggio sarebbero molto più difficili da modellare correttamente.
Errori comuni sull'architettura transformer
Pensare che l'attenzione sia tutto il transformer
È l'idea centrale, ma l'architettura dipende anche da livelli feedforward, percorsi residui, normalizzazione e informazioni posizionali.
Confondere self-attention e cross-attention
Nella self-attention, , e provengono dalla stessa sequenza. Nella cross-attention, non provengono tutti dalla stessa sorgente.
Dimenticare il ruolo del masking
I modelli linguistici solo decoder hanno bisogno del causal masking durante addestramento e inferenza, così un token non può prestare attenzione ai token futuri.
Trattare i pesi di attenzione come una spiegazione completa
I pesi di attenzione possono essere informativi, ma non sono una prova completa del ragionamento del modello. Il comportamento finale dipende anche dai vettori value, dai livelli successivi e dalle trasformazioni non lineari.
Quando si usano i modelli transformer
I transformer sono ampiamente usati nel language modeling, nella traduzione, nel riassunto automatico, nella generazione di codice, nel parlato e in molti compiti di visione artificiale. Funzionano particolarmente bene quando le relazioni all'interno di una sequenza o di un insieme contano più dei pattern puramente locali.
Non sono magici in ogni situazione. Per dataset molto piccoli, vincoli rigorosi di tempo reale o problemi in cui la struttura induttiva locale conta più di tutto, un'altra architettura può comunque essere più adatta.
Prova un problema simile
Prendi una frase di tre parole e concentrati su una parola. Decidi quali delle altre parole dovrebbero ricevere un peso di attenzione alto e perché, poi abbozza un piccolo esempio query-key-value che corrisponda a questa intuizione.
Se vuoi fare un passo in più, calcola a mano un piccolo output di attenzione. Di solito è il modo più rapido per passare da "Conosco la formula" a "Capisco cosa sta facendo l'architettura".
Hai bisogno di aiuto con un problema?
Carica la tua domanda e ottieni una soluzione verificata, passo dopo passo, in pochi secondi.
Apri GPAI Solver →