Evoluzione ed uso delle CNN e "perché l'apprendimendo profondo?"

$$\gdef \sam #1 {\mathrm{softargmax}(#1)}$$ $$\gdef \vect #1 {\boldsymbol{#1}} $$ $$\gdef \matr #1 {\boldsymbol{#1}} $$ $$\gdef \E {\mathbb{E}} $$ $$\gdef \V {\mathbb{V}} $$ $$\gdef \R {\mathbb{R}} $$ $$\gdef \N {\mathbb{N}} $$ $$\gdef \relu #1 {\texttt{ReLU}(#1)} $$ $$\gdef \D {\,\mathrm{d}} $$ $$\gdef \deriv #1 #2 {\frac{\D #1}{\D #2}}$$ $$\gdef \pd #1 #2 {\frac{\partial #1}{\partial #2}}$$ $$\gdef \set #1 {\left\lbrace #1 \right\rbrace} $$ % My colours $$\gdef \aqua #1 {\textcolor{8dd3c7}{#1}} $$ $$\gdef \yellow #1 {\textcolor{ffffb3}{#1}} $$ $$\gdef \lavender #1 {\textcolor{bebada}{#1}} $$ $$\gdef \red #1 {\textcolor{fb8072}{#1}} $$ $$\gdef \blue #1 {\textcolor{80b1d3}{#1}} $$ $$\gdef \orange #1 {\textcolor{fdb462}{#1}} $$ $$\gdef \green #1 {\textcolor{b3de69}{#1}} $$ $$\gdef \pink #1 {\textcolor{fccde5}{#1}} $$ $$\gdef \vgrey #1 {\textcolor{d9d9d9}{#1}} $$ $$\gdef \violet #1 {\textcolor{bc80bd}{#1}} $$ $$\gdef \unka #1 {\textcolor{ccebc5}{#1}} $$ $$\gdef \unkb #1 {\textcolor{ffed6f}{#1}} $$ % Vectors $$\gdef \vx {\pink{\vect{x }}} $$ $$\gdef \vy {\blue{\vect{y }}} $$ $$\gdef \vb {\vect{b}} $$ $$\gdef \vz {\orange{\vect{z }}} $$ $$\gdef \vtheta {\vect{\theta }} $$ $$\gdef \vh {\green{\vect{h }}} $$ $$\gdef \vq {\aqua{\vect{q }}} $$ $$\gdef \vk {\yellow{\vect{k }}} $$ $$\gdef \vv {\green{\vect{v }}} $$ $$\gdef \vytilde {\violet{\tilde{\vect{y}}}} $$ $$\gdef \vyhat {\red{\hat{\vect{y}}}} $$ $$\gdef \vycheck {\blue{\check{\vect{y}}}} $$ $$\gdef \vzcheck {\blue{\check{\vect{z}}}} $$ $$\gdef \vztilde {\green{\tilde{\vect{z}}}} $$ $$\gdef \vmu {\green{\vect{\mu}}} $$ $$\gdef \vu {\orange{\vect{u}}} $$ % Matrices $$\gdef \mW {\matr{W}} $$ $$\gdef \mA {\matr{A}} $$ $$\gdef \mX {\pink{\matr{X}}} $$ $$\gdef \mY {\blue{\matr{Y}}} $$ $$\gdef \mQ {\aqua{\matr{Q }}} $$ $$\gdef \mK {\yellow{\matr{K }}} $$ $$\gdef \mV {\lavender{\matr{V }}} $$ $$\gdef \mH {\green{\matr{H }}} $$ % Coloured math $$\gdef \cx {\pink{x}} $$ $$\gdef \ctheta {\orange{\theta}} $$ $$\gdef \cz {\orange{z}} $$ $$\gdef \Enc {\lavender{\text{Enc}}} $$ $$\gdef \Dec {\aqua{\text{Dec}}}$$
🎙️ Yann LeCun

Evoluzione delle CNN

Nel cervello animale i neuroni reagiscono alle linee che hanno un particolare orientamento. Gruppi di neuroni che reagiscono allo stesso orientamento sono replicati su tutto il campo visivo.

Fukushima (1982) costruì una rete neurale (NN, Neural Network) che funzionava alla stessa maniera del cervello, basata su due concetti. Primo, i neuroni sono replicati attraverso il campo visivo. Secondo, esistono cellule complesse che raccolgono l’informazione da cellule semplici (unità selettive di orientamento). Come risultato, lo spostamento dell’immagine cambierà l’attivazione di cellule semplici ma non influenzerà l’attivazione integrata della cellula complessa (raggruppamento convoluzionale, convolutional pooling).

