Comprensione dei meccanismi di attenzione utilizzando l’attenzione multi-testa.

Understanding attention mechanisms using multi-head attention.

Introduzione

Un buon modo per acquisire conoscenze approfondite sui modelli Transformer è di apprendere i meccanismi di attenzione. In questo senso, imparare in particolare l’attenzione multi-testa prima di apprendere altri tipi di meccanismi di attenzione è anche una scelta eccellente. Ciò perché il concetto tende ad essere un po’ più facile da capire.

I meccanismi di attenzione possono essere visti come strati di reti neurali che possono essere aggiunti ai modelli di deep-learning regolari. L’obiettivo è avere modelli che si concentrino su parti specifiche dell’input utilizzando pesi assegnati alle parti rilevanti, pesando quindi il loro valore. Guarderemo ulteriormente in dettaglio il meccanismo di attenzione utilizzando un meccanismo di attenzione multi-testa.

Obiettivi di apprendimento

  • I concetti del meccanismo di attenzione
  • Cosa significa l’attenzione multi-testa
  • L’architettura della multi-attenzione testa nei Transformer
  • Uno sguardo rapido ad altri tipi di meccanismi di attenzione

Questo articolo è stato pubblicato come parte del blogathon di Data Science.

Comprensione del meccanismo di attenzione

Possiamo iniziare guardando questo concetto dalla psicologia umana. In psicologia, l’attenzione è la concentrazione di consapevolezza su alcuni eventi in modo che ci sia l’esclusione dell’effetto di altri stimoli. Ciò significa che anche quando ci sono altre distrazioni, ci concentriamo comunque su ciò che abbiamo selezionato. L’attenzione si concentra selettivamente su una porzione discreta del tutto.

Questo concetto è ciò che viene utilizzato nei Transformer. Sono in grado di concentrarsi su una porzione target del loro input e ignorare la porzione restante. Questo può renderli molto efficaci.

Che cos’è l’attenzione multi-testa?

L’attenzione multi-testa è un meccanismo centrale nei Transformer che si salta nell’architettura ResNet50. A volte ci sono molteplici altri punti nella sequenza a cui prestare attenzione. Utilizzare l’approccio di trovare una media complessiva non distribuirà i pesi in modo che sia data una diversa importanza come vorremmo. Questo porta all’idea di avere un’estensione di creare meccanismi di attenzione individuali a molteplici teste, risultando in molteplici meccanismi di attenzione. L’implementazione presenta ora molteplici triplette di query-chiave-valore diverse su una singola funzione.

Fonte: Pngwing.com

I calcoli vengono eseguiti in modo tale che il modulo di attenzione iteri un certo numero di volte, organizzandosi in strati paralleli noti come teste di attenzione. Ciascuna testa separata elabora in modo indipendente sia la sequenza di input che l’elemento di sequenza di output associato. I punteggi cumulativi di ciascuna testa vengono quindi combinati per ottenere un punteggio di attenzione finale, che incorpora ogni dettaglio della sequenza di input.

Espressione matematica

In particolare, se abbiamo una matrice di chiavi e una matrice di valori, possiamo trasformare i valori in sottosequenze di ℎ, sottochiavi e sottovalori, che passeranno attraverso l’attenzione in modo indipendente. La concatenazione dà una testa e le combina con una matrice di peso finale.

I parametri apprendibili sono i valori di attenzione assegnati alla testa in cui i vari parametri sono indicati come il layer di attenzione multi-testa. Il diagramma sotto illustra questo processo.

Guardiamo brevemente queste variabili. Dove il valore di X è una concatenazione della matrice di embedding di parole.

Spiegazione delle matrici

Query: è un vettore di caratteristiche che fornisce un’idea di ciò che è il target nella sequenza. Pone una richiesta sulla sequenza di ciò che necessita di attenzione.

Chiavi: questa è una matrice di caratteristiche che descrive ciò che contiene l’elemento. Si distingue per fornire l’identità degli elementi e dare attenzione dalla query.

Valori: Elabora la sequenza di input, ogni elemento di input utilizza un valore per sapere su cosa fornire una media.

