Transfer learning e fine-tuning
Il transfer learning è il principio per cui un modello addestrato su un task generico (es. predire la parola successiva su miliardi di testi) può essere adattato a un compito specifico riutilizzando la conoscenza già acquisita. Il fine-tuning è la tecnica concreta con cui si realizza questo trasferimento: si prende un modello pre-addestrato e lo si ri-addestra su un dataset più piccolo e specializzato, aggiornandone i pesi.
Punti chiave
- Il fine-tuning adatta il comportamento di un modello (stile, tono, formato), non la sua conoscenza fattuale: per quella serve la RAG.
- La qualità del dataset è il fattore più critico: pochi esempi ben curati battono migliaia di esempi rumorosi.
- Le tecniche PEFT come LoRA e QLoRA rendono il fine-tuning accessibile anche su una singola GPU, abbattendo i costi.
- Prima di addestrare, verifica sempre se il prompt engineering basta: è più economico e reversibile.
- Misura con un evaluation set separato e monitora l'overfitting per ottenere risultati affidabili.
L'idea è nata nella Computer Vision (ImageNet come base per qualsiasi classificatore di immagini) e si è poi estesa al NLP con modelli come BERT, GPT e i moderni LLM. Il vantaggio fondamentale è il risparmio: invece di addestrare un modello da zero (milioni di dollari e settimane di GPU), si parte da una base solida e si adatta con poche ore e poche migliaia di esempi. Questo approccio democratizza l'AI, perché permette anche a piccole aziende e professionisti di ottenere modelli su misura senza budget da centro di ricerca.
Il fine-tuning non insegna nuova conoscenza fattuale al modello, ma ne modifica il comportamento: stile, formato, tono, capacità di seguire istruzioni specifiche e aderenza a un dominio.
Quando fare fine-tuning (e quando no)
La domanda più frequente è: "Meglio fine-tuning o RAG?". La risposta dipende dall'obiettivo:
| Obiettivo | Approccio consigliato |
|---|---|
| Accesso a dati aggiornati o proprietari | RAG |
| Citabilità e tracciabilità delle fonti | RAG |
| Adattare stile, tono, formato di risposta | Fine-tuning |
| Ridurre le hallucination su un dominio | RAG + Fine-tuning |
| Insegnare un task specifico (classificazione, estrazione) | Fine-tuning |
| Ridurre la latenza (no retrieval) | Fine-tuning |
In molti sistemi enterprise si adotta un approccio ibrido: fine-tuning per adattare il comportamento del modello e RAG per fornire conoscenza aggiornata.
Preparazione del dataset
La qualità del dataset è il fattore più critico nel fine-tuning. Il formato standard per i LLM è una lista di conversazioni (instruction-tuning):
Formato tipico (JSONL)
{"messages": [{"role": "system", "content": "Sei un assistente medico."}, {"role": "user", "content": "Cos'è la tachicardia?"}, {"role": "assistant", "content": "La tachicardia è..."}]}
Linee guida per il dataset:
- Quantità: da 50 a 10.000 esempi, a seconda della complessità del task. Per task semplici (classificazione) bastano poche centinaia; per task complessi servono migliaia.
- Qualità: ogni esempio deve rappresentare il comportamento desiderato. Errori nel dataset si amplificano nel modello, perché l'addestramento li interpreta come pattern da imitare.
- Diversità: coprire tutti i casi d'uso, edge case e variazioni che il modello incontrerà in produzione.
- Bilanciamento: evitare che una classe o un tipo di risposta domini il dataset (vedi Errori Comuni nell'AI).
LoRA e QLoRA
Il fine-tuning completo (full fine-tuning) aggiorna tutti i parametri del modello, richiedendo enorme memoria GPU. Le tecniche PEFT (Parameter-Efficient Fine-Tuning) risolvono questo problema aggiornando solo una frazione dei pesi.
LoRA (Low-Rank Adaptation) è la tecnica PEFT più diffusa. Invece di aggiornare le matrici di peso originali W, LoRA le congela e aggiunge due piccole matrici A e B tali che il nuovo peso sia W + BA. Il rango r (tipicamente 8-64) controlla la dimensione di queste matrici. Il risultato è che si addestrano milioni di parametri invece di miliardi, ottenendo "adattatori" leggeri da pochi MB che si possono salvare, scambiare e attivare al volo senza duplicare il modello base.
QLoRA estende LoRA combinandola con la quantizzazione a 4 bit del modello base. Questo permette di fare fine-tuning di modelli con 70+ miliardi di parametri su una singola GPU consumer (24 GB VRAM), riducendo i costi di ordini di grandezza. È la scelta ideale per chi vuole sperimentare in autonomia, perché abbatte la barriera d'ingresso hardware mantenendo una qualità vicina al full fine-tuning.
Confronto risorse
Full fine-tuning di Llama 3 70B: ~8x A100 80 GB (~$50/ora cloud)
LoRA: ~2x A100 80 GB (~$12/ora)
QLoRA: ~1x A100 40 GB o RTX 4090 (~$3/ora)
Hyperparameters chiave
Gli hyperparameters controllano il processo di addestramento e richiedono sperimentazione:
- Learning rate: tipicamente 1e-5 a 5e-5 per full fine-tuning, 1e-4 a 3e-4 per LoRA. Un valore troppo alto causa instabilità; troppo basso rallenta la convergenza.
- Epochs: 1-5 per i LLM. Troppo poche e il modello non impara; troppe causano overfitting.
- Batch size: limitato dalla VRAM. Si usa il gradient accumulation per simulare batch più grandi.
- Warmup ratio: percentuale di step iniziali con learning rate crescente (tipicamente 3-10%).
- LoRA rank (r): valori più alti catturano più informazione ma richiedono più memoria. 16-32 è un buon punto di partenza.
- LoRA alpha: scaling factor, spesso impostato a 2*r.
Costi e risorse
I costi variano enormemente in base all'approccio scelto:
| Metodo | Modello 7B | Modello 70B | Tempo tipico |
|---|---|---|---|
| API fine-tuning (OpenAI) | $5-50 | N/D | 1-3 ore |
| QLoRA (cloud) | $3-10 | $15-60 | 2-8 ore |
| Full fine-tuning (cloud) | $30-100 | $200-800 | 4-24 ore |
Per chi inizia, le API di fine-tuning (OpenAI, Together AI, Fireworks) sono il percorso più semplice: si carica il dataset JSONL e la piattaforma gestisce l'infrastruttura. Per maggiore controllo, framework come Hugging Face TRL, Axolotl e Unsloth offrono fine-tuning locale o su cloud.
Best practice
Dopo aver lavorato con decine di progetti di fine-tuning, queste sono le raccomandazioni chiave:
- Parti dal prompt engineering: prima di fare fine-tuning, verifica se il comportamento desiderato è ottenibile con un prompt migliore. È più economico e reversibile.
- Valuta con metriche oggettive: definisci un evaluation set separato dal training set. Usa metriche automatiche (es. accuracy per classificazione) e valutazione umana per task generativi.
- Monitora l'overfitting: confronta training loss e validation loss. Se la validation loss inizia a salire, fermati (early stopping).
- Versiona tutto: dataset, hyperparameters, modello risultante. La riproducibilità è fondamentale.
- Testa su casi reali: le metriche aggregate nascondono fallimenti su specifiche categorie di input. Costruisci una suite di test con esempi reali e edge case.
Il fine-tuning è uno strumento potente, ma non è una soluzione universale. Comprendere quando usarlo, in combinazione con RAG e prompt engineering, è la competenza chiave per progettare sistemi AI efficaci.
Per approfondire i concetti di base su cui si fonda il fine-tuning, consulta gli articoli sulle Reti Neurali e su Token e Tokenizzazione, essenziali per comprendere cosa succede durante il processo di addestramento.
Vuoi imparare ad applicarlo davvero?
Scopri i corsi e la formazione di Federico Boggia su AI, dati e digitale.