Semplificare i Transformers: PNL allo stato dell’arte usando parole che capisci, Parte 4: Livello feed-forward |  di Chen Margalit |  Ottobre 2023

 | Intelligenza-Artificiale

I vecchi livelli feed-forward e il loro ruolo in Transformers.

Poiché si tratta di una serie in corso, se non l’hai ancora fatto, potresti prendere in considerazione l’idea di iniziare da una delle sezioni precedenti: , 2°, E .

Questa quarta sezione coprirà lo strato essenziale di feed-forward, un elemento fondamentale presente nella maggior parte delle architetture di deep learning. Discutendo argomenti vitali comuni al deep learning, sottolineeremo il loro ruolo significativo nel dare forma all’architettura Transformers.

Immagini dal documento originale

Uno strato lineare feed-forward è fondamentalmente un gruppo di neuroni, ciascuno dei quali è collegato a un gruppo di altri neuroni. Guarda l’immagine qui sotto. A, b, c e d sono neuroni. Contengono alcuni input, alcuni numeri che rappresentano alcuni dati che vogliamo comprendere (pixel, incorporamenti di parole, ecc.). Sono collegati al neurone numero 1. Ogni neurone ha una forza di connessione diversa. a-1 è 0,12, b-1 è -0,3, ecc. In realtà, tutti i neuroni nella colonna di sinistra sono collegati a tutti i neuroni nella colonna di destra. Rende l’immagine poco chiara, quindi non l’ho fatta in questo modo, ma è importante notare. Esattamente nello stesso modo in cui abbiamo a-1, abbiamo anche a-2, b-2, c-2, d-3, ecc. Ciascuna delle connessioni tra due neuroni ha una diversa “forza di connessione”.

Immagine dell’autore

Ci sono due cose importanti da notare in quell’architettura:
1. Come accennato, ogni nodo (neurone) è collegato a ogni altro nodo. Tutti e quattro a,b,c,d sono collegati a ogni altro neurone (1,2,3). Pensa a questa immagine come a una catena di comando. 1,2,3 sono comandanti. Ricevono rapporti dai soldati a,b,c,d. A sa qualcosa, riguardo a qualcosa, ma non ha una visione molto ampia. 1 ne sa di più, poiché riceve rapporti sia da a, bc che d. Lo stesso vale per 2 e 3 che sono anche comandanti. Questi comandanti (1,2,3) trasmettono rapporti anche ai comandanti di livello superiore. I comandanti che seguono ricevono rapporti sia da a,b,c,d, E da 1,2,3, poiché anche lo strato successivo (ogni colonna di neuroni è uno strato) è completamente connesso esattamente nello stesso modo. Quindi la prima cosa importante da capire è che 1 ha una visione più ampia di a e il comandante nel livello successivo avrà una visione più ampia di 1. Quando hai più punti, puoi creare connessioni più interessanti.

2. Ogni nodo ha una forza di connessione diversa rispetto a ogni altro nodo nel livello successivo. a-1 è 0,12, b-1 è -0,3. I numeri che ho inserito qui sono ovviamente inventati, ma sono di scala ragionevole e sono parametri appresi (ad esempio cambiano durante l’allenamento). Pensa a questi numeri come a quanto 1 conta su a, su b, ecc. Dal punto di vista del comandante 1, a è un po’ affidabile. Non dovresti dare per scontato tutto ciò che dice, ma puoi contare su alcune delle sue parole. B è molto diverso. Questo nodo solitamente diminuisce l’importanza dell’input che riceve. Come una persona rilassata. Questa è una tigre? No, solo un grosso gatto. Questa è una semplificazione eccessiva di ciò che accade, ma la cosa importante da notare è questa: ogni neurone trattiene un input, sia esso grezzo o elaborato, e lo trasmette con la propria elaborazione.

Conosci il gioco Chinese Whispers? ti siedi in fila con 10 persone e sussurri una parola alla persona successiva, ad esempio “Pizza”. La persona 2 ha sentito qualcosa come “Pazza” quindi trasmette “Pazza” alla persona 3. La persona 3 ha sentito “Lassa” (dopo tutto è un sussurro) quindi trasmette “Lassa”. La quarta persona ha sentito “Batata”, quindi trasmette Batata e così via. Quando chiedi alla decima persona cosa hai testato? dice: Shambala! Come siamo arrivati ​​da Pizza a Shambala? succede una merda. La differenza tra quel gioco e ciò che fa una rete neurale è che ciascuna di queste persone aggiungerà la sua elaborazione utile. La persona 2 non dirà “Pazza”, dirà: “La Pazza è un piatto italiano, è fantastica”. La persona 3 dirà “Lassa è un piatto italiano, comune in tutto il mondo”, ecc. Ogni persona (strato), aggiunge qualcosa, si spera, utile.

