Deep coding: l’ultima frontiera della programmazione

Google Cloud ML e Microsoft DeepCoder: anche la programmazione si automatizza

Automatizzare la programmazione, l’ultima frontiera dell’automazione 4.0: stavolta ci siamo. Oggi i data scientist sono forse la figura più ricercata nel campo dell’Information Technology, una delle più pagate, e quindi anche una delle carriere più ambite.

Non è però tutto oro quello che luccica: noi magari ci immaginiamo il data scientist romanticamente come una specie di eletto che sviluppa il futuro dell’umanità, oppure come un genio un po’ folle alle prese con algoritmi indecifrabili. La realtà è però spesso molto più prosaica: sviluppare intelligenze artificiali e algoritmi di machine learning infatti è un lavoro spesso sporco e tedioso, che porta via gran parte del tempo in prove ed errori e continui riaggiustamenti.

“I was a boy
I was a stranger
I promised to be so happy
I was a beautiful day
I was a taller talk that I was born
And I was
ready to go
And the truth was so long ago
I was so happy and blue
I was thinking of you
I was a long long time ago
A long long time ago
And I was
ready to go
I was
A home on the road.”


(Canzone e sceneggiatura composte da Benjamin, una AI scritta da Ross Goodwin)

Proprio così esordiva Sundar Pichai il 17 maggio scorso, presentando Cloud Auto ML al Google I/O keynotes 2017:
“Designing better machine models today are really time consuming. We wanted to be possible for hundreds of thousands developers to use machine learning. So what better way to do it than getting neural nets to design better neural nets. We call this approach Auto ML, it’s learning to learn.”

In sintesi, sviluppare reti neurali è un processo macchinoso, quindi perché non farlo fare direttamente alle… macchine e automatizzare la programmazione?

Così Google ha presentato Cloud Auto ML, il suo nuovo paradigma di AI-As-A-Service.

Google Cloud Auto ML

L’idea che sta alla base del prodetto di Google è appunto quella di sollevare gli sviluppatori di reti neurali proprio da quel “lavoro sporco” di configurazione e taratura, delegando tutto direttamente alle reti neurali. Questo lavoraccio oggi porta via gran parte del tempo: si tratta per lo più di prove ed errori, tentando con determinati algoritmi e parametri, aggiustandoli dove necessario, o addirittura ripartendo da zero.

Il sistema fa girare migliaia di simulazioni per determinare quali aree del codice possono essere migliorate, effettua le modifiche e continua così finché non raggiunge l’obiettivo. Potremmo considerarla una bellissima rappresentazione del teorema della scimmia instancabile, secondo il quale una scimmia che preme tasti a caso su una macchina per scrivere, dato un tempo infinitamente lungo, prima o poi riuscirà a comporre qualsiasi testo prefissato.

Ma invece di una scimmia che scrive La Divina Commedia su una macchina per scrivere, quella prodotta da Google è un’intelligenza artificiale in grado di replicare la propria programmazione. E riesce a fare in ore, o addirittura minuti quello che i migliori sviluppatori umani fanno in settimane o mesi.

GoogleNet

Per esempio, l’architettura di GoogleNet (vedi sopra), ha richiesto molti anni di sperimentazione e raffinamenti. Tuttavia, AutoML è stato in grado di esplorare uno spazio di 1010 combinazioni di modelli di reti, arrivando a proporre soluzioni funzionanti in poco tempo. La cosa più sconcertante sono stati i miglioramenti introdotti tramite “trovate” abitualmente scartate dagli umani come poco utili, che però hanno avuto esiti come l’attenuazione del problema del vanishing gradient, ben noto a chi lavora col Deep Learning.

 

GoogleNet

In pratica si tratta di un sistema a reti antagoniste (Generative Adversarial Networks, già introdotte qui): una rete neurale “generatore” propone un modello di architettura, che può essere addestrata e valutata per le qualità in un compito particolare. Il feedback è utilizzato poi per informare il generatore su come migliorare il prossimo modello. Il processo è ripetuto migliaia di volte, generando nuove architetture, testandole e ritornando il feedback al generatore. Eventualmente il generatore impara ad assegnare probabilità più elevate ad aree dello spazio di ricerca architetturale che ottengono risultati migliori, e più basse a tipologie di architetture che ottengono risultati più bassi.

Giusto per dare un’idea del genere di architetture che ne risultano, viene presentato un esempio basato sulla predizione della prossima parola nell’ambito del Penn Treebank.

