“Batch” ed “On line” learning
January 26, 2024 2024-03-06 11:20“Batch” ed “On line” learning
A cura di Pier Giuseppe Giribone
I precedenti articoli hanno riguardato la classificazione degli algoritmi di Machine learning, suddivisi in funzione della tipologia di addestramento, con o senza la necessità di una supervisione umana.
Tale criterio ha portato alla seguente distinzione: sistemi supervisionati, non supervisionati, semi-supervisionati e “per rinforzo”.
Un’altra modalità di categorizzazione molto diffusa dipende dal sistema, qualora sia in grado di imparare incrementalmente al volo oppure no.
Nel batch learning, il sistema è incapace di imparare incrementalmente: questo deve essere infatti addestrato impiegando tutti i dati disponibili in quel momento. Questo procedimento di training richiede generalmente molto tempo macchina ed occupa intensivamente le risorse del computer, conseguentemente è sviluppato tendenzialmente off-line.
Il sistema quindi viene dapprima addestrato e poi messo in produzione, dove svolge la sua mansione senza la possibilità di apprendere concetti nuovi: limitandosi ad applicare ciò che ha imparato durante la training phase. Un algoritmo che funziona in tale modalità è caratterizzato da un offline learning.
Conseguentemente, se si desidera addestrare con nuovi dati un sistema basato sul batch learning (ad esempio fargli riconoscere una nuova tipologia di spam, nel caso di un classificatore di mail), è necessario riaddestrare una nuova versione del sistema operando da zero sull’intero dataset (quindi non solo con i nuovi dati, ma anche con tutti i precedenti). Una volta terminata la fase di training, si rende necessario fermare il vecchio sistema in produzione e rimpiazzarlo con il nuovo.
Fortunatamente, l’intero processo di addestramento, comprensivo della verifica delle prestazioni e della messa in produzione, può essere automatizzato abbastanza facilmente, quindi anche un sistema di Machine Learning, progettato in questo modo, può adattarsi al cambiamento dell’ambiente circostante. Richiede semplicemente l’aggiornamento dei dati e si procede ad addestrare una nuova versione del sistema da zero ogni qualvolta lo si ritenga necessario.
Questa soluzione è semplice e spesso funzionale, ma l’addestramento effettuato sul’intero set di dati può impiegare numerose ore di elaborazione. Tipicamente avviene durante fasi programmate in funzione del tempo di elaborazione, ad esempio ogni giorno nella notte, oppure settimanalmente nel weekend.
Qualora il sistema necessitasse un adattamento ai nuovi dati più rapido (ad esempio per il forecasting dei prezzi delle azioni), allora si rende necessaria la ricerca di una soluzione maggiormente reattiva.
Si tenga presente che la fase di training sull’intero set di dati richiede una quantità non trascurabile di risorse (CPU, memoria per il calcolo, spazio nel disco,…) e se si dovesse processare un dataset di dimensioni significative per l’addestramento partendo sempre da capo ogni giorno, la procedura verrebbe a costare una ingente somma di denaro. Se poi i dati dovessero superare una certa quantità, volendo anche trascurare l’aspetto economico, risulterebbe facilmente infattibile per la limitazione tecnologica-infrastrutturale della macchina ospitante l’algoritmo.
Infine, se il sistema è progettato per imparare in autonomia e ha delle risorse limitate per farlo (ad esempio una app per smartphone) gestire una mole di training data non indifferente occupando quotidianamente e per ore risorse del dispositivo potrebbe risultare infattibile.
Fortunatamente, una opzione più ragionevole in tutte queste casistiche è quella di adottare algoritmi in grado di imparare incrementalmente.
Nell’online learning, si addestra il sistema incrementalmente, alimentandolo con istanze sequenziali di dati: sia singolarmente, che in piccoli gruppi detti mini-batches.
Ciascun passo di apprendimento è veloce ed economico, in modo tale che il sistema risulta in grado di imparare dai nuovi dati al volo, non appena questi sono disponibili.
L’online learning risulta particolarmente adatto per tutti i sistemi che ricevono dati per mezzo di un flusso continuo (ad esempio le quotazioni real time dei prezzi delle azioni) e pertanto necessitano di un adattamento rapido ed autonomo al cambiamento.
Questa è anche una ottima opzione qualora si abbiano risorse limitate per l’elaborazione numerica o lo storage di dati: una volta che l’online learning system ha migliorato la sua conoscenza corrente imparando dalle nuove istanze, queste non servono più a livello operativo e pertanto possono essere scartate (a meno che non si voglia contemplare la possibilità di tornare a uno stato precedente del sistema al fine di riprodurre i risultati ottenuti con il tipo di informazioni note al tempo dell’elaborazione). Il tracking e la possibilità di riprodurre un risultato può essere considerata una funzione fondamentale in un contesto bancario, ai fini dei controlli interni di secondo (risk management) e terzo livello (audit).
Gli algoritmi basati sull’online learning possono essere anche impiegati per addestrare sistemi su dataset di grandi dimensioni, che non possono essere processati in una sola volta dal computer a causa di vincoli di memoria. Questa modalità di addestramento viene definita out-of-core learning. L’algoritmo carica in memoria un sottoinsieme di tutti i dati a disposizione per il training, viene addestrato solo su questi e viene iterato il procedimento sintanto che non siano esauriti i sottoraggruppamenti da processare.
L’out-of-core learning è un tipo di apprendimento che viene fatto spesso offline, nel senso che non è conveniente condurlo “live” sul sistema in produzione. Si tenga quindi presente che la terminologia online learning può indurre ad una confusione terminologica. Per questa ragione, e al fine di non suscitare fraintendimenti, spesso l’online learning lo si preferisce identificare con il termine incremental learning.
Un parametro ritenuto di fondamentale importanza nella progettazione di un online learning system è la velocità di adattamento al cambiamento dei dati: questa proprietà è definita tasso di apprendimento (learning rate).
Se si imposta tale parametro ad un valore molto alto, il sistema si adatterà molto velocemente ai nuovi dati, ma tenderà anche a scordare più velocemente la conoscenza acquisita con i precedenti dati (non è desiderabile per uno spam filter identificare solo i più recenti espedienti di spam che gli sono stati mostrati nelle più vicine fasi di training).
Al contrario, se si imposta un tasso di apprendimento basso, il sistema sarà dotato di maggiore inerzia, o meglio, imparerà più lentamente, ma sarà caratterizzato da una minore sensibilità al rumore nei nuovi dati o a sequenze non rappresentative (outliers).
Una grande sfida nella progettazione di algoritmi basati sull’online learning è quella derivante da una alimentazione in apprendimento con parecchi dati nuovi non veritieri. Evidentemente le prestazioni complessive risultanti subirebbero gradualmente un declino. Se poi il sistema risulta “live” in produzione, sicuramente tale malfunzionamento verrebbe di certo notato dai clienti, con un conseguente non trascurabile rischio operativo e di immagine aziendale.
A titolo di esempio, dati non conformi potrebbero provenire dal malfunzionamento di un sensore, oppure da un agente che spamma un motore di ricerca al fine di aumentare il proprio ranking nell’ordine con il quale appaiono i risultati di tale ricerca.
Al fine di ridurre tale rischio, è necessario monitorare con continuità le performance del sistema. Qualora si avvertisse qualche problema, occorre essere pronti ad interrompere il flusso dei dati con il quale l’algoritmo viene alimentato e, qualora si dispongano di copie di back-up, ripristinare un suo stato precedente non ancora compromesso da tali dati fallaci.
Un controllo a monte del sistema è anche possibile condurlo agendo sul monitoraggio continuo dei dati in ingresso e, conseguentemente, intervenire qualora si notino delle anomalie, sia nella quantità di approvvigionamento, sia nel loro contenuto.
Cerca
Categorie