Questo è fondamentalmente ciò che accade. Ogni neurone riceve un input, lo elabora e lo trasmette. Per abbinare il livello completamente connesso, suggerisco un aggiornamento ai Chinese Whisperers: d’ora in poi giochi con più righe e ogni persona sussurra a qualsiasi altra persona in ogni altra riga. Le persone dalla posizione 2 in poi ricevono sussurri da molte persone e hanno bisogno di capire quanto “peso” (importanza) danno a ciascuna persona. Questo è un livello Feed Forward.

Perché utilizziamo tali livelli? perché ci permettono di fare calcoli utili. Consideratelo un po’ come la saggezza della folla. Conosci la storia di indovinare il peso di un manzo? Nel 1906, da qualche parte in Inghilterra, qualcuno porta un manzo a una mostra. Il presentatore chiede a 787 persone a caso di indovinarne il peso. Cosa vorresti dire? Quanto pesa il manzo?

La media di tutte le loro ipotesi è stata di 1197 libbre (542 KG). Queste sono ipotesi di persone a caso. Quanto erano lontani? 1 libbra, 450 grammi. Il peso del manzo è 1198. La storia è tratta da Qui e non so se i dettagli siano corretti o meno, ma tornando al nostro business, puoi pensare agli strati lineari come se facessero qualcosa del genere. Aggiungi più parametri, più calcoli (più ipotesi) e ottieni un risultato migliore.

fotografato da Larry Costales SU Unsplash

Proviamo a immaginare uno scenario reale. Diamo un’immagine alla rete e vogliamo decidere se è una mela o un’arancia. L’architettura è basata su livelli CNN, di cui non parlerò perché esulano dallo scopo di questa serie, ma fondamentalmente è un livello di calcolo in grado di riconoscere modelli specifici in un’immagine. Ogni strato è in grado di riconoscere le crescenti complicazioni dei modelli. Ad esempio, il primo livello non nota quasi nulla, passa solo i pixel grezzi, il secondo livello riconosce le linee verticali, il livello successivo ha sentito che ci sono linee verticali e da altri neuroni ha sentito che ci sono linee verticali molto vicino. Fa 1+1 e pensa: Bello! E’ un angolo. Questo è il vantaggio di ottenere input da più fonti.

Possiamo immaginare che più calcoli facciamo, migliori saranno i risultati che potremo ottenere. In realtà, non funziona proprio in questo modo, ma è così Alcuni verità in esso. Se faccio più calcoli e consulto più persone (neuroni), generalmente riesco a ottenere risultati migliori.

Funzione di attivazione
Impileremo un altro elemento fondamentale di un concetto basilare e molto importante nel deep learning nel suo complesso, quindi uniremo i punti per capire come questo è correlato a Transformers.

I livelli completamente connessi, per quanto grandi, soffrono di un grosso svantaggio. Sono strati lineari, eseguono solo trasformazioni lineari, calcoli lineari. Si sommano e si moltiplicano, ma non riescono a trasformare l’input in modi “creativi”. A volte aggiungere più potenza non risolve il problema, è necessario pensare al problema in modo completamente diverso.

Se guadagno $ 10, lavoro 10 ore al giorno e voglio risparmiare $ 10.000 più velocemente, posso lavorare più giorni ogni settimana o lavorare più ore ogni giorno. Ma ci sono altre soluzioni là fuori, no? Così tante banche da derubare, altre persone che non hanno più bisogno dei loro soldi (posso spenderli meglio), lavori meglio pagati, ecc. La soluzione non è sempre la stessa.

Funzioni di attivazione in soccorso. Una funzione di attivazione ci permette di effettuare una trasformazione non lineare. Ad esempio prendendo una lista di numeri (1, 4, -3, 5.6) e trasformandoli in probabilità. Questo è esattamente ciò che fa la funzione di attivazione Softmax. Prende questi numeri e li trasforma in (8.29268754e-03, 1.66563082e-01, 1.51885870e-04, 8.24992345e-01). La somma di questi 5 numeri dà 1. La scrittura è un po’ frenetica, ma ogni e-03 significa che il primo numero (8) inizia dopo 3 zeri (ad esempio 0,00 e poi 82926. Il numero effettivo è 0,00829268754). Questa funzione di attivazione di Softmax ha preso numeri interi e li ha trasformati in float tra 0 e 1 in modo da preservare gli spazi tra loro. Potresti immaginare quanto ciò sia estremamente utile quando si desidera utilizzare metodi statistici su tali valori.

Esistono altri tipi di funzioni di attivazione, una delle più utilizzate è ReLU (Rettifica Unità Lineare). È una funzione di attivazione estremamente semplice (ma estremamente utile) che prende qualsiasi numero negativo e lo trasforma in 0, e qualsiasi numero non negativo e lo lascia così com’è. Molto semplice, molto utile. Se do la lista (1, -3, 2) a ReLU, ottengo indietro (1, 0, 2).

