Gli algoritmi di apprendimento automatico sono una novità rispetto a un modo di concepire la programmazione software. Un software basato su AI non è come ogni altro programma per computer. Questo interroga non solo gli ingegneri del software ma anche chi si interroga sulla natura degli algoritmi e sull'AI.
Nella programmazione che possiamo definire tradizionale, un programmatore umano deve pensare a tutte le possibili evenienze che si possono trovare e elaborare tutte le possibili risposte del software. Il modello tradizionale, esprimibile nell'espressione If This Then That, indica proprio questa modalità. Un'analisi della realtà secondo questo approccio vede il software come uno strumento per il problem solving mediante un pensiero computazionale. Nell'apprendimento automatico, il paradigma è profondamente differente, il programmatore umano fornisce semplicemente all'algoritmo il problema da risolvere e, attraverso un processo recursivo di tentativi ed errori - trial-and-error -, l'algoritmo trova soluzioni offrendole al programmatore.
Questa nuova modalità di approccio è stata resa possibile da molti fattori. Sinteticamente possiamo dire nell'esplosione della quantità di dati su cui è possibile l'elaborazione e dall'esponenziale capacità di calcolo di cui disponiamo grazie allo sviluppo dei microprocessori e alla miniaturizzazione. L'approccio a questa nuova modalità algoritmica ci sorprende in un primo senso per la qualità dei risultati che offre: spesso funziona molto bene. Gli algoritmi di apprendimento automatico sono ampiamente utilizzati per il riconoscimento facciale, la traduzione linguistica, la modellazione finanziaria, il riconoscimento delle immagini e la pubblicazione degli annunci. Chiunque oggi abbia un esperienza online oggi, con grande probabilità ha interagito con un algoritmo basato sull'apprendimento automatico.
Ma non sempre funziona bene. E anche questo ci sorprende. A volte il programmatore pensa che l'algoritmo stia comportandosi molto bene - performando nei termini tecnici -, solo per scoprire, guardando più da vicino il suo funzionamento, che l'"artefatto" software, questo intricato insieme di codice e dati su cui lavora, ha risolto un problema completamente diverso da quello pensato dal suo programmatore. Ad esempio, un algoritmo di riconoscimento delle immagini pensato e addestrato per riconoscere le pecore ha imparato a riconoscere l'erba e ha continuato a etichettare campi verdi vuoti come contenenti pecore.
Tuttavia quando accadono queste soluzioni inaspettate, cioè quando gli algoritmi di apprendimento automatico risolvono i problemi in modi imprevisti, i programmatori sebbene infastiditi dal fallimento delle loro intenzioni sono spesso affascinati e deliziati da una soluzione a un problema altro in un modo imprevisto. Questi esiti sono così interessanti che nel 2018 un gruppo di ricercatori ha scritto un articolo che ha raccolto decine di aneddoti che "hanno suscitato sorpresa e meraviglia nei ricercatori che li studiano". Vale la pena leggere il paper, così come i riferimenti ai casi specifici, ma mi sembra interessante elencare alcuni esempi.
Forzare le regole per vincere
Partiamo dall'uso di esseri biologici simulati. Una serie di studiosi fanno i loro studi con creature simulate per studiare come potrebbero essersi evolute diverse forme di locomozione, o per trovare nuovi modi con cui i robot possano camminare.
Gli algoritmi ci hanno sorpreso. Perché camminare, un'attività così poco ottimizzata, quando puoi cadere? In un caso, un robot simulato avrebbe dovuto evolvere per viaggiare il più rapidamente possibile. Ma invece di evolvere le gambe, si è semplicemente assemblato nella forma in un'alta torre e poi è caduto. Alcuni di questi robot hanno persino imparato a trasformare il movimento di caduta in una capriola, divenendo capaci di raggiungere un'ulteriore distanza.
Perché saltare quando puoi ondeggiare? Un altro gruppo di robot simulati si sarebbe dovuto evolvere in una forma di robot in grado di saltare. Ma il programmatore aveva inizialmente definito l'altezza di salto come l'altezza raggiunta dal blocco più alto, così - ancora una volta - i robot si sono evoluti per essere molto alti. Il programmatore ha cercato di risolvere questo problema definendo l'altezza di salto come l'altezza del blocco che era originariamente il più basso. In risposta, il robot sviluppò una gamba lunga e magra che poteva calciare in aria in una specie di barattolo appartenente al corpo del robot.
Fare l'hacking di Matrix, come nel film, per ottenere i superpoteri
L'energia potenziale non è l'unica fonte di energia che questi robot simulati hanno imparato a sfruttare. Dalle simulazioni sembra essere evidente che, come nel regno della biologia, se una fonte di energia è disponibile, qualcosa si evolverà per usarla.
Errori di arrotondamento in virgola mobile come fonte di energia: in una simulazione, i robot hanno appreso che a causa di piccoli errori di arrotondamento nei calcoli matematici del software ottenevano un po' di energia extra con il movimento. Hanno imparato a contrarsi rapidamente, generando molta energia libera da sfruttare. Il programmatore notò il problema quando, nella simulazioni, i robot iniziarono a nuotare in modo straordinariamente veloce.
Raccogliere energia dall'urto col pavimento: un'altra simulazione ha avuto alcuni problemi con il calcolo per il rilevamento delle collisioni e i robot hanno imparato ad usare questa discrepanza. In questo modo venivano sparati verso l'alto. I robot hanno imparato a vibrare rapidamente contro il pavimento, scontrandosi ripetutamente con esso per generare energia extra.
Battere le mani per volare: in un'altra simulazione, i robot hanno imparato a sfruttare un altro bug di rilevamento della collisione che li spingeva in alto nell'aria ogni volta che si schiantavano insieme due delle loro parti del corpo. I voli di liena sarebbero molto diversi se questo metodo funzionasse nella vita reale.
Scoperta di mosse segrete: gli algoritmi di gioco per computer sono davvero bravi a scoprire il tipo di anomalie di Matrix che gli umani di solito imparano a sfruttare per la velocità. Un algoritmo evolutivo che ha giocato al vecchio gioco Atari Q*bert ha scoperto un bug precedentemente sconosciuto in cui poteva eseguire una serie molto specifica di mosse alla fine di un livello e invece di passare al livello successivo portare il sistema in una condizione in cui tutti i quadrati avrebbero iniziato a lampeggiare rapidamente e il giocatore iniziava ad accumulare un numero enorme di punti.
Un algoritmo che ha giocato al famoso videogioco Doom ha individuato una combinazione speciale di movimenti che impedirebbe ai nemici di sparare palle di fuoco - ma funziona solo nella versione di gioco elaborata per l'algoritmo stesso. La versione del gioco, per i più curiosi, può essere giocata qui.
Sparare alla luna: in uno degli esempi più agghiaccianti, c'era un algoritmo che doveva calcolare come applicare una forza minima a un aereo per farlo atterrare su una portaerei. L'algoritmo ad apprendimento automatico ha scoperto che se applicava una enorme forza, avrebbe sovraccaricato la memoria del programma che lo avrebbe invece capita come una forza molto piccola. Trasformato nella realtà il pilota sarebbe morto ma, dalla prospettiva dell'algoritmo, si otteneva un punteggio perfetto.
Risoluzione dei problemi distruttiva
Qualcosa apparentemente benigno come un algoritmo di ordinamento delle liste potrebbe anche risolvere problemi in modi piuttosto innocui o con soluzione alquanto sinistre.
Beh, non è ordinato: per esempio un algoritmo doveva ordinare un elenco di numeri. Invece, ha imparato che se cancellava l'elenco non ci sarebbe stato più tecnicamente nulla da ordinare.
Passare il test della Kobayashi Maru: Nell'universo di Star Trek, il test della Kobayashi Maru è una simulazione di addestramento dell'Accademia della Flotta Stellare ideato per mettere alla prova le capacità di comando e il carattere del cadetto in situazioni senza soluzione. Nella simulazione i cadetti hanno i ruoli di ufficiali di plancia e stanno pattugliando la Zona Neutrale Klingon; viene ricevuta una chiamata di soccorso dall'astronave Kobayashi Maru, una nave da carico civile che ha colpito una mina gravitazionale. Nei pressi della nave in pericolo, si stanno posizionando anche gli incrociatori Klingon. Il comandante della nave soccorritrice deve decidere se salvare la Kobayashi Maru, violando il trattato con i Klingon entrando nella Zona Neutrale e ingaggiando una battaglia, o abbandonare la nave al suo destino. In entrambi i casi non c'è possibilità di vittoria se non barando. L'espressione nel linguaggio comune significa vincere barando. In un esperimento si era sviluppato un algoritmo che doveva minimizzare la differenza tra le sue risposte e le risposte corrette. Ha trovato dove il sistema memorizzava le risposte differenti e le ha cancellate, in modo, baradìndo, ha ottenuto un punteggio perfetto.
Come vincere a tris: in un altro bellissimo esempio, nel 1997 alcuni programmatori hanno costruito algoritmi che potevano giocare a distanza a tris l'uno contro l'altro su una tavola infinitamente grande. Il programmatore, invece di progettare la strategia dell'algoritmo, lasciava che a furia di tentativi il sistema sviluppasse il proprio approccio. Sorprendentemente, l'algoritmo ha iniziato improvvisamente a vincere tutti i giochi. Si è scoperto che la strategia dell'algoritmo era di posizionare la sua mossa molto, molto lontano, in modo che quando il computer del suo avversario tentava di simulare la nuova scheda notevolmente espansa, l'enorme tabellone avrebbe causato l'esaurimento della memoria e l'arresto del gioco consentendogli la vittoria.
In conclusione
Quando decidiamo di applicare l'apprendimento automatico per risolvere i problemi, il software può ottenere soluzioni che vanno dall'ingegnoso al quasi inquietante.
Anche l'evoluzione biologica, sembra secondo alcuni studi, funzionare in questo modo - come oggi tendono a dire alcuni biologi - gli organismi viventi trovano le soluzioni più strane ai problemi di sopravvivenza e le più strane fonti di energia da sfruttare. Si potrebbe pensare addirittura una nuova prova filosofica di esistenza della realtà considerando il fatto che il segnale più sicuro che non stiamo vivendo in una simulazione al computer è che, se lo fossimo, alcuni microbi avrebbero imparato a sfruttare i nostri difetti.
Dobbiamo essere consci che gli algoritmi di machine learning, specie quelli evolutivi, possono risolvere i problemi che gli sottoponiamo sfruttando delle scorciatoie. Queste scorciatoie potrebbero essere semplicemente delle cose che non avevamo reso in conto o dei limiti della simulazione che la rendono di fatto non corrispondente alla realtà. Di fatto l'algoritmo evolutivo e il machine learning ci mettono di fronte la fatto che le soluzioni proposte possono essere operazioni che aumentano la nostra capacità cognitiva o errori di modellizzazione e di implementazione del simulatore frutto di un nostro errore (cognitivo o di progettazione). Quindi se c'è un percorso più semplice per risolvere un dato problema, l'apprendimento automatico probabilmente lo troverà ma la soluzione che ci indica non sempre è reale o possibile.
Il problema allora è di natura epistemologico. Sembra urgente rispondere ad alcune domande. Che tipo di conoscenza è quella offerta dal machine learning? Come validare questa conoscenza? Che tipo di conoscenza offre la computazione?
Il problema è anche di natura etica. Se questi algoritmi surrogheranno sempre di più il decidere umano come potremo garantire un oggettiva rispondenza tra la realtà e il simulato. Come addestrare questi algoritmi in modo da rispondere a tensioni valoriali?
Infine la premessa di fondo di questo approccio è vedere la realtà come un problema da risolvere ma le cose che ci interpellano più che essere problemi da risolvere sono questioni di senso da accogliere. La vera questione è lo specifico umano che siamo chiamati a riscoprire per poterlo valorizzare e ampliare anche con l'uso delle diverse tecnologie.