Nell’XI secolo, sant’Anselmo di Canterbury propose un argomento per l’esistenza di Dio che andava pressappoco cosi: Dio e, per definizione, l’essere piu grande che possiamo immaginare; un Dio che non esiste chiaramente non e grande quanto un Dio che esiste; ergo, Dio deve esistere. Questo e noto come argomento ontologico e ci sono abbastanza persone che trovano convincente che se ne stia ancora discutendo, quasi mille anni dopo. Alcuni critici dell’argomento ontologico sostengono che essenzialmente definisce un essere in esistenza e che non e cosi che funzionano le definizioni.

Dio non e l’unico essere che le persone hanno cercato di sostenere per l’esistenza. “Che una macchina ultraintelligente sia definita come una macchina che puo superare di gran lunga tutte le attivita intellettuali di qualsiasi uomo per quanto intelligente”, scrisse il matematico Irving John Good, nel 1965:

Poiche la progettazione di macchine e una di queste attivita intellettuali, una macchina ultraintelligente potrebbe progettare macchine ancora migliori; allora ci sarebbe senza dubbio una “esplosione di intelligenza” e l’intelligenza dell’uomo rimarrebbe molto indietro. Quindi la prima macchina ultraintelligente e l’ ultima invenzione che l’uomo abbia mai bisogno di fare, a condizione che la macchina sia abbastanza docile da dirci come tenerla sotto controllo.

L’idea di un’esplosione di intelligence e stata ripresa nel 1993 dall’autore e informatico Vernor Vinge, che l’ha definita “la singolarita”, e da allora l’idea ha raggiunto una certa popolarita tra tecnologi e filosofi. Libri come “Superintelligence: Paths, Dangers, Strategies” di Nick Bostrom, “Life 3.0: Being Human in the Age of Artificial Intelligence” di Max Tegmark e “Human Compatible: Artificial Intelligence and the Problem of Control” di Stuart Russell descrivono tutti scenari di “auto-miglioramento ricorsivo”, in cui un programma di intelligenza artificiale progetta ripetutamente una versione migliorata di se stesso.

Credo che le argomentazioni di Good e Anselm abbiano qualcosa in comune, ovvero che, in entrambi i casi, gran parte del lavoro viene svolto dalle definizioni iniziali. Queste definizioni sembrano superficialmente ragionevoli, motivo per cui sono generalmente accettate alla lettera, ma meritano un esame piu approfondito. Penso che piu esaminiamo i presupposti impliciti dell’argomento di Good, meno plausibile diventa l’idea di un’esplosione di intelligenza.

Come potrebbe essere l’auto-miglioramento ricorsivo per gli esseri umani? Per comodita, descriveremo l’intelligenza umana in termini di QI, non come un’approvazione del test del QI, ma perche il QI rappresenta l’idea che l’intelligenza puo essere utilmente catturata da un singolo numero, questa idea e una delle ipotesi fatte da sostenitori di un’esplosione di intelligence. In tal caso, l’auto-miglioramento ricorsivo sarebbe simile a questo: una volta che c’e una persona con un QI di, diciamo, 300, uno dei problemi che questa persona puo risolvere e come convertire una persona con un QI di 300 in una persona con un QI di 350. E poi una persona con un QI di 350 sara in grado di risolvere il problema piu difficile di convertire una persona con un QI di 350 in una persona con un QI di 400. E cosi via.

Abbiamo qualche motivo per pensare che questo sia il modo in cui funziona l’intelligenza? Non credo che lo facciamo. Ad esempio, ci sono molte persone che hanno un QI di 130 e c’e un numero minore di persone che hanno un QI di 160. Nessuno di loro e stato in grado di aumentare l’intelligenza di qualcuno con un QI da 70 a 100, il che e implicito essere un compito piu facile. Nessuno di loro puo nemmeno aumentare l’intelligenza degli animali, la cui intelligenza e considerata troppo bassa per essere misurata dai test del QI. Se aumentare il QI di qualcuno fosse un’attivita come risolvere una serie di enigmi matematici, dovremmo vederne esempi di successo nella fascia bassa, dove i problemi sono piu facili da risolvere. Ma non vediamo prove evidenti che cio accada.

