Le reti neurali convoluzionali (CNN) sono una classe di Deep Artificial Neural Network che vengono comunemente applicate alle attività di elaborazione delle immagini, ad esempio il rilevamento e l’identificazione degli oggetti.
Le CNN hanno la struttura di fondo in comune con le MLP viste antecedentemente, infatti:
Le MLP sono in grado di lavorare con le immagini solo se vengono prima convertite in un vettore di valori di pixel. Il problema di questa trasformazione è la potenziale perdita di integrità spaziale infatti si potrebbero perdere le informazioni su come i pixel si combinano tra loro.
Le reti neurali convoluzionali mantengono l’integrità spaziale delle immagini di input perchè sono in grado di ricavare le informazioni derivanti da una matrice di dati attraverso i filtri convoluzionali; inoltre sono in grado di analizzare immagini a colori (quindi in tre dimensioni) elaborando ogni canale singolarmente, ma mantenendole raggruppate come lo stesso input. In pratica, i filtri convoluzionali sono un insieme di pesi che vengono applicati ai valori dei pixel nella nostra immagine di input. Questi pesi vengono appresi e perfezionati da una retropropagazione durante la fase di allenamento.
L’uso di filtri convoluzionali nelle CNN si ispira al lavoro di Hubel e Wiesel, due neuroscienziati che hanno studiato come le immagini inneschino l’attivazione neuronale nella corteccia visiva. Nel loro studio hanno suggerito che l’elaborazione visiva è un processo gerarchico che inizia con l’identificazione delle caratteristiche di base che vengono poi combinate in costrutti più complessi. In modo analogo, i filtri nelle CNN consentono alla rete neurale di identificare le funzionalità di base ed evidenziarle poi queste possono essere inviate in avanti per un’ulteriore elaborazione, ma prima devono essere corrette da una funzione di attivazione.
Il processo di filtraggio, come si può osservare nell’esempio in Figura 2.16, consiste nello scorrimento di un filtro convoluzionale su un’immagine e nella generazione di una versione filtrata dell’immagine.
I filtri convoluzionali possono accentuare e smorzare caratteristiche specifiche presenti nelle immagini di input (ad esempio curve, bordi o colori). I filtri all’interno di una CNN possono differenziarsi principalmente per 4 caratteristiche:
In una rete neurale convoluzionale gli inputs \(I\) sono immagini, quindi matrici in tre dimensioni. Formalmente \(I\) ha dimensione \(H \times W \times C\) dove $H W $ sono i pixel mentre \(C\) i canali, quindi:
\[I \in \mathbb{R}^{H \times W \times C}\]
Ipotizzando un filtro \(K \in \mathbb{R}^{k_1 \times k_2 \times C \times D}\) ed un bias \(b \in \mathbb{R}^{D}\) l’output della procedura convoluzionale è:
\[(I \ast K)_{ij} = \sum_{m = 0}^{k_1 - 1} \sum_{n = 0}^{k_2 - 1} \sum_{c = 1}^{C} K_{m,n,c} \cdot I_{i+m, j+n, c} + b \]
I pesi e il bias vengono aggiornati attraverso una procedura di foward-propagation e back-propagation generalmente inserendo alla fine dei filtri una MLP fully connected.
Nelle CNN la funzione di attivazione più comune è la ReLU, questo perchè assicura che solo i nodi con un’attivazione positiva inviino i loro valori in avanti, ciò garantisce che:
Un attributo comune nelle reti neurali convoluzionali è quello del Pooling, esemplificato in Figura 2.18. Il pooling avviene normalmente dopo che le mappe delle funzionalità sono state passate tramite la funzione di attivazione ReLU. L’obiettivo del pooling è ridurre le dimensioni della matrice dell’immagine senza perdita di informazioni. A sua volta, questa operazione, riduce la quantità di elaborazione richiesta, risparmiando tempo e risorse nella fase di formazione. Le varietà di pooling più comuni sono:
Un altro importante elemento costitutivo della CNN è la normalizzazione (normalization batch). Per aumentare la stabilità di una rete neurale si sottrae dai valori in input la loro media batch e successivamente si dividono per la deviazione standard. La normalizzazione viene, di norma, attuata prima di un livello di attivazione ed è utilizzata per velocizzare il processo di riduzione al minimo la funzione di perdita.
\[ \]
\[ \mu_B = \frac{1}{m} \sum_{i=1}^m x_i \]
\[ \sigma_B^2 = \frac{1}{m} \sum_{i=1}^m (x_i-\mu_B)^2\]
\[ \hat{x_i} = \frac{x_i - \mu_B}{\sqrt{\sigma^2_B + \epsilon}} \]
\[ y_i = \gamma \hat x_i + \beta == BN_{\gamma,\beta}(x_i) \]
\[ \]
L’offset \(\beta\) e lo scale factor \(\gamma\) sono parametri apprendibili che vengono aggiornati nella back-propagation come fossero normali pesi. Se si imposta la \(\gamma\) come 1 e \(\beta\) come 0 l’intero processo è solo standardizzazione.