I Large Language Models (LLM) hanno conquistato un posto unico nel mondo della tecnologia, offrendo capacità senza precedenti nella comprensione e nella generazione di testi che sembrano scritti da esseri umani. Questa straordinaria potenza dei LLM deriva principalmente dalle loro enormi dimensioni, spesso con miliardi di parametri. Tuttavia, mentre queste dimensioni imponenti ne migliorano le prestazioni, presentano anche sfide significative, soprattutto quando si tratta di adattarli a compiti o contesti specifici. Le tradizionali tecniche di messa a punto dei LLM, che coinvolgono la regolazione di tutti i parametri, richiedono enormi risorse computazionali e finanziarie, limitando la loro diffusione in applicazioni reali.

In un articolo precedente, abbiamo esaminato in dettaglio le varie metodologie di messa a punto dei Large Language Models (LLM) per adattarli a scopi specifici. Abbiamo esplorato metodi come la messa a punto basata su istruzioni, la messa a punto per singole attività e la messa a punto efficiente dei parametri (PEFT), ognuna con il suo approccio unico all’ottimizzazione dei LLM per compiti specifici. Nel cuore di queste discussioni c’erano l’architettura del trasformatore, che costituisce la base dei LLM, e le sfide legate alla gestione di un gran numero di parametri durante la messa a punto.

L’immagine qui sopra rappresenta la scala di vari modelli linguistici di grandi dimensioni, ordinati in base al numero di parametri. In particolare, ci sono modelli come PaLM, BLOOM, e molti altri.

Da quest’anno in poi, abbiamo assistito a progressi che hanno portato a modelli ancora più grandi. Tuttavia, l’ottimizzazione di tali modelli open source su hardware standard è diventata un’impresa impossibile senza tecniche di ottimizzazione specializzate.

È qui che entra in gioco la “Low-Rank Adaptation” (LoRA), introdotta da Microsoft in un documento recente. Lo scopo principale di LoRA è affrontare queste sfide e rendere i LLM più accessibili e adattabili.

Il cuore di LoRA sta nella sua approccio all’adattamento dei modelli senza la necessità di complesse riqualificazioni dell’intero modello. A differenza della messa a punto tradizionale, che coinvolge ogni parametro, LoRA adotta un approccio più intelligente. Congela i pesi del modello preaddestrato e introduce matrici addestrabili a basso rango in ciascun livello dell’architettura del Transformer. Questo approccio riduce notevolmente il numero di parametri addestrabili, rendendo il processo di adattamento più efficiente.

Riflettendo sul percorso dell’ottimizzazione dei LLM, possiamo identificare diverse strategie utilizzate dagli esperti nel corso degli anni. Inizialmente, c’era l’attenzione sulla messa a punto completa dei modelli preaddestrati, che richiedeva la modifica completa dei parametri del modello per adattarli a scopi specifici. Tuttavia, con l’aumento delle dimensioni e della complessità dei modelli, questo approccio richiedeva risorse computazionali sempre maggiori.

La strategia successiva che ha guadagnato terreno è stata la messa a punto di sottoinsiemi, dove solo una parte dei parametri del modello veniva addestrata, riducendo il carico computazionale. Anche se questa strategia aveva i suoi vantaggi, non riusciva ancora a tenere il passo con la crescita delle dimensioni dei LLM.

Con il tempo, gli esperti hanno cercato strade più efficienti, e la messa a punto completa è emersa come un approccio rigoroso ma gratificante.

Il rango di una matrice ci indica il numero di colonne o righe uniche presenti.

Matrice a rango completo: il suo rango corrisponde al numero minore tra il numero di colonne e righe. Matrice a basso rango: ha un rango significativamente inferiore sia al numero di colonne che al numero di righe, catturando meno informazioni. Ora, i grandi modelli hanno una vasta comprensione del loro dominio, come il linguaggio nei modelli linguistici. Ma spesso, per adattarli a compiti specifici, è sufficiente evidenziare solo una piccola parte di questa comprensione. Ed è qui che LoRA eccelle. Suggerisce che la matrice che rappresenta questi aggiornamenti dei pesi può essere a basso rango, catturando quindi meno informazioni.