LeCun (1990) utilizzò la retropropagazione (backprop o backpropagation) per addestrare una CNN nel riconoscere dei numeri scritti a mano. Esiste una demo del 1992 in cui l’algoritmo riconosce i caratteri in diversi stili. L’utilizzo di un modello completamente addestrato, dall’inizio alla fine, per fare riconoscimento di pattern/caratteri fu una novità per quell’epoca. In passato le persone utilizzavano sistemi di estrazione di caratteristiche con, alla fine, un modello supervisionato.

Questi nuovi sistemi CNN potevano riconoscere diversi caratteri contemporaneamente in una singola immagine. Per farlo le persone costruivano una piccola finestra su di cui lavorava una CNN e facevano scorrere detta finestra lungo l’intera immagine. Se la CNN si attivava, allora un particolare carattere era presente.

In seguito questa idea fu applicata al riconoscimento di volti/persone e nella segmentazione semantica (classificazione di ogni pixel, pixel-wise classification). Esempi includono Hadsell (2009) e Farabet (2012). Questa tecnica divenne infine popolare nell’industria, applicata nei veicoli autonomi, come ad esempio nell’identificazione delle corsie di marcia.

Tipologie speciali di hardware per addestrare CNN divennero un tema scottante negli anni 1980, poi l’interesse diminuì ed oggi è di nuovo popolare.

La rivoluzione dell’apprendimento profondo (deep learning, sebbene il termine non venne ancora usato all’epoca) iniziò nel 2010-2013. I ricercatori si focalizzarono nell’inventare algoritmi che potessero addestrare grosse CNN più velocemente. Krizhevsky (2012) fece uscire AlexNet, che era una CNN molto più grande di quelle usate fino ad allora e la addestrò sul dataset Imagenet (1.3 milioni di istanze), utilizzando le GPU. Dopo un paio di settimane di esecuzione, AlexNet fu in grado di battere in performance i migliori concorrenti, con un largo margine – un errore di accuratezza per i primi 5 output del modello (Top-5 error rate) del 25.8% del secondo classificato contro il 16.4 di AlexNet.

Dopo aver testimoniato il successo di AlexNet, la comunità della visione artificiale (CV, computer vision) si convinse che le CNN funzionavano. Mentre tutte le pubblicazioni dal 2011-2012 che menzionavano le CNN vennero rifiutate, a partire dal 2016 la maggior parte delle pubblicazioni accettate sulla visione artificiale utilizza le CNN.

Nel corso degli anni il numero di strati usati è incrementato: LeNet – 7, AlexNet – 12, VGG – 19, ResNet – 50. Tuttavia c’è un compromesso tra il numero di operazioni necessarie per calcolare l’output, la dimensione del modello e la sua accuratezza. Perciò un argomento popolare oggi è come comprimere le reti per rendere la computazione più veloce.

Apprendimento Profondo ed Estrazione di Caratteristiche

Le reti multi-strato hanno successo perchè sfruttano la struttura compositiva dei dati naturali. Nella gerarchia compositiva, le combinazioni di oggetti di un livello formano gli oggetti del livello successivo. Se noi mimiamo questa gerarchia con strati multipli e lasciamo alla rete il compito di apprendere un’appropriata combinazione di caratteristiche, otteniamo quello che viene chiamata un’architettura di apprendimento profondo. Perciò le reti di apprendimento profondo sono di natura gerarchica.

Le architetture di apprendimento profondo hanno portato un progresso incredibile in compiti di visione artificiale, dall’identificare e generare maschere accurate intorno ad oggetti fino all’identificazione di proprietà spaziali di un oggetto. Le architetture Mask-RCNN e RetinaNet sono quelle maggiormente responsabili di questo miglioramento.

Le Mask RCNN hanno trovato il loro utilizzo nella segmentazione di oggetti singoli, ad es. nel creare maschere per ogni oggetto in un’immagine. L’input e l’output sono immagini. L’architettura può anche essere utilizzata per fare segmentazione di istanze, ad es. nell’identificare oggetti differenti dello stesso tipo in un’immagine. Detectron, un sistema software del Facebook AI Research (FAIR) implementa tutti questi algoritmi all’avanguardia nell’identificazione di oggetti ed è un software open-source.

Alcune delle applicazioni pratiche delle CNN sono la guida autonoma di veicoli e l’analisi di immagini mediche.

Sebbene la scienza e la matematica che si cela dietro all’apprendimento automatico sia abbastanza chiara, ci sono ancora diverse domande interessanti che richiedono ulteriore ricerca. Queste domande includono: perchè le architetture multi-strato funzionano meglio, visto che possiamo approssimare qualsiasi funzione con due strati? Perchè le CNN funzionano bene con dati naturali come il parlato, le immagini ed il testo? Come possiamo ottimizzare funzioni non convesse così bene? Perchè le architetture funzionano anche se troppo sovraparametrizzate?

