Fine-tuning
Il fine-tuning prosegue l'addestramento di un modello preaddestrato su dati specifici del compito, affinché si adatti con molti meno dati e risorse di calcolo. Panoramica di come funziona, PEFT e codice.
Il fine-tuning è il processo che prosegue l'addestramento di un modello già addestrato su un grande dataset, aggiornando alcuni o tutti i suoi pesi su un dataset più piccolo e specifico per il compito. I pesi del modello preaddestrato codificano già conoscenze generali, come bordi, texture e forme nei modelli per la visione, oppure grammatica e fatti nei modelli linguistici di grandi dimensioni (LLMs); perciò il fine-tuning raggiunge un'elevata accuratezza con molti meno dati etichettati e risorse di calcolo rispetto all'addestramento partendo da pesi casuali. È il modo più comune di realizzare l'apprendimento per trasferimento ed è il metodo con cui vengono creati la maggior parte dei modelli personalizzati di rilevamento degli oggetti e degli assistenti conversazionali partendo da modelli fondazionali preaddestrati.
Come funziona il fine-tuning#
Un'esecuzione di fine-tuning carica i pesi preaddestrati, sostituisce o ridimensiona gli eventuali livelli legati al compito originale, come un classificatore o una testa di rilevamento, e addestra il modello sui nuovi dati usando la consueta funzione di perdita e l'ottimizzatore. Tre scelte determinano quanto del modello originale viene mantenuto:
- Tasso di apprendimento: Il fine-tuning usa un tasso di apprendimento più basso rispetto al preaddestramento, di solito dopo un breve riscaldamento, in modo che gli aggiornamenti perfezionino le caratteristiche preaddestrate invece di sovrascriverle. ULMFiT si è spinto oltre con tassi di apprendimento discriminativi, dividendo il tasso per 2,6 per ogni livello sotto quello superiore.
- Quali livelli addestrare: Congelare i primi livelli del backbone mantiene fisse le caratteristiche generali, riduce l'uso di memoria e limita il rischio di overfitting su dataset piccoli. Lo scongelamento graduale addestra prima la nuova testa e poi sblocca i livelli più profondi.
- Durata dell'addestramento: Più a lungo un modello viene addestrato solo sui nuovi dati, più perde le capacità originali a causa dell'oblio catastrofico.
La configurazione giusta dipende dalla memoria disponibile, dalla quantità di dati etichettati e dall'importanza delle capacità originali:
Fine-tuning completo e fine-tuning efficiente in termini di parametri#
Il fine-tuning completo aggiorna ogni peso: per un LLM da 7 miliardi di parametri, ciò significa conservare i gradienti e lo stato dell'ottimizzatore per 7 miliardi di valori e salvare una copia completa del modello per ogni compito. Il fine-tuning efficiente in termini di parametri (PEFT) congela i pesi preaddestrati e addestra invece un piccolo insieme di parametri aggiunti o selezionati; la libreria PEFT di Hugging Face implementa i metodi più comuni. LoRA aggiunge matrici a basso rango addestrabili accanto a matrici di pesi congelate e, rispetto al fine-tuning completo di GPT-3 175B con Adam, ha ridotto di 10.000 volte i parametri addestrabili e di 3 volte la memoria GPU. QLoRA addestra adattatori LoRA su un modello di base quantizzato a 4 bit, rendendo possibile il fine-tuning di un modello da 65 miliardi di parametri su una singola GPU da 48 GB.
Dopo il preaddestramento, gli LLM attraversano varie fasi di fine-tuning. L'addestramento alle istruzioni usa coppie di prompt e risposte; i metodi basati sulle preferenze, come l'apprendimento per rinforzo dal feedback umano (RLHF) e l'ottimizzazione diretta delle preferenze (DPO), allineano poi le risposte alle preferenze umane.
Fine-tuning e termini correlati#
- Apprendimento per trasferimento: Il concetto più ampio di riutilizzare per un compito un modello addestrato su un altro. Il fine-tuning aggiorna i pesi preaddestrati, mentre l'estrazione di caratteristiche li mantiene congelati e addestra solo una nuova testa.
- Addestramento da zero: Parte da pesi casuali e richiede molti più dati etichettati e risorse di calcolo. È adatto a nuove architetture e domini con poche somiglianze con i dati di preaddestramento disponibili.
- Linear probing: Addestra solo un classificatore lineare su caratteristiche congelate, di solito per misurare quante informazioni sono già catturate da una rappresentazione preaddestrata.
- Prompt engineering e generazione aumentata dal recupero (RAG): Modificano il comportamento di un LLM tramite l'input, lasciando invariati i pesi.
Fine-tuning di un rilevatore di oggetti#
Eseguire train() su un checkpoint YOLO26 preaddestrato con un nuovo dataset esegue il fine-tuning: vengono trasferiti tutti i pesi compatibili e l'impostazione predefinita cls_remap=True copia le righe del classificatore corrispondenti ai nomi delle classi, così nel dataset African Wildlife le predizioni per elefanti e zebre partono dalle righe preaddestrate su COCO, mentre quelle per bufali e rinoceronti, assenti da COCO, partono da zero.
from ultralytics import YOLO
# Carica i pesi YOLO26n preaddestrati su COCO; YOLO("yolo26n.yaml") addestrerebbe invece il modello da zero
model = YOLO("yolo26n.pt")
# Esegui il fine-tuning su 1.052 immagini di addestramento con bufali, elefanti, rinoceronti e zebre
results = model.train(data="african-wildlife.yaml", epochs=30, imgsz=640)Per questa esecuzione di 30 epoche, l'impostazione predefinita optimizer="auto" seleziona AdamW con lr0=0.00125, un tasso calcolato in base alle 4 classi del dataset, perché l'esecuzione resta sotto le 10.000 iterazioni.










