Attention (Machine Learning): differenze tra le versioni

Da Wiki AI.
Nessun oggetto della modifica
Etichette: Ripristino manuale Annullato Modifica visuale: commutato
Nessun oggetto della modifica
 
(9 versioni intermedie di 3 utenti non mostrate)
Riga 1: Riga 1:
 
{{Template concetto
|NomeInglese=Attantion
}}
Meccanismo implementato nelle architetture di rete neurale che consente a un componente di focalizzarsi su parti specifiche di una sequenza. Inizialmente l'attention viene proposta per migliorare la qualità dell'allineamento e della traduzione nei task di [[Neural Machine Translation]], ma essendo un concetto generale viene presto applicato ad altri compiti come la generazione del testo e ad altri compiti anche relativi al capo delle immagini e del video.
Meccanismo implementato nelle architetture di rete neurale che consente a un componente di focalizzarsi su parti specifiche di una sequenza. Inizialmente l'attention viene proposta per migliorare la qualità dell'allineamento e della traduzione nei task di [[Neural Machine Translation]], ma essendo un concetto generale viene presto applicato ad altri compiti come la generazione del testo e ad altri compiti anche relativi al capo delle immagini e del video.
<math>\sqrt{2}</math>


L'implementazione della "Bahdanau Attention" è proposta originariamente in "Neural Machine Translation by Jointly Learning to Align and Translate'', 2014":'' essa sorpassa il lavoro di [https://arxiv.org/abs/1406.1078 Cho et al (2014)] e di [https://arxiv.org/abs/1409.3215 Sutskever et al. (2014)], che usavano un framework encoder-decoder basato su [[Recurrent Neural Network (RNN)|RNN]] per il task di traduzione automatica codificando una frase di lunghezza variabile in un vettore di dimensione <u>fissa</u>.
L'implementazione della "Bahdanau Attention" è proposta originariamente in "Neural Machine Translation by Jointly Learning to Align and Translate'', 2014":'' essa sorpassa il lavoro di [https://arxiv.org/abs/1406.1078 Cho et al (2014)] e di [https://arxiv.org/abs/1409.3215 Sutskever et al. (2014)], che usavano un framework encoder-decoder basato su [[Recurrent Neural Network (RNN)|RNN]] per il task di traduzione automatica codificando una frase di lunghezza variabile in un vettore di dimensione <u>fissa</u>.


