III. Tecniche di reti neurali avanzate

Nella sezione precedente abbiamo discusso le idee di base che stanno dietro gran parte dei metodi di reti neurali: reti multistrato, funzioni di attivazione non lineare e regole di apprendimento come l'algoritmo di retropropagazione.

Queste alimentano quasi tutte le moderne applicazioni di reti neurali. Tuttavia, vi sono alcune interessanti e potenti variazioni sul tema che hanno condotto a notevoli progressi nel deep learning in molti ambiti.

Reti neurali convoluzionali (CNN)

Un ambito in cui il deep learning ha conseguito uno straordinario successo è l'elaborazione di immagini. Il classificatore semplice che abbiamo studiato in dettaglio nella precedente sezione ha grosse limitazioni: come avete osservato, non è stato neppure possibile classificare tutte le emoticon correttamente. L'aggiunta di più strati nella rete e l'utilizzo della retropropagazione per apprendere i pesi risolve in linea di principio il problema, ma poi ne emerge un altro: il numero di pesi cresce enormemente e, di conseguenza, la quantità di dati di allenamento richiesti per ottenere una precisione soddisfacente può diventare troppo vasta per essere realistica.

Fortunatamente esiste una soluzione molto elegante al problema dei troppi pesi: un tipo particolare di rete neurale, o piuttosto un tipo particolare di strato, che può essere incluso in una rete neurale profonda. Questo tipo particolare di strato è un cosiddetto strato convoluzionale. Le reti che includono strati convoluzionali sono dette reti neurali convoluzionali (o CNN, dall'inglese convolutional neural network). La loro proprietà fondamentale è che sono in grado di rilevare attributi di immagine come punti luminosi o scuri (o colori specifici), margini con vari orientamenti, modelli e così via. Questi formano la base per rilevare attributi più astratti come le orecchie di un gatto, il muso di un cane, l'occhio di una persona o la forma ottagonale di un segnale di stop. Normalmente sarebbe difficile allenare una rete neurale a rilevare simili attributi sulla base dei pixel contenuti nell'immagine di input, in quanto gli attributi possono apparire nell'immagine in posizioni diverse, con orientamenti diversi e in dimensioni diverse: spostando l'oggetto o cambiando l'angolo di ripresa, anche i valori dei pixel cambieranno drasticamente anche se a noi l'oggetto sembra sempre lo stesso. Per imparare a rilevare un segnale di stop in tutte queste condizioni diverse ci vorrebbero enormi quantità di dati di allenamento, in quanto la rete rileverebbe il segnale soltanto nelle condizioni in cui è apparso nei dati di allenamento. Quindi, per esempio, un segnale di stop nell'angolo in alto a destra dell'immagine sarà rilevato soltanto se i dati di allenamento includevano un'immagine con il segnale di stop nell'angolo in alto a destra. Le CNN sono in grado di riconoscere l'oggetto in qualunque punto dell'immagine si trovi, indipendentemente da dove è stato osservato nelle immagini di allenamento.

Nota

Perché abbiamo bisogno delle CNN

Le CNN ricorrono a un abile trucco per ridurre la quantità di dati di allenamento necessari per rilevare oggetti in condizioni diverse. Tale trucco consiste sostanzialmente nell’usare gli stessi pesi di input per molti neuroni (in modo che tutti questi neuroni siano attivati dallo stesso modello), ma con pixel di input diversi. Possiamo per esempio avere un insieme di neuroni che sono attivati dall’orecchio appuntito di un gatto. Quando l’input è la foto di un gatto, si attivano due neuroni, uno per l’orecchio sinistro e uno per l’orecchio destro. Possiamo anche fare in modo che i pixel di input del neurone siano presi da un’area più piccola o più grande, in modo che neuroni differenti siano attivati dall’immagine dell’orecchio in scale (dimensioni) differenti e ciò ci permetta di rilevare le orecchie di un gattino anche se i dati di allenamento includevano soltanto immagini di gatti grandi.

I neuroni convoluzionali si trovano solitamente negli strati più bassi della rete, che elaborano i pixel di input grezzi. I neuroni di base (come il neurone percettrone di cui si è discusso in precedenza) si trovano negli strati più alti, che elaborano l'output degli strati più bassi. In genere, gli strati più bassi possono essere allenati usando l'apprendimento non supervisionato, senza avere in mente un particolare compito di previsione. I loro pesi saranno adattati per rilevare attributi che appaiono frequentemente nei dati di input. Per esempio, attributi tipici nelle foto di animali saranno orecchie e musi, mentre nelle immagini di edifici gli attributi saranno componenti architettonici come pareti, tetti, finestre e così via. Se per i dati di input si usa un mix di vari oggetti e scene, gli attributi appresi dagli strati più bassi saranno più o meno generici. Questo significa che gli strati convoluzionali pre-allenati possono essere riutilizzati in molti compiti diversi di elaborazione delle immagini. Ciò è estremamente importante in quanto è facile ottenere quantità praticamente illimitate di dati di allenamento non etichettati (immagini senza etichette) che possono essere usati per allenare gli strati più bassi. Gli strati più alti sono sempre allenati con tecniche di machine learning supervisionato come la retropropagazione.

robot che tiene la foto di un gatto e la foto di un segnale di stop

Ma le reti neurali sognano pecore elettriche? Reti generative avversarie (GAN)

Una volta appresa una rete neurale dai dati, questa può essere usata per fini di previsione. Poiché gli strati più alti della rete sono stati allenati in modo supervisionato per eseguire un particolare compito di classificazione o previsione, questi sono realmente utili soltanto per tale compito. Una rete allenata per rilevare segnali di stop non ha alcuna utilità quando si vogliono rilevare cifre scritte a mano o gatti.

Un risultato interessante si può ottenere prendendo gli strati più bassi pre-allenati e studiando l'aspetto degli attributi che hanno appreso. Ciò può avvenire generando immagini che attivano un determinato insieme di neuroni negli strati più bassi. Osservando le immagini generate, possiamo vedere quale aspetto la rete neurale "pensa" che abbia un particolare attributo, o quale aspetto dovrebbe avere un'immagine con un insieme selezionato di attributi. Alcuni addirittura amano dire che le reti "sognano" o "hanno allucinazioni di" immagini (si veda il sistema DeepDream di Google).

Nota

Prudenza con le metafore

Vorremmo però sottolineare ancora una volta il problema di metafore come quella del verbo sognare, quando con tale verbo si intende in realtà una semplice ottimizzazione dell’immagine di input (ricordate le parole-valigia di cui abbiamo parlato nel Capitolo 1). La rete neurale non sogna veramente e non ha un concetto di gatto che possa intendere in modo analogo a come lo intendono gli esseri umani. Semplicemente, è allenata per riconoscere oggetti ed è in grado di generare immagini simili ai dati di input su cui è allenata.

Per generare davvero gatti, volti umani o altri oggetti dall'aspetto reale (in pratica qualunque cosa abbiate usato come dati di allenamento), Ian Goodfellow che lavora attualmente presso Google Brain, ha proposto un'astuta combinazione di due reti neurali. L'idea è di lasciare competere tra loro le due reti. Una delle reti è allenata per generare immagini come quelle contenute nei dati di allenamento. Il compito dell'altra rete è separare le immagini generate dalla prima rete dalle immagini reali provenienti dai dati di allenamento. Si parla in tal caso di rete avversaria e l'intero sistema è denominato rete generativa avversaria o GAN (dall'inglese generative adversarial network).

Il sistema allena i due modelli fianco a fianco. All'inizio dell'allenamento, il modello avversario ha il semplice compito di distinguere tra le immagini reali provenienti dai dati di allenamento e i maldestri tentativi del modello generativo. Tuttavia, man mano che la rete generativa migliora, dovrà migliorare anche il modello avversario, e il ciclo continua finché alla fine le immagini generate saranno praticamente indistinguibili da quelle reali. La GAN non cerca solo di riprodurre le immagini contenute nei dati di allenamento: questa sarebbe una strategia troppo semplice per battere la rete avversaria. Piuttosto, il sistema è allenato in modo da essere in grado di generare anche nuove immagini che sembrino reali.

fakecelebrityfaces

Le immagini qui sopra sono state generate da una GAN sviluppata da NVIDIA in un progetto guidato dal Prof. Jaakko Lehtinen (si veda questo articolo).

Vi sareste accorti che non erano reali?

Dopo aver completato il Capitolo 5 dovreste essere in grado di:

  • spiegare che cosa sono le reti neurali e dove sono impiegate con successo
  • comprendere i metodi tecnici alla base delle reti neurali

Unisciti alla comunità Elements of AI per discutere di questo capitolo e porre domande.