La self-attention delle reti transformer

La self-attention delle reti transformer

Condividi con i tuoi amici...

Le reti Transformer sono state introdotte per risolvere alcuni limiti delle reti neurali tradizionali e dei modelli di sequenza come le RNN (Reti Neurali Ricorrenti) e le LSTM (Long Short-Term Memory). Questi modelli tradizionali, sebbene potenti, avevano difficoltà a gestire lunghe dipendenze nei dati sequenziali e richiedevano tempi di addestramento molto lunghi. Inoltre, non potevano essere facilmente parallelizzati, il che li rendeva inefficienti per compiti su larga scala.

Per approfondire alcuni aspetti delle reti RNN e LSTM puoi leggere i seguenti articoli:

Architettura del sistema encoder-decoder con reti RNN

Le reti neurali adatte ad elaborare sequenze di dati

Abbiamo già introdotto le reti Transformer nell’articolo
Il Transformer, la rete neurale che presta attenzione

Le reti Transformer sono utilizzate in una vasta gamma di applicazioni, grazie alla loro capacità di gestire e comprendere sequenze di dati con lunghe dipendenze. Alcuni degli usi più comuni includono La traduzione automatica, i compiti come la classificazione dei testi, l’analisi del sentiment, la generazione di testo e la trascrizione accurata del parlato in testo. Applicazioni recenti hanno adattato i Transformer anche per compiti di visione artificiale, come il riconoscimento delle immagini.In questo articolo approfondiamo alcuni aspetti tecnici di queste reti su cui si basano i moderni modelli di AI generativa.

Self-attention

Il transformer si basa sulla tecnica di “self-attention” che consente a queste reti di analizzare e ponderare l’importanza di ogni parte di una sequenza di dati rispetto a tutte le altre parti della stessa sequenza.

In termini semplici, l’attenzione automatica permette a ciascun elemento di una sequenza di “prestare attenzione” a ogni altro elemento della sequenza.

Questo è particolarmente utile per comprendere il contesto di una parola in una frase, poiché una parola può influenzare o essere influenzata da qualsiasi altra parola, indipendentemente dalla distanza nella sequenza. Ogni parola o simbolo nella sequenza viene convertito in un vettore numerico (embedding) che rappresenta il suo significato in uno spazio multidimensionale.

Per approfondire come avviene questa rappresentazione vettoriale delle parole leggi l’articolo

Word embedding e il modello Skip-gram

Un blocco del Transformer è una combinazione di diversi strati, ciascuno dei quali ha specifiche funzioni. Un tipico blocco di Transformer include:

  • Strato di attenzione multi-head dove avviene la self-attention.
  • Strato di normalizzazione che applica una normalizzazione ai dati per mantenere la stabilità e l’efficienza del modello.
  • Feed-forward network: Una rete neurale semplice che elabora i dati ulteriormente, permettendo al modello di apprendere trasformazioni più complesse.
  • Un altro strato di normalizzazione che applica una normalizzazione ai dati per mantenere la stabilità e l’efficienza del modello.

Descriviamo un’unità di self-attention

Si consideri una sequenza di parole tratte da un testo. Ogni parola è rappresentata da un vettore numerico (embedding) X. La sequenza di vettori è l’input della rete.

Sistema multi-head

Il sistema multi-head è un’estensione della self-attention che migliora ulteriormente la capacità della rete di catturare informazioni rilevanti da diverse prospettive. Invece di avere un singolo meccanismo di attenzione, il multi-head attention crea più “teste di attenzione” parallele, ciascuna delle quali elabora la sequenza vista sopra in modo indipendente. I risultati vengono poi concatenati e trasformati attraverso un’altra matrice di pesi. Questo permette al modello di raccogliere informazioni da diverse “angolazioni”, migliorando la sua comprensione del contesto.

L’uso di differenti matrici di peso per ciascuna testa di attenzione permette al modello di focalizzarsi su diversi aspetti delle informazioni contenute nelle sequenze di input. Diverse teste possono catturare differenti tipi di relazioni tra le parole.