=== Bahdanau Attention (Additive Attention) ===
=== Bahdanau Attention (Additive Attention) ===
Bahdanau et al., in [https://arxiv.org/abs/1409.0473 "Neural Machine Translation by Jointly Learning to Align and Translate"]'','' sostengono che questo vettore di lunghezza fissa spesso non riesca a contenere tutta l'informazione presente nella frase di origine, e la performance degradi velocemente all'allungarsi della sequenza di input, proponendo quindi un vettore di lunghezza variabile.
Bahdanau et al., in "[[Neural Machine Translation by Jointly Learning to Align and Translate]]" sostengono che questo vettore di lunghezza fissa spesso non riesca a contenere tutta l'informazione presente nella frase di origine, e la performance degradi velocemente all'allungarsi della sequenza di input, proponendo quindi un vettore di lunghezza variabile.
 
Propongono quindi, nell'encoder, una RNN bi-direzionale che, per ogni token all'interno della frase, codifichi non solo l'interno contenuto della frase, ma soprattutto il significato delle parole vicine al token corrente: gli stati nascosti della rete per quel token vengono quindi concatenati ed utilizzati, nel decoder, per aggiornare il contesto che non è più "statico" come in  [https://arxiv.org/abs/1406.1078 Cho et al (2014)] (descritto in  [[Sequence to Sequence (seq2seq)]]  ) e in [[Sequence to Sequence Learning with Neural Networks (12/12/2014)]] (Sutskever et al. 2014). Il contesto, a ogni token di output che deve essere prodotto, si confronta quindi con gli "''attention scores''" che indicano quanto ognuno dei token della sequenza di input sia importante per la generazione del token corrente.


Propongono quindi, nell'encoder, una RNN bi-direzionale che, per ogni token all'interno della frase, codifichi non solo l'interno contenuto della frase, ma soprattutto il significato delle parole vicine al token corrente: gli stati nascosti della rete per quel token vengono quindi concatenati ed utilizzati, nel decoder, per aggiornare il contesto che non è più "statico" come in  [https://arxiv.org/abs/1406.1078 Cho et al (2014)] (descritto in  [[Sequence to Sequence (seq2seq)]]  ) e in [https://arxiv.org/abs/1409.3215 Sutskever et al. (2014)]. Il contesto, a ogni token di output che deve essere prodotto, si confronta quindi con gli "''attention scores''" che indicano quanto ognuno dei token della sequenza di input sia importante per la generazione del token corrente.
Viene chiamata "additiva" perché calcola i pesi dell'attenzione attraverso una combinazione additiva della query e delle chiavi, seguita da una funzione di attivazione non lineare. Questo è in contrasto con metodi successivi come l'attenzione a prodotto scalare (moltiplicativa) utilizzata nel modello Transformer, che calcola i pesi dell'attenzione calcolando il prodotto scalare tra la query e le chiavi.


Il fatto che tutti gli stati nascosti corrispondenti alla sequenza di input vengano utilizzati nell'attention la rende un tipo di '''attention globale''', e ha delle ricadute sulla performance, che verranno migliorate nelle ricerche successive, come nell'attention di Luong.
Il fatto che tutti gli stati nascosti corrispondenti alla sequenza di input vengano utilizzati nell'attention la rende un tipo di '''attention globale''', e ha delle ricadute sulla performance, che verranno migliorate nelle ricerche successive, come nell'attention di Luong.


[[File:Attention Scores.png|nessuno|miniatura|600x600px|Attention Scores, dal Paper di Bahdanau et al. Gli score vanno letti con sull'asse delle x la lingua sorgente e asse delle y la lingua di destinazione]]
[[File:Attention Scores.png|nessuno|miniatura|600x600px|Attention Scores, dal Paper di Bahdanau et al. Gli score vanno letti con sull'asse delle x la lingua sorgente e asse delle y la lingua di destinazione]]
==== Calcolo del Punteggio ====
La funzione di "punteggio" dell'attenzione calcola quanto bene gli input intorno alla posizione j nella frase sorgente si allineano con l'output alla posizione i nella frase target. Questo punteggio è calcolato utilizzando una rete neurale feedforward, che è dove entra in gioco la natura "additiva".
La formula per il calcolo del punteggio è:
<math display="inline">score(h_t, \bar{h}_s) = v_a^\top \tanh(W_1 h_t + W_2 \bar{h}_s)</math>
<math display="inline">h_t</math> è lo stato nascosto target al tempo t, che funge da "query".
<math display="inline">\bar{h}_s</math> è lo stato nascosto sorgente al tempo s, che funge da "chiave".
<math display="inline">W_1</math> e <math display="inline">W_2</math> sono matrici di peso apprese durante l'addestramento.
<math display="inline">v_a</math> è un vettore di peso, anch'esso appreso durante l'addestramento.
La funzione <math display="inline">\tanh</math> fornisce la non linearità.
==== Pesi dell'Attenzione ====
I pesi dell'attenzione (noti anche come punteggi di allineamento) vengono quindi calcolati utilizzando una funzione softmax su tutti i punteggi per un dato passo temporale target t, normalizzandoli in modo che la loro somma sia 1:
<math display="inline">\alpha_{ts} = \frac{\exp(score(h_t, \bar{h}s))}{\sum{s'} \exp(score(h_t, \bar{h}_{s'}))}</math>
<math display="inline">\alpha_{ts}</math> rappresenta il peso dell'attenzione o la quantità di "attenzione" che <math display="inline">h_t</math> dovrebbe prestare a <math display="inline">\bar{h}_s</math>.
==== Vettore di Contesto ====
Il vettore di contesto (<math display="inline">c_t</math>) per ogni passo temporale target t viene calcolato come una somma pesata degli stati sorgente, con i pesi essendo i punteggi di attenzione calcolati sopra. Questo vettore rappresenta le informazioni di input focalizzate da utilizzare per generare l'output al passo t.
<math display="inline">c_t = \sum_s \alpha_{ts} \bar{h}_s</math>
==== Generazione dell'Output ====
Infine, il vettore di contesto <math display="inline">c_t</math> e l'attuale stato nascosto target <math display="inline">h_t</math> vengono combinati (spesso tramite concatenazione seguita da una trasformazione lineare e attivazione) per generare l'output per la sequenza target al tempo t.


==== Cosa viene appreso durante la retropropagazione ====
==== Cosa viene appreso durante la retropropagazione ====


Durante il processo di apprendimento, il modello regola i pesi delle sue matrici per affinare la qualità della traduzione. In particolare:
Durante il processo di apprendimento, il modello regola i pesi delle sue matrici per affinare la qualità della traduzione.  


* '''\mathbf{W}_1 e \mathbf{W}_2''': Queste matrici trasformano rispettivamente la query e le chiavi, permettendo al modello di apprendere come rappresentare al meglio sia le informazioni sorgenti che quelle di destinazione. L'apprendimento in queste matrici consente al modello di:
In particolare <math display="inline">\mathbf{W}_1</math> e <math display="inline">\mathbf{W}_2</math> trasformano rispettivamente la query e le chiavi, permettendo al modello di apprendere come rappresentare al meglio sia le informazioni sorgenti che quelle di destinazione.  
** Estrarre caratteristiche sintattiche e semantiche rilevanti.
** Regolare la sensibilità alle diverse tipologie di allineamento tra la sequenza sorgente e quella di destinazione.


* '''\mathbf{v}_a''': Il vettore di pesi \mathbf{v}_a proietta il risultato dell'attivazione non lineare a un valore scalare, che rappresenta il punteggio di allineamento. L'apprendimento in \mathbf{v}_a si concentra su:
L'apprendimento in queste matrici consente al modello di:
** Determinare l'importanza delle caratteristiche estratte, influenzando così la distribuzione dell'attenzione attraverso la sequenza di input.
* Estrarre caratteristiche sintattiche e semantiche rilevanti.
** Affinare la focalizzazione del modello su parti specifiche dell'input per generare ciascuna parte dell'output.
* Regolare la sensibilità alle diverse tipologie di allineamento tra la sequenza sorgente e quella di destinazione.
 
Il vettore di pesi <math display="inline">\mathbf{v}_a</math> invece proietta il risultato dell'attivazione non lineare a un valore scalare, che rappresenta il punteggio di allineamento, l'apprendimento quindi si concentra su:
* Determinare l'importanza delle caratteristiche estratte, influenzando così la distribuzione dell'attenzione attraverso la sequenza di input.
* Affinare la focalizzazione del modello su parti specifiche dell'input per generare ciascuna parte dell'output.


Quindi:
Quindi:
Riga 31: Riga 61:
* Il modello generalizza le strategie di allineamento apprese a nuovi testi, migliorando la capacità di tradurre accuratamente tra lingue con strutture diverse.
* Il modello generalizza le strategie di allineamento apprese a nuovi testi, migliorando la capacità di tradurre accuratamente tra lingue con strutture diverse.


 
== L'attention come modulo generalizzato ==
=== L'attention come modulo generalizzato ===
L'attention è spesso implementata come un modulo generico che:
L'attention è spesso implementata come un modulo generico che:


Riga 59: Riga 88:


[https://courses.cs.washington.edu/courses/cse543/23wi/schedule/lecture13_live_part1.pdf Presentazione sui vari meccasismi di Attention]
[https://courses.cs.washington.edu/courses/cse543/23wi/schedule/lecture13_live_part1.pdf Presentazione sui vari meccasismi di Attention]
[[Category:Concetto]]
 
{{#seo:
            |title=Attention
            |title_mode=append
            |keywords=reti neurali, deep learning, elaborazione del linguaggio naturale, traduzione automatica, attenzione, Bahdanau Attention, codificatore-decodificatore, sequenza, vettore di contesto, punteggio di attenzione, pesi di attenzione
            |description=Questa pagina descrive il meccanismo di attenzione nelle reti neurali, con particolare attenzione all'implementazione di Bahdanau Attention. L'attenzione consente ai modelli di concentrarsi su parti specifiche dell'input durante l'elaborazione, migliorando le prestazioni in compiti come la traduzione automatica. La pagina spiega come funziona l'attenzione di Bahdanau, incluso il calcolo dei punteggi di attenzione, i pesi di attenzione e il vettore di contesto. Include anche collegamenti a risorse utili come l'articolo originale, tutorial e spiegazioni.
           
            }}

Versione attuale delle 07:21, 2 dic 2024

Attention (Machine Learning)
Nome Inglese Attantion
Sigla

Meccanismo implementato nelle architetture di rete neurale che consente a un componente di focalizzarsi su parti specifiche di una sequenza. Inizialmente l'attention viene proposta per migliorare la qualità dell'allineamento e della traduzione nei task di Neural Machine Translation, ma essendo un concetto generale viene presto applicato ad altri compiti come la generazione del testo e ad altri compiti anche relativi al capo delle immagini e del video.

L'implementazione della "Bahdanau Attention" è proposta originariamente in "Neural Machine Translation by Jointly Learning to Align and Translate, 2014": essa sorpassa il lavoro di Cho et al (2014) e di Sutskever et al. (2014), che usavano un framework encoder-decoder basato su RNN per il task di traduzione automatica codificando una frase di lunghezza variabile in un vettore di dimensione fissa.

Bahdanau Attention (Additive Attention)

Bahdanau et al., in "Neural Machine Translation by Jointly Learning to Align and Translate" sostengono che questo vettore di lunghezza fissa spesso non riesca a contenere tutta l'informazione presente nella frase di origine, e la performance degradi velocemente all'allungarsi della sequenza di input, proponendo quindi un vettore di lunghezza variabile.

Propongono quindi, nell'encoder, una RNN bi-direzionale che, per ogni token all'interno della frase, codifichi non solo l'interno contenuto della frase, ma soprattutto il significato delle parole vicine al token corrente: gli stati nascosti della rete per quel token vengono quindi concatenati ed utilizzati, nel decoder, per aggiornare il contesto che non è più "statico" come in Cho et al (2014) (descritto in Sequence to Sequence (seq2seq) ) e in Sequence to Sequence Learning with Neural Networks (12/12/2014) (Sutskever et al. 2014). Il contesto, a ogni token di output che deve essere prodotto, si confronta quindi con gli "attention scores" che indicano quanto ognuno dei token della sequenza di input sia importante per la generazione del token corrente.

Viene chiamata "additiva" perché calcola i pesi dell'attenzione attraverso una combinazione additiva della query e delle chiavi, seguita da una funzione di attivazione non lineare. Questo è in contrasto con metodi successivi come l'attenzione a prodotto scalare (moltiplicativa) utilizzata nel modello Transformer, che calcola i pesi dell'attenzione calcolando il prodotto scalare tra la query e le chiavi.

Il fatto che tutti gli stati nascosti corrispondenti alla sequenza di input vengano utilizzati nell'attention la rende un tipo di attention globale, e ha delle ricadute sulla performance, che verranno migliorate nelle ricerche successive, come nell'attention di Luong.

Attention Scores, dal Paper di Bahdanau et al. Gli score vanno letti con sull'asse delle x la lingua sorgente e asse delle y la lingua di destinazione

Calcolo del Punteggio

La funzione di "punteggio" dell'attenzione calcola quanto bene gli input intorno alla posizione j nella frase sorgente si allineano con l'output alla posizione i nella frase target. Questo punteggio è calcolato utilizzando una rete neurale feedforward, che è dove entra in gioco la natura "additiva".

La formula per il calcolo del punteggio è:

è lo stato nascosto target al tempo t, che funge da "query". è lo stato nascosto sorgente al tempo s, che funge da "chiave". e sono matrici di peso apprese durante l'addestramento. è un vettore di peso, anch'esso appreso durante l'addestramento. La funzione fornisce la non linearità.

Pesi dell'Attenzione

I pesi dell'attenzione (noti anche come punteggi di allineamento) vengono quindi calcolati utilizzando una funzione softmax su tutti i punteggi per un dato passo temporale target t, normalizzandoli in modo che la loro somma sia 1:

rappresenta il peso dell'attenzione o la quantità di "attenzione" che dovrebbe prestare a .

Vettore di Contesto

Il vettore di contesto () per ogni passo temporale target t viene calcolato come una somma pesata degli stati sorgente, con i pesi essendo i punteggi di attenzione calcolati sopra. Questo vettore rappresenta le informazioni di input focalizzate da utilizzare per generare l'output al passo t.

Generazione dell'Output

Infine, il vettore di contesto e l'attuale stato nascosto target vengono combinati (spesso tramite concatenazione seguita da una trasformazione lineare e attivazione) per generare l'output per la sequenza target al tempo t.

Cosa viene appreso durante la retropropagazione

Durante il processo di apprendimento, il modello regola i pesi delle sue matrici per affinare la qualità della traduzione.

In particolare e trasformano rispettivamente la query e le chiavi, permettendo al modello di apprendere come rappresentare al meglio sia le informazioni sorgenti che quelle di destinazione.

L'apprendimento in queste matrici consente al modello di:

  • Estrarre caratteristiche sintattiche e semantiche rilevanti.
  • Regolare la sensibilità alle diverse tipologie di allineamento tra la sequenza sorgente e quella di destinazione.

Il vettore di pesi invece proietta il risultato dell'attivazione non lineare a un valore scalare, che rappresenta il punteggio di allineamento, l'apprendimento quindi si concentra su:

  • Determinare l'importanza delle caratteristiche estratte, influenzando così la distribuzione dell'attenzione attraverso la sequenza di input.
  • Affinare la focalizzazione del modello su parti specifiche dell'input per generare ciascuna parte dell'output.

Quindi:

  • Il meccanismo di attenzione impara a identificare quali parti della sequenza di input siano più rilevanti per la generazione di ciascuna parola nella sequenza di output, consentendo traduzioni più accurate e contestualmente appropriate.
  • Il modello generalizza le strategie di allineamento apprese a nuovi testi, migliorando la capacità di tradurre accuratamente tra lingue con strutture diverse.

L'attention come modulo generalizzato

L'attention è spesso implementata come un modulo generico che:

  • Dato un insieme di vettori chiamati keys o chiavi
  • Dato un vettore chiamato query
  • Restituisce una somma pesata delle chiavi, in vettori di valori (values) a seconda di quanto esse siano importanti come risultati della ricerca


Links

Paper originale

Effective Approaches to Attention-based Neural Machine Translation (Luong Attention)

The Annotated Encoder-Decoder with Attention (Bahdanau)

https://arxiv.org/abs/1506.07503

https://arxiv.org/abs/1406.1078

https://arxiv.org/abs/1409.3215

Differenza fra Bahdanau e Luong Attention

Tutorial

Si vedano i video di Andrej Karpathy

Presentazione sui vari meccasismi di Attention