Una revisione delle architetture di deep learning più diffuse: AlexNet, VGG16 e GoogleNet
Introduzione
Problemi che vanno dal riconoscimento delle immagini alla generazione di immagini e al tagging hanno tratto grandi benefici da vari progressi dell'architettura del deep learning (DL). Comprendere le complessità dei diversi modelli DL ti aiuterà a comprendere l’evoluzione del campo e a trovare la soluzione giusta per i problemi che stai cercando di risolvere.
Negli ultimi due anni sono sorte molte architetture che variano in molti aspetti, come i tipi di livelli, iperparametri, ecc. In questa serie esamineremo molte delle architetture DL più importanti che hanno definito il campo e ridefinito la nostra capacità per affrontare problemi critici.
Nella prima parte di questa serie tratteremo i modelli "precedenti" pubblicati dal 2012 al 2014. Ciò include:
- AlexNet
- VGG16
- GoogleNet
Prerequisiti
Per comprendere appieno i concetti, consigliamo vivamente di avere una conoscenza di base del deep learning e delle reti neurali, in particolare delle reti neurali convoluzionali (CNN). È necessaria la familiarità con concetti chiave come strati, funzioni di attivazione, propagazione all'indietro e discesa del gradiente. Una conoscenza generale delle tecniche di elaborazione delle immagini e l'esperienza con un framework di deep learning come TensorFlow o PyTorch saranno utili anche per comprendere le applicazioni pratiche di questi architetture.
AlexNet (2012)
AlexNet è una delle architetture di rete neurale più popolari fino ad oggi. È stato proposto da Alex Krizhevsky per ImageNet Large Scale Visual Recognition Challenge (ILSVRV) e si basa su reti neurali convoluzionali. ILSVRV valuta gli algoritmi per il rilevamento di oggetti e la classificazione delle immagini. Nel 2012, Alex Krizhevskij et al. ha pubblicato la Classificazione ImageNet con reti neurali convoluzionali profonde. Questo è il momento in cui si è sentito parlare per la prima volta di AlexNet.
La sfida era sviluppare una rete neurale convoluzionale profonda per classificare le 1,2 milioni di immagini ad alta risoluzione nel set di dati ImageNet LSVRC-2010 in più di 1000 categorie diverse. L’architettura ha raggiunto un tasso di errore dei primi 5 (il tasso di non trovare la vera etichetta di una data immagine tra le prime 5 previsioni di un modello) del 15,3%. Il miglior risultato successivo è rimasto molto indietro con il 26,2%.
Architettura AlexNet
L'architettura è composta da otto strati in totale, di cui i primi 5 sono convoluzionali e gli ultimi 3 sono completamente connessi. I primi due livelli convoluzionali sono collegati a livelli di max pooling sovrapposti per estrarre il numero massimo di funzionalità. Il terzo, quarto e quinto strato convoluzionale sono direttamente connessi agli strati completamente connessi. Tutti gli output degli strati convoluzionali e completamente connessi sono collegati alla funzione di attivazione non lineare ReLu. Lo strato di output finale è collegato a uno strato di attivazione softmax, che produce una distribuzione di 1000 etichette di classe.
Architettura AlexNet
Le dimensioni di input della rete sono (256 × 256 × 3), il che significa che l'input per AlexNet è un'immagine RGB (3 canali) di (256 × 256) pixel. Nell’architettura sono coinvolti più di 60 milioni di parametri e 650.000 neuroni. Per ridurre l'overfitting durante il processo di addestramento, la rete utilizza livelli di esclusione. I neuroni “caduti” non contribuiscono al passaggio in avanti e non partecipano alla propagazione all’indietro. Questi strati sono presenti nei primi due strati completamente connessi.
Formazione e risultati AlexNet
Il modello utilizza una funzione di ottimizzazione della discesa del gradiente stocastica con dimensione del batch, quantità di moto e decadimento del peso impostati rispettivamente su 128, 0,9 e 0,0005. Tutti i livelli utilizzano un tasso di apprendimento uguale di 0,001. Per affrontare l'overfitting durante la formazione, AlexNet utilizza sia i livelli di aumento dei dati che quelli di abbandono. Ci sono voluti circa sei giorni per allenarsi su due GPU GTX 580 da 3 GB per 90 cicli.
Di seguito è riportato uno screenshot dei risultati ottenuti utilizzando l'architettura AlexNet:
Risultati utilizzando AlexNet sul set di dati ImageNet
Per quanto riguarda i risultati sul set di dati ILSVRC-2010, AlexNet ha ottenuto tassi di errore dei set di test top 1 e top 5 del 37,5% e del 17,0% quando si è tenuta la competizione.
I framework di deep learning più diffusi come PyTorch e TensorFlow ora dispongono dell'implementazione di base di architetture come AlexNet. Di seguito sono riportati alcuni collegamenti pertinenti per implementarlo autonomamente.
- Modello Tensorflow AlexNet
- Altri riferimenti: Comprendere AlexNet
- L'articolo originale: Classificazione ImageNet con reti neurali convoluzionali profonde
VGG16 (2014)
VGG è una popolare architettura di rete neurale proposta da Karen Simonyan e Andrew Zisserman dell'Università di Oxford. Anche questo si basa sulle CNN ed è stato applicato alla ImageNet Challenge nel 2014. Gli autori descrivono in dettaglio il loro lavoro nel loro articolo, Very Deep Convolutional Networks for large-scale Image Recognition. La rete ha raggiunto il 92,7% di precisione dei test top-5 sul set di dati ImageNet.
I principali miglioramenti di VGG, rispetto ad AlexNet, includono l'utilizzo di filtri di dimensioni del kernel di grandi dimensioni (dimensioni 11 e 5 rispettivamente nel primo e nel secondo strato convoluzionale) con più filtri di dimensioni del kernel (3 × 3), uno dopo l'altro.
Architettura VGG
Le dimensioni di input dell'architettura sono fisse alla dimensione dell'immagine (244 × 244). In una fase di pre-elaborazione il valore RGB medio viene sottratto da ciascun pixel dell'immagine.
Fonte: implementazione passo passo di VGG16 in Keras per principianti
Una volta completata la pre-elaborazione, le immagini vengono passate a una pila di strati convoluzionali con piccoli filtri di campo recettivo di dimensioni (3×3). In alcune configurazioni la dimensione del filtro è impostata su (1 × 1), che può essere identificata come una trasformazione lineare dei canali di ingresso (seguita da non linearità).
Il passo per l'operazione di convoluzione è fissato a 1. Il pooling spaziale viene effettuato da cinque strati di max-pooling, che seguono diversi strati convoluzionali. Il pooling massimo viene eseguito su una finestra di pixel (2 × 2), con la dimensione del passo impostata su 2.
La configurazione per i layer completamente connessi è sempre la stessa; i primi due livelli hanno 4096 canali ciascuno, il terzo esegue la classificazione ILSVRC a 1000 vie (e quindi contiene 1000 canali, uno per ciascuna classe) e lo strato finale è il livello softmax. Tutti gli strati nascosti per la rete VGG sono seguiti dalla funzione di attivazione ReLu.
Configurazione, formazione e risultati del VGG
La rete VGG ha cinque configurazioni denominate da A a E. La profondità della configurazione aumenta da sinistra (A) a destra (B), con l'aggiunta di più livelli. Di seguito una tabella che descrive tutte le possibili architetture di rete:
Tutte le configurazioni seguono lo schema universale dell'architettura e differiscono solo in profondità; da 11 strati di peso nella rete A (8 strati convoluzionali e 3 completamente connessi), a 19 strati di peso nella rete E (16 strati convoluzionali e 3 completamente connessi). Il numero di canali degli strati convoluzionali è piuttosto piccolo, partendo da 64 nel primo strato per poi aumentare di un fattore 2 dopo ogni strato di max-pooling, fino a raggiungere 512. Di seguito è riportata un'immagine che mostra il numero totale di parametri (in milioni ):
L'addestramento di un'immagine sulla rete VGG utilizza tecniche simili a Krizhevsky et al., menzionate in precedenza (ovvero l'addestramento di AlexNet). Ci sono solo poche eccezioni quando sono coinvolte immagini di training multiscala. L'intero processo di addestramento viene effettuato ottimizzando l'obiettivo di regressione logistica multinomiale utilizzando la discesa del gradiente in mini-batch basata sulla backpropagation. La dimensione del batch e il momentum sono impostati rispettivamente su 256 e 0,9. La regolarizzazione del dropout è stata aggiunta per i primi due layer completamente connessi impostando il rapporto di dropout a 0,5. Il tasso di apprendimento della rete è stato inizialmente impostato su 0,001 e poi è diminuito di un fattore 10 quando la precisione del set di convalida ha smesso di migliorare. In totale, il tasso di apprendimento è stato ridotto di 3 volte e l'apprendimento è stato interrotto dopo 370.000 iterazioni (74 epoche).
Il VGG16 ha sovraperformato significativamente la precedente generazione di modelli in entrambe le competizioni ILSVRC-2012 e ILSVRC-2013. Per quanto riguarda le prestazioni a rete singola, l'architettura VGG16 ha ottenuto il miglior risultato (errore del test del 7,0%). Di seguito è riportata una tabella che mostra i tassi di errore.
Per quanto riguarda l'hardware e il tempo di formazione, la rete VGG ha impiegato settimane di formazione utilizzando le GPU Titan Black di NVIDIA.
Ci sono due principali inconvenienti che vale la pena notare se lavori con una rete VGG. Innanzitutto, ci vuole molto tempo per allenarsi. In secondo luogo, i pesi dell’architettura di rete sono piuttosto elevati. A causa della sua profondità e del numero di nodi completamente connessi, il modello VGG16 addestrato supera i 500 MB. VGG16 viene utilizzato in molti problemi di classificazione delle immagini di deep learning; tuttavia, architetture di rete più piccole sono spesso più desiderabili (come SqueezeNet, GoogleNet, ecc.)
I framework di deep learning più diffusi come PyTorch e TensorFlow hanno l'implementazione di base dell'architettura VGG16. Di seguito sono riportati alcuni collegamenti pertinenti.
- Implementazione di PyTorch VGG
- Implementazione di Tensorflow VGG
- Link al documento di ricerca originale
GoogleNet (2014)
La rete Inception è stata una delle maggiori scoperte nel campo delle reti neurali, in particolare per le CNN. Finora esistono tre versioni di Inception Networks, denominate Inception Version 1, 2 e 3. La prima versione è entrata in campo nel 2014 e, come suggerisce il nome "GoogleNet", è stata sviluppata da un team di Google. Questa rete è stata responsabile della definizione di un nuovo stato dell'arte per la classificazione e il rilevamento nell'ILSVRC. Questa prima versione della rete Inception viene denominata GoogleNet.
Se una rete è costruita con molti strati profondi potrebbe affrontare il problema del sovradattamento. Per risolvere questo problema, gli autori nel documento di ricerca Going deep with convolutions hanno proposto l'architettura di GoogleNet con l'idea di avere filtri con più dimensioni che possano operare sullo stesso livello. Con questa idea, la rete diventa effettivamente più ampia anziché profonda. Di seguito è riportata un'immagine che mostra un modulo Naive Inception.
Come si può vedere nel diagramma sopra, l'operazione di convoluzione viene eseguita su ingressi con tre dimensioni di filtro: (1 × 1), (3 × 3) e (5 × 5). Viene eseguita anche un'operazione di max pooling con le convoluzioni, che viene quindi inviata al modulo di inizio successivo.
Poiché le reti neurali richiedono molto tempo e sono costose da addestrare, gli autori limitano il numero di canali di input aggiungendo una convoluzione extra (1 × 1) prima delle convoluzioni (3 × 3) e (5 × 5) per ridurre le dimensioni del canale. rete ed eseguire calcoli più veloci. Di seguito è riportata un'immagine che mostra un modulo Naive Inception con questa aggiunta.
Questi sono gli elementi costitutivi di GoogleNet. Di seguito è riportato un rapporto dettagliato sulla sua architettura.
Architettura di GoogleNet
L'architettura di GoogleNet ha una profondità di 22 livelli, di cui 27 di pooling inclusi. Ci sono 9 moduli iniziali impilati linearmente in totale. Le estremità dei moduli iniziali sono collegate al livello di pooling medio globale. Di seguito è riportata un'immagine ingrandita dell'intera architettura di GoogleNet.
La Scatola Arancione nell'architettura è lo stelo che presenta poche circonvoluzioni preliminari. Le caselle viola rappresentano le classi ausiliarie. (Crediti immagine: una semplice guida alle versioni della rete Inception).
L'architettura dettagliata e i parametri sono spiegati nell'immagine seguente.
Formazione e risultati di GoogleNet
GoogleNet viene addestrato utilizzando sistemi di machine learning distribuiti con una modesta quantità di parallelismo di modelli e dati. L'addestramento ha utilizzato la discesa del gradiente stocastico asincrono con un momento di 0,9 e un programma di tasso di apprendimento fisso che riduceva il tasso di apprendimento del 4% ogni 8 epoche. Di seguito è riportata un'immagine dei risultati delle squadre che si sono esibite per ILSVRC 2014. GoogleNet si è classificato al primo posto con un tasso di errore del 6,67%.
Di seguito sono riportati alcuni collegamenti pertinenti che ti incoraggio a verificare se sei interessato a utilizzare o implementare GoogleNet.
- Link al documento di ricerca originale
- Implementazione PyTorch di GoogleNet
- Implementazione Tensorflow di GoogleNet
Conclusione
Queste architetture hanno gettato le basi per molti dei modelli avanzati di deep learning odierni. L'introduzione ad AlexNet e l'uso delle GPU hanno segnato un punto di svolta nelle prestazioni di classificazione delle immagini. VGG16 ha dimostrato il potere della profondità e della semplicità utilizzando piccoli filtri convoluzionali, mentre GoogleNet ha introdotto il modulo Inception per raggiungere un equilibrio tra efficienza e precisione.