Nota: questo blog è stato pubblicato per la prima volta il 2 febbraio 2022. In seguito alla pubblicazione dell’articolo su Science l’8 dicembre 2022, abbiamo apportato piccoli aggiornamenti al testo per riflettere ciò.
Risolvere nuovi problemi e stabilire una nuova pietra miliare nella programmazione competitiva
Creare soluzioni a problemi imprevisti è una seconda natura nell’intelligenza umana – il risultato di un pensiero critico informato dall’esperienza. La comunità dell’apprendimento automatico ha compiuto enormi progressi nella generazione e comprensione dei dati testuali, ma i progressi nella risoluzione dei problemi rimangono limitati a problemi matematici e di programmazione relativamente semplici, oppure al recupero e alla copia di soluzioni esistenti.
Nell’ambito di La missione di DeepMind per risolvere l’intelligenza, abbiamo creato un sistema chiamato AlphaCode che scrive programmi per computer a livello competitivo. AlphaCode ha raggiunto una posizione stimata nel 54% dei migliori partecipanti alle competizioni di programmazione risolvendo nuovi problemi che richiedono una combinazione di pensiero critico, logica, algoritmi, codifica e comprensione del linguaggio naturale.
Pubblicato sulla copertina di Scienceil nostro articolo descrive in dettaglio AlphaCode, che utilizza modelli linguistici basati su trasformatore per generare codice su una scala senza precedenti, quindi filtra in modo intelligente un piccolo insieme di programmi promettenti.
Abbiamo convalidato le nostre prestazioni utilizzando le competizioni ospitate su Codiciuna piattaforma popolare che ospita regolarmente gare che attirano decine di migliaia di partecipanti da tutto il mondo che vengono a testare le proprie capacità di programmazione. Abbiamo selezionato per la valutazione 10 concorsi recenti, ciascuno più recente rispetto ai nostri dati di formazione. AlphaCode si è posizionato quasi al livello del concorrente medio, segnando la prima volta che un sistema di generazione di codici AI ha raggiunto un livello competitivo di prestazioni nelle competizioni di programmazione.
Per aiutare gli altri a sviluppare i nostri risultati, abbiamo rilasciato il nostro set di dati di problemi e soluzioni di programmazione competitiva su GitHubcompresi test approfonditi per garantire che i programmi che superano questi test siano corretti: una caratteristica fondamentale che manca agli attuali set di dati. Ci auguriamo che questo benchmark porti a ulteriori innovazioni nella risoluzione dei problemi e nella generazione di codice.
La programmazione competitiva è un’attività popolare e stimolante; centinaia di migliaia di programmatori partecipano a gare di codifica per acquisire esperienza e mostrare le proprie capacità in modi divertenti e collaborativi. Durante le gare, i partecipanti ricevono una serie di lunghe descrizioni dei problemi e qualche ora per scrivere programmi per risolverli.
I problemi tipici includono trovare modi per posizionare strade ed edifici entro determinati vincoli o creare strategie per vincere giochi da tavolo personalizzati. I partecipanti vengono quindi classificati principalmente in base al numero di problemi che risolvono. Le aziende utilizzano questi concorsi come strumenti di reclutamento e tipi simili di problemi sono comuni nei processi di assunzione degli ingegneri del software.
“Posso tranquillamente dire che i risultati di AlphaCode hanno superato le mie aspettative. Ero scettico perché anche in semplici problemi competitivi spesso è necessario non solo implementare l’algoritmo, ma anche (e questa è la parte più difficile) inventarlo. AlphaCode è riuscito per esibirmi al livello di un nuovo promettente concorrente. Non vedo l’ora di vedere cosa ci aspetta!”
– Mike Mirzayanov, fondatore di Codeforces
Le capacità di risoluzione dei problemi richieste per eccellere in queste competizioni vanno oltre le capacità dei sistemi di intelligenza artificiale esistenti. Tuttavia, combinando i progressi nei modelli di trasformatori su larga scala (che hanno recentemente mostrato capacità promettenti di generare codice) con campionamento e filtraggio su larga scala, abbiamo compiuto progressi significativi nel numero di problemi che possiamo risolvere. Pre-addestriamo il nostro modello sul codice GitHub pubblico selezionato e lo ottimizziamo sul nostro set di dati di programmazione competitivo relativamente piccolo.
Al momento della valutazione, creiamo una quantità enorme di programmi C++ e Python per ogni problema, ordini di grandezza maggiori rispetto al lavoro precedente. Quindi filtriamo, raggruppiamo e riclassifichiamo tali soluzioni in un piccolo insieme di 10 programmi candidati che sottoponiamo per una valutazione esterna. Questo sistema automatizzato sostituisce il processo di tentativi ed errori della concorrenza di debug, compilazione, superamento dei test ed eventualmente invio.
Con il permesso di Codeforces, abbiamo valutato AlphaCode simulando la partecipazione a 10 concorsi recenti. L’imponente lavoro della comunità di programmazione competitiva ha creato un dominio in cui non è possibile risolvere i problemi attraverso scorciatoie come duplicare soluzioni viste prima o provare ogni algoritmo potenzialmente correlato. Invece, il nostro modello deve creare soluzioni nuove e interessanti.
Nel complesso, AlphaCode si colloca approssimativamente al livello del concorrente medio. Sebbene lungi dall’essere vincente nelle competizioni, questo risultato rappresenta un salto sostanziale nelle capacità di risoluzione dei problemi dell’intelligenza artificiale e speriamo che i nostri risultati ispirino la comunità competitiva di programmazione.
“Risolvere problemi di programmazione competitiva è una cosa davvero difficile da fare, che richiede sia buone capacità di codifica che creatività nella risoluzione dei problemi da parte degli esseri umani. Sono rimasto molto colpito dal fatto che AlphaCode possa fare progressi in quest’area, ed entusiasta di vedere come il modello utilizza la sua comprensione delle istruzioni per produrre codice e guidare la sua esplorazione casuale per creare soluzioni.”
– Petr Mitrichev, ingegnere software, Google e programmatore competitivo di livello mondiale
Affinché l’intelligenza artificiale possa aiutare l’umanità, i nostri sistemi devono essere in grado di sviluppare capacità di risoluzione dei problemi. AlphaCode si è classificato nel 54% dei migliori nelle competizioni di programmazione nel mondo reale, un progresso che dimostra il potenziale dei modelli di deep learning per attività che richiedono pensiero critico. Questi modelli sfruttano elegantemente il moderno apprendimento automatico per esprimere soluzioni ai problemi come codice, tornando alla radice del ragionamento simbolico dell’intelligenza artificiale di decenni fa. E questo è solo l’inizio.
La nostra esplorazione della generazione di codice lascia un ampio margine di miglioramento e suggerisce idee ancora più interessanti che potrebbero aiutare i programmatori a migliorare la propria produttività e aprire il campo a persone che attualmente non scrivono codice. Continueremo questa esplorazione e speriamo che ulteriori ricerche portino a strumenti per migliorare la programmazione e avvicinarci a un’intelligenza artificiale in grado di risolvere i problemi.
Visualizza le soluzioni di AlphaCode ed esplora il modello su alphacode.deepmind.com