Skip to main content
Overview

Transformer

August 13, 2021
4 min read

Background

Le RNN esistenti potevano gestire dati sequenziali, ma gestire sequenze con elementi mancanti (come sopra) era molto difficile.

Il Transformer è stato introdotto per affrontare questo problema.

Transformer

Nessuna struttura ricorrente come nelle RNN.

Transformer is the first sequence transduction model based entirely on attention.

In origine era un modello per la traduzione automatica. Ma dato che il Transformer è una metodologia per elaborare dati sequenziali e codificarli, può essere usato anche in altri ambiti.

Recentemente, Transformer e self-attention vengono usati in praticamente ogni campo.


Il Transformer è un modello sequence-to-sequence come mostrato sopra. Vediamolo più da vicino.

A differenza delle RNN, non c’è ricorrenza. Se 3 parole fossero l’input di una RNN, ricorrerebbe 3 volte per produrre l’output.

Ma il Transformer produce i vettori di encoding tutti insieme in un’unica passata, indipendentemente dal fatto che ci siano 3 o 100 parole. Il lato output usa comunque qualcosa di autoregressivo.

Concetti chiave del transformer

  1. Come vengono elaborate n parole contemporaneamente durante l’encoding?
  2. Quali informazioni fluiscono tra encoder e decoder?
  3. Come genera l’output il decoder?

Encoder

Riceve tutti i vettori in input. La self-attention ha un ruolo chiave sia nell’encoder che nel decoder. La feed-forward NN che segue è il classico MLP.

  • La self-attention riceve n vettori.
  • Per trasformare il vettore di input x1x_1 in z1z_1, vengono usati tutti i vettori xx.
    • Tutti i percorsi per creare i vettori zz sono interdipendenti.
  • Quando zz passa attraverso la feed-forward NN, viene elaborato in parallelo, indipendentemente.

Self-attention

Per analizzare la frase seguente, si costruisce una rete dipendente come questa:

The animal didn’t cross the street because it was too tired.

Gli esseri umani capiscono naturalmente che “it” si riferisce ad “animal.” Quando si apprende tramite self-attention, si mostra una forte dipendenza vicino ad “animal” come nell’immagine.


I vettori Query, Key, Value sono calcolati per ogni parola (= embedding). Un embedding produce un query, un key e un value.

Calcolo dell’encoder

Dalla lezione, spiegarlo a parole è davvero difficile, ma la matematica è semplice.

A parole:

  • score = prodotto interno di query e key
  • dkd_k = dimensione del vettore key
  • risultato softmax = softmax applicata allo score diviso per dkd_k
  • somma = risultato softmax x value

In matrici e formule:

L’input X è rappresentato come matrice.

  • riga = numero di parole
  • colonna = dimensione dell’embedding

Moltiplicando X per matrici di pesi separate per query, key e value si ottengono Q, K, V.

  • dimensione dell’attention = dimensione del vettore key

Il resto segue la spiegazione verbale direttamente in forma di formula.

  • softmax = softmax per riga (row-wise)
  • dim(V) può differire da dim(Q) e dim(K).
    • In pratica, di solito sono tutte uguali per comodità.

Caratteristiche del Transformer

MLP e CNN producono output fissi per input fissi.

Ma nel Transformer, anche se un input è fisso, input circostanti diversi possono cambiare l’output. Questo significa che può rappresentare molte più cose, ma richiede anche più calcolo, quindi la lunghezza dell’input non può crescere senza limiti.

MHA (Multi-Head Attention)

Invece di un singolo set, si creano più set di query, key e value per ogni input.

Applicare n attention head a un input produce n output.

La sfida principale è far corrispondere le dimensioni di input e output. Si risolve concatenando i risultati e moltiplicando per una matrice che proietta nella dimensione dell’input.

Riassumendo l’intero processo:

ref: https://jalammar.github.io/illustrated-transformer/

In teoria basta il diagramma sopra, ma l’implementazione reale è diversa. Per esempio, se l’input X ha 100 dimensioni, potrebbe essere diviso in 10 parti. Lo spiegherò nel post pratico.

Positional encoding

Si aggiunge un valore all’input, simile a un bias. Serve perché la variazione dipendente dalla posizione è importante. Senza positional encoding, riordinare una frase sarebbe impercettibile. Quindi il positional encoding cattura le informazioni sull’ordine.

Panoramica dell’Encoder

Flusso di informazioni tra Encoder e Decoder

undefined

GIF che mostra le informazioni dell’encoder che passano al decoder.

  • L’encoder invia key e value al decoder.
  • L’encoder calcola il prodotto interno tra query e key delle altre parole per creare l’attention, poi moltiplica per value. Per ottenere la attention map servono key e value.
    • Perché il decoder crea il proprio query dal proprio input.
  • Dato che gli encoder sono impilati, i layer superiori producono le parole. (?)
  • La frase di output viene generata in modo autoregressivo.

Decoder

Self-attention

Prima del passo softmax, viene applicata una maschera alle informazioni future. Apprendere tramite il decoder conoscendo il futuro non ha senso, quindi si rende accessibile solo l’informazione precedente.

Encoder-Decoder attention

Come menzionato sopra. Il layer “Encoder-Decoder Attention” funziona come MHA, eccetto che: la query viene dalla matrice di output del layer precedente, e key e value vengono dallo stack dell’encoder.

Layer finale

Lo chiamo “layer finale” per comodità. L’output dello stack di decoder viene convertito in una distribuzione di parole.

Vision Transformer

Il paper originale del Transformer era per la traduzione automatica, ma è stato adottato anche in CV.

Le immagini vengono divise in patch, passano attraverso un embedding simile a quello delle parole, e poi attraverso il Transformer.

DALL-E

Un paper che genera immagini dal testo. Usa GPT-3.

Loading comments...