Ad esempio, una testa potrebbe focalizzarsi su relazioni sintattiche, mentre un’altra potrebbe focalizzarsi su relazioni semantiche. Avere più teste di attenzione riduce la probabilità che il modello si concentri troppo su un singolo tipo di informazione, rendendo il modello più robusto.Le teste di attenzione possono operare in parallelo, migliorando l’efficienza computazionale.

Normalizzazione

La Layer Normalization (norma di livello) è una tecnica di normalizzazione che viene utilizzata per stabilizzare e accelerare l’addestramento delle reti neurali profonde. È particolarmente utile nei transformer e in altre architetture di rete che utilizzano strati profondi con molteplici trasformazioni non lineari.

La layer normalization normalizza le attivazioni per ogni singolo livello di rete, piuttosto che normalizzare i dati di input o i batch di dati. Aiuta a stabilizzare il flusso del gradiente durante l’addestramento, riducendo il rischio di esplosione o sparizione dei gradienti.

Nei trasformatori, la layer normalization viene applicata dopo lo strato di multi-head attention e lo strato di feed-forward per garantire che le attivazioni rimangano stabili e ben distribuite, migliorando così l’efficienza dell’addestramento.dopo lo strato di multi-head attention l’output è dato da

Output = Concat(z1, z2, …, zh) WO

Output normalizzato = Norm(Input + Output)

(la somma input + output è detta tecnica di connessione residua che vedremo dopo)

Feed-Forward Neural Network (FFN)

L’output di vettori normalizzati del livello precedente viene inviato come input di una rete feed-forward semplice. L’output di questa rete viene normalizzato nuovamente e si riapplica la tecnica di connessione residua

Connessione residua

La residual connection, o connessione residua, è una tecnica utilizzata nelle reti neurali, inclusi i modelli Transformer, per migliorare il flusso dell’informazione attraverso i diversi strati della rete. Questa tecnica è stata introdotta per la prima volta nelle reti neurali profonde da Kaiming He et al. nel contesto delle Reti ResNet (Residual Networks).

In una rete neurale tradizionale, l’output di ogni strato viene passato direttamente come input allo strato successivo. Questo può causare problemi di “vanishing gradient” (gradiente che scompare) nelle reti molto profonde, dove i gradienti (le informazioni su come aggiornare i pesi durante l’addestramento) diventano estremamente piccoli, rendendo difficile l’addestramento efficace dei primi strati della rete.

La residual connection affronta questo problema permettendo ai dati di “saltare” uno o più strati, creando un percorso alternativo per il flusso dell’informazione. Questo percorso alternativo è chiamato “skip connection” o connessione diretta. L’output dello strato che viene saltato viene aggiunto all’output del blocco di strati successivo. In termini matematici, se consideriamo un blocco di strati che trasforma un input xx in un output F(x), la connessione residua può essere rappresentata come:

y=F(x)+x

Dove:

x è l’input del blocco.
F(x) è la trasformazione applicata dall’intero blocco (che può includere uno o più strati).
y è l’output finale del blocco con la connessione residua.

La residual connection facilita l’addestramento delle reti profonde riducendo il problema del vanishing gradient, permettendo ai gradienti di fluire più facilmente attraverso la rete.

Le connessioni residue permettono di addestrare modelli molto profondi senza perdere precisione, poiché l’informazione può bypassare alcuni strati e continuare a propagarsi.
Nei primi stadi dell’addestramento, se gli strati intermedi non sono ancora ben addestrati, la connessione residua assicura che almeno l’identità (l’input originale) venga mantenuta, impedendo alla rete di peggiorare le prestazioni.

Encoder-decoder

Il decoder è un’ulteriore sequenza di livelli simili a quelli visti finora che rappresentano l’encoder.

Addestramento del Transformer

Se Z rappresenta i vettori di output del sistema encoder-decoder allora P(yi​∣X) rappresenta la probabilità condizionale del token yi​ dato l’input X. In altre parole, è la probabilità che il token yi sia il prossimo token nella sequenza, dato l’intero contesto dell’input X: