ll segreto di una buona programmazione potrebbe essere quello di ignorare tutto ciò che sappiamo sulla scrittura del codice. Almeno per l’intelligenza artificiale.

Sembra assurdo, ma la nuova intelligenza artificiale di DeepMind ha appena battuto circa il 50% dei codificatori umani in una gara di programmazione altamente competitiva. In apparenza i compiti sembrano relativamente semplici: a ogni coder viene presentato un problema in un linguaggio quotidiano e i concorrenti devono scrivere un programma per risolverlo il più velocemente possibile e, si spera, senza errori.

Ma si tratta di una sfida enorme per i codificatori di intelligenza artificiale. Gli agenti devono prima capire il compito – cosa che viene naturale agli esseri umani – e poi generare codice per problemi difficili che sfidano anche i migliori programmatori umani.

I programmatori di IA non sono una novità. Nel 2021, il laboratorio di ricerca no-profit OpenAI ha rilasciato Codex, un programma in grado di utilizzare oltre una dozzina di linguaggi di programmazione e di adattarsi al linguaggio naturale di tutti i giorni. Ciò che distingue la versione dell’intelligenza artificiale di DeepMind, denominata AlphaCode, è in parte ciò di cui non ha bisogno.

A differenza delle precedenti AI, AlphaCode è relativamente ingenuo. Non ha alcuna conoscenza della sintassi o della struttura del codice informatico. Piuttosto, impara in modo simile ai bambini che imparano la loro prima lingua. AlphaCode adotta un approccio “solo dati”. Impara osservando i secchi di codice esistenti e alla fine è in grado di decostruire e combinare in modo flessibile “parole” e “frasi” – in questo caso, frammenti di codice – per risolvere nuovi problemi.

Quando è stata messa alla prova con il CodeContest, il tormentone della programmazione competitiva, l’intelligenza artificiale ha risolto circa il 30% dei problemi, battendo la metà dei concorrenti umani. Il tasso di successo può sembrare misero, ma si tratta di problemi incredibilmente complessi. Codex di OpenAI, per esempio, ha ottenuto un successo a una cifra quando ha affrontato benchmark simili.

“È davvero impressionante la performance che sono in grado di ottenere su alcuni problemi piuttosto impegnativi”, ha dichiarato il dottor Armando Solar-Lezama del MIT, che non ha partecipato alla ricerca.

I problemi affrontati da AlphaCode sono lontani dalle applicazioni di tutti i giorni: pensate piuttosto a un sofisticato torneo di matematica a scuola. È anche improbabile che l’intelligenza artificiale si occupi completamente della programmazione, poiché il suo codice è pieno di errori. Tuttavia, potrebbe occuparsi di compiti banali o offrire soluzioni fuori dagli schemi che sfuggono ai programmatori umani.

Forse ancora più importante, AlphaCode apre la strada a un nuovo modo di progettare i codificatori dell’IA: dimenticare l’esperienza passata e ascoltare semplicemente i dati.

“Può sembrare sorprendente che questa procedura abbia una qualche possibilità di creare codice corretto”, ha dichiarato il dottor J. Zico Kolter della Carnegie Mellon University e del Bosch Center for AI di Pittsburgh, che non ha partecipato alla ricerca. Ma AlphaCode dimostra che “se i dati e la complessità del modello sono adeguati, può emergere una struttura coerente”, anche se è discutibile che l’intelligenza artificiale “capisca” veramente il compito da svolgere.

Dal linguaggio al codice

AlphaCode è solo l’ultimo tentativo di sfruttare l’intelligenza artificiale per generare programmi migliori.

Codificare è un po’ come scrivere un libro di cucina. Ogni compito richiede diversi livelli di precisione: uno è la struttura generale del programma, simile a una panoramica della ricetta. Un altro è la descrizione dettagliata di ogni procedura con un linguaggio e una sintassi estremamente chiari, come la descrizione di ogni fase di ciò che si deve fare, la quantità di ogni ingrediente che deve essere inserita, a quale temperatura e con quali strumenti.

Ognuno di questi parametri, ad esempio il cacao per fare la cioccolata calda, sono chiamati “variabili” in un programma per computer. In parole povere, un programma deve definire le variabili – diciamo “c” per il cacao. Poi mescola “c” con altre variabili, come quelle per il latte e lo zucchero, per risolvere il problema finale: preparare una bella tazza fumante di cioccolata calda.

La parte difficile è tradurre tutto questo a un’intelligenza artificiale, soprattutto quando si digita una richiesta apparentemente semplice: fammi una cioccolata calda.

Nel 2021, Codex ha fatto la sua prima incursione nella scrittura di codice AI. L’idea del team era di affidarsi a GPT-3, un programma che ha conquistato il mondo con la sua abilità nell’interpretare e imitare il linguaggio umano. Da allora si è trasformato in ChatGPT, un chatbot divertente e non così malvagio che si impegna in conversazioni sorprendentemente intricate e piacevoli.

Qual è il punto? Come per le lingue, la codifica si basa su un sistema di variabili, sintassi e struttura. Se gli algoritmi esistenti funzionano per il linguaggio naturale, perché non utilizzare una strategia simile per la scrittura del codice?

L’intelligenza artificiale che codifica l’intelligenza artificiale

AlphaCode ha adottato questo approccio.

