Intelligenza ArtificialeMachine LearningAttenzione nel Deep Learning

attenzione
L’attenzione è una delle idee più importanti nella comunità del Deep Learning. Anche se questo meccanismo è ora utilizzato in vari problemi come i sottotitoli di immagini e altri, è stato originariamente progettato nel contesto della traduzione automatica neurale utilizzando modelli Seq2Seq.

Modello Seq2Seq

 

Il modello seq2seq è normalmente composto da un’architettura encoder-decoder, in cui l’encoder elabora la sequenza di input e codifica / comprime le informazioni in un vettore di contesto (o “vettore di pensiero”) di lunghezza fissa. Questa rappresentazione dovrebbe essere un buon riassunto della sequenza di input completa. Il decodificatore viene quindi inizializzato con questo vettore di contesto, utilizzando il quale inizia a produrre l’output trasformato o tradotto.

Svantaggio del modello Seq2Seq

 

Uno svantaggio critico di questo disegno vettoriale di contesto a lunghezza fissa è l’incapacità del sistema di mantenere sequenze più lunghe. Spesso ha dimenticato gli elementi precedenti della sequenza di input dopo aver elaborato la sequenza completa. Il meccanismo di attenzione è stato creato per risolvere questo problema di lunghe dipendenze.
Grafico riportante l’andamento del BLEU score al variare della lunghezza di una frase.
BLEU (Bilingual Evaluation Understudy) è un punteggio per confrontare una traduzione candidata di testo con una o più traduzioni di riferimento. Il grafico sopra mostra che l’unità encoder-decoder non riesce a memorizzare l’intera frase lunga. Quindi, ciò che si riflette dal grafico sopra è che l’unità codificatore-decodificatore funziona bene per frasi più brevi (punteggio BLEU alto).

L’idea alla base dell’attenzione

 

L’attenzione è stata presentata da Dzmitry Bahdanau, et al. nel documento del 2014 “ Neural Machine Translation by Jointly Learning to Align and Translate ”, che si legge come una naturale estensione del loro precedente lavoro sul modello Encoder-Decoder. Questo stesso articolo ha gettato le basi del famoso articolo “Attention is all you need” di Vaswani et al., sui trasformatori che hanno rivoluzionato l’arena del deep learning con il concetto di elaborazione parallela delle parole invece di elaborarle in sequenza.
Quindi, tornando indietro, l’idea centrale è che ogni volta che il modello prevede una parola di output, utilizza solo parti dell’input in cui sono concentrate le informazioni più rilevanti invece dell’intera sequenza. In parole più semplici, presta attenzione solo ad alcune parole di input.
L’attenzione è un’interfaccia che collega l’encoder e il decoder che fornisce al decoder le informazioni da ogni stato nascosto dell’encoder. Con questo framework, il modello è in grado di concentrarsi selettivamente su parti preziose della sequenza di input e, quindi, apprendere l’associazione tra di loro. Questo aiuta il modello a far fronte in modo efficiente a lunghe frasi di input.

Intuizione

L’idea è di mantenere il decoder così com’è, e sostituiamo semplicemente RNN / LSTM sequenziale con RNN / LSTM bidirezionale nell’encoder.
Qui, prestiamo attenzione ad alcune parole considerando una dimensione della finestra Tx (diciamo quattro parole x1 , x2 , x3 e x4 ). Usando queste quattro parole, creeremo un vettore di contesto c1 , che viene fornito come input al decoder. Allo stesso modo, creeremo un vettore di contesto c2 usando queste quattro parole. Inoltre, abbiamo α1, α2 e α3 come pesi e la somma di tutti i pesi all’interno di una finestra è uguale a 1.
Allo stesso modo, creiamo vettori di contesto da diversi gruppi di parole con diversi valori α.
Il modello dell’attenzione calcola un insieme di pesi dell’attenzione indicati con α (t, 1), α (t, 2), .., α (t, t) perché non tutti gli input verrebbero utilizzati per generare l’output corrispondente. Il vettore di contesto ci per la parola di output yi viene generato utilizzando la somma ponderata delle annotazioni:
Vettore di contesto.
I pesi dell’attenzione vengono calcolati normalizzando il punteggio di output di una rete neurale feed-forward descritta dalla funzione che cattura l’allineamento tra l’input in j e l’output in i.
Formula matematica dei pesi nel modello d’attenzione.