Sulla sinistra la rete neurale disegnata da esperti umani, mentre sulla destra quella generata da Auto ML

Questo approccio può anche aiutare a capire perché certi tipi di architetture funzionano così bene. L’architettura sulla destra presenta molti canali così che il gradiente possa fluire a ritroso, il che potrebbe aiutare a spiegare perché le reti ricorrenti LSTM funzionano meglio che le reti ricorrsive standard.

Auto ML, per ora solo nel campo della computer vision viene offerto da Google sulla sua piattaforma cloud, con caratteristiche interessanti come:

  • Transfer learning, ovvero la capacità di generalizzare usando quanto imparato con il training su un dataset, trasferendolo su un dataset differente.
  • Ottimizzazione automatizzata, sfruttando differenti tecniche già implementate sulla piattaforma.
  • Etichettatura delle immagini, un servizio di labelling e di “ripulitura” fatto da umani, per garantire dati di qualità per addestrare i propri modelli.

A tendere il servizio coprirà tutte le aree della IA su cloud, con la possibilità di sviluppare assemblando gli attuali servizi di Google come blocchetti.

Microsoft DeepCoder

Image result for microsoft deepcoder

Già nel 2015 il MIT aveva sviluppato Prophet, un sistema in grado di risolvere bug in programmi utilizzando parti di codice presi accedendo a repository esterni.

Un anno dopo Microsoft e l’università di Cambridge presentarono DeepCoder allo ICLR. L’obiettivo era sviluppare programmi in grado di essere consistenti con semplici (per ora) problemi matematici basandosi su esempi di input-output forniti. In altre parole “costruiscimi un programma in grado di generare queste soluzioni a partire da questi input”. Nello specifico questo approccio viene chiamato IPS (Inductive Program Synthesis), ovvero sintesi di programmi via induzione.

“All of a sudden people could be so much more productive. They could build systems that it [would be] impossible to build before. The potential for automation that this kind of technology offers could really signify an enormous [reduction] in the amount of effort it takes to produce code.”

Il metodo era di addestrare una rete neurale in grado di predire le proprietà del programma che aveva generato gli output presentati. I risultati delle predizioni vengono utilizzati per migliorare le tecniche di ricerca del sistema dai vari linguaggi di programmazione disponibili nei repository a cui si ha accesso. Infine le parti selezionate venivano assemblate tramite un linguaggio specifico del dominio (DSL), appositamente scelto.

I risultati mostravano un incremento di velocità decine di volte superiore a quelli più tradizionali, risolvendo problemi di difficoltà comparabile con quella dei più semplici problemi di gare di programmazione presenti sui siti web.

“questo approccio potrebbe permettere ai non-programmatori di descrivere semplicemente un’idea per un programma e lasciare che il sistema lo sviluppi”, dice Marc Brockschmidt, uno dei creatori di DeepCoder al Microsoft Research a Cambridge.

Non si tratta di “rubare” codice in giro, come qualche articolo ha riportato con allarmismo, ma di un processo di sintesi creazione vero e proprio. In fin dei conti, non è insolito per uno sviluppatore umano fare copia/incolla con qualche modifica (o anche senza) di codice scritto da altri.

 

Links

AI learns to write its own code by stealing from other programs

Microsoft’s AI writes code by looting other software

Microsoft’s AI is learning to write code by itself, not steal it

Google’s AI Is Now Creating Its Own AI

SUNDAR PICHAI SEES GOOGLE’S FUTURE IN THE SMARTEST CLOUD

GOOGLE’S LEARNING SOFTWARE LEARNS TO WRITE LEARNING SOFTWARE

Google’s AI can create better machine-learning code than the researchers who made it

DEEPCODER: LEARNING TO WRITE PROGRAMS

G. Briggs, M. Scheutz: “Sorry, I can’t do that”: Developing Mechanisms to Appropriately Reject Directives in Human-Robot Interactions

P. Schermerhorn et al.: DIARC: A Testbed for Natural Human-Robot Interaction

Cloud AutoML: Making AI accessible to every business

Google hopes to draw more cloud customers by making A.I. easier to use

DeepCoder: Microsoft’s New AI Writes Code For People Who Don’t Know Coding

Using Machine Learning to Explore Neural Network Architecture

Rispondi

This site uses Akismet to reduce spam. Learn how your comment data is processed.