L'intelligenza artificiale di Deepmind sta imparando l'arte della programmazione
Gregorio Barbiere
Nel campo dell’informatica forse non esiste compito più fondamentale dell’ordinamento. Bolla, accumula, unisci: fai la tua scelta. I metodi per riordinare i dati all'interno di un computer sono stati teorizzati fino alla morte, sono serviti come esercizi pratici per milioni di principianti e sono stati ottimizzati per decenni da sviluppatori esperti. Digita una funzione sort() in qualsiasi linguaggio di programmazione ed è un codice su cui puoi fare affidamento. Non toccarlo. Funziona già alla grande.
Ma l’anno scorso, un sistema di intelligenza artificiale sviluppato dagli ingegneri di Deepmind di Google è migliorato abbastanza da essere importante. Al sistema, che Deepmind chiama AlphaDev, è stato assegnato il compito di trovare un nuovo modo per ordinare brevi sequenze di numeri in C++, il popolare linguaggio di codifica. Significava andare sotto il cofano e fare in modo che l’intelligenza artificiale creasse nuovi algoritmi in codice assembly, le istruzioni che colmano il divario tra linguaggi di programmazione come C++ e hardware del computer. Quando uno sviluppatore C++ dice al computer di "ordinare", questi comandi vengono convertiti in codice leggibile dalla macchina che dice alla memoria e al processore del computer esattamente cosa fare: dove spostare i dati e come modificarli. È dove i pezzi incontrano il metallo.
L'esperimento ha funzionato. Dall’aprile dello scorso anno, il C++ funziona leggermente più velocemente, grazie a un nuovo set di algoritmi di ordinamento inventati dall’intelligenza artificiale. Ma secondo gli ingegneri di AlphaDev, che hanno descritto il lavoro oggi su Nature, questo è solo il primo passo. "Vogliamo ottimizzare l'intero stack informatico", afferma Daniel Mankowitz, ricercatore dello staff di Deepmind che ha guidato il progetto di smistamento. Mankowitz afferma che AlphaDev ha già migliorato gli algoritmi non solo per l'ordinamento, ma anche per altre attività di base come l'hashing.
"Penso che questo lavoro sia incredibilmente entusiasmante", afferma Armando Solar-Lezama, esperto di sintesi di programmi al MIT, che non è stato coinvolto nella ricerca. È utile che l'intelligenza artificiale produca un nuovo algoritmo di ordinamento; è molto più impegnativo costruire un'intelligenza artificiale in grado di imparare a scrivere codice all'avanguardia in una varietà di compiti, afferma. Ciò significa che AlphaDev ha iniziato a imparare qualcosa di più fondamentale sull'arte stessa della codifica.
Ciò comporta ovviamente vincoli significativi. "Questi sono programmi piccolissimi", aggiunge, per un totale di non più di qualche dozzina di istruzioni in codice assembly. Ma questi piccoli programmi spesso rappresentano grossi colli di bottiglia per le prestazioni del computer, essendo stati ottimizzati fin dove le persone riescono a spingerli. Nel complesso, i nuovi algoritmi di ordinamento C++ di AlphaDev sono più efficienti dell'1,7% rispetto ai metodi precedenti nell'ordinamento di lunghe sequenze di numeri e fino al 70% più veloci per sequenze di cinque elementi. Su larga scala, questi miglioramenti si sommano, afferma Mankowitz. Da quando il codice scritto dall’intelligenza artificiale è stato inviato a Libc++, un’importante libreria open source per C++, stima che gli algoritmi siano stati utilizzati trilioni di volte al giorno.
Questi miglioramenti sono dovuti a una tecnica chiamata apprendimento per rinforzo, che è lo stesso approccio utilizzato per aiutare l’intelligenza artificiale di Deepmind a padroneggiare giochi come gli scacchi e il Go. Questo tipo di intelligenza artificiale impara facendo. Funziona trattando un determinato compito, come scrivere un programma di assemblaggio, come un gioco, in cui l'intelligenza artificiale riceve ricompense per aver effettuato mosse intelligenti che aumentano l'efficienza del programma. Nel corso del tempo, il sistema lavora per massimizzare questa ricompensa, risultando in una strategia Go vincente o in un programma di assemblaggio più rapido. Ciò differisce dal tipo di intelligenza artificiale presente nei modelli linguistici di grandi dimensioni come GPT-4, che si basano su enormi quantità di dati per imparare a scrivere parole o codice. È ottimo per produrre testi che rispecchiano il tono di Internet o per produrre segmenti comuni di codice. Ma non è così efficace nel produrre soluzioni nuove e all’avanguardia per affrontare sfide di codifica che l’intelligenza artificiale non ha mai visto prima.
Jeremy Bianco
Kate Knibbs
Jeremy Bianco
Gideon Lichfield
Come giocare a scacchi o a Go, scrivere codice assembly è un compito complicato e a tempo indeterminato, con molte mosse potenziali e molti modi per sbagliare. I linguaggi di programmazione moderni come C++ o Python mascherano il nocciolo dello spostamento dei dati con brevi comandi che rispecchiano il linguaggio umano. Negli anni '50, quando debuttarono questi linguaggi di "alto livello", alcuni credevano che il problema della programmazione fosse sostanzialmente risolto. Fino ad allora, la programmazione si limitava essenzialmente a perdere tempo in assembly, tanto che il Fortran, uno dei primi linguaggi di alto livello, fu inizialmente commercializzato come il "sistema di codifica automatica Fortran", perché i suoi comandi si traducevano sempre in codice assembly funzionante. "Fortran avrebbe scritto il codice meglio di quanto avrebbero potuto fare gli umani e senza bug", afferma Solar-Lezama. "Oggi sembra ridicolo. Ma era vero."