L’estrazione di caratteristiche consiste nell’espansione della dimensione rappresentativa in modo che le caratteristiche così espanse si possano separare linearmente con più alta probabilità; i punti dei dati in uno spazio dimensionalmente maggiore sono più probabilmente separabili a causa dell’incremento dei possibili piani di separazione.

I primi professionisti nell’apprendimento automatico si affidarono a caratteristiche di alta qualità, selezionate manualmente e specializzate in un determinato campo per costruire modelli di intelligenza artificiale ma, con l’avvento dell’apprendimento profondo, i modelli sono diventati capaci di estrarre le caratteristiche automaticamente. Sono qui elencati alcuni approcci comuni utilizzati negli algoritmi di estrazione di caratteristiche:

  • Suddivisione (tiling) dello spazio
  • Proiezioni casuali
  • Classificatori polinomiali (caratteristiche tra prodotti)
  • Funzioni a base radiale
  • Macchine a Kernel

A causa della natura compositiva dei dati, le caratteristiche apprese hanno una gerarchia rappresentativa con livello crescente di astrazione. Ad esempio:

  • Immagini - al massimo livello di granularità le immagini possono essere pensate come pixel. La combinazione di pixel costituisce delle linee che, quando combinate, formano textons (forme composte da più linee). I textons formano motivi ed i motivi formano le parti di un’immagine. Combinando queste parti insieme otteniamo l’immagine finale.
  • Testo - Allo stesso modo c’è una gerarchia inerente ai dati testuali. I caratteri formano le parole, che combinate assieme ci danno gruppi di parole, quindi periodi che combinati tra loro ci danno frasi. Le frasi infine ci dicono quale storia viene narrata.
  • Parlato - Nel parlato i campioni compongono le bande che compongono i suoni che compongono i foni, quindi i fonemi, quindi parole intere e frasi, mostrando così una chiara gerarchia nella rappresentazione.

Rappresentazioni di apprendimento

Ci sono coloro che respingono l’apprendimento profondo: “se possiamo approssimare ogni funzione con 2 strati, perchè averne di più?”

Per esempio: gli SVM (Support Vector Machines) trovano un iperpiano di separazione “nell’intervallo dei dati”, che significa che le predizioni si basano sul confronto con gli esempi di addestramento. Le SVM sono essenzialmente delle reti neurali molto semplicistiche a 2 strati, in cui il primo strato definisce i “template” mentre il secondo è un classificatore lineare. Il problema con l’errore di due strati è che la complessità e la dimensione dello strato intermedio è esponenziale in $N$ (per lavorare bene con un compito difficile, c’è bisogno di una GRANDE quantità di template). Se però si espande il numero di strati nel $log(N)$, ogni strato diventa lineare in $N$. Esiste un compromesso tra il tempo e lo spazio.

Un’analogia è il disegno di un circuito per il calcolo di una funzione booleana con non più di due strati di porte logiche – possiamo ottenre ogni funzione booleana in questo modo! Ma la complessità e le risorse del primo strato (il numero delle porte logiche) diventa velocemente infattibile per funzioni complesse.

Cosa è “profondo”?

  • Una SVM non è profonda perchè ha solo 2 strati
  • Un albero di classificazione non è profondo perchè ogni livello analizza solamente caratteristiche grezze
  • Una rete profonda ha molti strati e li usa per costruire una gerarchia di caratteristiche di complessità incrementale

Come possono i modelli apprendere le rappresentazioni (buone caratteristiche)?

Ipotesi della varietà (manifold): i dati naturali vivono in una varietà a poche dimensioni. L’insieme di immagini possibili è essenzialmente infinito, l’insieme di immagini “naturali” ne è un piccolo sottoinsieme. Per esempio: data l’immagine di una persona, l’insieme delle possibili immagini è nell’ordine di grandezza dei muscoli facciali che egli può muovere (gradi di libertà) di circa 50. Un estrattore di caratteristiche ideale (ed irrealistico) rappresenta tutti i fattori di variazione (ogni muscolo, illuminazione, ecc).

Q&A (domande e risposte):

  • Nell’esempio del viso qualche altra tecnica di riduzione di dimensionalità (ad es. PCA, analisi delle componenti principali) potrebbe estrarre queste caratteristiche?
    • Risposta: potrebbe funzionare solo se la superficie chiusa è un iperpiano, ma non lo è.

📝 Marina Zavalina, Peeyush Jain, Adrian Pearl, Davida Kollmar
Stefano Pirra
27 Jan 2020