LoRA limita in modo intelligente il rango di questa matrice di aggiornamento suddividendola in due matrici a rango più basso. Invece di modificare l’intera matrice dei pesi, ne cambia solo una parte, rendendo la messa a punto più efficiente.

LoRA aiuta a ridurre al minimo il carico computazionale nelle reti neurali concentrandosi su specifiche matrici di peso. Nell’architettura Transformer, alcune matrici di peso sono legate al meccanismo di autoattenzione, come Wq, Wk, Wv e Wo, oltre ad altre due nel modulo Multi-Layer Perceptron (MLP).

Esaminiamo i calcoli dietro LoRA: Matrice dei pesi preaddestrata W0: Iniziamo con una matrice dei pesi preaddestrata W0 di dimensioni d × k, con d righe e k colonne. Decomposizione a basso rango: Invece di aggiornare direttamente l’intera matrice W0, il metodo propone una decomposizione a basso rango. L’aggiornamento ΔW a W0 può essere rappresentato come il prodotto di due matrici: B e A. B ha dimensioni d × r A ha dimensioni r × k L’elemento chiave qui è che il rango r è molto più piccolo sia di d che di k, il che rende la rappresentazione computazionalmente più efficiente. Addestramento: Durante l’addestramento, W0 rimane invariato, questo è noto come “congelamento” dei pesi. D’altra parte, A e B sono parametri addestrabili. Ciò significa che durante l’addestramento, vengono apportati aggiustamenti alle matrici A e B per migliorare le prestazioni del modello. Moltiplicazione e somma: Sia W0 che l’aggiornamento ΔW (che è il prodotto di B e A) vengono moltiplicati per lo stesso input (indicato come x). I risultati di queste moltiplicazioni vengono quindi sommati. Questo processo è riassunto nell’equazione: h = W0x + ΔWx = W0x + BAx. Qui, h rappresenta l’output finale dopo aver applicato gli aggiornamenti all’input x. In breve, questo metodo consente un modo più efficiente per aggiornare una matrice di pesi di grandi dimensioni rappresentando gli aggiornamenti utilizzando una scomposizione a basso rango, il che può essere vantaggioso in termini di efficienza computazionale e utilizzo della memoria.

Inizializzazione e ridimensionamento: Nel processo di addestramento dei modelli, l’inizializzazione dei parametri può influire significativamente sull’efficienza e sull’efficacia del processo di apprendimento. Nel contesto dell’aggiornamento della matrice dei pesi utilizzando A e B:

Inizializzazione delle matrici A e B:

  • Matrice A: questa matrice viene inizializzata con valori casuali gaussiani, noti anche come distribuzione normale. L’idea dietro l’uso dell’inizializzazione gaussiana è quella di rompere la simmetria tra i neuroni, in modo che neuroni diversi nello stesso strato possano apprendere caratteristiche diverse quando hanno pesi iniziali diversi.
  • Matrice B: questa matrice viene inizializzata con zeri. Ciò garantisce che l’aggiornamento ΔW = BA parta da zero all’inizio dell’allenamento, evitando cambiamenti improvvisi nel comportamento del modello e consentendo un adattamento graduale man mano che B apprende i valori appropriati durante l’addestramento.

Ridimensionamento dell’output di ΔW: Dopo aver calcolato l’aggiornamento ΔW, il suo output viene ridimensionato da un fattore α, dove α è una costante. Il ridimensionamento controlla l’entità degli aggiornamenti ed è particolarmente importante quando il rango r cambia. Ad esempio, se si decide di aumentare il rango per ottenere maggiore precisione (a scapito della potenza computazionale), il ridimensionamento assicura che non sia necessario regolare molti altri iperparametri nel processo, fornendo stabilità al modello.

Impatto pratico di LoRA LoRA ha dimostrato di essere efficace nell’adattamento di LLM a stili artistici specifici, come dimostrato nell’adattamento di un modello per imitare lo stile artistico di Greg Rutkowski, utilizzando GPT-3 175B come esempio. Avere modelli individuali ottimizzati con 175B di parametri ciascuno è un’operazione costosa. Tuttavia, grazie a LoRA, il numero di parametri addestrabili diminuisce drasticamente e l’uso della memoria GPU si riduce notevolmente.

