Google, le reti neurali e i gatti

Di - 2 July 2012 - in

Sempre piú spesso ci capita, lavorando o giocando, di avere a che fare con sistemi informatici ad apprendimento automatico, ovvero con sistemi che imparano automaticamente dai dati in ingresso quale sia l’output giusto da restituire.

Gli algoritmi presenti in questi sistemi sono in grado di imparare dai propri errori, o semplicemente di fare associazioni tra dati in ingresso che ritengono avere cose in comune.

Il sistema di questo tipo che vi è piú familiare è probabilmente il sistema antispam della vostra casella di posta elettronica. Riceve in ingresso le email che voi segnalate come spam, e quando ha a disposizione un buon numero di ingressi inizia a capire da solo, facendo analogie, quali messaggi vadano eliminati e quali invece vadano lasciati nella casella.

Vi sono diverse applicazioni analoghe, come il riconoscimento vocale (che impara man mano che lo correggete a riconoscere il vostro modo di parlare), l’OCR del vostro scanner, o i programmi di traduzione automatica.

Applicazione in rapido sviluppo, anche grazie ai fondi dell’industria farmaceutica che ha a disposizione, è il riconoscimento e l’analisi delle immagini, per classificarle in base a dettagli che l’uomo, ad esempio un medico, non riesce a percepire, permettendo diagnosi piú precise dai sistemi di scansione del corpo umano.

Tutti questi sistemi sono ciò che piú si avvicina al concetto di intelligenza artificiale in Informatica. Le macchine che fanno girare algoritmi ad apprendimento automatico danno l’impressione di essere in grado effettivamente di ragionare e di elaborare idee proprie in base agli ingressi, sebbene ciò avvenga solo in campi molto ristretti.

Le macchine ad apprendimento automatico possono essere realizzate in molti modi, piú o meno semplici e piú o meno adatti allo scopo che ci si prefissa.

Una delle tecniche piú affascinanti è certamente quella delle reti neurali artificiali.

Ispirate al funzionamento del cervello umano, le reti neurali possono essere immaginate come grandi reti di oggetti chiamati nodi. Esistono dei nodi di ingresso e dei nodi di output, separati tra loro da una vasta rete di nodi intermedi.

Le connessioni tra nodi si creano e si distruggono dinamicamente, seguendo algoritmi che prendono come ingresso i dati che entrano nel nodo. La struttura della rete, quindi, si evolve in base agli ingressi ricevuti, e man mano inizia a dare gli stessi output per dati che considera in qualche maniera analoghi, e che si trovano quindi a seguire il medesimo percorso.

Un sistema di questo tipo è particolarmente adatto a trovare gruppi di dati simili in grandi insiemi di dati, e quindi a scoprire andamenti e analogie che richiederebbero molto tempo per essere rilevati con altri sistemi. Inoltre, grazie al fatto che il sistema si auto-adatta agli ingressi, eventuali anomalie nei dati non generano grandi errori, in quanto gli altri dati ricorreggono il sistema.

Un’applicazione pratica di una rete neurale è ad esempio il riconoscimento delle immagini di cui parlavo poco sopra. Una rete ben fatta potrà facilmente imparare a distinguere i volti delle persone dallo sfondo delle immagini, e a riconoscere di chi si tratti indipendentemente dall’espressione. O, in campo medico, potrebbe rilevare un tumore, anche molto piccolo, distinguendolo dai tessuti sani. Insomma, cose che per il cervello umano sono compiti relativamente semplici, ma che per una macchina sono estremamente difficili.

Le reti neurali hanno però il grande svantaggio di essere molto costose in termini di calcoli da compiere. Questo ha fatto sí che raramente si siano realizzate reti con piú di dieci milioni di connessioni (e anzi, generalmente si realizzano reti molto piú piccole). Le reti neurali finora realizzate, quindi, in genere non sono particolarmente performanti (pur svolgendo comunque compiti di tutto rispetto) e hanno bisogno, per iniziare a lavorare agevolmente, di avere all’inizio in ingresso un set di dati per i quali il sistema conosca l’output, in maniera da creare rapidamente la rete iniziale.