Implementazione

Facciamo un esempio in cui un traduttore legge la frase in inglese (lingua di input) mentre scrive le parole chiave dall’inizio alla fine, dopodiché inizia a tradurre in portoghese (la lingua di output). Durante la traduzione di ogni parola inglese, utilizza le parole chiave che ha compreso.
L’attenzione pone un’attenzione diversa su parole diverse assegnando a ciascuna parola un punteggio. Quindi, utilizzando i punteggi softmax, aggreghiamo gli stati nascosti del codificatore utilizzando una somma ponderata degli stati nascosti del codificatore per ottenere il vettore di contesto.
Le implementazioni di un livello di attenzione possono essere suddivise in 4 passaggi.
Passaggio 0: prepara gli stati nascosti.
Per prima cosa, prepara tutti gli stati nascosti dell’encoder disponibili (verde) e il primo stato nascosto del decoder (rosso). Nel nostro esempio, abbiamo 4 stati nascosti del codificatore e lo stato nascosto del decodificatore corrente. (Nota: l’ultimo stato nascosto del codificatore consolidato viene fornito come input al primo passo temporale del decodificatore. L’uscita di questo primo passo temporale del decodificatore è chiamato primo stato nascosto del decodificatore.)
Passaggio 1: ottieni un punteggio per ogni stato nascosto del codificatore.
Un punteggio (scalare) viene ottenuto da una funzione di punteggio (nota anche come funzione di punteggio di allineamento o modello di allineamento). In questo esempio, la funzione punteggio è un prodotto puntuale tra gli stati nascosti del decodificatore e del codificatore.
Passaggio 2: esegui tutti i punteggi attraverso un livello softmax.
Mettiamo i punteggi in un livello softmax in modo che i punteggi softmax (scalari) sommino a 1. Questi punteggi softmax rappresentano la distribuzione dell’attenzione.
Passaggio 3: moltiplica ogni stato nascosto del codificatore per il suo punteggio softmax.
Moltiplicando ogni stato nascosto del codificatore con il suo punteggio softmax (scalare), otteniamo il vettore di allineamento o il vettore di annotazione. Questo è esattamente il meccanismo in cui avviene l’allineamento.
Passaggio 4: somma i vettori di allineamento.
I vettori di allineamento vengono sommati per produrre il vettore di contesto. Un vettore di contesto è un’informazione aggregata dei vettori di allineamento del passaggio precedente.
Passaggio 5: inserire il vettore di contesto nel decoder.

 

Tipi di attenzione

A seconda di quanti stati sorgente contribuiscono durante la derivazione del vettore di attenzione (α), ci possono essere tre tipi di meccanismi di attenzione:
Attenzione globale : quando l’attenzione è posta su tutti gli stati di origine. Nell’attenzione globale, richiediamo tanti pesi quanti sono la lunghezza della frase di origine.
Attenzione locale : quando l’attenzione è posta su alcuni stati di origine.
Attenzione forte : quando l’attenzione è posta su un solo stato sorgente.
Riportiamo per i più curiosi un notebook molto interessante per riprodurre il concetto di attenzione utilizzando TensorFlow.
Flavio Bernardotti

Flavio Bernardotti

House of Codes
Technical Advisor and Business Partner

Scrivi un commento

Il tuo indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati con un *

https://www.houseofcodes.it/wp-content/uploads/2020/12/Webp.net-resizeimage-3-320x78.png
https://www.houseofcodes.it/wp-content/uploads/2017/03/logo_white.png
Iscriviti alla newsletter

Se vuoi ricevere le nostre news sul mondo tecnologico, sottoscrivi alla nostra newsletter. Zero spam.

    House of Codes – Malta

    4, Triq L-Isqof Pace,

    MLH 1067, Mellieha, Malta

    House of Codes – Italia

    Via Lazio 63/B4

    65015 Montesilvano (PE), Italia

    Iscriviti alla newsletter

    Se vuoi ricevere le nostre news sul mondo tecnologico, sottoscrivi alla nostra newsletter. Zero spam.

      House of Codes – Malta

      4, Triq L-Isqof Pace,

      MLH 1067, Mellieha, Malta

      House of Codes – Italia

      Via Lazio 63/B4

      65015 Montesilvano (PE), Italia

      Copyright by House of Codes. Tutti i diritti riservati.