OpenAI Codex mostra i limiti dei grandi modelli linguistici
In un nuovo documento, i ricercatori di OpenAI hanno rivelato dettagli su Codex , un modello di deep learning che genera codice sorgente software. Codex potenzia Copilot, uno strumento “programmatore di coppia AI” sviluppato congiuntamente da OpenAI e GitHub. Copilot è attualmente disponibile in modalità beta test per un numero limitato di utenti.
Il documento è una lettura affascinante che spiega il processo attraverso il quale gli scienziati di OpenAI sono riusciti a riutilizzare il loro modello linguistico di punta GPT-3 per creare Codex. Ma, cosa ancora più importante, il documento getta anche la luce tanto necessaria su quanto ci si può fidare dell’apprendimento profondo nella programmazione.
Il teorema ‘nessun pranzo gratis’
Codex è un discendente di GPT-3, un enorme modello di linguaggio di deep learning rilasciato lo scorso anno. La complessità dei modelli di deep learning è spesso misurata dal numero di parametri che hanno. In generale, la capacità di apprendimento di un modello aumenta con il numero di parametri. GPT-3 è arrivato con 175 miliardi di parametri, più di due ordini di grandezza più grandi del suo predecessore, GPT-2 (1,5 miliardi di parametri). GPT-3 è stato addestrato su più di 600 gigabyte, più di 50 volte più grande del set di dati di addestramento di GPT-2.
A parte l’enorme aumento delle dimensioni, la principale innovazione del GPT-3 era l'”apprendimento a breve termine”, la capacità di eseguire compiti per cui non era stato addestrato. Il documento che ha introdotto il GPT-3 era intitolato “I modelli linguistici sono studenti di pochi colpi” e affermava: “Qui dimostriamo che l’aumento dei modelli linguistici migliora notevolmente le prestazioni indipendenti dai compiti, a pochi colpi [enfasi mia], a volte raggiungendo persino la competitività con precedenti approcci di messa a punto all’avanguardia”.
Fondamentalmente, la premessa era che un modello abbastanza grande addestrato su un ampio corpus di testo può eguagliare o superare diversi modelli specializzati per compiti specifici.
Ma secondo il nuovo documento di OpenAI, nessuna delle varie versioni di GPT-3 è stata in grado di risolvere nessuno dei problemi di codifica utilizzati per valutare il Codex. Per essere onesti, non c’erano esempi di codifica nel set di dati di addestramento di GPT-3, quindi non possiamo aspettarci che sia in grado di codificare. Ma gli scienziati di OpenAI hanno anche testato GPT-J, un modello da 6 miliardi di parametri addestrato su The Pile, un set di dati da 800 gigabyte che include 95 gigabyte di GitHub e 32 gigabyte di dati StackExchange. GPT-J ha risolto l’11,4% dei problemi di codifica. Codex, una versione del parametro da 12 miliardi di GPT-3 ottimizzata su 159 gigabyte di esempi di codice da GitHub, ha risolto il 28,8% dei problemi. Una versione separata del Codex, chiamata Codex-S, che è stata messa a punto tramite l’apprendimento supervisionato, ha aumentato le prestazioni al 37,7% (altri modelli GPT e Codex vengono addestrati tramite l’apprendimento non supervisionato).
Il Codex dimostra che l’apprendimento automatico è ancora governato dal teorema del ” no free lunch ” (NFL), il che significa che la generalizzazione va a scapito delle prestazioni. In altre parole, i modelli di apprendimento automatico sono più accurati quando sono progettati per risolvere un problema specifico. D’altra parte, quando il loro dominio del problema viene ampliato, le loro prestazioni diminuiscono.
Codex può eseguire un’attività specializzata (trasformare le descrizioni delle funzioni e le firme in codice sorgente) con elevata precisione al costo di scarse capacità di elaborazione del linguaggio naturale. D’altra parte, GPT-3 è un modello di linguaggio generale che può generare un testo decente su molti argomenti (inclusi concetti di programmazione complicati) ma non può scrivere una singola riga di codice.
Dimensioni vs. costo
Gli esperimenti dei ricercatori di OpenAI mostrano che le prestazioni del Codex sono migliorate man mano che aumentavano le dimensioni del modello di apprendimento automatico. Con 300 milioni di parametri, Codex ha risolto il 13,2 percento dei problemi di valutazione contro il 28,8 percento delle prestazioni del modello da 12 miliardi di parametri.
Ma la versione completa di GPT-3 è di 175 miliardi di parametri, un ordine di grandezza più grande di quello usato per creare il Codex. L’addestramento del modello più grande sui dati di addestramento del Codex non produrrebbe risultati migliori?
Una probabile ragione per fermarsi a 12 miliardi potrebbe essere la dimensione del set di dati. Un modello Codex più grande avrebbe bisogno di un set di dati più grande. Addestrarlo su un corpus di 159 gigabyte probabilmente causerebbe un sovradattamento, in cui il modello diventa molto bravo a memorizzare e provare i suoi esempi di addestramento e molto cattivo a gestire situazioni nuove. La raccolta e la gestione di set di dati più grandi è un processo costoso e dispendioso in termini di tempo.
Un problema altrettanto fastidioso sarebbe il costo del Codex. A parte un esperimento scientifico, il Codex doveva diventare la spina dorsale di un prodotto futuro che può generare profitti per un laboratorio di ricerca che è quasi di proprietà di un’entità commerciale. Come ho già discusso in precedenza, i costi di formazione e gestione del modello GPT-3 da 175 miliardi renderebbero molto difficile sviluppare un modello di business redditizio attorno ad esso.
Tuttavia, una versione più piccola ma ottimizzata di GPT-3 sarebbe molto più gestibile in termini di profitti e perdite.
Infine, come mostrano gli esperimenti di OpenAI, il rapporto dimensioni/prestazioni del Codex segue una scala logaritmica. Ciò significa che i miglioramenti delle prestazioni si riducono gradualmente man mano che si aumentano le dimensioni del modello . Pertanto, i costi aggiuntivi per la raccolta di dati, l’addestramento e l’esecuzione del modello più grande potrebbero non valere il piccolo aumento delle prestazioni.
E nota che la generazione di codice è un mercato molto redditizio. Dati gli alti stipendi orari dei programmatori, anche risparmiare qualche ora di tempo di programmazione al mese sarebbe sufficiente per coprire le quote di abbonamento del Codex. In altri settori in cui la manodopera è meno costosa, l’automazione delle attività con modelli linguistici di grandi dimensioni sarà più impegnativa dal punto di vista dei profitti e delle perdite.
Generazione e comprensione del codice
Una cosa che va ricordata è che, non importa quanto affascinante sia l’output del Codex, il modello di deep learning non comprende la programmazione. Come tutti gli altri modelli linguistici basati sull’apprendimento profondo, Codex acquisisce correlazioni statistiche tra frammenti di codice.
Nel loro articolo, gli scienziati di OpenAI riconoscono che Codex “non è un campione efficiente da addestrare” e che “anche gli sviluppatori esperti non incontrano nemmeno lontanamente questa quantità di codice nel corso delle loro carriere”.
Aggiungono inoltre che “uno studente forte che completa un corso introduttivo di informatica dovrebbe essere in grado di risolvere una frazione maggiore di problemi rispetto al Codex-12B”.
Ecco un estratto interessante dal documento: “Campioniamo i token dal Codex fino a quando non incontriamo una delle seguenti sequenze di stop: ‘\nclass’, ‘\ndef’, ‘\n#’, ‘\nif’ o ‘\nprint’ , poiché il modello continuerà a generare funzioni o istruzioni aggiuntive in caso contrario.
Ciò significa che Codex continuerà a generare codice senza pensare anche se ha già terminato il blocco che risolve il problema indicato nel prompt.
Questo è uno schema che funziona bene quando vuoi risolvere problemi semplici che si ripetono più e più volte. Ma quando si esegue lo zoom indietro e si tenta di scrivere un programma di grandi dimensioni che affronta un problema che deve essere risolto in più passaggi, i limiti del Codex diventano evidenti .
Gli scienziati di OpenAI hanno scoperto che all’aumentare del numero di componenti nella descrizione della funzione, le prestazioni del modello diminuivano in modo esponenziale.
“Questo comportamento è insolito per un programmatore umano, che dovrebbe essere in grado di implementare correttamente un programma per una catena di lunghezza arbitraria se può farlo per una catena di lunghezza due”, scrivono i ricercatori nel loro articolo.
Un’ulteriore esposizione della mancanza di comprensione da parte del Codex della struttura del programma e del codice è il fatto che “può consigliare codice sintatticamente errato o non definito e può invocare funzioni, variabili e attributi che sono indefiniti o al di fuori dell’ambito della base di codice”, secondo il documento . In pratica, ciò significa che in alcuni casi il modello di machine learning unirà insieme diversi pezzi di codice che ha visto in precedenza, anche se non combaciano.
Nel loro articolo, i ricercatori discutono anche di problemi di “disallineamento” nel Codex , in cui il modello può risolvere un problema specifico ma non lo fa a causa di vari errori. Codex utilizza il contenuto del file su cui stai lavorando come contesto per generare il suo output. Se il tuo codice contiene bug sottili (che è abbastanza normale se sei un programmatore umano), Codex potrebbe suggerire “deliberatamente” un codice che apparentemente sembra buono ma non è corretto, avvertono i ricercatori.
Il disallineamento è un fenomeno interessante che necessita di ulteriori studi. Ma gli esperimenti di OpenAI mostrano inoltre che “il disallineamento probabilmente persisterebbe e addirittura peggiorerebbe se i dati, i parametri e il tempo di addestramento fossero aumentati”, il che potrebbe essere un altro motivo per mantenere le dimensioni del modello bilanciate a 12 miliardi di parametri.
Il documento parla anche ampiamente della possibilità per il Codex di produrre codice deprecato e vulnerabile (che è degno di un articolo separato, quindi non ne ho discusso qui).
Uso responsabile e reporting dell’AI
Come ho detto dopo il rilascio di Copilot , “AI Pair Programmer”, il termine utilizzato sulla pagina Web di GitHub per Copilot, è impreciso.
Codex non è un programmatore. E non ti toglierà nemmeno il lavoro (se sei un programmatore). La codifica è solo una parte di ciò che fanno i programmatori. Gli scienziati di OpenAI osservano che nel suo stato attuale il Codex “può in qualche modo ridurre il costo di produzione del software aumentando la produttività dei programmatori”, ma non sostituirà le altre attività che gli sviluppatori di software svolgono regolarmente, come “conferire con i colleghi, scrivere specifiche di progettazione, e l’aggiornamento degli stack software esistenti”.
Scambiare Codex per un programmatore può anche portare a “un’eccessiva fiducia”, in cui un programmatore approva alla cieca qualsiasi codice generato dal modello senza rivederlo. Dati gli errori ovvi e subdoli che il Codex può commettere, trascurare questa minaccia può comportare rischi per la qualità e la sicurezza. “La supervisione e la vigilanza umana sono necessarie per un uso sicuro dei sistemi di generazione del codice come Codex”, avvertono i ricercatori di OpenAI nel loro articolo.
Nel complesso, la reazione della comunità di programmatori mostra che Codex è uno strumento molto utile con un impatto forse enorme sul futuro dell’industria del software. Allo stesso tempo, dato il clamore che circonda l’uscita di Copilot, è importante comprenderne le implicazioni indesiderate. A questo proposito, vale la pena elogiare le persone di OpenAI per aver studiato, documentato e segnalato responsabilmente i limiti e le minacce del Codex.