Arriva il deep coding. Google Cloud ML e Microsoft DeepCoder sono il primo passo verso l’automazione della programmazione?
Oggi il “deep” va di moda. Abbiamo deep learning, deep vision, deep writing… Quindi perché non deep coding? Sviluppare intelligenze artificiali oggi è un processo laborioso, si sa. Il deep coding si basa sull’idea di automatizzare la programmazione. Rendere le macchine in grado di svilupparsi da sole con il deep coding è l’ultima frontiera dell’automazione, forse quella definitiva.
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)
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, Pichai riconosceva una verità lapalissiana: sviluppare reti neurali è spesso tedioso. Quindi perché non far fare il lavoro sporco a un’altra rete neurale? Così Google ha presentato Cloud Auto ML, il suo nuovo paradigma di AI-as-a-Service.
Cloud Auto ML
L’idea che sta alla base di questo progetto è appunto di sollevare gli sviluppatori di reti neurali dal “lavoro sporco” di configurazione e taratura, delegando tutto alle reti neurali. Questo lavoro sporco 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 dal deep coding di 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.
Il deeep coding di 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.
Si tratta in pratica di un sistema a reti antagoniste (Generative Adversarial Networks, già introdotte qui). Una rete neurale, detta “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.
Alcune architetture autogenerate
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.

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 ricorsive LSTM funzionano meglio che le reti ricorsive 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.
DeepCoder, la risposta di Microsoft
Ma non c’è solo Google. Anche Microsoft lavora sul concetto di deep coding, con risultati molto interessanti. 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”.
IPS (Inductive Program Synthesis)
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. Le predizioni erano 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. Il deep coding è un processo di sintesi e 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.
Link
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
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