Il mio computer mi ha sognato

Ovvero che cos’è DeepDream, il sogno profondo di Google

I computer sognano? Ma quelli che stanno facendo ricerca sulle intelligenze artificiali, creano dei cervelli? E questi cervelli pensano? E se pensano, sognano anche? E cosa? Ma Google sogna?

Mi sono frullate in testa un sacco di domande, quando nelle mie peregrinazioni abbastanza casuali su Reddit mi sono imbattuto in DeepDream, un cervello artificiale a cui quelli di Google hanno insegnato a sognare. Se pensate che io sia pazzo, provate a immaginarvi la faccia di mia madre quando ho provato a spiegarle perché ero immerso in mezzo a dei codici da due giorni e perché nella mia faccia c’erano tutti quegli occhi e quei cani.

Ho pure cercato un sinonimo di sogni, che è una parola che su immagini del genere non calza bene quanto “incubi”, “allucinazioni” o “trip alla Inception”.

Comunque andiamo per ordine. Lì per lì, la cosa del cervello artificiale che sogna mi ha ricordato il titolo geniale di un libro che non ho ancora letto: “ma gli androidi sognano pecore elettriche?” (Phil Dick, 2012), mi ha incuriosito subito e mi ha spinto ad approfondire un po’.

Questa primavera il mondo hacker/nerd, si era agitato parecchio (in quel suo modo cervellotico e vagamente underground che mi affascina sempre un casino) a causa di questo post scritto da tre ricercatori di Google.

Nella apposita subreddit dedicata a DeepDream ha visto gente pubblicare tantissime immagini distorte da questo tipo di allucinazioni visive, occhi, cani, uccelli, strani animali mai visti, città. E ancora occhi. Inquietantissimi, occhi. Ovunque. (E se ci fate un giro ad ore strane vi fottono un po’ il cervello queste cose)

Se volete capire cosa sia DeepDream, toglietevi dalla testa che sia come un filtro fotografico, che funzioni come Instagram. Questa è davvero un’allucinazione prodotta da un cervello che sogna e deforma ciò che vede (ancora una volta immaginate le facce di famigliari e amici quando parlavo con entusiasmo del mio computer sognante!). Io ci ho messo un po’ a capirlo perché è un argomento davvero molto tecnico, quindi provo a spiegarlo decentemente. Se poi vi interessa e volete leggere (in inglese) un paio di articoli sicuramente chiarissimi, consiglio quelli di Memo Atken artista e hacker (in un link che mette c’è anche il secondo post molto più tecnico)

Cosa sono le Reti Neurali

Spoiler: qui faccio una premessa in cui cerco di spiegare in maniera non troppo tecnica, poi butto una carrellata di immagini che ho fatto sognare al mio computer.

il mio computer mentre sogna il mio coinquilino

DeepDream è una rete neurale artificiale, ovvero una rete di neuroni (informatici) che serve a simulare una rete di neuroni umana.

Un cervello umano contiene un ammontare enorme di neuroni connessi strettamente, che dialogano tra loro. Il deep-learning non funziona in maniera molto diversa: migliaia di milioni di “neuroni”, che si scambiano informazioni, simulando un cervello. E come il nostro, questo cervello è diviso in parti che vedono cose diverse (layers). È una tecnologia nel ramo del deep learning che viene studiata dai ricercatori di un’azienda che ha cambiato il mondo, quindi è inutile dire quanto sia incredibilmente complessa.

Una rete neurale assomiglia dunque ad un cervello in cui i neuroni di strati (layers) diversi, si occupano di cose diverse.

dalla pagina Wikipedia sulle Neural Artificial Neworks

Su un processo di input output attraverso la rete neurale, l’input viene rielaborato dai diversi layers, finchè uno di essi non prende una decisione sul tipo di output. La parte dei layers, che corrisponde al processo del sogno, è nascosta. Con DeepDream, invece, si lavora al contrario e si dice al cervello: “dai importanza a questo layer, voglio vedere cosa ne pensa lui”.

Ora, la cosa interessante è che queste reti sono capaci di imparare. Come? In passato venivano allenate con una complessa struttura logica: da quello che ho capito utilizzando come principio la base logica della programmazione: “se, allora”.

Immaginate di dover descrivere un cane a qualcuno che non ne ha mai visto uno con logiche del tipo “se non ha quattro zampe, non è un cane” (ovviamente tenete a mente l’infinito livello di complessità, sto semplificando).

Oggi invece questi cervelli non vengono più addestrati con la logica, ma con la ripetizione (modello statistico). Quindi diamo alla rete neurale 10 milioni di immagini di cani, e alla fine lui imparerà ad isolare e riconoscere un cane.

Questi riconoscimenti funzionano circa come quelli delle macchine fotografiche che vedono la nostra faccia. Prima di trovarla, però, la cercano anche negli angoli della foto, nello sfondo, nella maglietta.

