L’importanza della riproducibilità nell’apprendimento automatico

The importance of reproducibility in machine learning.

E come gli approcci per una migliore gestione dei dati, il controllo delle versioni e il monitoraggio degli esperimenti possono aiutare a costruire pipeline di ML riproducibili.

Quando stavo imparando il machine learning, spesso cercavo di seguire i tutorial dei progetti. Seguivo i passaggi delineati dall’autore. Ma, a volte, il mio modello funzionava peggio rispetto a quello dell’autore del tutorial. Forse ti è capitata una situazione simile. O forse hai preso il codice di un collega da GitHub. E le metriche di performance del tuo modello sono diverse da quelle riportate nel rapporto del tuo collega. Quindi, fare la stessa cosa non garantisce gli stessi risultati, giusto? Questo è un problema diffuso nel machine learning: la sfida della riproducibilità.

È superfluo dire che i modelli di machine learning sono utili solo se gli altri possono replicare gli esperimenti e riprodurre i risultati. Dal tipico problema “Funziona sul mio computer” ai sottili cambiamenti nel modo in cui il modello di machine learning viene addestrato, ci sono diverse sfide per la riproducibilità.

In questo articolo, analizzeremo da vicino le sfide e l’importanza della riproducibilità nel machine learning, insieme al ruolo della gestione dei dati, del controllo delle versioni e del monitoraggio degli esperimenti nel affrontare la sfida della riproducibilità del machine learning.

Cosa è la riproducibilità nel contesto del machine learning?

Vediamo come possiamo definire al meglio la riproducibilità nel contesto del machine learning.

Supponiamo che ci sia un progetto esistente che utilizza un algoritmo di machine learning specifico su un determinato dataset. Dato il dataset e l’algoritmo, dovremmo essere in grado di eseguire l’algoritmo (tante volte quante ne vogliamo) e riprodurre (o replicare) il risultato in ciascuna di queste esecuzioni.

Ma la riproducibilità nel machine learning non è priva di sfide. Abbiamo già discusso un paio di esse, passiamo a esaminarle più in dettaglio nella prossima sezione.

Sfide della riproducibilità nel machine learning

Per qualsiasi applicazione, ci sono sfide come l’affidabilità e la manutenibilità. Tuttavia, nelle applicazioni di machine learning, ci sono sfide aggiuntive.

Quando parliamo di applicazioni di machine learning, ci riferiamo spesso alle pipeline di machine learning end-to-end che di solito includono i seguenti passaggi:

Le sfide di riproducibilità possono quindi sorgere a causa di modifiche in uno o più di questi passaggi. E la maggior parte delle modifiche può essere raccolta in uno dei seguenti:

  • Modifiche all’ambiente
  • Modifiche al codice
  • Modifiche ai dati

Vediamo come ognuna di queste modifiche impedisce la riproducibilità.

Modifiche all’ambiente

Python e i framework di machine learning basati su Python rendono lo sviluppo di app ML un gioco da ragazzi. Tuttavia, la gestione delle dipendenze in Python – la gestione delle diverse librerie e versioni necessarie per un determinato progetto – è una sfida non banale. Una piccola modifica come l’utilizzo di una diversa versione della libreria e una chiamata di funzione che utilizza un argomento deprecato è sufficiente per rompere il codice.

Ciò include anche la scelta dei sistemi operativi. Ci sono sfide associate all’hardware come le differenze nella precisione in virgola mobile della GPU e simili.

Modifiche al codice

Dal mescolamento del dataset di input per determinare quali campioni vanno nel dataset di addestramento alla inizializzazione casuale dei pesi durante l’addestramento delle reti neurali – la casualità svolge un ruolo importante nel machine learning.

Impostare un diverso seed casuale può portare a risultati totalmente diversi. Per ogni modello che addestriamo, esiste un insieme di iperparametri. Quindi, la modifica di uno o più degli iperparametri può portare a risultati diversi.

