Cos'è il convolutional deep learning e a cosa serve?

Il convolutional deep learning ingloba una delle tipologie di reti neurali più rilevanti, più versatili e dal più vasto campo applicativo.

speciale Cos'è il convolutional deep learning e a cosa serve?
Articolo a cura di
Daniele Vergara Daniele Vergara viene alla vita con un chip Intel 486 impiantato nel cervello, a mo' di coprocessore. E' più che entusiasta di tutto ciò che riguarda la tecnologia intera e i videogames, con un occhio di riguardo verso l'hardware PC e l'overclocking. D'inverno ama snowboardare, macinando km e km di piste. Lo trovate su Facebook, Twitter e Google+.

La convoluzione è probabilmente la più importante operazione nel deep learning. Le reti neurali, con la convoluzione, hanno portato l'apprendimento approfondito uno scalino più in alto, rendendo tale campo di ricerca più potente di quanto non lo fosse a monte di tale concetto. Dopo aver quindi analizzato il deep learning a livello molto generale, parliamo oggi delle reti convolutional, che fanno parte della schiera di neural network più interessanti ed utili. Per comprendere a fondo le convolutional neural network c'è bisogno di conoscere tanti dettagli matematici, che spesso sono di difficile comprensione per coloro che hanno studiato la materia solo a livello scolastico. Per questo motivo cercheremo, per quanto possibile, di evitare i concetti legati alla matematica e di spiegare il convolutional deep learning ad un livello più pratico, ma sempre in maniera tale da riuscire a farvi comprendere quanto più a fondo possibile i concetti fondamentali e le sfaccettature più rilevanti.

La convoluzione, l'operazione fondamentale

La convoluzione è un'operazione matematica che descrive una regola per miscelare due funzioni oppure due pezzi distinti di un'informazione. Un'immagine di partenza può essere trasformata ottenendo un particolare effetto applicando ad essa una maschera di convoluzione, cioè una serie di numeri rappresentati spesso da una matrice. Pensate all'operazione di convoluzione come all'applicazione di un filtro su un qualsivoglia programma di computer grafica, dove i filtri stessi sono le maschere di convoluzione. A differenti maschere corrispondono svariati filtri.
La convoluzione è importantissima sia in fisica che in matematica, in quanto definisce un ponte fra il dominio temporale ed il dominio spaziale: essa, a livello di immagine, agisce infatti sia sull'intensità del colore del singolo pixel sia sulla sua posizione. L'operazione di convoluzione è qualcosa di piuttosto complesso, che richiede onerosi calcoli se computata tramite la semplice forza bruta. Fortunatamente viene in aiuto degli sviluppatori di convolutional neural network la cosiddetta trasformata di Fourier, che sarà nota a coloro che masticano un po' di teoria dei segnali o di analisi in campo complesso. Senza scendere in dettagli tecnici, la trasformata di Fourier è un metodo che consente di semplificare estremamente l'operazione di convoluzione, facendo per esempio diventare l'integrazione una semplice moltiplicazione. Tutte le schede grafiche integrate in una rete neurale convoluzionale fanno attualmente uso della trasformata di Fourier.

L'utilità della convoluzione

La convoluzione può descrivere la diffusione dell'informazione, ovvero il metodo con cui questa si propaga: essa può per esempio dettagliare ciò che succede ai singoli atomi (come la probabilità che una determinata gocciolina vada a finire proprio in quel punto) se aggiungiamo dello zucchero ad un bicchiere di acqua, in dipendenza da quanto intensamente giriamo col cucchiaino per miscelare. Nella teoria delle probabilità, invece, la convoluzione può descrivere la correlazione fra due sequenze numeriche che si sovrappongono, cioè quanto queste sono simili (ma non uguali), e così via.
Le interpretazioni dell'operazione in esame sono tantissime, e può essere impiegata in altrettanti campi. Nello specifico, nel deep learning l'interpretazione corretta della convoluzione deve ancora essere definita, ma la misura della correlazione appena vista è quella più utilizzata a livello numerico: le maschere di convoluzione possono essere interpretate come feature detector, cioè come degli strumenti che ci permettono di comprendere i dettagli di un'immagine, come quanto rosso c'è, quante e quali sono le fonti di luce o com'è il rapporto di contrasto. Se prendiamo un'immagine di input e ad essa applichiamo una determinata maschera di convoluzione, potremmo ottenere un'immagine risultate in cui la funzionalità che vogliamo analizzare viene isolata: se vogliamo capire dove sono i punti più scuri in una foto, allora avremmo un'immagine risultante che risulterà di fatto essere un mappa dei toni scuri.