DeepDream è una rete neurale a cui è stato insegnato come riconoscere diversi tipi di oggetti: animali (sì, ci sono sempre un sacco di cani), occhi, ma anche edifici, macchine, barche e così via.

So che sembra incredibile, ma prendete l’esempio che fanno i ricercatori di Google. Si istruisce la rete neurale, chiedendole magari se vede delle banane dentro, e se le vedi, fai in modo di vederne sempre di più.

Un po’ come quando guardiamo le nuvole, e ci immaginiamo di vedere un gatto. Ecco è come se nell’istante frazionale in cui stiamo vedendo il gatto potessimo isolare la fettina del nostro cervello che lo vede davvero, prendere quello che sta vedendo e farlo diventare il nuovo cielo in cui guardare. È un processo che si chiama iterazione.

L’iterazione può essere usata per iper-interpretare l’immagine. Infatti, funziona in questo modo: l’immagine sognata che mi sputa fuori viene reinserita automaticamente come input e sognata di nuovo. Poi ci sono tantissimi sogni che uno può fare (tra l’altro, le diverse funzioni da lanciare hanno nomi tipo “Inception_4c/output5x5″, per farvi capire quanto sono fighi i nerd). Si può pure aggiungere una funzione di zoom oltre al sogno (poi vieni catapultato in mondi che non ha visto neanche Lapo Elkann).

Pensate c’è pure gente che ci ha fatto dei video (qui c’è quello di Memo Atken, ma in giro ne trovate diversi, tipo quello di “Paura e delirio a Las Vegas”, da usare con cautela)

Ora, dopo avere mostrato tutto questo a mia madre, dovevo spiegarle (e spiegarmi) perché avessi un’interesse così vivo nel far sognare il mio computer. La risposta è abbastanza semplice: Google sperimenta le intelligenze artificiali, per affinare sempre di più i suoi meccanismi di riconoscimento (lo sapete cosa può fare Google Photos?).

Vogliono arrivare ad affinare la propria semantica sempre meglio, così da arrivare a capire cosa stiamo cercando come lo capirebbe un umano. E dato che i reparti di R&D delle corporazioni come Google hanno il vizio di cambiare il mondo (se in bene o in male è una domanda mal posta), reputo estremamente interessante cazzeggiare con questa roba. Poi magari aggiungeteci che fanno esperimenti assurdi in molti campi, tipo quei cazzutissimi cani robot.

Adesso come promesso ecco la roba che ho buttato dentro a DeepDream (o meglio la roba più carina che ne è uscita). Dopo trovate la postilla nerd per chi se lo volesse installare.

Il mio faccione originale e qualche variante con diverse funzioni
Yoda. Perché sì.
Bologna
Mio fratello con un pappagallo in mano. Guardate le città e le navi che si formano sulla sinistra
Due diversi tipi di sogno, che danno importanza a due diversi layer che guardano in maniera diversa
Nel castelllo di Ferrara si vanno a formare paesaggi dentro paesaggi
metaincubo

Qui ci sono le due più carine che mi siano venute in mente di fare, ovvero fargli sognare due quadri che già riguardano i sogni: il primo è di quel genio sempre attuale di Goya: El sueño de la razón produce monstruos (1799). Il secondo è uno degli incubi di Füssli.

Postilla nerd (ovvero “so che te lo vuoi installare”)

Si lo so, sei un nerd e anche tu muori dalla voglia di cazzeggiare con DeepDream.

Se sei un informatico di sicuro non hai bisogno dei miei consigli, se non hai mai visto una linea di comando ma muori dalla voglia di farti sognare, esistono diversi siti che fanno al caso tuo:

Per chiunque stia, come me, in mezzo a queste due categorie mi permetto di dare un paio di consigli che (auspicabilmente) vi salveranno pomeriggi di smanettamenti.

Il problema infatti è installare tutte le dependencies (non sapendo cosa fossero) e farle girare insieme.

  1. Qui c’è la pagina Github.
  2. Il sistema che dà meno problemi e da cui partire è Ubuntu 14.04, avevo inizialmente tentato su una 12.04 ma avevo problemi con GFLAGS. In seguito l’ho installato anche su Elementary OS Freya
  3. Io inizialmente ho seguito la guida di github e ho avuto qualche problema (causato dalla mia sola ignoranza). Questa guida di Reddit (con relativi commenti) è la cosa più comoda che io abbia trovato e mi ha risolto un sacco di problemi. Seguendo questa non dovreste avere grosse perdite di tempo, la parte più complessa forse è la parte in cui fare il building del Framework Caffe. Cercate bene la parte dei commenti
  4. DeepDream può funzionare utilizzando solo la CPU oppure con l’accelerazione grafica della NVIDIA, che prevede di installare CUDA (che da quello che ho letto in giro può essere complicato). Non avendo macchine con grafiche del genere, le mie due versioni di DeepDream girano solo con la CPU, quindi non posso aiutarvi a farlo funzionare con CUDA.
  5. Se avete bisogno potete commentare anche qua sotto o chiedermi in privato molto tranquillamente