Recenti ricerche sull’apprendimento automatico e sul deep learning (una branca dell’apprendimento automatico che si occupa di una tecnica specifica per imparare a distinguere gli ingressi per analogia) suggeriscono però che sia teoricamente possibile creare reti neurali dando in ingresso esclusivamente dati di cui non sia noto l’output, in maniera molto simile a come il cervello umano sia in grado di imparare una serie di nozioni dai soli ingressi che ha (nessuno ci insegna a riconoscere un volto, ad esempio).

Google ha raccolto la sfida, realizzando una rete neurale artificiale composta da 16000 processori, presenti nei loro datacenter, ed oltre un miliardo di connessioni, cento volte di piú delle reti neurali realizzate solitamente.

A tale enorme rete è stato data in input una settimana di video presenti su Youtube chiedendosi, idealmente: “Se noi consideriamo la rete come un cervello di neonato su piccola scala, e gli mostriamo video di youtube per una settimana, cosa può imparare?”.

Ciò che Google si aspettava, ovviamente, era che il sistema cominciasse a distinguere tra loro gli oggetti piú comuni nei video e a classificare i video in base a tali oggetti.

Per il divertimento di Google e nostro, un nodo/neurone di uscita della rete ha imparato a riconoscere i gatti. Si è fatto, filosoficamente parlando, la propria idea di gatto, il modello con cui fare confronti per capire se ciò che sta osservando sia o meno un gatto.

Quello che davvero impressiona è che al sistema non è mai stato detto cosa sia un gatto, o che un gatto sia qualcosa di interessante. Semplicemente, lo ha ritenuto interessante in base ai suoi algoritmi e ha imparato a distinguerlo dal resto. Esattamente come farebbe un bambino, e in maniera del tutto autodidatta.

CPU gattofile a parte, la rete neurale ha portato risultati molto significativi a livello scientifico e tecnologico. Sottomettendo alla rete, addestrata dai video di Youtube, una serie di dati con relativo ouput atteso, il sistema è stato in grado di produrre l’output atteso nel 70% dei casi in piú rispetto a quanto ottenuto fin’ora, se si considera anche che l’addestramento è stato fatto senza dare alcuna informazione sugli input.

Tutto ciò, oltre a dimostrare sperimentalmente i dati delle ricerche, è un’ottima base per costruire sistemi scalabili e sempre piú grandi, in grado di imparare da dati provenienti dal mondo reale senza alcuna informazione esterna. Sí, la cosa inizia ad essere inquietante, ma allo stesso tempo davvero affascinante.

Google sta presentando i risultati delle ricerche, guidate da Quoc Le, della Stanford University, all’ICML in questi giorni. Potete trovare maggiori dettagli a riguardo su Google+ e nel paper ufficiale.

Nel frattempo Google sta provando a scalare il sistema creando reti ancora piú grandi, e considerando che un cervello umano adulto ha qualcosa come cento milioni di milioni di connessioni, sebbene il paragone tra cervello umano e reti neurali non sia cosí diretto, di spazio per crescere ne esiste ancora molto 😛

Il sistema sarà inoltre applicato ad altri campi in cui è necessario lavorare trovando analogie, come il riconoscimento vocale e il riconoscimento del linguaggio naturale (e conseguentemente la traduzione tra lingue svolta in  maniera simile a come la svolge l’uomo).

E cosí è stato fatto un altro piccolo passo verso la fantascienza.

Leave a Reply

Lorenzo Breda Articolo scritto da

Studente di Informatica a Roma, si occupa di programmazione web sopratutto lato server, e di accessibilità del web. Utilizza e ama Debian GNU/Linux, e si interessa di fisica, fumetto, trekking e fotografia (gli ultimi due possibilmente abbinati).
Collabora con Googlab da aprile 2012.

Contatta l'autore

Previous post:

Next post: