Skip to main content
Overview

Attention

September 8, 2021
4 min read

Seq2Seq con Attention

Seq2Seq con LSTM

Seq2Seq rientra nella categoria many-to-many delle architetture RNN. Sia input che output sono sequenze a livello di parola.

Il diagramma sopra mostra un dialog system (es., chat bot). La parte che riceve la frase in input è l’encoder; la parte che genera la frase in output è il decoder. Il modello RNN usato è LSTM. L’hidden state dell’ultimo step dell’encoder diventa l’hidden state in input del decoder.

SoS (Start of Sentence) Rappresenta il primo token della frase generata. SoS è gestito separatamente nel vocabulary e viene inserito come primo input al decoder durante l’addestramento.

EoS (End of Sentence) Rappresenta l’ultimo token della frase generata. Specifica quando smettere di generare.

Problema

Tutte le informazioni dell’encoder devono essere archiviate in un hidden state a dimensione fissa. Quindi anche se LSTM affronta le dipendenze a lungo termine, all’allungarsi della sequenza le informazioni precedenti tendono a perdersi o distorcersi.

Per esempio, in una frase come ‘I go home’, il soggetto andrebbe riconosciuto per primo. Ma dato che i soggetti appaiono tipicamente all’inizio della frase, quell’informazione può degradarsi verso la fine, causando problemi al decoder nella generazione del soggetto.

Soluzione parziale Invertire l’ordine della frase. Trasformare ‘I go home’ in ‘home go I’ per posizionare le informazioni importanti alla fine. Non è una soluzione fondamentale.

Soluzione Usare tutti gli hidden state generati ad ogni step.

Seq2Seq con Attention

Si tratta di un task di traduzione dal francese all’inglese.

L’encoder genera un hidden state ad ogni step, come nel Seq2Seq standard. L’hidden state dell’ultimo step dell’encoder diventa l’hidden state in input del primo step del decoder.

Per determinare quali hidden state dell’encoder servono, si calcola il prodotto scalare tra ogni hn(e)h_n^{(e)} dell’encoder e h1(d)h_1^{(d)} del decoder. Nel diagramma sopra, verrebbero calcolati 4 risultati di prodotto scalare individualmente. I risultati del prodotto scalare si possono interpretare come similarità tra hidden state.

Applicando softmax ai risultati del prodotto scalare (trattandoli come logit) si ottengono probabilità. Queste probabilità vengono usate come pesi applicati a hn(e)h_n^{(e)}.

Attention vector Questo vettore di pesi risultante che somma a 1 si chiama attention vector.

Una media pesata degli hn(e)h_n^{(e)} usando questi pesi produce un singolo vettore di output dell’attention. Questo risultato è anche chiamato context vector.

In sintesi, le informazioni di cui l’hidden state del decoder ha bisogno vengono selezionate e combinate dagli hidden state dell’encoder.

Modulo attention La parte racchiusa dalle linee verdi nel diagramma è il modulo attention. Riceve in input gli hidden state dell’encoder e calcola un singolo output dell’attention.


L’hidden state del decoder e il context vector (output dell’attention) vengono concatenati per diventare l’input dell’output layer. Così si predice la parola successiva.


Il secondo step del decoder ripete lo stesso processo. Il decoder riceve h1(d)h_1^{(d)} come hidden state in input e ‘the’ come input, producendo h2(d)h_2^{(d)}.


La ripetizione continua finché l’output produce un token di fine (EoS).

Hidden state del decoder

L’hidden state vector del decoder deve svolgere due ruoli.

  • Determinare su quali hidden state dell’encoder concentrarsi.
    • = Deve contenere le informazioni per creare l’attention vector.
  • Servire come input all’output layer per la predizione.

L’addestramento del decoder viene condotto in modo che possa svolgere entrambi i ruoli simultaneamente.

Quindi la backpropagation segue il percorso viola mostrato nel diagramma sopra.

Teacher forcing

