in Artificial Intelligence, Maths

Le reti neurali artificiali sono una classe di algoritmi complessi che tentano di risolvere problemi complessi partendo dall’idea che se il cervello umano è capace di fare qualche cosa, probabilmente anche una sua astrazione può affrontare lo stesso problema.

L’efficacia di queste tecniche (diverse ma affini) è notevole, ma è necessario pagare anche un notevole costo computazionale.

Un moderno classico nelle reti neurali è un tipo di rete che viene identificata con il nome convolutional neural network (CNN in breve). Questo tipo di rete è molto efficace nel riconoscere pattern, ad esempio riguardanti immagini, e quindi è una buona base per creare un classificatore.

Non vogliamo qui ripetere male quello che c’è scritto già in un’infinità di blog in internet, ma vogliamo approfondire il concetto di “convolutional” delle CNN.

Perché convolutional?

Nel caso delle reti neurali, il concetto di convoluzione deriva da un’operazione che viene fatta tra una coppia di strati della rete.

Prendiamo ad esempio una minimalista CNN:

https://upload.wikimedia.org/wikipedia/commons/6/63/Typical_cnn.png

Come nelle reti classiche (simili all’ultimo strato dell’esempio, cioè “Fully Connected”), l’obiettivo è di trovare un modo per minimizzare un certo costo quando si hanno contemporaneamente le coppie input-output in fase di training. Questo si ottiene operando sui pesi dei neuroni mediante algoritmi di ricerca di minimo.

Dato che il numero di connessioni di una rete completamente connessa cresce in modo intrattabile con il crescere dell’input e della sua complessità, ci sono vari modi per aumentare i vincoli e ridurre le possibilità da indagare.

Nel caso delle CNN, il primo passo è di effettuare una convoluzione tra input e filtri.

I filtri sono nuclei di operazioni sull’input che permettono di evidenziare caratteristiche generali utili a discriminare le categorie in output. (Drammatica ma efficace semplificazione)

Ma perché convoluzionale? E cosa sono in concreto questi filtri?

Se l’input è una matrice (ad esempio la matrice dei punti di un’immagine), il filtro è anch’esso una matrice (o, meglio, un tensore).

Il filtro è una funzione perché esiste un’operazione algebrica tra input e filtro. L’operazione è fissa per tutte le immagini e per tutti i filtri e si tratta della convoluzione!

https://en.wikipedia.org/wiki/Kernel_(image_processing)

Nell’immagine è mostrato un filtro sharpen usato per evidenziare i bordi di un’immagine. La matrice Immagine (che contiene il valore di intensità dei pixel) subisce la convoluzione con la matrice filtro.
Il primo valore del risultato (il primo pixel in alto a sinistra ad esempio) e il prodotto tra il primo quadrato 3×3 dell’immagine e il filtro. Spostando la matrice filtro di n pixel a destra e m in basso ed effettuando il prodotto si ottiene il pixel di coordinate (n,m) dell’output.

La convoluzione è un’operazione matematica, un prodotto tra elementi affini, che si può definire in diversi modi. Il modo più famoso è quello che si incontra spesso in qualche corso di analisi:

Si tratta quindi di una somma (identificata dal segno d’integrale) rispetto ad una certa misura di prodotti tra una funzione fissata ed un’altra che trasla (l’operazione è simmetrica quindi i ruoli sono intercambiabili).

Implicitamente la convoluzione è nota a tutti (o quasi) fin dalle scuole elementari.

La convoluzione è nascosta (dal riporto) nell’algoritmo della moltiplicazione:

In effetti, ogni cifra della seconda riga viene moltiplicato per le cifre della prima. I vari prodotti sono traslati e sommati (esattamente la ricetta della definizione dell’integrale). Ci sono altre definizioni (riguardante il gradevole rapporto tra convoluzione e operatori), ma questa ci è sufficiente.

Lo strato di convoluzione fa esattamente questo. A partire dalla matrice di input e quella del filtro, crea una nuova matrice facendo una traslazione di prodotti che vengono sommati.

I filtri in questo tipo di reti neurali vengono “appresi” mediante la backpropagation. Sono filtri buoni per l’input di addestramento perché sono modellati sui dati di training.

I filtri quindi sono nuclei di operazioni su immagini, sono una controparte dell’input (orientata dall’output) e sono anche della stessa pasta dell’input.

L’ultima affermazione significa che un filtro può essere (più o meno) visualizzato come se fosse un’immagine.

Quindi l’operazione su un’immagine è definita da un’immagine (grazie all’algebra).

L’operazione di convoluzione è simmetrica, questo significa che si può ribaltare il discorso e dire che le immagini sono operazioni sui filtri!
Riprendendo l’esempio aritmetico, la moltiplicazione per 11 è equivalente alla somma di coppie adiacenti di numeri (quindi una funzione).

Se prendiamo il numero 31452 e lo immaginiamo con due zeri, uno a destra e uno a sinistra, l’ultima frase diventa più chiara: 031452,0

Le cifre del risultato sono la somma delle coppie adiacenti:

3 = 0+3; 4 = 3+1; 5 = 1+4; 9 = 4+5; 7 = 5+2; 2 = 2+0

Ma può essere vista anche come l’azione di 31452 sul numero 11. In questo caso l’interpretazione dell’operazione che si andrebbe a effettuare non ha una semplice definizione, ma è sempre un’espressione valida.

Nelle reti neurali deep, i layer, gli strati (in questo caso input e di convoluzione), sono separati e questo sembra quasi un peccato dato che gli oggetti rappresentabili sono così affini.

In figura la rete YOLO. https://arxiv.org/abs/1506.02640

Un cambio di questo punto di vista richiede un incremento di complessità della topologia della rete o, forse, un nuovo paradigma.


Ti incuriosiscono le potenzialità e la natura dell’intelligenza artificiale? Contattaci a info@eliflab.com