Meta AI intelligenza artificiale Facebook

Meta AI intelligenza artificiale Facebook

Quando si parla di Meta AI intelligenza artificiale Facebook si parla dell’architettura LLaMA (Large Language Model Meta AI). Per comprenderla è fondamentale basarsi sulla conoscenza di base del modello Vanilla Transformer.

Per garantire una comprensione completa di LLaMA, consigliamo di rivedere prima i concetti di Vanilla Transformer. Questo modello di apprendimento si basa sui concetti essenziali come l’auto-attenzione, l’attenzione multi-testa, la codifica posizionale. Una solida comprensione di questi concetti fornirà un quadro prezioso per apprezzare i miglioramenti e le nuove funzionalità introdotte da LLaMA.

Confronto tra Transformer e LLaMAMeta AI intelligenza artificiale Facebook


In LLaMA, utilizziamo solo la parte decoder del Vanilla Transformer poiché è un Large Language Model addestrato sul prossimo compito di previsione del token. Pertanto, abbiamo bisogno solo dell’auto-attenzione per prevedere il token successivo. A differenza del Vanilla Transformer, che utilizza la codifica posizionale direttamente dopo gli embedding di input, LLaMA incorpora la normalizzazione RMS in questa fase.
Nel Vanilla Transformer, la normalizzazione avviene dopo ogni blocco, ma in LLaMA, la normalizzazione viene applicata in anticipo. Dopo la normalizzazione, calcoliamo le matrici Q (Query), K (Key) e V (Value) per l’auto-attenzione . La codifica posizionale in LLaMA è stata sostituita da Rotary Positional Encodings , che vengono applicate solo alle matrici Q e K.
Inoltre, il meccanismo di auto-attenzione di LLaMA utilizza KV Cache e Grouped Multi-Query Attention per migliorare le prestazioni e l’efficienza. Nel livello Feed Forward invece di ReLU, viene utilizzato SwiGLU .

Confronto tra LLaMA 1 e LLaMA 2Meta AI intelligenza artificiale Facebook


LLaMA 1 è stato rilasciato a febbraio 2023, con quattro versioni con parametri 6.7B, 13B, 32.5B e 65.2B . La dimensione indica la dimensione degli embedding. Inoltre, ogni modello specifica il numero di teste di attenzione, il numero di livelli, il tasso di apprendimento, la dimensione del batch e il numero di token su cui sono stati addestrati.
In LLaMA 2, la maggior parte dei parametri del modello è stata raddoppiata . Anche la lunghezza del contesto, che si riferisce alla lunghezza della sequenza, è stata estesa. La colonna GQA indica quali modelli utilizzano Grouped Query Attention .

Incorporamenti
Simile al Transformer, LLaMA utilizza la codifica a coppie di byte (BPE) per la tokenizzazione anziché la tokenizzazione basata sullo spazio. Ogni token è mappato a un ID univoco all’interno del vocabolario. Questi ID di input vengono quindi trasformati in vettori di dimensione 4096 (rispetto a 512 nel Transformer). Questi embedding sono parametri apprendibili.

Norma RMS


