Una guida completa alle reti neurali convoluzionali – il metodo ELI5

L’intelligenza artificiale ha registrato una crescita monumentale nel colmare il divario tra le capacità degli esseri umani e quelle delle macchine. Ricercatori e appassionati lavorano su numerosi aspetti di questo campo per realizzare cose straordinarie. Una di queste aree è la Computer Vision.

L’obiettivo di questo campo è quello di consentire alle macchine di vedere il mondo come gli esseri umani, di percepirlo in modo simile e di utilizzare la conoscenza per una moltitudine di compiti come il riconoscimento di immagini e video, l’analisi e la classificazione delle immagini, il riconoscimento dei media, i sistemi di raccomandazione, l’elaborazione del linguaggio naturale, ecc. I progressi nella Computer Vision con il Deep Learning sono stati costruiti e perfezionati con il tempo, soprattutto grazie a un particolare algoritmo: la Rete Neurale Convoluzionale.

Introduzione

Una rete neurale convoluzionale (ConvNet/CNN) è un algoritmo di apprendimento profondo che è in grado di ricevere un’immagine in ingresso, assegnare un’importanza (pesi e polarizzazioni apprendibili) a vari aspetti/oggetti dell’immagine ed essere in grado di distinguerli l’uno dall’altro. La pre-elaborazione richiesta in una ConvNet è molto inferiore rispetto ad altri algoritmi di classificazione. Mentre nei metodi primitivi i filtri vengono creati a mano, con un addestramento sufficiente, le ConvNet hanno la capacità di apprendere questi filtri/caratteristiche.

L’architettura di una ConvNet è analoga a quella del modello di connettività dei neuroni nel cervello umano ed è stata ispirata dall’organizzazione della corteccia visiva. I singoli neuroni rispondono agli stimoli solo in una regione ristretta del campo visivo, nota come campo recettivo. Un insieme di tali campi si sovrappone per coprire l’intera area visiva.

Perché le reti ConvNet rispetto alle reti neurali Feed-Forward?

Un’immagine non è altro che una matrice di valori di pixel, giusto? Quindi, perché non appiattire l’immagine (ad esempio, una matrice 3×3 in un vettore 9×1) e darla in pasto a un Perceptron multilivello per la classificazione? Non proprio.
Nel caso di immagini binarie estremamente semplici, il metodo potrebbe mostrare un punteggio di precisione medio durante l’esecuzione della predizione delle classi, ma non avrebbe alcuna precisione quando si tratta di immagini complesse con dipendenze dai pixel.

Una ConvNet è in grado di catturare con successo le dipendenze spaziali e temporali di un’immagine attraverso l’applicazione di filtri pertinenti. L’architettura si adatta meglio al set di dati dell’immagine grazie alla riduzione del numero di parametri coinvolti e alla riutilizzabilità dei pesi. In altre parole, la rete può essere addestrata per comprendere meglio la complessità dell’immagine.
Nella figura, abbiamo un’immagine RGB che è stata separata dai suoi tre piani di colore: rosso, verde e blu. Esistono numerosi spazi di colore di questo tipo per le immagini: scala di grigi, RGB, HSV, CMYK, ecc.
Si può immaginare l’intensità di calcolo che si avrebbe quando le immagini raggiungono dimensioni, ad esempio 8K (7680×4320). Il ruolo della ConvNet è quello di ridurre le immagini in una forma più facile da elaborare, senza perdere le caratteristiche fondamentali per ottenere una buona predizione. Questo è importante per progettare un’architettura che non solo sia in grado di apprendere le caratteristiche, ma che sia anche scalabile su insiemi di dati enormi.

Strato di convoluzione – il Kernel

Dimensioni dell’immagine = 5 (altezza) x 5 (larghezza) x 1 (numero di canali, ad es. RGB)