Nel teacher forcing, l’input del decoder durante l’addestramento è il ground truth. In altre parole, anche se il modello predice male la parola successiva durante l’addestramento, il ground truth serve a correggere.

Misurazione della similarità

Oltre al semplice prodotto scalare, la similarità può essere calcolata in diversi modi.

  • scorescore: funzione di similarità
  • hth_t: hidden state del decoder
  • hˉs\bar h_s: hidden state dell’encoder

generalgeneral Si introduce una matrice di pesi WaW_a nel prodotto scalare. Si può pensare come assegnare pesi ai singoli elementi della moltiplicazione nella moltiplicazione matriciale.

(abcd)(xyzv)\begin{pmatrix} a & b \\ c & d \end{pmatrix}\begin{pmatrix} x & y \\ z & v \end{pmatrix} Per esempio, il prodotto matriciale sopra è composto da termini come ax+bzax+bz, ay+bvay+bv, ecc.

Si assegnano pesi a ogni elemento: w0(ax+bz)w_0(ax+bz), w1(ay+bv)w_1(ay+bv), ecc. — aggiungendo una variabile regolabile a ogni elemento del prodotto matriciale. Nel deep learning, questo crea parametri apprendibili.

concatconcat In [ht;hˉs][h_t;\bar h_s], il punto e virgola indica la concatenazione tra matrici. Guardando la formula, il termine avvolto in tanh assomiglia a una rete neurale — e lo è.

Se ht=[1,3]h_t=[1,3] e hˉs=[2,5]\bar h_s=[2, -5], la rete si costruisce come mostrato sopra. W1 e W2 rappresentano reti fully connected.

Nella formula, W2 è denotato vav_a. Questo perché l’ultimo layer della rete deve produrre uno scalare, quindi W2 deve essere un vettore. Nel diagramma, il vettore a 3 dimensioni deve essere ridotto a uno scalare, quindi anche W2 deve essere un vettore a 3 dimensioni.


Perché diversificare i metodi di misurazione della similarità? Rispetto al semplice prodotto scalare, si introducono più parametri regolabili durante l’addestramento. Questi parametri aggiuntivi sono fortemente coinvolti nel calcolo dell’attention vector.

In altre parole, incorporando variabili nella misurazione della similarità, il modello può anche apprendere il processo di calcolo dell’attention vector.

Vantaggi dell’Attention

  • Ha migliorato drasticamente le prestazioni della traduzione automatica.
    • A differenza del Seq2Seq precedente, ha creato un ambiente in cui il decoder può concentrarsi su informazioni specifiche.
    • Ha risolto il problema delle frasi lunghe tradotte male.
  • L’attention risolve il problema del bottleneck.
    • Ha risolto i problemi derivanti dal condensare tutte le informazioni precedenti in un singolo hidden state.
    • Il decoder può accedere direttamente alle informazioni sorgente.
  • L’attention risolve il gradient vanishing.
    • In precedenza, la backpropagation propagava la loss sequenzialmente attraverso decoder ed encoder (percorso rosso nel diagramma sopra). Il fenomeno del bottleneck si verifica anche qui. In particolare, se si vogliono aggiornare gli hidden state nei primi step dell’encoder, la backpropagation deve andare molto in profondità.
    • Con l’attention, questo processo di propagazione si semplifica (percorso blu nel diagramma). L’output dell’attention crea percorsi tipo scorciatoia nella backpropagation.
  • L’attention fornisce una certa interpretabilità.
    • Conoscendo la distribuzione dell’attention vector per un input specifico, si può capire su quali informazioni il decoder si sta concentrando.

Esempi di Attention

Un esempio di traduzione dal francese all’inglese usando l’attention. Traduce bene in ordine, e per le frasi in cui l’ordine delle parole cambia, il meccanismo di attention rileva automaticamente il riordinamento e gestisce la traduzione. Una traduzione end-to-end eseguita automaticamente.

Loading comments...