L’immagine sopra mostra la matematica dietro nn.Linear(in_features=3, out_features=6, bias=True. Ciò creerà la matrice W e b. Se inseriamo X (6,3) e inseriamo O (6,4). Il vettore di bias verrà trasmesso a ogni riga nella matrice XWᵀ . Dopo di che applichiamo una funzione di attivazione su ogni elemento della matrice O.
L’output di un neurone per un dato elemento di dati dipende dalle caratteristiche dei dati di input e dai parametri del neurone. Possiamo considerare l’input di un neurone come l’output del livello precedente. Se il livello precedente cambia drasticamente il suo output dopo che i suoi pesi sono stati aggiornati a causa della discesa del gradiente, il livello successivo riceverà input significativamente alterati. Di conseguenza, il livello successivo sarà costretto a riaggiustare drasticamente i suoi pesi nel passaggio successivo della discesa del gradiente.

Il fenomeno in cui le distribuzioni dei nodi interni (neuroni) in una rete neurale cambiano è noto come spostamento di covariata interna . Questo spostamento è indesiderato perché rallenta il processo di addestramento, poiché i neuroni devono modificare drasticamente il loro peso a causa di cambiamenti significativi negli output degli strati precedenti.


Ogni elemento viene aggiornato con il suo valore normalizzato, trasformandolo in una distribuzione normale con una media di 0 e una varianza di 1. I parametri gamma e beta sono parametri apprendibili che consentono al modello di regolare la scala e la traduzione di ogni caratteristica in base ai requisiti della funzione di perdita.
Con la normalizzazione batch , normalizziamo per colonne (caratteristiche).
Con la normalizzazione layer , normalizziamo per righe (elementi di dati).


NOTA che proprio come la normalizzazione dei layer abbiamo anche un parametro apprendibile gamma (g) che viene moltiplicato per i valori di normalizzazione.
RMS richiede meno calcoli rispetto a Layer Norm.

Codifiche posizionali rotatorie


Le codifiche posizionali assolute sono vettori fissi aggiunti all’incorporamento di un token per rappresentare la sua posizione assoluta in una frase, gestendo un token alla volta. Questo può essere paragonato a una coppia (latitudine, longitudine) su una mappa, dove ogni punto sulla Terra ha una coppia univoca.
Le codifiche posizionali relative , d’altro canto, gestiscono due token alla volta e vengono utilizzate per calcolare l’attenzione. Poiché il meccanismo dell’attenzione cattura l'”intensità” della relazione tra due parole, le codifiche posizionali relative informano il meccanismo dell’attenzione sulla distanza tra le due parole coinvolte. Dati due token, viene creato un vettore che rappresenta la loro distanza. Le codifiche posizionali relative sono state introdotte in questo articolo . Possiamo vedere nella formula che stiamo aggiungendo la distanza ‘a’ tra i e j .

Rotatory Positional Embeddings : il prodotto scalare utilizzato nel meccanismo di attenzione è un tipo di prodotto scalare, che può essere pensato come una generalizzazione del prodotto scalare.
Possiamo trovare un prodotto scalare tra i due vettori Q e K utilizzati nel meccanismo di attenzione che dipenda solo dai due vettori e dalla distanza relativa dei token che rappresentano?


Nell’immagine m e n sono la posizione della prima e della seconda parola nella frase. Possiamo definire una funzione g come la seguente che dipende solo dai due vettori di incorporamento Q e K e dalla loro distanza relativa .


Prendiamo i vettori Q e K, li moltiplichiamo per W (pesi) e li convertiamo in numeri complessi. Quindi, se calcoliamo il vettore g, dipenderà solo dalla distanza dei due vettori (mn) . Ora, per applicare questo metodo alle matrici, useremo la formula di Eulero .


La prima matrice nell’espressione soprastante indica la rotazione , se vogliamo ruotare un vettore di un angolo di θ, possiamo moltiplicarlo per questa matrice. Quindi i token sono ora ruotati, se due token sono simili avranno una rotazione simile. Quindi è chiamato Rotatory Positional Embeddings .


Per calcolare gli embedding posizionali rotatori usando PyTorch dobbiamo creare una matrice come mostrato sopra. Poiché questa matrice è sparsa , non è conveniente usarla a causa degli elevati requisiti computazionali.

Quindi gli autori hanno proposto un’altra forma che è conveniente. Dato un token con vettore di incorporamento x e la posizione m del token all’interno della frase, ecco come calcoliamo gli incorporamenti di posizione per il token.


Prendiamo il vettore token come X e lo moltiplichiamo elemento per elemento con la matrice cos e poi aggiungiamo lo stesso vettore con posizioni e segno modificati. Quindi nella seconda posizione abbiamo x ₂ con segno negativo e nella prima posizione abbiamo x ₁ con segno positivo . E poi lo moltiplichiamo con la matrice seno .

Un altro aspetto interessante è il decadimento a lungo termine . Gli autori hanno calcolato un limite superiore per il prodotto interno variando la distanza tra due token e hanno dimostrato che diminuisce all’aumentare della distanza relativa. Ciò significa che l’“intensità” della relazione tra due token codificati con incorporamenti posizionali rotanti sarà numericamente inferiore all’aumentare della distanza tra di essi.


Gli embedding di posizione rotativa vengono applicati solo ai vettori query e key, non ai valori. Questi embedding vengono applicati dopo che i vettori Q e K sono stati moltiplicati per la matrice Q nel meccanismo di attenzione, mentre nel trasformatore vanilla vengono applicati prima di questa moltiplicazione.

Self-Attention – Meta AI intelligenza artificiale Facebook
LLaMA viene addestrato sul prossimo compito di previsione del token, il che significa che data una sequenza, cerca di prevedere il prossimo token più probabile. Durante l’addestramento, l’input al modello è strutturato in modo tale che il primo token sia un token di inizio frase (SOS) e il target/output è strutturato con un token di fine frase (EOS) aggiunto alla fine. Questa configurazione consente al modello di mappare ogni token di input al token di output corrispondente, assicurando che il primo token della sequenza di input si allinei con il primo token della sequenza di output.
Tuttavia, questo approccio pone un problema durante l’inferenza. Durante la generazione delle previsioni, siamo interessati solo all’ultimo token emesso dal modello, poiché abbiamo già i token precedenti. Tuttavia, il modello ha bisogno di accedere a tutti i token precedenti per effettuare le sue previsioni, poiché formano il contesto o il prompt per ogni passaggio di generazione del token.


Ad esempio, per prevedere il token “cane”, il modello deve vedere tutti i token di input. Ciò diventa inefficiente perché, come modello sequenza-a-sequenza, produrrà l’intera sequenza, anche se ci interessa solo l’ultimo token. Ciò porta a calcoli non necessari, poiché il modello genera token che abbiamo già da precedenti intervalli temporali.

Cache KV
Per risolvere il problema di cui sopra, gli autori hanno implementato il metodo della cache KV. La cache KV riduce la ridondanza computazionale durante l’inferenza memorizzando e riutilizzando i calcoli per i token incontrati in precedenza.


Il diagramma illustra come funziona l’auto-attenzione nel prossimo compito di previsione del token. La matrice Q (query) è composta da vettori che rappresentano ciascuno degli n token nella sequenza. La matrice Kᵀ è la trasposta della matrice Q. Moltiplicando Q per Kᵀ si ottiene una matrice (n, n) , che viene poi moltiplicata per la matrice V per calcolare i punteggi di attenzione . Questi punteggi vengono poi passati attraverso gli strati lineari del Transformer. Gli strati lineari producono logit , che vengono poi immessi nella funzione softmax . Softmax aiuta a determinare il token dal vocabolario che il modello prevede come token successivo. Immergiamoci in questo passaggio passo dopo passo.


Nel primo passaggio di inferenza, abbiamo solo un token (SOS), il che significa che la matrice Q è di dimensione (1, 4096). Di conseguenza, otteniamo il primo token della matrice dell’attenzione (The). Nel secondo passaggio di inferenza, abbiamo due token di input ([SOS] The) e otteniamo due token di output (The quick).


Viene mostrata un’immagine del quarto passaggio di inferenza, in cui possiamo osservare che abbiamo già calcolato i prodotti scalari del triangolo inferiore (regione viola chiaro) della matrice QKᵀ. Tuttavia, in ogni passaggio, dobbiamo ricalcolare questi prodotti scalari. Poiché il modello è causale, abbiamo bisogno solo dell’attenzione di un token con i token precedenti, non con i suoi successori. Pertanto, abbiamo bisogno solo dell’ultima riga della matrice QKᵀ.


Utilizzando la cache KV, memorizziamo le matrici K (chiave) e V (valore). Quando viene incontrato un nuovo token, lo aggiungiamo alle matrici K e V memorizzate nella cache, mentre la matrice Q (query) è composta solo dall’output del passaggio precedente. Ciò significa che nel secondo passaggio di inferenza, non aggiungiamo il primo token alla matrice Q; al contrario, sostituiamo il primo token con il token successivo. È importante notare che non prendiamo l’output del meccanismo di attenzione come input per il passaggio successivo. Al contrario, prendiamo il token a cui il meccanismo di attenzione è associato come input per il passaggio successivo. Questo approccio riduce i calcoli ridondanti e migliora l’efficienza durante l’inferenza.

Attenzione multi-query
Le GPU eccellono nell’eseguire calcoli rapidamente, ma non sono altrettanto efficienti quando si tratta di trasferire dati dalla loro memoria. Ciò significa che il collo di bottiglia nella velocità di elaborazione spesso non è il numero di operazioni che eseguiamo, ma piuttosto la quantità di trasferimento dati richiesta da queste operazioni. La dimensione e la quantità di tensori coinvolti nei calcoli influenzano pesantemente questo trasferimento dati. Pertanto, il nostro obiettivo dovrebbe essere non solo ottimizzare il numero di operazioni che eseguiamo, ma anche ridurre al minimo gli accessi e i trasferimenti di memoria.

Nel documento su Multi-Query Attention , l’autore calcola sia il numero di operazioni aritmetiche eseguite sia la memoria totale coinvolta in queste operazioni. Scoprono che il numero di operazioni aritmetiche eseguite è O(bnd²) , dove b è la dimensione del batch, n è la lunghezza della sequenza e d è la dimensione del vettore di incorporamento.
La memoria totale coinvolta nell’operazione è data dalla somma di tutti i tensori coinvolti nei calcoli, inclusi quelli derivati, risultante in O(bnd + bn² + d²) .
Il rapporto tra la memoria totale e il numero di operazioni aritmetiche è
O(1/k + 1/bn) . Poiché questo rapporto è molto più piccolo di uno, indica che il numero di accessi alla memoria è significativamente inferiore al numero di operazioni aritmetiche. Pertanto, l’accesso alla memoria non è il collo di bottiglia in questo caso.

Quando introduciamo il metodo cache KV, il numero di operazioni aritmetiche eseguite rimane O(bnd²) . Tuttavia, la memoria totale coinvolta nell’operazione cambia in O(bn²d + nd²) . Il rapporto tra memoria totale e numero di operazioni aritmetiche diventa quindi
O(n/d + 1/b) .
Se la lunghezza della sequenza è vicina alla dimensione del vettore di incorporamento (n≈d) o la dimensione del batch è vicina a 1 (d≈1) , questo rapporto si avvicina a 1. In tali casi, l’accesso alla memoria diventa il collo di bottiglia dell’algoritmo. In genere, la dimensione del batch è maggiore di 1, quindi questo non è un problema significativo. Tuttavia, per il termine n/d , dobbiamo ridurre la lunghezza della sequenza per mitigare il collo di bottiglia.

Per risolvere questo problema, introduciamo l’attenzione multi-query con cache KV. Questo approccio rimuove la dimensione h dalle matrici K e V mantenendola per Q, il che significa che tutte le diverse teste di query condividono le stesse chiavi e valori.
Con questo metodo, il numero di operazioni aritmetiche eseguite rimane O(bnd²) . Tuttavia, la memoria totale coinvolta nell’operazione cambia in O(bnd + bn²k + nd²) e il rapporto diventa O(1/d + n/dh + 1/b) . Rispetto all’approccio precedente, abbiamo ridotto il termine n/d di un fattore h. Questa ottimizzazione fornisce significativi guadagni in termini di prestazioni degradando solo leggermente la qualità del modello.

Attenzione multi-query raggruppata


Abbiamo più teste per le query ma solo una testa per le chiavi e i valori. Con l’attenzione multi-testa raggruppata, dividiamo le query in gruppi e ogni gruppo ha una testa diversa per K e V. Ciò riduce la quantità di elaborazione richiesta e, sebbene influisca leggermente sulla qualità, la diminuzione è minima.

Livello di feed forward
La funzione di attivazione negli strati feed forward è sostituita dalla funzione di attivazione SwiGLU . L’autore ha confrontato le prestazioni di un modello di trasformatore utilizzando diverse funzioni di attivazione nello strato feed forward dell’architettura del trasformatore. In questa architettura modificata, ci sono tre matrici invece delle due originali. Per garantire un confronto equo, l’autore ha ridotto le dimensioni in modo che il numero totale di parametri rimanesse lo stesso.

Riepilogo Meta AI intelligenza artificiale Facebook
Questo articolo ha discusso il modello LLaMA (Meta AI intelligenza artificiale Facebook), che migliora l’architettura del trasformatore per la previsione del token successivo. Le caratteristiche principali includono Rotary Positional Embeddings, il metodo cache KV e Multi-Query Attention, che ottimizzano efficienza e prestazioni. Vengono evidenziate le differenze nella normalizzazione, nelle funzioni di attivazione e nell’uso di SwiGLU, sottolineando l’importanza di queste caratteristiche nel migliorare la velocità di training e gestire le dipendenze a lungo termine.

(fonte)

Innovaformazione, scuola informatica specialistica promuove la cultura dell’Intelligenza Artificiale applicata in maniera consapevole. Seguiamo costantemente il mercato ed aggiorniamo l’offerta formativa costantemente. Trovate l’elenco corsi per aziende sul nostro sito QUI.

INFO: info@innovaformazione.net – Tel. 3471012275 (Dario Carrassi)

Ti potrebbe interessare

Articoli correlati