Nella dimostrazione precedente, la sezione verde assomiglia alla nostra immagine di input 5x5x1, I. L’elemento coinvolto nell’esecuzione dell’operazione di convoluzione nella prima parte di un livello convoluzionale è chiamato Kernel/Filtro, K, rappresentato nel colore giallo. Abbiamo scelto K come matrice 3x3x1.
Il kernel si sposta 9 volte a causa di Stride Length = 1 (Non-Strided), eseguendo ogni volta un’operazione di moltiplicazione matriciale tra K e la porzione P dell’immagine su cui il kernel si trova.
Il filtro si sposta a destra con un certo valore di Stride finché non analizza l’intera larghezza. Successivamente, scende all’inizio (a sinistra) dell’immagine con lo stesso valore di passo e ripete il processo finché non viene attraversata l’intera immagine.
Nel caso di immagini con più canali (ad esempio RGB), il kernel ha la stessa profondità dell’immagine di ingresso. La moltiplicazione matriciale viene eseguita tra le pile Kn e In ([K1, I1]; [K2, I2]; [K3, I3]) e tutti i risultati vengono sommati con il bias per ottenere un output di caratteristica convoluta a un canale di profondità.
L’obiettivo dell’operazione di convoluzione è quello di estrarre le caratteristiche di alto livello, come i bordi, dall’immagine di ingresso.
dall’immagine di ingresso. Le reti convoluzionali non si limitano necessariamente a un solo strato convoluzionale. Convenzionalmente, il primo strato convoluzionale è responsabile dell’acquisizione delle caratteristiche di basso livello, come bordi, colore, orientamento del gradiente, ecc.
Con l’aggiunta di altri livelli, l’architettura si adatta anche alle caratteristiche di alto livello, dando vita a una rete che ha una comprensione completa delle immagini del dataset, simile a quella che avremmo noi.
L’operazione può dare due tipi di risultati: uno in cui la funzione convoluta viene ridotta in dimensionalità rispetto all’input e l’altro in cui la dimensionalità viene aumentata o rimane invariata. Ciò avviene applicando il Valid Padding nel caso del primo, o lo Same Padding nel caso del secondo.
Quando aumentiamo l’immagine 5x5x1 in un’immagine 6x6x1 e poi applichiamo il kernel 3x3x1 su di essa, scopriamo che la matrice convoluta risulta essere di dimensioni 5x5x1. Da qui il nome – Same Padding.
Se invece si esegue la stessa operazione senza padding, si ottiene una matrice di dimensioni pari a quelle del kernel (3x3x1) – Valid Padding.
Il seguente repository contiene molte GIF di questo tipo che aiutano a comprendere meglio come Padding e Stride Length lavorino insieme per ottenere risultati rilevanti per le nostre esigenze.

Strato di aggregazione

Analogamente al livello convoluzionale, il livello di pooling è responsabile della riduzione della dimensione spaziale della funzione convoluta. Ciò serve a ridurre la potenza di calcolo necessaria per elaborare i dati attraverso la riduzione della dimensionalità. Inoltre, è utile per estrarre le caratteristiche dominanti che sono invarianti alla rotazione e alla posizione, mantenendo così il processo di addestramento efficace del modello.
Esistono due tipi di pooling: Pooling massimo e Pooling medio. Il Max Pooling restituisce il valore massimo dalla porzione di immagine coperta dal kernel. Il pooling medio, invece, restituisce la media di tutti i valori della porzione di immagine coperta dal kernel.
Il Max Pooling funziona anche come soppressore del rumore. Scarta completamente le attivazioni rumorose ed esegue anche il de-noising insieme alla riduzione della dimensionalità. Il pooling medio, invece, si limita a ridurre la dimensionalità come meccanismo di soppressione del rumore. Si può quindi affermare che il Max Pooling ha prestazioni molto migliori rispetto all’Average Pooling.
Lo strato convoluzionale e lo strato di pooling formano insieme lo strato i-esimo di una rete neurale convoluzionale. A seconda della complessità delle immagini, il numero di questi strati può essere aumentato per catturare ulteriormente i dettagli di basso livello, ma al costo di una maggiore potenza di calcolo.

Dopo aver seguito il processo sopra descritto, siamo riusciti a mettere il modello in grado di comprendere le caratteristiche. In seguito, appiattiremo l’output finale e lo alimenteremo a una normale Rete Neurale per scopi di classificazione.

Classificazione - Strato completamente connesso (strato FC)

L’aggiunta di uno strato Fully-Connected è un modo (solitamente) economico di apprendere combinazioni non lineari delle caratteristiche di alto livello rappresentate dall’uscita dello strato convoluzionale. Lo strato Fully-Connected apprende una funzione possibilmente non lineare in quello spazio.

Ora che abbiamo convertito l’immagine in ingresso in una forma adatta al nostro percettore multilivello, dobbiamo appiattire l’immagine in un vettore di colonne. L’uscita appiattita viene data in pasto a una rete neurale feed-forward e la backpropagation viene applicata a ogni iterazione dell’addestramento. Nel corso di una serie di epoche, il modello è in grado di distinguere tra le caratteristiche dominanti e alcune di basso livello nelle immagini e di classificarle utilizzando la tecnica di classificazione Softmax.

Come presentato anche nel nostro corso di Computer Vision Hands-On, esistono diverse architetture di CNN che sono state fondamentali per la creazione di algoritmi che alimentano e alimenteranno l’IA nel suo complesso nel prossimo futuro. Alcune di esse sono state elencate di seguito:

  1. LeNet
  2. AlexNet
  3. VGGNet
  4. GoogLeNet
  5. ResNet
  6. ZFNet

Articolo originale di Sumit Saha

A Comprehensive Guide to Convolutional Neural Networks — the ELI5 way | by Sumit Saha | Towards Data Science

Share:

Contenuti
Torna in alto