L’intelligenza artificiale si basa su un modello di apprendimento automatico chiamato “modello linguistico di grandi dimensioni”, che è alla base del GPT-3. L’aspetto critico è la presenza di molti dati. GPT-3, ad esempio, è stato alimentato con miliardi di parole provenienti da risorse online come libri digitali e articoli di Wikipedia per iniziare a “interpretare” il linguaggio umano. Codex è stato addestrato su oltre 100 gigabyte di dati prelevati da Github, una popolare libreria di software online, ma ha comunque fallito di fronte a problemi difficili.

AlphaCode eredita il “cuore” di Codex, in quanto funziona in modo simile a un modello linguistico di grandi dimensioni. Ma due aspetti lo distinguono, ha spiegato Kolter.

Il primo è costituito dai dati di addestramento. Oltre ad addestrare AlphaCode sul codice di Github, il team di DeepMind ha costruito un set di dati personalizzato da CodeContests da due set di dati precedenti, con oltre 13.500 sfide. Ciascuna di esse era corredata da una spiegazione del compito da svolgere e da molteplici soluzioni potenziali in più lingue. Il risultato è un’enorme libreria di dati di addestramento adattati alla sfida in questione.

“Probabilmente, la lezione più importante per qualsiasi sistema di ML [machine learning] è che deve essere addestrato su dati simili a quelli che vedrà in fase di esecuzione”, ha detto Kolter.

Il secondo trucco è la forza dei numeri. Quando un’intelligenza artificiale scrive il codice pezzo per pezzo (o token per token), è facile che scriva codice non valido o errato, causando il blocco del programma o risultati stravaganti. AlphaCode affronta il problema generando oltre un milione di soluzioni potenziali per un singolo problema, una quantità molto maggiore rispetto ai precedenti tentativi di IA.

Per verificare la correttezza e restringere i risultati, l’intelligenza artificiale sottopone le soluzioni candidate a semplici test. Poi raggruppa le soluzioni simili in modo da individuarne una sola da sottoporre alla sfida. È la fase più innovativa, ha dichiarato il dottor Kevin Ellis della Cornell University, che non ha partecipato al lavoro.

Il sistema ha funzionato sorprendentemente bene. Quando è stato messo alla prova con una nuova serie di problemi, AlphaCode ha proposto potenziali soluzioni in due linguaggi di calcolo, Python o C++, eliminando al tempo stesso quelle più assurde. Messo a confronto con oltre 5.000 partecipanti umani, l’intelligenza artificiale ha superato circa il 45% dei programmatori esperti.

Una nuova generazione di programmatori di intelligenza artificiale

Pur non essendo ancora al livello degli esseri umani, il punto di forza di AlphaCode è la sua assoluta ingegnosità.

Invece di copiare e incollare sezioni di codice di addestramento precedente, AlphaCode è riuscito a creare frammenti intelligenti senza copiare grandi parti di codice o di logica nel suo “materiale di lettura”. Questa creatività potrebbe essere dovuta al suo metodo di apprendimento basato sui dati.

Ciò che manca ad AlphaCode è “qualsiasi progetto architettonico nel modello di apprendimento automatico che riguardi… la generazione di codice”, ha detto Kolter. Scrivere codice informatico è come costruire un edificio sofisticato: è altamente strutturato, con programmi che necessitano di una sintassi definita con un contesto chiaramente incorporato per generare una soluzione.

AlphaCode non fa nulla di tutto ciò. Al contrario, genera codice in modo simile a come i grandi modelli linguistici generano il testo, scrivendo l’intero programma e controllando poi i potenziali errori (come scrittore, questo mi sembra stranamente familiare). Il modo in cui l’intelligenza artificiale riesce a ottenere questo risultato rimane misterioso: i meccanismi interni del processo sono sepolti all’interno della sua ancora imperscrutabile “mente”.

Questo non significa che AlphaCode sia pronto a prendere il controllo della programmazione. A volte prende decisioni che lasciano perplessi, come generare una variabile ma non utilizzarla. C’è anche il pericolo che possa memorizzare piccoli schemi da una quantità limitata di esempi – un gruppo di gatti che mi ha graffiato uguale a tutti i gatti sono cattivi – e l’output di questi schemi. Questo potrebbe trasformarli in pappagalli stocastici, ha spiegato Kolter, ovvero in IA che non capiscono il problema ma sono in grado di riprodurre, o “imitare alla cieca”, le soluzioni probabili.

Come la maggior parte degli algoritmi di apprendimento automatico, anche AlphaCode ha bisogno di una potenza di calcolo che pochi possono sfruttare, anche se il codice è stato rilasciato pubblicamente.

Tuttavia, lo studio suggerisce un percorso alternativo per i codificatori autonomi di IA. Piuttosto che dotare le macchine della tradizionale saggezza di programmazione, potremmo considerare che questo passaggio non è sempre necessario. Piuttosto, come nell’affrontare il linguaggio naturale, tutto ciò di cui un codificatore di IA ha bisogno per avere successo sono i dati e la scala.

Kolter l’ha detto meglio: “AlphaCode ha lanciato il dado. I dataset sono pubblici. Vediamo cosa ci riserva il futuro”.

Immagine: DeepMind

Articolo di Shelly Fan, tradotto e adattato da Saverio Fidecicchi e rinvenibile al link https://singularityhub.com/2022/12/13/deepminds-alphacode-conquers-coding-performing-as-well-as-humans/

Article by Shelly Fan, translated and adapted by Saverio Fidecicchi and found at the link https://singularityhub.com/2022/12/13/deepminds-alphacode-conquers-coding-performing-as-well-as-humans/