Il pooling (o subsampling)

Il pooling è un'altra delle procedure cardine che le schede grafiche inserite all'interno di una rete neurale convoluzionale devono saper portare a termine. Essa è un'operazione che, molto semplicemente, prende in ingresso una serie di input e li riduce ad un singolo valore, un po' come l'operazione di subsampling effettuata dal supersampling anti-aliasing, che isola quattro sotto pixel e li riduce ad uno solo effettuando una media. Così facendo, si possono semplificare alcune caratteristiche della nostra immagine, per meglio adattarle al calcolo tramite una convolutional neural network.

Se per esempio una determinata foto è troppo ricca di dettagli e la computazione è di conseguenza eccessivamente onerosa, si possono appiattire le informazioni ed effettuare comunque l'applicazione della maschera di convoluzione, senza però inficiare sulle prestazioni. Tale tecnica può essere anche utile per meglio sfruttare delle maschere di convoluzione che tentano di spostare un'immagine, magari per centrarla e semplificare una qualche procedura. C'è un limite comunque, nel caso di una foto, al numero di pixel massimo che si possono generalizzare: chiaramente, più questo buffer è largo e più informazioni si possono condensare, il che fa sì che le informazioni relative alla rete neurale possano meglio incastrarsi nella memoria RAM delle GPU incaricate dei calcoli. Se però il buffer è troppo grosso e si generalizzano troppe informazioni contemporaneamente, allora si getta al vento una porzione troppo grossa dei dati, facendo perdere a tutto il sistema preziose prestazioni di predizione dello scenario attuale.

Le convolutional neural network (CNN)

Una convolutional neural network (o, italianizzato, una rete neurale a convoluzione) utilizza dei livelli che filtrano gli input ed estraggono da questi solo le informazioni più interessanti. Questi livelli di convoluzione possiedono di solito dei parametri che sono appresi automaticamente dalla rete, man mano che questa opera. In pratica, i filtri sono sistemati senza l'intervento umano, così che possano estrarre i dati più rilevanti con una precisione sempre maggiore. Ad esempio, in un task che richiede il riconoscimento di un oggetto in un'immagine, potrebbe essere utile filtrare le informazioni riguardo alla forma dell'oggetto stesso, e saltare tutti gli altri attributi, come il colore; di contro, nel riconoscimento della specie di un determinato uccello risulta invece più interessante salvare ed isolare il colore delle penne del pennuto, in quanto il sistema sa già che si tratta di un uccello e ha solo bisogno di catalogarlo in maniera più fine (una determinata specie può avere uno specifico colore delle penne).
In genere le reti a convoluzione possiedono dei livelli organizzati gerarchicamente, in modo tale che ogni layer filtri gli attributi in maniera sempre più precisa man mano che si scende di profondità. Poco a poco che le informazioni vengono filtrate da questi livelli, esse vengono anche semplificate tramite proprio l'operazione di pooling: ogni layer, infatti, ha di solito un buffer per compiere proprio tale operazione.
Le reti neurali a convoluzione più moderne utilizzano anche i cosiddetti inception modules, che effettuano la convoluzione scomponendo la maschera in sezioni 1x1 per procedere per gradi ed ottimizzare il consumo di memoria, nel caso in cui le GPU ne avessero poca. Per esempio, una maschera 8 × 8 può essere ridotta all'applicazione di 64 maschere 1 × 1, facendo sì che la rete si occupi di una convoluzione alla volta, senza caricare tutto il blocco 8 × 8 in memoria.

Deep learning Le convolutional neural network sono delle reti predittive molto potenti e, a livello generale, anche piuttosto semplici. Ciò che complica maggiormente la situazione è proprio l’operazione di convoluzione: se fosse effettuata così com'è, fra la maschera e l’input, avremmo di fronte il calcolo di integrali anche molto complessi e lunghi. Fortunatamente, come abbiamo visto, viene in nostro aiuto la trasformata di Fourier, che rende le neural network a convoluzione decisamente molto più abbordabili a livello computazionale, senza la stringente richiesta di GPU dagli enormi TFLOPS.

Altri contenuti per Deep learning