Grandi modelli linguistici, ALBERT – Un BERT leggero per l’apprendimento auto-supervisionato
Grandi modelli linguistici, ALBERT - Un BERT agile per l'apprendimento auto-supervisionato
Comprendere le tecniche essenziali dietro le scelte di architettura BERT per la produzione di un modello compatto ed efficiente
Introduzione
Negli ultimi anni, l’evoluzione dei grandi modelli linguistici è aumentata vertiginosamente. BERT è diventato uno dei modelli più popolari ed efficienti che consente di risolvere una vasta gamma di compiti di NLP con alta precisione. Dopo BERT, sono successivamente apparsi altri modelli che hanno dimostrato risultati eccezionali.
L’ovvia tendenza che è diventata facile osservare è il fatto che nel tempo i grandi modelli linguistici (LLM) tendono a diventare sempre più complessi, aumentando esponenzialmente il numero di parametri e dati su cui vengono addestrati. La ricerca nell’apprendimento profondo ha mostrato che tali tecniche di solito portano a migliori risultati. Purtroppo, il mondo dell’apprendimento automatico ha già affrontato diversi problemi riguardanti i LLM e la scalabilità è diventata il principale ostacolo in termini di addestramento efficace, memorizzazione e utilizzo.
Di conseguenza, per affrontare i problemi di scalabilità, sono stati sviluppati di recente nuovi LLM. In questo articolo, discuteremo di ALBERT, che è stato inventato nel 2020 con l’obiettivo di ridurre significativamente i parametri di BERT.
- La storia dei LLM open-source i primi giorni (prima parte)
- Implementare un Encoder Transformer da zero con JAX e Haiku 🤖
- Svelando il mistero della matrice di rotazione
ALBERT
Per comprendere i meccanismi sottostanti ad ALBERT, faremo riferimento al suo documento ufficiale. Per la maggior parte, ALBERT deriva la stessa architettura di BERT. Ci sono tre differenze principali nella scelta dell’architettura del modello che verranno affrontate e spiegate di seguito.
Le procedure di addestramento e fine-tuning in ALBERT sono analoghe a quelle in BERT. Come BERT, ALBERT viene preaddestrato su Wikipedia inglese (2500M parole) e BookCorpus (800M parole).
1. Incorporazione di Parametro Fattorizzato
Quando una sequenza di input viene tokenizzata, ogni token viene quindi mappato su una delle incorporazioni del vocabolario. Queste incorporazioni vengono utilizzate per l’input a BERT.
Sia V la dimensione del vocabolario (il numero totale di incorporazioni possibili) e H la dimensionalità dell’incorporazione. Quindi, per ciascuna delle V incorporazioni, è necessario memorizzare H valori che risultano in una matrice di incorporazione V x H. Come si scopre nella pratica, questa matrice di solito ha dimensioni enormi e richiede molta memoria per memorizzarla. Ma il problema più generale è che nella maggior parte dei casi gli elementi di una matrice di incorporazione sono addestrabili e richiedono molte risorse affinché il modello apprenda i parametri appropriati.
Ad esempio, prendiamo il modello di base di BERT: ha un vocabolario di 30.000 token, ognuno rappresentato da un’incorporazione di 768 componenti. In totale, ciò comporta 23 milioni di pesi da memorizzare e addestrare. Per modelli più grandi, questo numero è ancora più grande.
Questo problema può essere evitato utilizzando la fattorizzazione della matrice. La matrice di vocabolario originale V x H può essere decomposta in una coppia di matrici più piccole delle dimensioni V x E e E x H.
Di conseguenza, anziché utilizzare O(V x H) parametri, la decomposizione comporta solo O(V x E + E x H) pesi. Ovviamente, questo metodo è efficace quando H >> E.
Un altro ottimo aspetto della fattorizzazione della matrice è il fatto che non cambia il processo di ricerca per ottenere le incorporazioni del token: ogni riga della matrice di decomposizione sinistra V x E mappa un token nella sua incorporazione corrispondente nello stesso modo semplice in cui era nella matrice originale V x H. In questo modo, la dimensionalità delle incorporazioni diminuisce da H a E.
Tuttavia, nel caso delle matrici decomposte, per ottenere l’input per BERT, le incorporazioni mappate devono quindi essere proiettate nello spazio nascosto di BERT: ciò viene fatto moltiplicando una riga corrispondente della matrice sinistra per le colonne della matrice destra.
2. Condivisione dei Parametri tra le Varie Strati
Uno dei modi per ridurre i parametri del modello è renderli condivisibili. Ciò significa che tutti condividono gli stessi valori. Per la maggior parte, ciò riduce semplicemente la memoria richiesta per memorizzare i pesi. Tuttavia, gli algoritmi standard come la retropropagazione o l’infere
- Fenomeno simile si verifica con l’aumento della dimensione dello strato nascosto. Aumentarla con valori superiori a 4096 degrada le prestazioni del modello.
Conclusioni
A prima vista, ALBERT sembra una scelta preferibile rispetto ai modelli BERT originali poiché li supera nelle attività subordinate. Tuttavia, ALBERT richiede molti più calcoli a causa delle sue strutture più lunghe. Un buon esempio di questa problematica è ALBERT xxlarge, che ha 235M di parametri e 12 strati di codificatori. La maggior parte di questi 235M di pesi appartiene a un singolo blocco del trasformatore. I pesi vengono quindi condivisi per ciascuno dei 12 strati. Pertanto, durante l’addestramento o l’inferenza, l’algoritmo deve essere eseguito su oltre 2 miliardi di parametri!
A causa di queste ragioni, ALBERT si adatta meglio a problemi in cui la velocità può essere sacrificata per ottenere una maggiore precisione. Alla fine, il dominio NLP non si ferma mai ed è in costante progresso verso nuove tecniche di ottimizzazione. È molto probabile che il tasso di velocità in ALBERT venga migliorato in un prossimo futuro. Gli autori dell’articolo hanno già menzionato metodi come attenzione sparssa e attenzione a blocchi come algoritmi potenziali per l’accelerazione di ALBERT.
Risorse
Tutte le immagini, salvo diversa indicazione, sono dell’autore