Transfer learning e fine-tuning
Il transfer learning e il principio per cui un modello addestrato su un task generico (es. predire la parola successiva su miliardi di testi) puo essere adattato a un compito specifico riutilizzando la conoscenza gia acquisita. Il fine-tuning e la tecnica concreta con cui si realizza questo trasferimento: si prende un modello pre-addestrato e lo si ri-addestra su un dataset piu piccolo e specializzato, aggiornandone i pesi.
L'idea e nata nella Computer Vision (ImageNet come base per qualsiasi classificatore di immagini) e si e poi estesa al NLP con modelli come BERT, GPT e i moderni LLM. Il vantaggio fondamentale e 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.
Il fine-tuning non insegna nuova conoscenza fattuale al modello, ma ne modifica il comportamento: stile, formato, tono, capacita di seguire istruzioni specifiche e aderenza a un dominio.
Quando fare fine-tuning (e quando no)
La domanda piu frequente e: "Meglio fine-tuning o RAG?". La risposta dipende dall'obiettivo:
| Obiettivo | Approccio consigliato |
|---|---|
| Accesso a dati aggiornati o proprietari | RAG |
| Citabilita e tracciabilita 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 qualita del dataset e il fattore piu critico nel fine-tuning. Il formato standard per i LLM e una lista di conversazioni (instruction-tuning):
Formato tipico (JSONL)
{"messages": [{"role": "system", "content": "Sei un assistente medico."}, {"role": "user", "content": "Cos'e la tachicardia?"}, {"role": "assistant", "content": "La tachicardia e..."}]}
Linee guida per il dataset:
- Quantita: da 50 a 10.000 esempi, a seconda della complessita del task. Per task semplici (classificazione) bastano poche centinaia; per task complessi servono migliaia.
- Qualita: ogni esempio deve rappresentare il comportamento desiderato. Errori nel dataset si amplificano nel modello.
- Diversita: coprire tutti i casi d'uso, edge case e variazioni che il modello incontrera 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) e la tecnica PEFT piu 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.
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.
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 instabilita; 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 piu grandi.
- Warmup ratio: percentuale di step iniziali con learning rate crescente (tipicamente 3-10%).
- LoRA rank (r): valori piu alti catturano piu informazione ma richiedono piu memoria. 16-32 e 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 piu 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 e ottenibile con un prompt migliore. E piu 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 riproducibilita e 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 e uno strumento potente, ma non e una soluzione universale. Comprendere quando usarlo, in combinazione con RAG e prompt engineering, e 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.