Il mese scorso tre ingegneri del team di Google specializzati nella ricerca di reti neurali artificiali hanno pubblicato sul blog della casa madre un post che ha destato enorme clamore. Mentre erano al lavoro sul processo di classificazione delle immagini necessario per addestrare una rete neurale nel compito del riconoscimento visivo, si sono imbattuti per caso in un risultato per certi versi sorprendenti.

Prima di tutto un breve excursus. Le reti neurali prese in esame sono sistemi multistrato, composte ciascuna da un numero variabile tra 10 e 30 strati di neuroni artificiali che lavorano in successione. Una delle sfide di questo campo di ricerca è riuscire a capire come si comporti ciascuno strato, ma dopo aver addestrato la rete si possono esaltare le performance di ciascuno strato su una caratteristica specifica dell’immagine. Per esempio, i primi strati possono elaborare i contorni, quelli intermedi le forme e/o i diversi componenti dell’immagine, e gli ultimi strati possono combinare tutti questi risultati per dare l’output finale della rete. L’addestramento funziona mostrando grandi quantità di immagini-campione rispondenti a un caso specifico, fino a quando il sistema mostra una capacità di risposta ottimale.

Per stabilire se la rete sta apprendendo “nella maniera giusta” può essere utile prendere in esame la rappresentazione data dalla rete di un dato caso in esame. Per esempio, verificare come una rete neurale immagina che possa essere fatto un paracadute, o una banana, o una vite, una formica, una stella marina… E da qui viene fuori che le reti neurali addestrate per riconoscere un certo insieme di immagini, possiedono una piccolissima quantità dell’informazione necessaria per generare quelle stesse immagini. L’effetto è evidente dai seguenti campioni elaborati dalle reti neurali prese in esame.

Google_ANN_01

La visualizzazione delle risposte della rete neurale è utile per individuare eventuali errori commessi in fase di training e correggere eventualmente il tiro, fornendo immagini più specifiche e rappresentative di un dato concetto.

Invece di specificare la caratteristica che si vuole amplificare, si può anche lasciare la rete libera di decidere, spiegano i ricercatori. “In questo caso si fornisce alla rete un’immagine o una foto e la si lascia libera di analizzare la figura”. Ciascuno strato della rete, se ricordate, processerà una caratteristica a un diverso livello di astrazione. In base allo strato a cui si sceglie di demandare il processo di amplificazione, verrà quindi generata un’immagine la cui complessità è legata a quella particolare caratteristica individuata dalla rete. “Per esempio, gli strati inferiori tendono a produrre tratti o motivi ornamentali, dal momento che quegli strati sono sensibili alle caratteristiche di base come i contorni e il loro orientamento”.

Left: Original photo by Zachi Evenor. Right: processed by Günther Noack, Software Engineer

Left: Original photo by Zachi Evenor. Right: processed by Günther Noack, Software Engineer

“Scegliendo strati di livello superiore, capaci di individuare caratteristiche più sofisticate nelle immagini, tendono a emergere caratteristiche complesse o addirittura interi oggetti. Ancora una volta, iniziamo con una immagine esistente e la diamo in pasto alla nostra rete neurale. Chiediamo alla rete: “Qualunque cosa tu veda qui, ne voglio di più!” e questa crea un anello di retroazione: se una nuvola somiglia un po’ a un uccello, la rete la farà somigliare sempre di più a un uccello. Questo farà riconoscere alla rete l’uccello in maniera ancora più netta al prossimo passaggio e così via, fino ad arrivare alla comparsa di un uccello ricco di dettagli, apparentemente dal nulla”.

Come fanno notare gli ingegneri, i risultati sono affascinanti, ed è come quando da bambini ci divertivamo a interpretare le forme delle nuvole. Questo è quello che succede con una rete neurale addestrata principalmente su immagini di animali, e per questo intrinsecamente portata a riconoscere le forme come animali o parti degli stessi.

Google_ANN_Skyarrow

Google_ANN_Funny-Animals

La tecnica può essere applicata ad ogni tipo di immagine e i risultati varieranno in base alle sue caratteristiche. Di fatto, le caratteristiche introdotte nella rete generano una deriva verso alcune interpretazioni: torri e pagode cominciano a comparire sulle linee dell’orizzonte, pietre e alberi mutano in edifici, uccelli e insetti fanno la loro apparizione dove siano presenti foglie. Gli effetti tendono a descrivere veri e propri paesaggi onirici, talvolta surreali, altre volte da incubo.

Google_ANN_02

Il codice sviluppato dai ricercatori di Google è stato reso pubblico il primo luglio con il rilascio di Deep Dream e da allora diversi utenti si sono sbizzarriti. Gli esiti confermano le considerazioni che facevamo sopra, con derive particolarmente bizzarre. Per esempio, c’è chi ha provato ad applicare Deep Dream sui fotogrammi di un film. E da dove poteva iniziare, se non da Paura e delirio a Las Vegas?

E in adempimento alla Regola 34, ovviamente la scoperta del porno da parte di Deep Dream non si è fatta attendere. Eccovi per assaggio un’orgia di corpi mutanti. Per immagini più esplicite, cliccate qui.

Google_ANN_Rule34

A questo indirizzo trovate invece una galleria compilata da Michael Tyka, uno degli sviluppatori di Deep Dream.

Google_ANN_Red-tree-orig

Google_ANN_Red-tree-small-long

Advertisements