Dopo avervi spaventato con Softmax forse vi sareste aspettati qualcosa di più complicato, ma come mi disse una volta qualcuno “la fortuna è utile”. Con questa funzione di attivazione siamo stati fortunati.

Il motivo per cui abbiamo bisogno di queste funzioni di attivazione è che una relazione non lineare non può essere rappresentata da calcoli lineari (strati completamente connessi). Se per ogni ora che lavoro ricevo 10$, la quantità di denaro che ricevo è lineare. Se per ogni 5 ore di lavoro consecutive ottengo un aumento del 10% per le successive 5 ore, il rapporto non è più lineare. Il mio stipendio non sarà il numero di ore di lavoro * stipendio orario fisso. Il motivo per cui portiamo l’onere del deep learning per compiti più complicati come la generazione di testo o il riconoscimento del computer è perché le relazioni che stiamo cercando sono altamente non lineari. La parola che viene dopo “Io amo” non è ovvia e non è costante.

Un grande vantaggio di ReLU, forse ciò che lo ha reso così comunemente utilizzato, è che è molto economico dal punto di vista computazionale calcolarlo su molti numeri. Quando hai un numero limitato di neuroni (diciamo decine di migliaia), il calcolo non è estremamente cruciale. Quando si utilizzano centinaia di miliardi, come fanno i grandi LLM, un modo più efficiente dal punto di vista computazionale per elaborare i numeri potrebbe fare la differenza.

Regolarizzazione
L’ultimo concetto che introdurremo prima di spiegare il modo (molto semplice) in cui è implementato in Transformers, è il dropout. Il dropout è una tecnica di regolarizzazione. Regu- cosa? regolarizzazione. Poiché gli algoritmi si basano sui dati e il loro compito è quello di avvicinarsi il più possibile all’obiettivo dell’allenamento, a volte può essere utile per qualcuno con un grande cervello semplicemente memorizzare le cose. Dato che ci viene insegnato così abilmente a scuola, non è sempre utile imparare la logica complicata, a volte possiamo semplicemente ricordare ciò che abbiamo visto o ricordare qualcosa di simile. Quando è iniziata la seconda guerra mondiale? beh… è stata colpita dalla prima guerra mondiale, crisi economiche, gente arrabbiata, ecc… che era intorno al 1917.. quindi diciamo 1928. Forse è meglio memorizzare la data effettiva.

Come puoi immaginare, questo non va bene per il Machine Learning. Se avessimo bisogno di risposte a domande per le quali avevamo già risposte, non avremmo bisogno di questo campo follemente complicato. Abbiamo bisogno di un algoritmo intelligente perché non possiamo memorizzare tutto. Ci serve per fare considerazioni su inferenze dal vivo, ci serve per pensare. Un termine generale per le tecniche utilizzate per far sì che l’algoritmo apprenda, ma non memorizzi, è chiamato regolarizzazione. Di queste tecniche di regolarizzazione, una comunemente utilizzata è l’abbandono.

Ritirarsi
Cos’è l’abbandono? una tecnica piuttosto semplice (per fortuna ancora una volta). Ricordi che abbiamo detto che i livelli completamente connessi sono completamente connessi? beh, l’abbandono scuote questa logica. La tecnica del dropout consiste nel portare la “forza della connessione” a 0, il che significa che non avrà alcun effetto. La saldatura “a” diventa completamente inutile per il comandante 1 poiché il suo ingresso viene impostato su 0. Nessuna risposta, né positiva, né negativa. Su ogni livello in cui aggiungiamo il dropout, scegliamo casualmente un numero di neuroni (configurato dallo sviluppatore) e portiamo a 0 la loro connessione con gli altri neuroni. Ogni volta il comandante è costretto a ignorare diversi soldati, quindi non essendo in grado di memorizzarne nessuno come forse non lo faranno la prossima volta.

Torniamo ai Transformers!
Ora disponiamo di tutti gli elementi necessari per comprendere cosa accade nello specifico nel livello Feed Forward. Ora sarà molto semplice.

Questo livello fa semplicemente 3 cose:
1. Calcolo lineare in termini di posizione: ogni posizione nel testo (rappresentata come vettori) viene fatta passare attraverso un livello lineare.
2. Viene eseguito un calcolo ReLU sull’output del calcolo lineare.
3. Viene eseguito un altro calcolo lineare sull’output della ReLU.
4. Infine, aggiungiamo all’output del livello 3.

Boom. Questo è tutto. Se hai esperienza con il deep learning, questa sezione probabilmente è stata molto semplice per te. Se non lo sei, potresti aver faticato un po’, ma sei arrivato a comprendere un elemento estremamente importante e commovente dell’apprendimento profondo.

Nella prossima parte parleremo del Decoder! Prossimamente in una città vicino a te.

Fonte: towardsdatascience.com

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *