La pianificazione dei progetti di ML è diversa dalla pianificazione dei progetti di ingegneria del software. I progetti di ML sono tipicamente non lineari e presentano gradi diversi di incertezza. Richiedono un approccio iterativo e un'impostazione sperimentale.
Incertezza del progetto
La pianificazione nelle fasi iniziali può essere difficile perché l'approccio migliore in genere non è evidente all'inizio di un progetto. Questa incertezza intrinseca rende difficile stimare le tempistiche.
Un recente concorso Kaggle illustra l'incertezza dei progetti di ML. Nelle prime settimane di una competizione, hanno partecipato 350 squadre. I team migliori sono riusciti ad aumentare la qualità della previsione del benchmark dal 35% al 65%. Durante le due settimane successive, il numero di team che si occupavano del problema è aumentato da 350 a 1400. Tuttavia, il modello migliore ha raggiunto solo una qualità di previsione del 68%.
La Figura 3 illustra l'incertezza nello sviluppo del machine learning mostrando l'aumento significativo dell'impegno, ma solo guadagni minimi in termini di qualità del modello.
Figura 3. Nell'arco di due settimane, il numero di team che si occupavano del problema è aumentato di quattro volte, ma la qualità del modello è rimasta quasi invariata, evidenziando la difficoltà di stimare l'impegno di una soluzione di ML.
In altre parole, più di mille team, ognuno dei quali esegue esperimenti con varie trasformazioni dei dati, architetture e iperparametri, sono riusciti a produrre un modello con una qualità di previsione del 68%.
Un esempio del settore illustra la non linearità dei progetti di ML, dove l'output non è proporzionale agli input. Due team hanno impiegato diversi mesi per addestrare un modello con una qualità di previsione del 90%. Tuttavia, sono stati necessari più di cinque anni a diversi team per preparare il modello per la produzione con una qualità di previsione del 99,9%.
Questi esempi mostrano che l'ML pronto per la produzione è un processo esplorativo che richiede un approccio scientifico e ingegneristico.
Approccio sperimentale
Nella maggior parte dei casi, lo sviluppo ML è più simile all'esecuzione di esperimenti che alla pratica dell'ingegneria del software tradizionale. L'ML richiede di testare diverse funzionalità, provare più architetture e ottimizzare gli iperparametri in modo ottimale. Per definizione, non è garantito il successo degli esperimenti. Per questo motivo, è meglio pianificare l'utilizzo di un framework sperimentale.
Vediamo un tipico piano di ingegneria del software per capire in che modo è diverso da un piano di progetto di ML.
Pianificazione di progetti di ingegneria del software
In un tipico piano di ingegneria del software, definisci i requisiti, descrivi i componenti, stimi le risorse necessarie e pianifichi il lavoro. Esiste un percorso ben definito per la soluzione. Ad esempio, gli ingegneri spesso sanno con un elevato grado di certezza le attività che devono completare per creare un'applicazione che soddisfi le specifiche di progettazione.
Quando prevedono il tempo necessario per completare un'attività, possono stimare il lavoro in base a progetti simili. Anche se invariabilmente si verificano problemi, come dipendenze sconosciute o requisiti in evoluzione, che possono rendere a volte difficile la stima, in genere esiste un percorso chiaro per la soluzione.
Al contrario, i progetti di ML in genere non hanno un percorso chiaro per il successo.
Pianificazione dei progetti di ML
Per la maggior parte dei progetti di ML, troverai la soluzione migliore sperimentando diversi approcci in un processo di prova ed errore. In genere, non conosci la soluzione ottimale al tuo problema prima di tentare di risolverlo. Ad esempio, l'architettura della soluzione ottimale potrebbe essere un semplice modello lineare, una rete neurale o un albero decisionale. Solo provando ogni approccio puoi scoprire la soluzione migliore.
Questa ambiguità rende difficile la pianificazione. Come discusso in precedenza, è difficile prevedere l'impegno richiesto da un progetto di ML. Solo tentando di risolvere il problema puoi avere un'idea più precisa della quantità di tempo e risorse che una soluzione potrebbe richiedere.
Di seguito sono riportate le strategie consigliate per pianificare il lavoro di ML:
Inserisci una casella temporale per il lavoro. Imposta periodi di tempo chiari per completare le attività o provare una determinata soluzione. Ad esempio, potresti dedicare due settimane a stabilire se puoi accedere al tipo di dati corretto. Se riesci a ottenere i dati, potresti dedicare altre due settimane per verificare se un modello semplice indica che una soluzione di ML è fattibile. Se un modello semplice non va a buon fine, potresti designare altre due settimane per provare una rete neurale. Al termine di ogni periodo di tempo, avrai più informazioni per determinare se vale la pena continuare ad applicare risorse al problema.
Definisci l'ambito dei requisiti del progetto. Se una soluzione di ML sembra promettente, ma non è una funzionalità fondamentale per il tuo prodotto o servizio, riduci i relativi requisiti. Ad esempio, quando pianifichi il lavoro del trimestre successivo, potresti provare una soluzione molto semplice. Nei trimestri successivi, potresti pianificare di migliorare la soluzione in modo iterativo. L'implementazione di una soluzione di ML mediante miglioramenti incrementali in un orizzonte temporale più lungo è stato il modo in cui molti team hanno ottenuto soluzioni di ML efficaci.
Progetto per stagisti o nuove assunzioni. Indirizzare e guidare un stagista o un nuovo assunto a tentare una soluzione di ML può essere un buon modo per iniziare a esplorare un nuovo spazio con risultati sconosciuti. Al termine del progetto, avrai un'idea più chiara dell'impegno richiesto da una soluzione di ML e degli approcci potenzialmente promettenti da perseguire oppure se le risorse devono essere destinate altrove.
Con qualsiasi strategia, è consigliabile fallire rapidamente. Prova prima gli approcci con i costi più bassi, ma con un potenziale rendimento più elevato. Se l'approccio funziona, hai trovato una buona soluzione. In caso contrario, non avrai sprecato molto tempo e risorse.
Man mano che i team acquisiscono esperienza ed esposizione all'esecuzione degli esperimenti, potranno stimare meglio l'impegno richiesto da un esperimento, rendendo la pianificazione più prevedibile. Tuttavia, il risultato di un esperimento sarà quasi sempre sconosciuto, pertanto il numero di esperimenti necessari per trovare la soluzione migliore non può essere stimato in anticipo.
Pianificare gli approcci con una mentalità sperimentale aiuta il tuo team a ottenere risultati positivi. Quando un approccio non porta a risultati, anziché scoraggiarsi, i membri del team comprendono che fa parte del processo di ricerca di una soluzione di ML. Ancora più importante, discutendo con gli stakeholder dell'incertezza intrinseca nello sviluppo dell'IA, puoi impostare aspettative più realistiche.
Verifica di aver compreso
Aspetti da considerare
Imparare a pianificare più approcci di ML in modo probabilistico richiede tempo e esperienza. Il piano del progetto potrebbe richiedere aggiornamenti frequenti. Pensalo come un documento dinamico in costante evoluzione man mano che il tuo team sperimenta diversi approcci. Concentrandoti sulle seguenti idee chiave, aumenterai le tue probabilità di successo:
- Stima il costo e le probabilità di successo di ogni approccio.
- Prova un portafoglio di approcci.
- Individua le lezioni apprese e prova a migliorare il sistema una cosa alla volta.
- Pianifica i fallimenti.
A volte un approccio precoce porta a una svolta. Qualcuno potrebbe scoprire un bug nella pipeline di generazione dei dati o nella suddivisione addestramento-convalida. Con una buona pianificazione e una documentazione completa, aumenti le probabilità di trovare un modello che risolva il problema della tua attività prima del previsto.