Machine Learning: la prossima frontiera della programmazione?

Machine Learning

In ambito IT si sente sempre pià spesso parlare di machine learning o apprendimento automatico. Di cosa si tratta esattamente? Il machine learning è una delle aree più interessanti nel campo delle IA (Intelligenze Artificiali) il cui obiettivo è quello di implementare nelle IA degli algoritmi, modelli di apprendimento e comportamentali in grado di rendere “autonome” le IA stesse, senza che sia quindi necessario l’intervento umano per “guidarle” al compimento di specifiche task.

L’istruzione delle IA richiede un’elevata potenza computazionale (i supercomputer della top500 possono servire ad esempio a questo scopo) perchè gli algoritmi ed i modelli necessitano dell’analisi di una quantità considerevole di dati: in futuro ,con il perfezionamento della tecnologia, assisteremo probabilmente alla comparsa di IA così sofisticate in grado di trovare analogie tra determinati elementi “visionati” ed apprendere nuove nozioni, in maniera molto simile a quanto avviene per gli esseri umani.

Le potenzialità del machine learning sono innumerevoli così come i campi in qui potrebbe essere applicata. La programmazione è uno di questi, un settore animato da continui dibattiti su quali siano i linguaggi, procedure, approcci migliori da seguire, ad esempio: function vs object; container vs VM vs unikernel; microservizi contro nanoservizi; DevOps vs NoOps e via dicendo. Il problema è che, come osserva il portale High Scalability, si finisce per il non arrivare ad alcun accordo; anzi si stanno solo creando differenti modi per utilizzare funzioni che continuano ad essere “programmate” dagli essere umani. Perchè non lasciare che siano invece le “macchine” a scriverle al posto nostro, si domanda l’editorialista.

Programmazione “guidata” dal machine learning

Nell’articolo è citata prima di tutto una precedente chiccherata con Jeff Dean, uno dei guru dell’infrastruttura Google, nella quale si sottolinea come il deep learning possa sostituire i programmi scritti dagli esseri umani: “spesso quando hai a disposizione una schiera di complicati sottosistemi è richiesto [un quantitativo corrispondente di complesso codice per fare si che funzioni tutto a dovere]. Google preferisce che tu sia in grado di sostituire tutto questo con dati e semplici algoritmi”. 

Il cosidetto Machine Learning Driven Programming (MLDP) cambierà il ruolo del programmatore che non sarà escluso totolmente dal processo di “codifica” ma diventerà una sorta di specialista dei dati (data scientist). Attualmente la tecnologie a disposizione sono ancora acerbe, di conseguenza è possibile ad esempio insegnare alle IA parti (linee di codice) di un determinato programma ma non il come procedere alla realizzazione di un programma strutturalmente complesso; o ancora insegnare all’IA a giocare ad alcuni vecchi videogiochi ATARI in maniera simile agli esseri umani; o ancora lasciare che sia la macchina ad apprendere i parametri del programma la cui struttura è stata invece creata da un programmatore umano (come AlphaGo, il programma realizzato da Google Deepmind che è stato in grado di avere la meglio su un esperto “in carne ed ossa” di GO).

schema

Uno schema riassume il possibile futuro dei programmatori che diverranno dei data scientist (DS). E’ successivamente grazie al machine learning (ML) che sono codificati i programmi

Come già accennato, le IA necessitano di una ingente quantità di dati per essere istruite e le informazioni diffuse da Google non fanno altro che confermarlo: l’aziende starebbe infatti attingendo direttamente da GitHub il “materiale” necessario alle pratiche di deep learning, un archivio di data set opensource da oltre 3TB mutuato da quasi 2.8 milioni di repository e 2 miliardi circa di percorsi file differenti – indubbiamente una buona fonte dalla quale acquisire informazioni.

Problematiche varie del machine learning

Lavorare con i network neurali (delle reti di computer che tentano di risolvere determinati problemi autonomamente) è in ogni caso complesso perchè, sottolinea l’editorialista, in alcuni casi è come “interrogare il nostro subsconscio sulle motivazioni dietro all’esecuzione di un’azione cosciente”. Per chiarire meglio quanto detto è menzionata l’esperienza del team Google con RankBrain, un algoritmo machine learning inserito nel motore di ricerca più famoso del mondo per migliorare i risultati restituiti all’utente: affinchè fosse possibile capire perchè il sistema avesse effettuato determinate scelte, è stato necessario realizzare non solo degli adeguati strumenti di debugging ma anche dei modelli abbastanza comprensibili a posteriori. Altre problematiche sono state citate in un intervento (video) di Peter Norvig (Direttore della Ricerca presso Google):

  • l’impossibilità di capire dove si trovi esattamente un bug;
  • la difficoltà nel prevedere i risultati prodotti da un intervento diretto (correzione) sul sistema;
  • feedback loop. La generazione di dati all’interno del sistema può portare ad un feedback loop (generazione ciclica) in risposta al feedback stesso;
  • il sistema creato potrebbe non funzionare in un differente contesto;
  • i dati mutano nel tempo, bisogna quandi capire quali dati si intendono usare (non vi è ancora una risposta certa);
  • assenza di strumenti per il deploy del software sviluppato dalle macchine.

In conclusione e come molti avranno intuito, siamo ancora agli albori del machine learning: gli addetti ai lavori hanno ancora molta strada da percorrere prima di risolvere buona parte delle problematiche elencate.