Forse e perche al momento siamo troppo lontani dalla soglia necessaria; forse un QI di 300 e il minimo necessario per aumentare l’intelligenza di qualcuno. Ma, anche se fosse vero, non abbiamo ancora buone ragioni per credere che sia probabile un continuo miglioramento ricorsivo di se. Ad esempio, e del tutto possibile che il meglio che una persona con un QI di 300 puo fare sia aumentare il QI di un’altra persona a 200. Cio consentirebbe a una persona con un QI di 300 di concedere a tutti intorno a se un QI di 200, che francamente sarebbe essere un risultato straordinario. Ma questo ci lascerebbe ancora su un altopiano; non ci sarebbe alcun auto-miglioramento ricorsivo e nessuna esplosione di intelligenza.

L’ingegnere ricercatore IBM Emerson Pugh e accreditato di aver affermato: “Se il cervello umano fosse cosi semplice da poterlo comprendere, saremmo cosi semplici da non poterlo fare”. Questa affermazione ha un senso intuitivo, ma, soprattutto, possiamo indicare un esempio concreto a sostegno di essa: il microscopico nematode C. elegans. E probabilmente uno degli organismi meglio conosciuti della storia; gli scienziati hanno sequenziato il suo genoma e conoscono il lignaggio delle divisioni cellulari che danno origine a ciascuna delle novecentocinquantanove cellule somatiche nel suo corpo e hanno mappato ogni connessione tra i suoi trecentodue neuroni. Ma ancora non ne capiscono completamente il comportamento. Si stima che il cervello umano abbia in media ottantasei miliardi di neuroni e probabilmente avremo bisogno della maggior parte di essi per comprendere cosa sta succedendo nei trecentodue di C. elegans ; questo rapporto non fa ben sperare per le nostre prospettive di capire cosa sta succedendo dentro di noi.

Alcuni sostenitori di un’esplosione di intelligence sostengono che e possibile aumentare l’intelligenza di un sistema senza comprendere appieno come funziona il sistema. Implicano che i sistemi intelligenti, come il cervello umano o un programma di intelligenza artificiale, abbiano una o piu “manopole dell’intelligenza” nascoste e che dobbiamo solo essere abbastanza intelligenti per trovare le manopole. Non sono sicuro che attualmente abbiamo molti buoni candidati per queste manopole, quindi e difficile valutare la ragionevolezza di questa idea. Forse il modo piu comunemente suggerito per “accendere” l’intelligenza artificiale e aumentare la velocita dell’hardware su cui viene eseguito un programma. Alcuni hanno detto che, una volta creato un software intelligente come un essere umano, eseguire il software su un computer piu veloce creera effettivamente un’intelligenza sovrumana. Questo porterebbe a un’esplosione di intelligence?

