Hyperparameter Tuning
L'ottimizzazione degli iperparametri individua le impostazioni di addestramento che massimizzano le prestazioni di validazione. Confronto tra ricerca a griglia, casuale, bayesiana ed evolutiva.
L'ottimizzazione degli iperparametri consiste nel cercare le impostazioni di addestramento che offrono a un modello di machine learning le prestazioni migliori sui dati esclusi dall'addestramento. Gli iperparametri vengono fissati prima dell'inizio dell'addestramento, a differenza dei pesi del modello, che vengono appresi dai dati durante l'addestramento. Ogni configurazione candidata deve essere valutata addestrando un modello e testandolo sui dati di convalida, quindi l'ottimizzazione è una delle fasi a più elevato consumo di risorse computazionali nello sviluppo di un modello, e scegliere una buona strategia di ricerca è importante tanto quanto scegliere i valori da cercare.
Iperparametri comuni#
Nel deep learning per la visione, le impostazioni che più spesso richiedono ottimizzazione rientrano in alcune categorie:
- Ottimizzazione: il tasso di apprendimento e il relativo programma, il momento, il decadimento dei pesi e la scelta dell'ottimizzatore, come SGD o l'ottimizzatore Adam. Il tasso di apprendimento di solito ha l'effetto maggiore e viene cercato su scala logaritmica.
- Durata dell'addestramento e batch: il numero di epoche, la durata del warm-up e la dimensione del batch.
- Aumento dei dati: la probabilità e l'intensità di ogni trasformazione, come ribaltamenti, ridimensionamenti, variazioni dei colori e mosaici.
- Pesi delle loss: i coefficienti che bilanciano i termini di una funzione di loss composta, come le loss delle bounding box e della classificazione in un rilevatore.
Metodi di ricerca#
I professionisti esplorano lo spazio delle configurazioni possibili con alcune strategie:
- Ricerca a griglia: addestra tutte le combinazioni di un elenco fisso di valori. È semplice ed esaustiva, ma il costo aumenta moltiplicandosi per ogni iperparametro aggiunto.
- Ricerca casuale: campiona configurazioni casualmente dagli intervalli consentiti. Bergstra e Bengio hanno dimostrato che trova modelli altrettanto validi o migliori della ricerca a griglia con una frazione ridotta del calcolo, perché solo pochi iperparametri contano davvero per un determinato problema e il campionamento casuale prova valori distinti in maggior numero per ciascuno di essi.
- Ottimizzazione bayesiana: adatta un modello surrogato che descrive la dipendenza del punteggio dagli iperparametri e sceglie la prova successiva nel punto in cui è più probabile ottenere un miglioramento. Librerie come Optuna utilizzano questo approccio per impostazione predefinita.
- Metodi di arresto anticipato: Hyperband e il dimezzamento successivo avviano molte configurazioni con un budget ridotto e assegnano più epoche solo a quelle più promettenti.
- Algoritmi evolutivi: trattano ogni configurazione come un genoma e migliorano una popolazione di configurazioni tramite selezione e mutazione.
Ricerca evolutiva#
La ricerca evolutiva è adatta alle esecuzioni di addestramento con molti iperparametri interdipendenti perché non richiede un modello dello spazio di ricerca, ma solo un punteggio di fitness per ogni prova. A ogni iterazione si prende una delle migliori configurazioni trovate finora, se ne mutano alcuni valori, si addestra il modello con il risultato e si mantiene la nuova configurazione nel pool se ottiene un buon punteggio.
Il tuner Ultralytics esegue questo ciclo durante l'addestramento di YOLO: a ogni iterazione seleziona un genitore tra i nove risultati con la fitness più alta, muta circa la metà di un massimo di 26 iperparametri che riguardano il tasso di apprendimento, i coefficienti delle loss e l'aumento dei dati, e calcola la fitness come mAP50-95 per il rilevamento. Gli iperparametri della fase COCO dei checkpoint ufficiali di YOLO26 sono stati individuati con questa ricerca evolutiva.
from ultralytics import YOLO
# Carica un modello YOLO26n preaddestrato
model = YOLO("yolo26n.pt")
# Spazio di ricerca: limiti (min, max) per ogni iperparametro da ottimizzare
search_space = {"lr0": (1e-5, 1e-2), "degrees": (0.0, 45.0)}
# Ognuna delle 30 iterazioni esegue l'addestramento per 10 epoche con valori mutati di recente
model.tune(data="coco8.yaml", epochs=10, iterations=30, space=search_space, plots=False, save=False, val=False)L'esecuzione salva best_hyperparameters.yaml, un grafico della fitness per iterazione e i pesi della migliore iterazione in una directory tune. model.tune() esegue l'addestramento con AdamW, a meno che non venga specificato l'ottimizzatore, perché il valore predefinito optimizer="auto" sovrascriverebbe il valore ottimizzato lr0.
Ottimizzazione degli iperparametri e termini correlati#
- Addestramento del modello: l'addestramento apprende i pesi per un insieme fisso di iperparametri tramite retropropagazione. L'ottimizzazione è il ciclo esterno che esegue più volte l'addestramento e confronta i risultati.
- Fine-tuning: nonostante il nome simile, il fine-tuning prosegue l'addestramento dei pesi di un modello preaddestrato su nuovi dati. Ha i propri iperparametri da ottimizzare, come un tasso di apprendimento più basso e il numero di livelli congelati.
- Ricerca dell'architettura neurale (NAS): esplora la struttura della rete, ad esempio i tipi e le dimensioni dei livelli, invece delle impostazioni di addestramento.
- Machine learning automatizzato (AutoML): automatizza la pipeline più ampia, inclusi la selezione del modello e il pretrattamento dei dati, con l'ottimizzazione degli iperparametri come una delle sue componenti.
- Overfitting al set di convalida: centinaia di prove di ottimizzazione valutate sulla stessa suddivisione di convalida possono selezionare impostazioni che vi si adattano per caso, quindi i risultati finali vanno misurati su un set di test separato, mai utilizzato durante l'ottimizzazione.










