Glossario

Discesa del gradiente stocastico (SGD)

Scopri come la Stochastic Gradient Descent ottimizza i modelli di apprendimento automatico, consentendo un addestramento efficiente per grandi dataset e attività di deep learning.

Addestra i modelli YOLO semplicemente
con Ultralytics HUB

Per saperne di più

Lo Stochastic Gradient Descent, comunemente noto come SGD, è un algoritmo di ottimizzazione popolare ed efficiente molto utilizzato nel Machine Learning (ML) e in particolare nel Deep Learning (DL). Si tratta di una variante dell'algoritmo di discesa del gradiente standard, ma è specificamente progettato per garantire velocità ed efficienza quando si tratta di insiemi di dati molto grandi. Invece di calcolare il gradiente (la direzione di discesa più ripida per la funzione di perdita) utilizzando l'intero set di dati in ogni fase, SGD approssima il gradiente sulla base di un singolo campione di dati selezionato in modo casuale o di un piccolo sottoinsieme chiamato mini-batch. Questo approccio riduce significativamente il costo computazionale e i requisiti di memoria, rendendo possibile l'addestramento di modelli complessi su enormi quantità di dati.

Rilevanza nell'apprendimento automatico

L'SGD è una pietra miliare per l'addestramento di modelli di apprendimento automatico su larga scala, in particolare le complesse Reti Neurali (NN) che alimentano molte applicazioni di AI moderne. La sua efficienza lo rende indispensabile quando si lavora con insiemi di dati troppo grandi per essere inseriti nella memoria o che richiederebbero troppo tempo per essere elaborati con la tradizionale Batch Gradient Descent. Modelli come Ultralytics YOLO utilizzano spesso l'SGD o le sue varianti durante il processo di addestramento per apprendere modelli per attività come il rilevamento di oggetti, la classificazione di immagini e la segmentazione di immagini. I principali framework di deep learning come PyTorch e TensorFlow forniscono solide implementazioni di SGD, evidenziando il suo ruolo fondamentale nell'ecosistema dell'IA.

Concetti chiave

La comprensione dell'SGD implica alcune idee fondamentali:

  • Natura stocastica: Il termine "stocastico" si riferisce alla casualità introdotta dall'utilizzo di uno o pochi campioni per stimare il gradiente a ogni passo. Questa casualità aggiunge rumore al processo di ottimizzazione, che a volte può aiutare il modello a sfuggire ai minimi locali e a trovare soluzioni complessive migliori.
  • Mini-lotti: Mentre l'SGD puro utilizza un singolo campione per ogni aggiornamento, nella pratica è più comune utilizzare un piccolo "mini-batch" di campioni (ad esempio 32, 64, 128). Questo approccio, spesso chiamato ancora SGD, bilancia l'efficienza degli aggiornamenti a campione singolo con la stabilità ottenuta dalla media dei gradienti su un piccolo lotto. La dimensione di questo lotto è controllata dall'iperparametro Batch Size.
  • Tasso di apprendimento: Questo iperparametro cruciale determina la dimensione dei passi compiuti durante il processo di ottimizzazione. Un tasso di apprendimento ben scelto è fondamentale per la convergenza; se è troppo alto, il processo potrebbe superare il minimo, mentre se è troppo basso, la formazione diventa eccessivamente lenta. Tecniche come la programmazione del tasso di apprendimento sono spesso utilizzate insieme all'SGD.
  • Funzione di perdita: L'SGD mira a minimizzare una funzione di perdita, che misura la differenza tra le previsioni del modello e i valori effettivi dei dati di addestramento.

Differenze rispetto ai concetti correlati

L'SGD è uno dei tanti algoritmi di ottimizzazione ed è importante distinguerlo dagli altri:

  • Discesa del gradiente (Batch GD): La differenza principale sta nel modo in cui viene calcolato il gradiente. Il Batch GD utilizza l'intero set di dati per ogni aggiornamento dei parametri, fornendo un gradiente accurato ma diventando computazionalmente costoso e lento per i set di dati di grandi dimensioni. SGD utilizza un solo campione (o un mini-batch), rendendo ogni aggiornamento molto più veloce ma più rumoroso. Puoi trovare maggiori informazioni sul metodo standard nella pagina di glossario Gradient Descent.
  • Mini-Batch Gradient Descent: Questa è l'implementazione pratica più comune, spesso indicata semplicemente come SGD. Calcola il gradiente su piccoli sottoinsiemi casuali (mini-batch) di dati. Rappresenta un equilibrio tra l'accuratezza del Batch GD e l'efficienza dell'SGD puro.
  • Ottimizzatore Adam: Adam è un algoritmo di ottimizzazione del tasso di apprendimento adattivo, ovvero regola il tasso di apprendimento per ogni parametro individualmente in base ai gradienti passati. Sebbene Adam converga spesso più velocemente dell'SGD di base, l'SGD (soprattutto con il momentum) può a volte generalizzare meglio ai dati non visti, come discusso in ricerche come "The Marginal Value of Adaptive Gradient Methods in Machine Learning".

Applicazioni del mondo reale

L'efficienza dell'SGD ne consente l'utilizzo in numerose applicazioni di AI su larga scala:

Esempio 1: Formazione di modelli linguistici di grandi dimensioni (LLM)

L'addestramento di modelli come quelli utilizzati nell'elaborazione del linguaggio naturale (NLP) spesso coinvolge enormi set di dati testuali (miliardi di parole). SGD e le sue varianti sono essenziali per iterare questi dati in modo efficiente, consentendo ai modelli di apprendere la grammatica, il contesto e la semantica. Piattaforme come Hugging Face fanno molto affidamento su questi ottimizzatori per l'addestramento dei modelli trasformatori.

Esempio 2: Formazione sul rilevamento di oggetti in tempo reale

Per modelli come Ultralytics YOLO , progettati per l'inferenza in tempo reale, l'addestramento deve essere efficiente. SGD consente agli sviluppatori di addestrare questi modelli su grandi dataset di immagini come COCO o su dataset personalizzati gestiti da piattaforme come Ultralytics HUB. Gli aggiornamenti rapidi consentono una convergenza più veloce rispetto a Batch GD, fondamentale per iterare rapidamente durante lo sviluppo del modello e la messa a punto degli iperparametri.

Leggi tutto