Ghost In The Machine File #2: Neural Nets
February 23rd, 2005 di Aaron Brancottiin coding, Neural Networks, programmazione | Letture: 1513
Nel bagaglio del softwarista curioso non puo mancare una visita approfondita ad un’altra grande categoria di applicazioni legate al Soft Computing: le Reti Neurali
Nel bagaglio del softwarista curioso non puo mancare una visita approfondita ad un?altra grande categoria di applicazioni legate al Soft Computing, che come gli Algoritmi Genetici visti nel GITM File #1 non mancherà di stupire: le Reti Neurali, o Neuronali come altri dicono, insomma le Neural Nets.
Ci siamo infatti lasciati nel GITM File #1 ottimizzando funzioni non lineari grazie alla parafrasi digitale di quel meccanismo per il quale Darwin tanto fu schernito, esterrefatti da come venissero sbriciolati da Santa Evoluzione problemi di ottimizzazione altrimenti tetragoni ad ogni soluzione ?classica?. È ora di avvicinarsi a due altri temi, che nella ricerca della natura stessa dell?Intelligenza non possono essere ignorati oltre: Riconoscimento e Apprendimento.
Come fa un cane a riconoscere il suo padrone? Come fa un esperto a riconoscere un Monet da un Cézanne o un Guttuso vero da un falso? Come fa un musicista a riconoscere il giovane Mozart dall’ultimo? È evidente che il riconoscere qualcosa implica una bella dose di intelligenza, anche se qui ci salviamo in corner visto che quest?ultima non ce lo sogniamo neanche di definirla.
È anche evidente che tutti questi esempi sono frutto di un processo di apprendimento, anche se a volte questo confine è molto labile: altri comportamenti è come il soffiare del gatto per incutere paura all’avversario o il cane che gira su se stesso prima di accucciarsi ? sono evidentemente innati. Così, al contrario di chi si affanna a cercar di catturare la conoscenza in formule, da veri softie possiamo abbandonarci ai comportamenti emergenti di esoterici algoritmi per sfruttarli a nostro vantaggio.
E quindi: cosa succede se simuliamo un cervello con un calcolatore? A proposito, come è fatto un cervello?
Dai, lo sanno tutti: è fatto di tantissimi neuroni attaccati insieme a caso. Ma come funziona? E poi, sono davvero collegati a caso quegli affari? Più o meno la faccenda funziona così: ogni neurone ha vari ingressi ed una uscita, che a sua volta si può sdoppiare in diversi assoni che attenuano il segnale ed infine si collegano all?ingresso di altri neuroni. Nei neuroni viaggiano piccole scariche, spikes di energia elettrica; quando in ingresso un neurone riceve abbastanza scariche entro un certo (breve) arco di tempo e queste, sommandosi, superano una soglia di attivazione, questo scarica a sua volta. Si noti che soglie di attivazione e attenuazione degli assoni variano da un neurone all’altro, rendendo il tutto molto complesso.
Bell?affare. Descritto così non è un granchè, no? E questa tanto decantata intelligenza? Cosa ce ne facciamo di questa brodaglia?
Allora: tanto per incominciare, possiamo provare a non attaccare tutto a caso, ma a costruire qualcosa di più ordinato e facilmente analizzabile: una fetta di neuroni che riceve degli input, collegata ad una seconda fetta intermedia e quest’ultima collegata ad un terzo livello di neuroni che invece emette degli output. Diamo tensione agli ingressi sulla prima fetta e vediamo cosa succede.
Così com’è non succede nulla di entusiasmante: risultati assolutamente casuali, come potevamo aspettarci. Ma immaginiamo di poter dire a questo oggetto che, a fronte di una ben precisa configurazione in ingresso, vogliamo che lui risponda con una ben precisa configurazione in uscita. Riarrangiando un po? le varie soglie di attivazione e le attenuazioni degli assoni non è difficile arrivare ad ottenere un simile risultato. A questo punto abbiamo qualcosa che ‘riconosce’ un certo input, rispondendo con un output che noi stessi gli abbiamo fornito.
Uhm. Non è che forse c?è il modo di ripetere questo processo con una seconda configurazione di ingressi ed uscite, però facendo in modo che questo strano aggeggio non si dimentichi la prima? Sarebbe interessante, no? Avremmo qualcosa in grado di riconoscere appropriatamente due configurazioni di input rispondendo con degli output che noi stessi abbiamo definito. Inoltre sembrerebbe un sistema molto flessibile, perché la capacita di questo dispositivo di mettere in relazione ingressi ed uscite sembra universale: non abbiamo infatti posto alcuna limitazione sul tipo di dati che entrano ed escono o sul numero degli stessi.
Ebbene, come urla Gene Wilder in Frankenstein Junior,
Può
Fareeeee!
e senza neanche scambiare positivo con negativo e negativo con positivo!
Attoniti, scopriamo che con un geniale algoritmo che è passato alla storia come BackPropagation ? proprio perché l’errore di riconoscimento di tutti i possibili output rispetto a tutti gli input viene propagato “all’indietro” a partire dall’output desiderato e implicitamente codificato nei pesi di tutti i neuroni ed assoni ? possiamo istruire questo dispositivo software a mettere in relazione ingressi e uscite. Insomma, a fronte di un training set di “esempi”, la Rete impara, ne più ne meno di come facciamo noi. Intelligenza? Decidete voi.
Già questo sembra notevole, ma il bello deve ancora arrivare: che cosa succede quando alla rete viene proposto un input diverso da tutti quelli del training set? Beh, noi cosa facciamo? Interpoliamo ed estrapoliamo, no? Bene. Anche lei.
Ma Funzionano Davvero?
Reti alle quali vengono insegnate coniugazioni e declinazioni dei verbi imparano a coniugare e declinare, e quando sbagliano lo fanno esattamente come i bambini o gli stranieri. Reti che vengono istruite a riconoscere email spam arrivano a precisioni maggiori del 99%. Reti istruite ad ?ascoltare? J.S.Bach sono state usate per generare finte fughe ?dimenticate nel cassetto? che hanno ingannato grandi musicisti e conoscitori. Esistono pacchetti di simulazione di animali inferiori (scarafaggi e simili) basati su semplici reti ? anche solo una quarantina di neuroni ? che dimostrano comportamenti virtualmente indistinguibili da quelli dei loro cugini biologici. Addirittura, reti neurali opportunamente “danneggiate” hanno mostrato patologie cognitive analoghe a quelle umane: amnesie, alzheimer, dislessia, difficoltà di orientamento e riconoscimento? sono state utilizzate reti neurali per dimostrare come dormire serva all?uomo per fissare ciò che impara: sottoposte a lievi fluttuazioni casuali analoghe alla fase REM dei sogni umani, queste reti risultano più stabili e resistenti al danneggiamento rispetto a quelle istruite mediante BackPropagation semplice.
Ovviamente c’è un limite alla quantità di informazioni che una rete può immagazzinare, dopodichè inizia a “dimenticare” i vecchi esempi per far spazio a quelli nuovi. Questo fatto vi ricorda qualcosa? Guardacaso, questa capacità dipende non tanto dalla quantità di neuroni, ma da quella delle connessioni, ovvero della “fetta centrale” di neuroni del dispositivo di cui sopra? insomma, tutto farebbe pensare che le Reti Neurali immagazzinino le informazioni nella loro stessa struttura e non nei singoli neuroni, il che spiegherebbe anche il fatto che cervelli anche severamente danneggiati continuino a funzionare: questo modo di immagazzinare informazioni rende le stesse ridondanti e distribuite nella topologia stessa della rete. Quale mirabile architettura.
Are You Ready For A Miracle?
Le analogie con i meccanismi di apprendimento del mondo biologico che le reti neurali dimostrano non possono che spingerci ad un ulteriore esperimento: mescolarle con gli algoritmi genetici e vedere se riusciamo ad ottenere qualcosa che impari autonomamente in seguito ad un processo evolutivo, anziché aspettarsi da noi un training set di esempi ben precisi.
Questo è quello che ha fatto Karl Sims nel lontano 1994, dando un contributo memorabile al filone della ALife (contrazione di artificial life), con le sue “Evolved Virtual Creatures”. Ecco la sua ricetta:
? Si simuli un ambiente newtoniano, ovvero un ambiente con forza di gravità, atriti, oggetti solidi e collisioni tra gli stessi etc.
? Si creino degli “animali” composti di cubi attaccati tra loro, delle più disparate forme e dimensioni.
? Si dotino queste creature di “muscoli” controllati da un sistema nervoso, a sua volta controllato da una rete neurale, in modo che si possano muovere.
? Si decida un criterio che guidi l?evoluzione di queste creture: ad esempio, imparare a spostarsi velocemente, o a saltare più in alto possibile.
? Si lasci che un Algoritmo Genetico ottimizzi il cervello di queste creature.
Il risultato ? sconcertante ? lo potete vedere qui:
- http://dynamics.org/~altenber/GA_ART/Sims.mpg
È importante ribadire alcuni concetti: quello che vedete non è una animazione. Questi sono animali che hanno imparato a muoversi a fronte di una evoluzione durata migliaia di generazioni e condensata in poche ore grazie alla potenza di supercalcolatori paralleli in grado di eseguire centinaia di miliardi di operazioni al secondo. Quello che vedete è eseguito rigorosamente in tempo reale: potete interagire con questi animali proprio come se fossero veri. Inseguiranno il puntatore del mouse con una efficienza analoga a quella del vostro gatto e nuoteranno come delfini nel mare simulato che esiste solo tra i bit del vostro computer.
Nessuno ha spiegato cosa fare a questi animali: hanno imparato da soli. I loro cervelli ? reti neurali che ne controllano i movimenti ? sono stati ottimizzati da quegli Algoritmi Genetici che abbiamo visto nel GITM File #1 e nei quali vi avevamo chiesto di avere ciecamente fede. Come vedete, avevamo i nostri buoni motivi? e siamo solo all?inizio.
Hands On!
Come di consuetudine, non possiamo lasciarci senza un link per l?Idearium Reader più appassionato: Thomas Ray, peraltro autore di Tierra (del quale prima o poi parleremo), ha scritto Aesthetically Evolved Virtual Pets, un programma che è chiaramente un tributo al lavoro di Sims orientato però all?aspetto estetico della faccenda evolutiva. È un software tuttaltro che semplice da usare, ma permette di ottenere virtualmente gli stessi risultati di Sims sul vostro computer di casa. Potete trovarlo qui, insieme al manuale e a varie informazioni sui lavori di Sims, Ray ed altri:
- http://www.his.atr.jp/~ray/VirtualLife/
- http://www.his.atr.jp/~ray/pubs/alife7a
—
Aaron Brancotti a.k.a. Babele Dunnit (http://www.babeledunnit.org)




