I Transformers sono un modello di Deep Learning molto potente che è riuscito a diventare uno standard in molte attività di elaborazione del linguaggio naturale ed è pronto a rivoluzionare anche il campo della visione artificiale.
Tutto ebbe inizio nel 2017 quando Google Brain pubblicò il documento destinato a cambiare tutto, Attention Is All You Need [4]. I ricercatori applicano questa nuova architettura a diversi problemi di elaborazione del linguaggio naturale, ed è subito evidente quanto questa possa essere in grado di superare alcune delle limitazioni che affliggono le RNN, tradizionalmente utilizzate per compiti come la traduzione da una lingua all’altra.
Se questo contenuto educativo approfondito è utile per te, iscriviti alla nostra mailing list di ricerca sull'IA per essere avvisato quando rilasciamo nuovo materiale.
Nel corso degli anni i Transformers sono diventati un'istituzione nel campo dell'elaborazione del linguaggio naturale e Google Brain, nel 2020, si chiede, saranno altrettanto efficaci sulle immagini? La risposta è sì, nascono i Vision Transformers che, con alcune modifiche preliminari alle immagini, riescono a sfruttare l'architettura classica dei Transformers e raggiungono presto lo stato dell'arte in molte problematiche anche in questo campo.
L'entusiasmo è grande e dopo qualche mese, all'inizio del 2021, i ricercatori di Facebook pubblicano una nuova versione dei Transformers questa volta però specificatamente per i video, la TimeSformers. Ovviamente, anche in questo caso, con qualche piccola modifica strutturale questa architettura risulta presto vincente sui video e Facebook annuncia a febbraio 2021 che la utilizzerà con i video dei suoi social per creare nuovi modelli per gli scopi più disparati.
Perché abbiamo bisogno di trasformatori?
Ma facciamo un passo indietro ed esploriamo le motivazioni che hanno spinto i ricercatori di Google a cercare una nuova architettura alternativa per risolvere i compiti di elaborazione del linguaggio naturale.
Tradizionalmente, un compito come la traduzione veniva eseguito utilizzando le reti neurali ricorrenti, che sono note per presentare numerosi problemi. Uno dei problemi principali è il suo funzionamento sequenziale. Ad esempio, per tradurre una frase dall'inglese all'italiano, con questo tipo di reti, la prima parola della frase da tradurre veniva passata ad un codificatore insieme ad uno stato iniziale, e lo stato successivo veniva poi passato ad un secondo codificatore con la seconda parola della frase e così via fino all'ultima parola. Lo stato risultante dall'ultimo codificatore viene poi passato ad un decodificatore che restituisce in uscita sia la prima parola tradotta che uno stato successivo, che viene passato ad un altro decodificatore, e così via.
Il problema qui è abbastanza ovvio: per completare il passaggio successivo devo avere il risultato del passaggio precedente. Questo è un grosso difetto perché non si sfrutta la capacità di parallelizzazione delle moderne GPU e quindi si perde in termini di prestazioni. Ci sono anche altri problemi come l'esplosione del gradiente, l'incapacità di rilevare le dipendenze tra parole distanti nella stessa frase e così via.
L'attenzione è tutto ciò di cui hai bisogno?
Sorge quindi la domanda: esiste un meccanismo che possiamo calcolare in modo parallelo che ci consenta di estrarre le informazioni di cui abbiamo bisogno dalla frase? La risposta è sì, e quel meccanismo è l’attenzione.
Se dovessimo definire l'attenzione tralasciando per un attimo gli aspetti tecnici e realizzativi, come potremmo farlo?
Prendiamo una frase di esempio e chiediamoci, concentrandoci sulla parola “ha dato”, su quali altre parole della frase dovrei porre la mia attenzione per aggiungere significato a questa parola? Potrei pormi una serie di domande, ad esempio, chi ha dato? E in questo caso, mi concentrerei sulla parola "io" e poi potrei chiedere a chi ha dato? Ponendo la mia attenzione in questo caso sulla parola Charlie e infine, potrei chiedermi, cosa ha dato? Concentrandoci infine sulla parola cibo.
Facendomi queste domande e magari facendo così per ciascuna delle parole della frase, potrei riuscire a comprenderne il significato e le sfaccettature. Il problema a questo punto è: come mettere in pratica questo concetto?
Per comprendere il calcolo dell'attenzione possiamo tracciare parallelismi con il mondo dei database. Quando effettuiamo una ricerca nel database inviamo una query (Q) e cerchiamo tra i dati disponibili una o più chiavi che soddisfino la query. L'output è il valore associato alla chiave più rilevante per la query.
Ciò che accade nel caso del calcolo dell’attenzione è estremamente simile.
Iniziamo considerando la frase su cui calcolare l'attenzione come un insieme di vettori. Ogni parola, tramite un meccanismo di incorporamento delle parole, viene codificata in un vettore. Consideriamo questi vettori come le chiavi tra cui cercare, rispetto ad una query che stiamo cercando, che potrebbe essere una parola della stessa frase (autoattenzione) o di un'altra frase. A questo punto dobbiamo calcolare la somiglianza tra la query e ciascuna delle chiavi disponibili, matematicamente tramite il prodotto scalare. Questo processo restituirà una serie di valori reali, magari molto diversi tra loro, ma poiché vogliamo ottenere pesi compresi tra 0 e 1 la cui somma sia uguale a 1, applichiamo un SoftMax ai risultati. Una volta ottenuti i pesi dobbiamo moltiplicare il peso di ogni parola, e quindi la sua rilevanza per la query, per il vettore che la rappresenta. Infine restituiamo la combinazione di questi prodotti come vettore dell'attenzione.
Per costruire questo meccanismo utilizziamo layer lineari che, a partire dal vettore di input, generano chiavi, query e valori, mediante moltiplicazione di matrici. La combinazione di chiavi e query consentirà di ottenere la corrispondenza più corretta tra questi due insiemi, il cui risultato verrà poi combinato con i valori in modo da ottenere la combinazione più rilevante.
Ma questo meccanismo sarebbe sufficiente se volessimo concentrarci su una sola parola, ma se volessimo guardare la frase da più punti di vista e poi calcolare più volte, in parallelo, l'attenzione? Utilizziamo la cosiddetta attenzione multitesta, con una struttura simile i cui risultati vengono semplicemente combinati alla fine per restituire un unico vettore riassuntivo di tutta l'attenzione calcolata.
Ora che abbiamo capito quale meccanismo utilizzare e accertato della sua parallelizzabilità, analizziamo la struttura all’interno della quale è incastonata l’attenzione multitesta e che ne costituisce il trasformatore.
Considerando sempre un compito di traduzione, concentriamoci inizialmente sulla parte sinistra dell’immagine, la parte di codifica, che prende in input l’intera frase da tradurre dall’inglese all’italiano. Già qui vediamo che c’è un’enorme rivoluzione rispetto all’approccio RNN perché invece di elaborare la frase parola per parola, questa viene presentata interamente. Prima di procedere con il calcolo dell'attenzione, i vettori che rappresentano le parole vengono combinati con un meccanismo di codifica posizionale, basato su seno e coseno, che incorpora nei vettori informazioni sulla posizione delle parole nella frase. Questo è molto importante perché sappiamo che in qualsiasi lingua la posizione delle parole nella frase è più che rilevante ed è un'informazione che non possiamo assolutamente perdere se vogliamo fare una valutazione corretta. Tutte queste informazioni passano in un meccanismo di attenzione multi-testa, il cui risultato viene normalizzato e passato ad un feed-forward. La codifica può essere eseguita N volte per ottenere informazioni più significative.
Ma la frase da tradurre non è l'unico input del trasformatore, abbiamo un secondo blocco, il decoder, che accoglie l'output della precedente esecuzione del trasformatore. Se assumiamo, ad esempio, che abbiamo già tradotto le prime due parole e vogliamo prevedere la terza parola della frase in italiano, passeremo nel decoder le prime due parole tradotte. Su queste parole verrà eseguita la codifica posizionale e l'attenzione multi-testa e il risultato verrà combinato con il risultato del codificatore. L'attenzione viene ricalcolata sulla combinazione e il risultato, mediante uno strato lineare e un softmax, sarà un vettore di potenziali parole candidate a essere la nuova parola tradotta, con una probabilità associata a ciascuna di esse. Nell'iterazione successiva il decodificatore prenderà quindi in aggiunta anche questa parola oltre alle precedenti.
Questa struttura si è quindi rivelata incredibilmente efficace e performante, questo perché elabora la frase nella sua interezza e non parola per parola, conserva informazioni sulla posizione delle parole nella frase e sfrutta l'attenzione che è un meccanismo in grado di esprimere efficacemente il contenuto della frase.
Dopo tutta questa simpatica spiegazione potreste pensare che i trasformatori siano perfetti e senza alcun tipo di difetto. Ovviamente non è così e uno dei suoi punti di forza è anche il suo punto debole, il calcolo dell'attenzione!
Per calcolare l'attenzione di ogni parola rispetto a tutte le altre devo effettuare calcoli N² che, anche se parzialmente parallelizzabili, sono comunque molto costosi. Con una tale complessità immaginiamo cosa significhi calcolare l’attenzione, più volte, su un paragrafo di centinaia e centinaia di parole.
Graficamente si può immaginare una matrice da riempire con i valori di attenzione di ogni parola rispetto ad ogni altra e questo chiaramente ha un costo rilevante. È importante precisare che opzionalmente e solitamente sul decoder, è possibile calcolare l'attenzione mascherata in cui si evita di calcolare l'attenzione tra la parola interrogata e tutte quelle successive
Qualcuno potrebbe allora obiettare, ma abbiamo davvero bisogno di tutta quella struttura vista sopra se poi molti dei benefici apportati dai trasformatori sono piuttosto legati al meccanismo dell’attenzione? Ma il primo articolo di Google Brain del 2017 non dice “L’attenzione è tutto ciò di cui hai bisogno”? [4] Certamente legittimo, ma nel marzo 2021, ancora una volta i ricercatori di Google hanno pubblicato un articolo intitolato “L’attenzione non è tutto ciò di cui hai bisogno” [6]. Che cosa significa? I ricercatori hanno condotto esperimenti analizzando il comportamento del meccanismo di auto-attenzione condotto senza nessuno degli altri componenti dei trasformatori e hanno scoperto che converge a una matrice di rango 1 con una velocità doppiamente esponenziale. Ciò significa che questo meccanismo, di per sé, è praticamente inutile. Allora perché i trasformatori sono così potenti? È dovuto ad un braccio di ferro tra il meccanismo di auto-attenzione che tende a ridurre il rango della matrice e altri due componenti dei trasformatori, skip connessioni e MLP.
La prima permette di diversificare la distribuzione dei cammini evitando di ottenere tutti lo stesso cammino e questo riduce drasticamente la probabilità che la matrice venga ridotta al rango 1. L'MLP riesce invece ad aumentare il rango della matrice risultante grazie alla sua non linearità. Al contrario, è stato dimostrato che la normalizzazione non gioca alcun ruolo nell’evitare questo comportamento del meccanismo di auto-attenzione. L'attenzione non è quindi tutto ciò che serve, ma l'architettura del trasformatore riesce a sfruttarla a proprio vantaggio per ottenere risultati impressionanti.
Trasformatori di visione
Arrivati a questo punto del 2020, ancora una volta i ricercatori di Google si sono chiesti: “ma se i Transformer si sono rivelati così efficaci nel campo dell’elaborazione del linguaggio naturale, come si comporteranno con le immagini?”. Un po’ come è stato fatto con la PNL, partiamo dal concetto di attenzione ma questa volta applicato alle immagini. Proviamo a capirlo attraverso un esempio.
Se consideriamo la foto di un cane fermo davanti a un muro, chiunque di noi direbbe che si tratta di una “foto di un cane” e non di una “foto di un muro”, questo perché stiamo concentrando la nostra attenzione sull’oggetto soggetto dominante e discriminante dell'immagine ed è proprio ciò che fa il meccanismo dell'attenzione applicato alle immagini.
Ora che abbiamo capito che il concetto di attenzione può essere esteso anche alle immagini, non ci resta che trovare il modo di inserire le immagini in un classico trasformatore.
Sappiamo che il trasformatore prende come vettori in input, quelli delle parole, quindi come possiamo convertire un'immagine in vettori? Sicuramente una prima soluzione sarebbe quella di utilizzare tutti i pixel dell'immagine e metterli “in linea” per ottenere un vettore. Ma fermiamoci un attimo e vediamo cosa accadrebbe se scegliessimo questa opzione.
Abbiamo detto in precedenza che il calcolo dell’attenzione ha una complessità pari a O(N²) ciò significa che se dovessimo calcolare la complessità di ogni pixel rispetto a tutti gli altri, in un’immagine a bassa risoluzione come 256×256 pixel avremmo una quantità estrema di calcoli e assolutamente insormontabile con le risorse odierne. Quindi questo approccio non è certamente praticabile.
La soluzione è abbastanza semplice e nell’articolo “Un’immagine vale 16×16 parole” [2] si propone di dividere l’immagine in patch e poi convertire ciascuna patch in un vettore utilizzando una proiezione lineare che mapperà le patch in un vettore spazio.
Adesso non ci resta che andare a vedere l'architettura del Vision Transformer.
L'immagine viene poi divisa in patch, che passano attraverso una proiezione lineare per ottenere dei vettori, che vengono accoppiati con le informazioni sulla posizione del patch all'interno dell'immagine e sottoposti ad un classico trasformatore. L'aggiunta dell'informazione sulla posizione originale del patch all'interno dell'immagine è fondamentale perché durante la proiezione lineare questa informazione andrebbe persa anche se è molto importante per comprendere appieno il contenuto dell'immagine. Viene inserito un ulteriore vettore che è indipendente dall'immagine in analisi e che serve per ottenere informazioni globali sull'intera immagine ed infatti l'output corrispondente a questa patch è l'unico che viene considerato e passato in un MLP che restituirà la classe prevista.
Tuttavia, c’è un punto in questo processo in cui si verifica una perdita di informazioni molto significativa. Infatti, nel passaggio da patch a vettore, ogni tipo di informazione sulla posizione dei pixel nella patch viene persa. Questa è certamente una cosa seria, sottolineano gli autori di Transformer in Transformer (TnT) [3] perché la disposizione dei pixel all'interno di una porzione dell'immagine da analizzare è un'informazione certa che non vorremmo perdere per ottenere una qualità predizione.
Gli autori di TnT si sono allora chiesti: è possibile trovare un modo migliore per far sì che i vettori vengano sottoposti al trasformatore?
La loro proposta è quindi quella di prendere ogni singola patch (pxp) dell'immagine, che sono esse stesse immagini su 3 canali RGB, e trasformarla in un tensore del canale c. Questo tensore viene poi diviso in p’ parti con p’<p, nell’esempio p’=4. Ciò produce vettori p’ in dimensioni c. Questi vettori ora contengono informazioni sulla disposizione dei pixel all'interno della patch.
Essi vengono poi concatenati e proiettati linearmente in modo da renderli della stessa dimensione del vettore ottenuto dalla proiezione lineare del patch originale e combinato con esso.
In questo modo anche i vettori di input al trasformatore saranno influenzati dalla disposizione dei pixel all'interno delle patch e così facendo gli autori sono riusciti a migliorare ulteriormente le prestazioni in vari compiti di visione artificiale.
TimeSformers
Visti i grandi successi dei trasformatori prima in ambito PNL e poi nella loro applicazione alle immagini, nel 2021 i ricercatori di Facebook hanno provato ad applicare questa architettura anche ai video.
Intuitivamente è chiaro che ciò è possibile poiché sappiamo tutti che un video non è altro che un insieme di fotogrammi uno dopo l'altro e i fotogrammi non sono altro che immagini.
C'è solo un piccolo dettaglio che li rende diversi dai Vision Transformers, bisogna tenere conto non solo dello spazio ma anche del tempo. In questo caso infatti quando andiamo a calcolare l'attenzione non possiamo guardare i fotogrammi come immagini isolate ma dovremmo trovare qualche forma di attenzione che tenga conto della variazione che avviene tra fotogrammi consecutivi in quanto essa è centrale nella valutazione dell'attenzione un video.
Per cercare di risolvere questo problema, gli autori hanno suggerito diversi nuovi meccanismi di attenzione, da quelli che si concentrano esclusivamente sullo spazio, utilizzato principalmente come punto di riferimento, a quelli che calcolano l’attenzione assialmente, diffusa o congiuntamente tra spazio e tempo.
Tuttavia, il metodo che ha ottenuto i migliori risultati è l’Attenzione Spazio-Tempo Divisa. Consiste, dato un frame all'istante te una delle sue patch come query, nel calcolare l'attenzione spaziale sull'intero frame e poi l'attenzione temporale nella stessa patch della query ma nel frame precedente e successivo.
Ma perché questo approccio funziona così bene? Il motivo è che apprende più funzionalità separate rispetto ad altri approcci ed è quindi in grado di comprendere meglio video di diverse categorie. Possiamo vederlo nella visualizzazione seguente dove ogni video è rappresentato da un punto nello spazio e il suo colore rappresenta la categoria a cui appartiene.
Gli autori hanno anche messo in dubbio la rilevanza della risoluzione dei video e del numero di fotogrammi in essi contenuti e hanno scoperto che maggiore è la risoluzione migliore è, fino a un certo punto, la precisione del modello. Per quanto riguarda il numero di fotogrammi, anche in questo caso all'aumentare del numero di fotogrammi aumenta anche la precisione. La cosa interessante è che non è stato possibile effettuare test con un numero di fotogrammi superiore a quello riportato nel grafico e quindi potenzialmente la precisione potrebbe ancora migliorare, non abbiamo ancora trovato il limite superiore di questo miglioramento.
In Vision Transformers è noto che un set di dati di addestramento più ampio spesso si traduce in una migliore precisione. Ciò è stato verificato dagli autori anche su TimeSformers e ancora una volta, man mano che aumenta il numero di video di allenamento considerati, aumenta anche la precisione.
Conclusioni
Cosa resta da fare adesso? I Transformers sono appena sbarcati nel mondo della computer vision e sembrano più che determinati a sostituire le tradizionali reti convoluzionali o almeno a ritagliarsi un ruolo importante in questo ambito. La comunità scientifica è quindi in fermento per cercare di migliorare ulteriormente i Transformers, combinarli con varie tecniche e applicarli a problemi reali, potendo finalmente fare cose che fino a poco tempo fa non erano possibili. Grandi giganti come Facebook e Google stanno lavorando attivamente per sviluppare e applicare Transformers e probabilmente abbiamo ancora solo scalfito la superficie.
Ti è piaciuto l'articolo? Unisciti a me su LinkedIn! E se sei interessato a Transformers leggi il mio articolo su DINO!
Riferimenti e approfondimenti
[1] "Gedas Bertasius, Heng Wang e Lorenzo Torresani". "L'attenzione spazio-temporale è tutto ciò che serve per comprendere il video?".
[2] "Alexey Dosovitskiy et al.". "Un'immagine vale 16 × 16 parole: trasformatori per il riconoscimento delle immagini in scala".
[3] "Kai Han et al.". "Trasformatore nel trasformatore".
[4] "Ashish Vaswani et al.". "L'attenzione è tutto ciò che serve".
[5] "Qizhe Xie et al.". "L'autoapprendimento con Noisy Student migliora la classificazione ImageNet".
[6] “Yihe Dong et al.”, “L’attenzione non è tutto ciò di cui hai bisogno: l’attenzione pura perde il suo rango in modo doppiamente esponenziale con la profondità"
[7] “Nicola Messina et al.”, “Rete di ragionamento del trasformatore per la corrispondenza e il recupero di immagini-testo"
[8] “Nicola Messina et al.”, “Allineamento testuale visivo a grana fine per il recupero intermodale utilizzando i codificatori Transformer"
[9] “Davide Coccomini”, “TimeSformer per la classificazione video con codice di addestramento"
Questo articolo è stato pubblicato in origine Verso la scienza dei dati e ripubblicato su TOPBOTS con il permesso dell'autore.
Ti piace questo articolo? Iscriviti per ulteriori aggiornamenti AI.
Ti faremo sapere quando rilasceremo più istruzione tecnica.
Leggi Anche
Fonte: https://www.topbots.com/transformers-timesformers-and-attention/
- 2020
- 2021
- 7
- 9
- Il mio account
- Vantaggio
- AI
- ricerca ai
- Tutti
- tra
- annuncia
- Applicazioni
- architettura
- RISERVATA
- Arte
- articolo
- gli autori
- MIGLIORE
- Po
- costruire
- il cambiamento
- canali
- classificazione
- comunità
- Calcolare
- Visione computerizzata
- Connessioni
- contenuto
- dati
- Banca Dati
- banche dati
- apprendimento profondo
- dettaglio
- sviluppare
- Istruzione
- educativo
- Efficace
- Inglese
- esecuzione
- Sfruttare
- Caratteristiche
- Infine
- Nome
- difetto
- Focus
- cibo
- modulo
- gif
- globali
- GPU
- grande
- qui
- Come
- HTTPS
- Enorme
- centinaia
- Immagine
- Riconoscimento dell'immagine
- IMAGEnet
- Aumento
- informazioni
- Istituzione
- IT
- Le
- Tasti
- Lingua
- apprendimento
- carta geografica
- Marzo
- modello
- mese
- Linguaggio naturale
- Elaborazione del linguaggio naturale
- Rete
- reti
- Neurale
- reti neurali
- nlp
- Opzione
- minimo
- Altro
- Altri
- Carta
- Toppa
- Patch
- performance
- immagine
- pixel
- Peste
- predizione
- Prodotto
- Prodotti
- proposta
- qualità
- ridurre
- riparazioni
- Risorse
- Risultati
- problemi
- Cerca
- Serie
- set
- Un'espansione
- Taglia
- piccole
- So
- Social
- RISOLVERE
- lo spazio
- Spaziale
- inizia a
- Regione / Stato
- studente
- presentata
- superficie
- Consulenza
- test
- Il grafo
- tempo
- Training
- Traduzione
- Aggiornamenti
- us
- APPREZZIAMO
- Video
- Video
- Visualizza
- visione
- visualizzazione
- guerra
- OMS
- entro
- parole
- Lavora
- mondo
- valore
- anni