Capitolo 14 · Fine-tuning · 9 min
Specializzare un modello senza riaddestrare tutto
LoRA, QLoRA, SFT. Come adattare un modello generalista a un dominio specifico addestrando lo 0,1% dei suoi parametri.
Cos'e esattamente il modello di base?
Quando GPT-4 o Claude escono dall'addestramento iniziale — miliardi di token di testo grezzo, predicendo la parola successiva — sanno molte cose. Ma non sanno come comportarsi.
Chiedi a un modello grezzo di scrivere una lettera di motivazione: probabilmente continuera la frase come un articolo Wikipedia sulle lettere di motivazione. O peggio, generera piu risposte contraddittorie, come se il testo continuasse una FAQ.
Il fine-tuning e il passaggio che trasforma questo modello grezzo in un assistente utilizzabile: utile, coerente e adatto a un dominio.
Due problemi, due soluzioni
Fine-tuning supervisionato (SFT)
La forma piu semplice: mostrare al modello coppie (domanda, risposta ideale) e addestrarlo a produrre quelle risposte.
E cio che OpenAI ha fatto per creare InstructGPT: umani hanno scritto risposte esemplari a migliaia di domande, e il modello ha imparato a imitarle. Risultato: un modello che "segue le istruzioni".
Il limite: costa caro in dati umani, e non dice al modello come confrontare due risposte.
RLHF (e DPO in pratica)
Ne abbiamo parlato nel capitolo 08. Il reinforcement learning da feedback umano impara le preferenze. E complementare allo SFT, non un sostituto.
Dettaglio importante : dal 2024, la maggior parte dei fine-tuning di preferenza si fa via DPO (Direct Preference Optimization) piuttosto che via il PPO classico dell'RLHF. E cio che trasforma un modello solo SFT in un modello allineato, senza il costo di compute dell'RL. Il dettaglio e nel capitolo 08.
Ma SFT e DPO/RLHF condividono un problema di costo: modificano tutti i parametri del modello. Per un modello da 70 miliardi di parametri, significa settimane di calcolo e migliaia di dollari di GPU.
LoRA: addestrare lo 0,1% dei parametri
LoRA (Low-Rank Adaptation) e una tecnica elegante: invece di modificare i pesi W del modello, aggiungiamo un aggiornamento ΔW scomposto in due piccole matrici:
W_adattato = W_base + ΔW dove ΔW = B × A
- A: matrice di rango r × dimensione (piccola)
- B: matrice dimensione × rango r (piccola)
- W_base: i pesi originali — congelati, non modificati
L'idea chiave: gli aggiornamenti dei pesi durante un fine-tuning hanno in pratica una struttura a basso rango. Non serve una matrice completa per catturare l'adattamento. Bastano due piccole matrici.
A rango r = 8, per un layer di dimensione 4.096: LoRA usa 65.536 parametri contro 16 milioni per il layer completo — cioe 0,4%.
Gioca con il rango
Il rango r controlla l'espressivita dell'aggiornamento. Osserva come ΔW cambia struttura quando fai variare r — e l'effetto sulle risposte del modello dopo il fine-tuning.
LoRA aggiunge due piccole matrici accanto ai pesi esistenti. Invece di modificare miliardi di parametri, se ne addestrano solo qualche milione — la maggior parte del modello rimane congelata e condivisa tra tutte le varianti fine-tunate.
Perche funziona cosi bene?
La scoperta sorprendente degli esperimenti LoRA: anche a rango molto basso (r = 4 o 8), le prestazioni dopo fine-tuning sono quasi identiche a un fine-tuning completo. La ragione intuitiva: lo spazio degli adattamenti utili e intrinsecamente di bassa dimensione.
In altre parole: per specializzare un modello su scrittura medica o codice Python, non serve modificare tutti i suoi neuroni. Bastano poche "direzioni" nello spazio dei pesi.
QLoRA: scendere ancora piu in basso
Se LoRA riduce il numero di parametri addestrati, QLoRA (Quantized LoRA) riduce anche la precisione numerica dei parametri congelati.
Il modello di base viene caricato in 4 bit (invece di 16 o 32), dividendo per 4 il consumo di memoria. Gli adattatori LoRA restano in 16 bit per la precisione del gradiente. Per la meccanica della quantization in se (FP32 → INT4 → INT2, cosa si perde a ogni livello), vedi il capitolo 18.
Risultato: fare fine-tuning di un modello da 70 miliardi di parametri su una sola GPU consumer diventa possibile. E cio che ha permesso l'esplosione dei modelli open-source specializzati nel 2023-2024.
La gerarchia degli adattamenti
Oggi i praticanti distinguono diversi livelli:
Prompting: nessuna modifica del modello. Alcuni esempi nel contesto. Rapido, costo zero, limitato.
RAG: collegare il modello a una base di conoscenza (capitolo 10). Nessuna modifica del modello.
Fine-tuning LoRA: adattare comportamento e stile su un dataset mirato. Poche ore su una GPU, qualche migliaio di esempi. Il giusto equilibrio per la maggior parte dei casi.
Fine-tuning completo: modificare tutti i parametri. Necessario per cambiare in profondita le capacita del modello (lingue rare, dominio molto specifico). Costoso.
Pre-addestramento: ripartire da zero o continuare l'addestramento su un nuovo corpus. Riservato ai lab con accesso a cluster di migliaia di GPU.
Cosa cambia per te
Se vuoi specializzare un modello per il tuo caso d'uso — il tuo tono editoriale, il tuo dominio, i tuoi formati di risposta — LoRA e oggi la tecnica di riferimento.
Framework come Hugging Face PEFT o Axolotl ti permettono di lanciare un fine-tuning LoRA in poche righe di Python. La vera difficolta non e tecnica: e costruire un dataset di qualita. Un buon fine-tuning comincia con 500 esempi scritti con cura — non con 10.000 esempi generati da ChatGPT.
Aggiornato il