Funzione di punteggio: Per creare una funzione di punteggio, assegniamo la query e la chiave ad essa per produrre un peso noto come coppia query-chiave.

Possiamo capire ulteriormente il concetto utilizzando il diagramma sottostante in cui Q: Questo sta per Query, K: Questo sta per Chiave e V: Stands for Valore

Il peso di attenzione di un token di query viene determinato dalla multi-attenzione alla testa. Ciascun token di chiave e il suo valore corrispondente vengono moltiplicati insieme. Moltiplica il valore associato a ciascuna chiave dopo aver determinato la relazione o il peso di attenzione tra la query e la chiave.

Infine, la multi-attenzione alla testa ci consente di gestire in vari modi vari segmenti di sequenza di input. Poiché ciascuna testa si concentrerà su un singolo elemento di input in modo individuale, il modello svolge un lavoro migliore nella cattura dei dettagli di posizione. Di conseguenza, la nostra rappresentazione è più forte.

Implementazione Python di Multihead Attention

Ora vediamo un’implementazione pratica di un meccanismo di multi-attenzione alla testa. Lo implementeremo utilizzando Python. Prendiamo le matrici di peso consecutive trasformate in funzionalità rispetto alle Query, alle Chiavi e ai Valori.

class MultiheadAttention(nn.Module):

    def __init__(self, input_dim, embed_dim, num_heads):
        super().__init__()
        assert embed_dim % num_heads == 0, "La dimensione dell'incorporamento deve essere 0 modulo il numero di teste."

        self.embed_dim = embed_dim
        self.num_heads = num_heads
        self.head_dim = embed_dim // num_heads

        # Impila tutte le matrici di peso 1...h insieme per efficienza
        # Si noti che in molte implementazioni si vede "bias=False" che è facoltativo
        self.qkv_proj = nn.Linear(input_dim, 3*embed_dim)
        self.o_proj = nn.Linear(embed_dim, embed_dim)

        self._reset_parameters()

    def _reset_parameters(self):
        # Inizializzazione originale del Transformer, vedere la documentazione di PyTorch
        nn.init.xavier_uniform_(self.qkv_proj.weight)
        self.qkv_proj.bias.data.fill_(0)
        nn.init.xavier_uniform_(self.o_proj.weight)
        self.o_proj.bias.data.fill_(0)

    def forward(self, x, mask=None, return_attention=False):
        batch_size, seq_length, _ = x.size()
        if mask is not None:
            mask = expand_mask(mask)
        qkv = self.qkv_proj(x)

        # Separare Q, K, V dall'output lineare
        qkv = qkv.reshape(batch_size, seq_length, self.num_heads, 3*self.head_dim)
        qkv = qkv.permute(0, 2, 1, 3) # [Batch, Head, SeqLen, Dims]
        q, k, v = qkv.chunk(3, dim=-1)

        # Determinare gli output di valore
        values, attention = scaled_dot_product(q, k, v, mask=mask)
        values = values.permute(0, 2, 1, 3) # [Batch, SeqLen, Head, Dims]
        values = values.reshape(batch_size, seq_length, self.embed_dim)
        o = self.o_proj(values)

        if return_attention:
            return o, attention
        else:
            return o

Trova maggiori dettagli qui.

L’architettura di Multi-Head Attention in Transformer

L’architettura Transformer, originariamente progettata per la traduzione automatica, ha una struttura codificatore-decodificatore. Il codificatore genera rappresentazioni basate sull’attenzione, mentre il decodificatore si concentra sulle informazioni codificate e genera la frase tradotta in modo autoregressivo. Questa struttura è utile per le attività Sequenza-Sequenza con decodifica autoregressiva. Questo tutorial si concentra sulla parte di codificatore, che è un piccolo passo da implementare.

Il codificatore utilizza blocchi identici applicati in sequenza, passando l’input attraverso il blocco di Multi-Head Attention, la connessione residua e la normalizzazione del livello. Calcola l’input e l’input al livello di attenzione, garantendo una connessione residua cruciale nell’architettura del Transformer.