Immaginiamo di avere un programma di intelligenza artificiale altrettanto intelligente e capace di un normale programmatore di computer umano. Supponiamo ora di aumentare la velocita del suo computer cento volte e di far funzionare il programma per un anno. Sarebbe l’equivalente di rinchiudere un essere umano medio in una stanza per cento anni, senza nient’altro da fare se non lavorare su un compito di programmazione assegnato. Molti esseri umani la considererebbero una pena detentiva infernale, ma, ai fini di questo scenario, immaginiamo che l’IA non si senta allo stesso modo. Assumiamo che l’IA abbia tutte le proprieta desiderabili di un essere umano ma non possieda nessuna delle altre proprieta che agirebbero da ostacolo in questo scenario, come il bisogno di novita o il desiderio di fare le proprie scelte. (Non mi e chiaro se questa sia un’ipotesi ragionevole,

Quindi ora abbiamo un’IA equivalente all’uomo che sta spendendo cento anni persona per un singolo compito. Che tipo di risultati possiamo aspettarci che ottenga? Supponiamo che questa IA possa scrivere ed eseguire il debug di mille righe di codice al giorno, il che e un livello prodigioso di produttivita. A quel ritmo, un secolo sarebbe quasi sufficiente per scrivere da solo Windows XP, che presumibilmente consisteva in quarantacinque milioni di righe di codice. E un risultato impressionante, ma ben lontano dalla sua capacita di scrivere un’IA piu intelligente di se stessa. La creazione di un’IA piu intelligente richiede piu della capacita di scrivere un buon codice; richiederebbe un importante passo avanti nella ricerca sull’intelligenza artificiale, e non e qualcosa che un programmatore di computer medio e garantito per ottenere, non importa quanto tempo gli dedichi.

Quando si sviluppa un software, in genere si utilizza un programma noto come compilatore. Il compilatore prende il codice sorgente che hai scritto, in un linguaggio come il C, e lo traduce in un programma eseguibile: un file costituito da codice macchina che il computer comprende. Supponiamo che tu non sia soddisfatto del compilatore C che stai utilizzando, chiamalo CompilerZero. CompilerZero impiega molto tempo per elaborare il codice sorgente e i programmi che genera richiedono molto tempo per essere eseguiti. Sei sicuro di poter fare di meglio, quindi scrivi un nuovo compilatore C, uno che generi codice macchina piu efficiente; questo nuovo e noto come compilatore di ottimizzazione.

Hai scritto il tuo compilatore di ottimizzazione in C, quindi puoi usare CompilerZero per tradurre il tuo codice sorgente in un programma eseguibile. Chiama questo programma CompilerOne. Grazie al tuo ingegno, CompilerOne ora genera programmi che funzionano piu rapidamente. Ma CompilerOne stesso richiede ancora molto tempo per essere eseguito, perche e un prodotto di CompilerZero. Cosa sai fare?

E possibile utilizzare CompilerOne per compilare se stesso. Fornisci a CompilerOne il proprio codice sorgente e genera un nuovo file eseguibile costituito da codice macchina piu efficiente. Chiama questo CompilerTwo. CompilerTwo genera anche programmi che vengono eseguiti molto rapidamente, ma ha l’ulteriore vantaggio di funzionare molto rapidamente. Congratulazioni: hai scritto un programma per computer che si auto-migliora.

Ma questo e il massimo. Se inserisci lo stesso codice sorgente in CompilerTwo, tutto cio che fa e generare un’altra copia di CompilerTwo. Non puo creare un CompilerThree e avviare una serie crescente di compilatori sempre migliori. Se vuoi un compilatore che generi programmi che funzionano in modo follemente veloce, dovrai cercare altrove per ottenerlo.

La tecnica per far compilare un compilatore stesso e nota come bootstrapping ed e stata utilizzata dagli anni Sessanta. L’ottimizzazione dei compilatori ha fatto molta strada da allora, quindi le differenze tra un CompilerZero e un CompilerTwo possono essere molto piu grandi di prima, ma tutti questi progressi sono stati raggiunti da programmatori umani piuttosto che da compilatori che si sono migliorati. E, sebbene i compilatori siano molto diversi dai programmi di intelligenza artificiale, offrono un utile precedente per pensare all’idea di un’esplosione di intelligenza, perche sono programmi per computer che generano altri programmi per computer e perche quando lo fanno l’ottimizzazione e spesso una priorita.

Piu conosci l’uso previsto di un programma, meglio puoi ottimizzarne il codice. I programmatori umani a volte ottimizzano manualmente le sezioni di un programma, il che significa che specificano direttamente le istruzioni della macchina; gli esseri umani possono scrivere codice macchina piu efficiente di quello generato da un compilatore, perche sanno di piu su cio che il programma dovrebbe fare rispetto al compilatore. I compilatori che svolgono il miglior lavoro di ottimizzazione sono compilatori per quelli che sono noti come linguaggi specifici del dominio, progettati per scrivere categorie ristrette di programmi. Ad esempio, esiste un linguaggio di programmazione chiamato Halide progettato esclusivamente per la scrittura di programmi di elaborazione delle immagini. Poiche l’uso previsto di questi programmi e cosi specifico, un compilatore Halide puo generare codice valido quanto o migliore di quello che puo scrivere un programmatore umano. Ma un compilatore Halide non puo compilarsi da solo, perche un linguaggio ottimizzato per l’elaborazione delle immagini non ha tutte le funzionalita necessarie per scrivere un compilatore. E necessario un linguaggio generico per farlo e i compilatori generici hanno problemi a far corrispondere i programmatori umani quando si tratta di generare codice macchina.