La metodologia LoRA rappresenta un passo avanti significativo nell’accessibilità dei LLM e sottolinea il potenziale per collegare i progressi teorici all’applicazione pratica nell’ambito dell’intelligenza artificiale. Riducendo le sfide computazionali e promuovendo un processo di adattamento più efficiente, LoRA è destinata a svolgere un ruolo fondamentale nell’adozione più ampia dei LLM in scenari del mondo reale.

QLoRA (quantizzato) Sebbene LoRA rappresenti un grande progresso nella riduzione del consumo di memoria, richiede ancora hardware GPU di fascia alta per l’addestramento. Qui entra in gioco QLoRA, o Quantized LoRA, che fonde LoRA con la quantizzazione per un approccio più intelligente.

Normalmente, i parametri dei pesi vengono memorizzati in formato a 32 bit (FP32), il che significa che ogni elemento della matrice occupa 32 bit di spazio. Immagina se potessimo comprimere le stesse informazioni in soli 8 o addirittura 4 bit. Questo è il concetto centrale di QLoRA. La quantizzazione si riferisce al processo di mappatura di valori continui infiniti su un insieme più piccolo di valori discreti finiti. Nel contesto dei LLM, si riferisce al processo di conversione dei pesi del modello da tipi di dati ad alta precisione a tipi di dati a bassa precisione.

Ecco una spiegazione più semplice di QLoRA: Quantizzazione iniziale: innanzitutto, il Large Language Model (LLM) viene quantizzato a 4 bit, riducendo notevolmente l’occupazione di memoria. Addestramento LoRA: quindi, viene effettuato l’addestramento LoRA con la precisione standard a 32 bit (FP32). Potresti chiederti perché tornare a 32 bit per l’addestramento dopo essere stati ridotti a 4 bit. La ragione è che, per addestrare efficacemente gli adattatori LoRA in FP32, è necessario che i pesi del modello ritornino a FP32. Questa operazione di conversione avanti e indietro è gestita in modo intelligente e graduale per evitare sovraccarichi sulla memoria GPU.

LoRA trova applicazione pratica nella libreria PEFT (Hugging Face Parameter Efficient Fine-Tuning), semplificando il processo. Per coloro che desiderano utilizzare QLoRA, è accessibile attraverso una combinazione di librerie come bitsandbytes e PEFT. Inoltre, la libreria HuggingFace Transformer Reinforcement Learning (TRL) facilita la messa a punto supervisionata con supporto integrato per LoRA. Queste tre librerie forniscono il toolkit essenziale per mettere a punto un modello preaddestrato selezionato, consentendo la generazione di descrizioni di prodotti persuasive e coerenti quando necessario con istruzioni specifiche sugli attributi.

Dopo la messa a punto con QLoRA, i pesi devono essere nuovamente convertiti in un formato ad alta precisione, il che potrebbe comportare una leggera perdita di accuratezza ma garantisce l’ottimizzazione per accelerare il processo.

Una soluzione proposta è il “Quantized and Low-Rank Adaptation” (QA-LoRA), che cerca di combinare i vantaggi della quantizzazione e dell’adattamento a basso rango mantenendo un processo efficiente e un modello efficace per i compiti desiderati.

In conclusione, in questo articolo abbiamo esaminato le sfide legate alle enormi dimensioni dei parametri dei LLM e abbiamo esplorato le tradizionali pratiche di messa a punto e le relative sfide computazionali e finanziarie. LoRA si è rivelata una soluzione chiave, consentendo l’adattamento efficiente dei modelli senza la necessità di una completa riqualificazione, riducendo così il numero di parametri addestrabili e rendendo il processo di adattamento più conveniente.

Abbiamo anche accennato brevemente a Quantized LoRA (QLoRA), che combina la quantizzazione per ridurre l’occupazione di memoria senza compromettere l’addestramento, e alla nuova metodologia QA-LoRA che cerca di combinare i vantaggi di quantizzazione e adattamento a basso rango.

In sintesi, grazie a queste avanzate tecniche, ora abbiamo librerie solide che semplificano l’adozione e l’implementazione dei LLM in una varietà di scenari reali.

Di Fantasy