Modifiche ai dati

Anche con lo stesso dataset, abbiamo visto come le incongruenze nei valori degli iperparametri e la casualità possono rendere difficile replicare i risultati. Pertanto, è ovvio che, quando i dati cambiano – un cambiamento nella distribuzione dei dati, modifiche a un subset di record o l’eliminazione di alcuni campioni – rendono difficile riprodurre i risultati.

In sintesi: quando cerchiamo di replicare i risultati di un modello di machine learning, anche la più piccola modifica al codice, al dataset utilizzato e all’ambiente in cui viene eseguito il modello di machine learning può impedirci di ottenere gli stessi risultati del modello originale.

Come affrontare la sfida della riproducibilità

Ora vedremo come affrontare queste sfide.

Gestione dei dati

Abbiamo visto che una delle sfide più evidenti nella riproducibilità riguarda i dati. Esistono alcuni approcci di gestione dei dati, come versionare i dataset in modo da poter tracciare le modifiche al dataset e archiviare metadati utili sul dataset.

Controllo versione

Ogni modifica al codice dovrebbe essere tracciata utilizzando un sistema di controllo versione come Git.

Nello sviluppo software moderno, avrai incontrato pipeline CI/CD che rendono il tracciamento delle modifiche, il testing delle nuove modifiche e il loro push in produzione molto più semplice ed efficiente.

In altre applicazioni software, il tracciamento delle modifiche al codice è semplice. Tuttavia, nel machine learning, le modifiche al codice possono comportare anche modifiche all’algoritmo utilizzato e ai valori degli iperparametri. Anche per i modelli semplici, il numero di possibilità che possiamo provare è combinatorialmente grande. Ecco dove diventa rilevante il tracciamento degli esperimenti.

Tracciamento degli esperimenti

La costruzione di applicazioni di machine learning è sinonimo di sperimentazione intensiva. Dall’algoritmo agli iperparametri, sperimentiamo con diversi algoritmi e valori degli iperparametri. Quindi è importante tracciare questi esperimenti.

Il tracciamento degli esperimenti di machine learning include:

  • registrazione delle sweep degli iperparametri
  • registrazione delle metriche di performance del modello, dei checkpoint del modello
  • Archiviazione di metadati utili sul dataset e sul modello

Strumenti per il tracciamento degli esperimenti di ML, la gestione dei dati e altro ancora

Come visto, la versione dei dataset, il tracciamento delle modifiche al codice e il tracciamento degli esperimenti di machine learning replicano le applicazioni di machine learning. Ecco alcuni degli strumenti che possono aiutarti a creare pipeline di machine learning riproducibili:

  • Weights and Biases
  • MLflow
  • Neptune.ai
  • Comet ML
  • DVC

Conclusione

Per riassumere, abbiamo esaminato l’importanza e le sfide della riproducibilità nel machine learning. Abbiamo esaminato gli approcci come la versione dei dati e del modello e il tracciamento degli esperimenti. Inoltre, abbiamo elencato alcuni degli strumenti che puoi utilizzare per il tracciamento degli esperimenti e una migliore gestione dei dati.

Il MLOps Zoomcamp di DataTalks.Club è una risorsa eccellente per acquisire esperienza con alcuni di questi strumenti. Se ti piace costruire e mantenere pipeline di machine learning end-to-end, potresti essere interessato a capire il ruolo di un ingegnere MLOps. Bala Priya C è uno sviluppatore e scrittore tecnico dell’India. Le piace lavorare all’intersezione di matematica, programmazione, data science e creazione di contenuti. Le sue aree di interesse e competenza includono DevOps, data science e elaborazione del linguaggio naturale. Le piace leggere, scrivere, programmare e bere caffè! Attualmente sta lavorando per imparare e condividere le sue conoscenze con la comunità degli sviluppatori scrivendo tutorial, guide pratiche, opinioni e altro ancora.