Le trasformazioni possono avere oltre 24 blocchi di codificatori, che richiedono connessioni residue per un flusso di gradiente uniforme. Senza connessioni residue, le informazioni sull’originale sequenza vengono perse, mentre il livello di Multi-Head Attention apprende le funzionalità dell’input di base. Rimuovendo le connessioni residue si avrebbe perso le informazioni dopo l’inizializzazione, e tutti i vettori di output rappresentano informazioni simili.

Quali sono gli Altri Tipi di Meccanismo di Attenzione?

Prima di concludere, è importante notare che ci sono altri tipi di meccanismi di attenzione oltre a multi-head e ce ne sono una varietà. Differiscono solo in base ad alcuni aggiustamenti fatti su di essi. Seguono i tipi:

  1. Attenzione Globale/Meccanismo di Loung: Il modello Luong può attivare tutti i vocaboli sorgente o prevedere la frase target, quindi attivazione su una collezione più piccola di vocaboli. Anche se i modelli di attenzione globale e locale sono ugualmente efficaci, utilizzano vari vettori di contesto a seconda dell’implementazione particolare.
  2. Attenzione Generalizzata: Un modello di attenzione generalizzato verifica le sequenze di input e le confronta con le sequenze di output, catturandole e confrontandole. Il meccanismo seleziona quindi parole o parti dell’immagine su cui concentrarsi.
  3. Attenzione Additiva/Bahdanau: Il meccanismo di attenzione di Bahdanau utilizza punteggi di allineamento in una rete neurale, calcolando in punti diversi, garantendo una correlazione tra le parole delle sequenze di input e output e considerando gli stati nascosti. Il punteggio finale è la somma di questi punteggi.
  4. Auto-attenzione/Intra-attenzione: Il meccanismo di auto-attenzione, noto anche come intra-attenzione, raccoglie parti della sequenza di input e calcola la composizione di output iniziale nel tempo senza considerare la sequenza di output, poiché non esiste una procedura di inserimento dati manuale.

Conclusione

Il meccanismo di attenzione produce risultati all’avanguardia nella sua applicazione come nei compiti di elaborazione del linguaggio naturale. Ha contribuito ad algoritmi innovativi come GPT-2 e BERT. I trasformatori sono una rete che ha beneficiato enormemente dell’attenzione. L’attenzione è stata uno degli sforzi più importanti per costruire una vera comprensione del linguaggio naturale nei sistemi che trasformano gli ambienti commerciali e avanzano le soluzioni di intelligenza artificiale.

Punti Chiave

  • Per acquisire una comprensione più profonda dei modelli di trasformatore, è essenziale conoscere i meccanismi di attenzione, in particolare l’attenzione multi-head.
  • L’approccio utilizzato consente di utilizzare più meccanismi di attenzione, presentando più triplette di query-chiave-valore su una singola funzione di input.
  • I trasformatori richiedono connessioni residue per un flusso di gradiente uniforme, prevenendo la perdita di informazioni sulla sequenza originale e l’apprendimento basato sulle funzioni di input.

Domande Frequenti (FAQs)

  • Tutorial 6: Transformers and Multi-Head Attention – UvA DL Notebooks v1.2 documentationJAX+Flax version: In this tutorial, we will discuss one of the most impactful architectures of the last 2 years: the…uvadlc-notebooks.readthedocs.io
  • Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, A. N., Kaiser, L., & Polosukhin, I. (2017). Attention Is All You Need. ArXiv. /abs/1706.03762
  • https://d2l.ai/chapter_attention-mechanisms-and-transformers/multihead-attention.html
  • https://w7.pngwing.com/pngs/400/754/png-transparent-comic-book-comics-pop-art-attention-miscellaneous-text-photography-thumbnail.png
  • https://w7.pngwing.com/pngs/682/32/png-transparent-attention-psychology-homo-sapiens-graphy-information-attention-hand-photography-words-phrases-thumbnail.png
  • https://upload.wikimedia.org/wikipedia/commons/8/8f/The-Transformer-model-architecture.png

I media mostrati in questo articolo non sono di proprietà di Analytics Vidhya e sono utilizzati a discrezione dell’autore.