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'è 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 continuerà la frase come un articolo Wikipedia sulle lettere di motivazione. O peggio, genererà più risposte contraddittorie, come se il testo continuasse una FAQ.
Il fine-tuning è 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 più semplice: mostrare al modello coppie (domanda, risposta ideale) e addestrarlo a produrre quelle risposte.
È ciò 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. È complementare allo SFT, non un sostituto.
Dettaglio importante : dal 2024 il DPO (Direct Preference Optimization) ha ampiamente sostituito il PPO dell'RLHF classico per la fase di preferenze, soprattutto lato open source. Ma non lo ha fatto sparire: la ricetta standard è oggi una pila — SFT, poi ottimizzazione delle preferenze (DPO e le sue varianti), poi RL a ricompense verificabili (GRPO, reso popolare da DeepSeek-R1 a inizio 2025) per il ragionamento. Il dettaglio è nel capitolo 08.
Ma tutte queste fasi condividono un problema di costo: modificano tutti i parametri del modello. Per un modello da 70 miliardi di parametri, significa diversi giorni su un cluster di decine di GPU — decine di migliaia di dollari.
LoRA: addestrare lo 0,1% dei parametri
LoRA (Low-Rank Adaptation) è 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 — cioè 0,4%.
Il titolo annunciava 0,1%, e i due numeri sono entrambi giusti: 0,4% è il costo per matrice adattata. Poiché in genere si applica LoRA solo a una parte delle matrici del modello (spesso quelle dell'attenzione), il totale rapportato al modello intero ricade attorno allo 0,1%.
Gioca con il rango
Il rango r controlla l'espressività 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.
Perché funziona così 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 è 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 più 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 sé (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. È ciò 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 profondità le capacità 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 è oggi la tecnica di riferimento.
Framework come Hugging Face PEFT, Axolotl o Unsloth — diventato lo strumento più comune per LoRA/QLoRA su una sola GPU — ti permettono di lanciare un fine-tuning in poche righe di Python. La vera difficoltà non è tecnica: è costruire un dataset di qualità. Un buon fine-tuning comincia con 500 esempi scritti con cura — non con 10.000 esempi generati da ChatGPT.
Aggiornato il