LeNet5 LeNet5 è nato nel 1994 ed è una delle prime reti neurali convoluzionali, avendo fatto progredire il campo del deep learning. Dal 1988, dopo molte iterazioni di successo, questo lavoro pionieristico di Yann LeCun è stato chiamato LeNet5 (vedi: Apprendimento basato su gradiente applicato al riconoscimento documentale).
L'architettura di LeNet5 si basa sull'idea che (in particolare) le caratteristiche di un'immagine siano distribuite su tutta l'immagine, e che la convoluzione con parametri apprendibili sia un modo efficiente per estrarre caratteristiche simili in più posizioni con un numero ridotto di parametri. All'epoca non c'era una GPU per l'addestramento, e persino la CPU era lenta. Pertanto, la capacità di salvare parametri così come il processo di calcolo è uno sviluppo chiave. Questo è l'opposto dell'uso di ogni pixel come input separato per una grande rete neurale multilivello. LeNet5 spiega che quei pixel non dovrebbero essere usati nel primo livello perché l'immagine presenta forti correlazioni spaziali che non possono essere sfruttate usando pixel indipendenti nell'immagine come diverse caratteristiche di input.
Le funzionalità di LeNet5 possono essere riassunte come segue:
Le reti neurali convoluzionali utilizzano 3 livelli come sequenza: convoluzionali, aggregate, non lineari → Questa è probabilmente una caratteristica chiave del deep learning delle immagini da quando questo articolo è stato inserito! Usa convoluzioni per estrarre le caratteristiche spaziali Sottocampionamento usando la mappatura alla media spaziale La non linearità si manifesta sotto forma di tangente iperbolica (tanh) o a forma di S (sigmoide). Le Reti Neurali Multilivello (MLP) fungono da classificatori finali Le matrici di connessione scarse tra i livelli evitano costi di calcolo elevati
Nel complesso, questa rete è il punto di partenza per un gran numero di architetture recenti e ha ispirato molti in questo ambito.
Intervallo Dal 1998 al 2010, la rete neurale era nella fase di incubazione. La maggior parte delle persone non è consapevole del loro crescente potere, mentre altri ricercatori sono lenti a farlo. Grazie all'avvento delle fotocamere dei telefoni cellulari e delle fotocamere digitali a basso costo, sempre più dati vengono sfruttati. E anche la potenza di calcolo sta crescendo, le CPU diventano più veloci e le GPU stanno diventando strumenti di calcolo per molteplici scopi. Queste tendenze hanno permesso alle reti neurali di progredire, seppur lentamente. I dati e la potenza di calcolo rendono sempre più interessanti i compiti che le reti neurali possono svolgere. Dopo di ciò tutto divenne chiaro......
Dan Ciresan Net Nel 2010, Dan Claudiu Ciresan e Jurgen Schmidhuber hanno pubblicato un'implementazione della prima rete neurale GPU. Questa implementazione è una rete neurale a 9 livelli che funziona su un processore grafico NVIDIA GTX 280, includendo propagazione in avanti e retro.
AlexNet Nel 2012, Alex Krizhevsky ha pubblicato Alexet (vedi: ImageNet Classification with Deep Convolutional Neural Networks), una versione più profonda e ampia di LeNet che ha vinto la difficile competizione ImageNet con un margine significativo.
AlexNet estende le idee di LeNet a reti neurali più grandi che possono apprendere oggetti e livelli di oggetto molto più complessi. I contributi di questo lavoro sono:
Usa un'unità lineare modificata (ReLU) come non linearità Usa la tecnica Dropout per ignorare selettivamente i singoli neuroni durante l'addestramento e evitare il sovrafitting del modello Sovrascrivi un pool grande per evitare l'effetto medio del pooling medio Riduci i tempi di addestramento con la GPU NVIDIA GTX 580
A quel punto, le GPU possono fornire un numero maggiore di core rispetto alle CPU, e il tempo di addestramento può essere aumentato di 10 volte, il che consente dataset più grandi e immagini più ampie.
Il successo di AlexNet ha portato a una piccola rivoluzione. Le reti neurali convoluzionali sono ora la spina dorsale del deep learning e sono diventate sinonimo di "grandi reti neurali che ora possono risolvere compiti utili."
Eccessiva impresa Nel dicembre 2013, il laboratorio Yann LeCun della New York University propose una derivata di AlexNet, Overfeat (vedi: OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks). Questo articolo ha anche proposto una scatola delimitante per l'apprendimento, che ha portato a molti articoli sullo stesso argomento. Credo sia meglio imparare a dividere gli oggetti piuttosto che imparare le scatole di confine artificiali.
VGG La rete VGG dell'Università di Oxford (vedi: Very Deep Convolutional Networks for Large-Scale Image Recognition) è la prima rete a utilizzare filtri 3×3 più piccoli in ciascun livello convoluzionale e a combinarli per elaborarli come una sequenza convoluzionale.
Questo sembra essere l'opposto del principio di LeNet, in cui grandi convoluzioni vengono usate per ottenere caratteristiche simili in un'immagine. A differenza dei filtri 9×9 o 11×11 di AlexNet, i filtri stanno iniziando a diventare più piccoli, avvicinandosi alla famigerata anomalia di convoluzione 1×1 che LeNet sta cercando di evitare—almeno sul primo livello della rete. Tuttavia, VGG ha fatto grandi progressi utilizzando molteplici convoluzioni 3×3 in successione per imitare gli effetti di campi recettivi più grandi, come 5×5 e 7×7. Queste idee sono state utilizzate anche in architetture di rete più recenti, come Inception e ResNet.
Le reti VGG utilizzano più strati convoluzionali 3×3 per caratterizzare caratteristiche complesse. Si noti che i 3°, 4°, 5° blocco di VGG-E: 256×256 e 512×512 3×3 vengono usati più volte per estrarre caratteristiche più complesse e combinazioni di queste caratteristiche. L'effetto equivale a un grande classificatore 512×512 con 3 strati convoluzionali. Questo ovviamente significa che ci sono molti parametri e capacità di apprendimento. Ma queste reti sono difficili da addestrare e devono essere suddivise in reti più piccole e accumulate strato per strato. Ciò è dovuto alla mancanza di un modo robusto per regolarizzare il modello o per limitare più o meno una grande quantità di spazio di ricerca a causa del gran numero di parametri.
VGG utilizza grandi dimensioni di feature in molti livelli perché l'inferenza richiede tempo a runtime. Come per il collo di bottiglia di Inception, ridurre il numero di funzionalità farà risparmiare alcuni costi computazionali.
Rete-in-rete L'idea di Network in Network (NiN, vedi articolo: Network In Network) è semplice e ottima: l'uso della convoluzione 1×1 per fornire più capacità composabili per le caratteristiche dello strato convoluzionale.
L'architettura NiN utilizza strati MLP spaziali dopo singole convoluzioni per combinare meglio le caratteristiche prima degli altri livelli. Ancora una volta, si può pensare che le convoluzioni 1×1 siano contrarie al principio originale di LeNet, ma in realtà possono combinare le caratteristiche convoluzionali in modo migliore di quanto non sia possibile, semplicemente impilando più caratteristiche convoluzionali. Questo è diverso dall'usare il pixel originale come input del livello successivo. Le convoluzioni 1×1 sono spesso usate per combinare automaticamente le caratteristiche sulle feature map dopo la convoluzione, quindi possono effettivamente usare pochissimi parametri e condividerli tra tutti i pixel di queste caratteristiche!
La capacità di MLP di aumentare notevolmente l'efficacia delle singole caratteristiche convoluzionali combinandole in gruppi più complessi. Questa idea è stata successivamente utilizzata in alcune architetture recenti, come ResNet, Inception e i suoi derivati.
NiN utilizza anche uno strato medio di pooling come parte del classificatore finale, un'altra pratica che diventerà comune. Questo avviene facendo la media delle risposte della rete a più immagini di input prima della classificazione.
GoogLeNet e Inception Christian Szegedy di Google ha iniziato la sua ricerca per ridurre il sovraccarico computazionale delle reti neurali profonde e ha progettato GoogLeNet, la prima architettura Inception (vedi: Going Deeper with Convolutions).
Era l'autunno del 2014, e i modelli di deep learning stavano diventando utili per classificare immagini e fotogrammi video. La maggior parte degli scettici non dubita più che il deep learning e le reti neurali siano davvero tornati questa volta, e continueranno a evolversi. Data l'utilità di queste tecnologie, giganti di internet come Google sono molto interessati a implementare queste architetture in modo efficiente e su larga scala sui loro server.
Christian ha riflettuto molto su come le reti neurali profonde possano raggiungere alti livelli di prestazioni, come su ImageNet, riducendo il loro overhead computazionale. Oppure miglioramenti delle prestazioni possono essere apportati garantendo lo stesso overhead computazionale.
Lui e il suo team hanno ideato il modulo Inception:
A prima vista, si tratta fondamentalmente di una combinazione parallela di filtri convoluzionali 1×1, 3×3, 5×5. Ma la grande idea di Inception è ridurre il numero di caratteristiche prima dei costosi moduli paralleli con blocchi convoluzionali 1×1 (NiN). Questo è comunemente chiamato "collo di bottiglia". Questa sezione sarà spiegata nella sezione "strato collo di bottiglia" qui sotto.
GoogLeNet utilizza una backbone senza un modulo inception come livello iniziale, seguita da un livello medio di pooling più un classificatore softmax simile a NiN. Questo classificatore ha un numero molto più ridotto di operazioni rispetto a quelli di AlexNet e VGG. Questo ha anche portato a una progettazione di rete molto efficace, vedi l'articolo: An Analysis of Deep Neural Network Models for Practical Applications.
Strato di collo di bottiglia Ispirato a NiN, il livello di collo di bottiglia di Inception riduce il numero di caratteristiche in ciascun livello e quindi il numero di operazioni; Quindi il tempo di inferenza può essere mantenuto basso. Il numero di funzionalità viene ridotto di 4 volte prima che i dati vengano passati attraverso costosi moduli convoluzionali. Questo rappresenta un significativo risparmio in termini di costi computazionali e un successo dell'architettura.
Verificiamolo nello specifico. Ora che hai 256 input feature e 256 output feature output, supponiamo che il livello Inception possa eseguire solo 3×3 convoluzioni, il che significa un totale di 256×256×3×3 convoluzioni (quasi 589.000 operazioni di moltiplicazione e accumulo (MAC)). Questo potrebbe essere oltre il nostro budget di calcolo, ad esempio, eseguire il layer in 0,5 millisecondi sui server Google. Invece, abbiamo deciso di ridurre il numero di caratteristiche da contorcere, che era di 64 (cioè 256/4). In questo caso, iniziamo con una convoluzione di 256 -> 64 1×1, poi 64 convoluzioni su tutti i rami dell'Inception, seguite da una convoluzione 1×1 da una caratteristica di 64 -> 256, e ora l'operazione è la seguente:
256×64 × 1×1 = 16.000 64×64 × 3×3 = 36.000 64×256 × 1×1 = 16.000 secondi
Rispetto ai precedenti 600.000, ora ci sono un totale di 70.000 volumi computazionali, quasi 10 volte meno.
E anche se abbiamo fatto operazioni migliori, non abbiamo perso la sua generalità a questo livello. Il livello collo di bottiglia si è dimostrato eccellente su dataset come ImageNet, ed è utilizzato anche in architetture come ResNet, che presenteremo subito in seguito.
Ha successo perché le caratteristiche di ingresso sono correlate, quindi la ridondanza può essere ridotta combinandole correttamente con la convoluzione 1×1. Poi, dopo che un piccolo numero di caratteristiche è stato complicato, esse possono essere nuovamente espanse in combinazioni significative al livello successivo.
Inception V3 (e V2) Christian e il suo team sono ricercatori molto prolifici. Nel febbraio 2015, è stato introdotto Batch-normaled Inception come Inception V2 (vedi articolo: Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift). La normalizzazione batch calcola la media e la deviazione standard di tutte le feature map sull'output di un solo livello e utilizza questi valori per normalizzarne le risposte. Questo equivale a "sbiancare" i dati, in modo che tutte le mappe neurali rispondano nello stesso intervallo e siano media zero. Questo aiuta nell'addestramento quando il livello successivo non deve imparare lo offset dai dati di ingresso, e si concentra anche su come combinare meglio queste caratteristiche.
Nel dicembre 2015, il team ha rilasciato una nuova versione del modulo Inception e un'architettura simile (vedi articolo: Rethinking the Inception Architecture for Computer Vision). L'articolo spiega meglio l'architettura originale di GoogLeNet, fornendo più dettagli sulle scelte di design. L'idea originale è la seguente:
Costruendo con cura la rete, profondità e larghezza vengono bilanciate, in modo da massimizzare il flusso di informazioni all'interno della rete. Prima di ogni pooling, aggiungi la feature mapping. Con l'aumentare della profondità, anche la profondità o il numero di caratteristiche dello strato di rete aumenta sistematicamente. Usa ogni aumento di profondità di strato per aumentare il binding delle caratteristiche prima dello strato successivo. Usando solo 3×3 convoluzioni, un dato filtro 5×5 e 7×7 può essere suddiviso in più 3×3 quando possibile. Guarda l'immagine qui sotto
Di conseguenza, la nuova Inception divenne:
Puoi anche dividere il filtro appiattiendo la convoluzione in moduli più complessi:
Durante l'esecuzione dei calcoli di inception, il modulo Inception può anche ridurre la dimensione dei dati fornendo il pooling. Questo è fondamentalmente simile a eseguire un semplice layer di pooling in parallelo quando si esegue una convoluzione:
Inception utilizza anche uno strato di pooling e softmax come classificatore finale.
ResNet Dicembre 2015 ha visto un nuovo cambiamento, coinciso con Inception V3. ResNet ha un'idea semplice: alimentare l'output di due strati convoluzionali consecutivi e bypassare l'input al livello successivo (vedi l'articolo: Deep Residual Learning for Image Recognition).
Questo è simile ad alcune delle vecchie idee precedenti. Ma in ResNet, dividono i due strati e vengono applicati su scala più grande. Fare la trichiatura dopo 2 strati è un'intuizione chiave perché dividere uno strato non porta a ulteriori miglioramenti. Passare attraverso il livello 2 potrebbe essere considerato come un piccolo classificatore, o una rete nella rete.
Questa è la prima volta che il numero di strati di rete supera 100, e possono essere addestrati anche 1000 livelli.
ResNet, che ha un gran numero di livelli di rete, sta iniziando a utilizzare un livello di rete simile al livello di collo di bottiglia di Inception:
Questo livello elabora un numero minore di caratteristiche contorcendo prima un numero minore di caratteristiche con un 1×1 con un'uscita minore (di solito 1/4 dell'ingresso), poi usando un livello di 3×3 e infine uno di 1×1. Simile al modulo Inception, questo garantisce una bassa intensità computazionale fornendo al contempo ricche combinazioni di funzionalità.
ResNet utilizza uno strato iniziale relativamente semplice sugli ingressi: uno strato base di 7×7 volumi con due pool. Confronta questo con i più complessi e meno intuitivi Inception V3 e V4.
ResNet utilizza anche uno strato di pooling più softmax come classificatore finale.
Altre intuizioni su ResNet si trovano ogni giorno:
ResNet può essere considerato sia parallelo che contiguo, trattando ingressi e uscite (inout) come paralleli in molti moduli, mentre le uscite di ciascun modulo sono connesse in modo continuo. ResNet può anche essere considerato come una combinazione di moduli paralleli o continui (vedi l'articolo: Le reti residue sono ensemble esponenziali di reti relativamente superficiali). È stato riscontrato che ResNet funziona tipicamente in parallelo su blocchi di rete ai livelli 20-30. Invece di scorrere continuamente per tutta la lunghezza della rete. Quando ResNet restituisce l'output all'input come un RNN, la rete può essere considerata un modello corticale biologicamente più affidabile (vedi articolo: Collegamento tra apprendimento residuo, reti neurali ricorrenti e corteccia visiva).
Inception V4 Ecco un'altra versione di Inception da Christian e dal suo team, simile a Inception V3:
Inception V4 combina anche il modulo Inception e il modulo ResNet:
Penso che l'architettura non sia molto concisa, ma sia anche piena di euristiche meno trasparenti. È difficile comprendere le scelte contenute, ed è difficile per gli autori spiegarle.
Data la semplicità della rete, facilmente comprensibile e corretta, ResNet potrebbe essere migliore.
SqueezeNet SqueezeNet (vedi articolo: SqueezeNet: accuratezza a livello AlexNet con 50 volte meno parametri e <0,5MB di dimensione del modello) è un'architettura recentemente pubblicata che rielabora i concetti di ResNet e Inception. Un modello di rete di progettazione architettonica migliore è più piccolo e i parametri non richiedono ancora algoritmi di compressione complessi.
ENet Il nostro team prevede di combinare tutte le caratteristiche dell'architettura recentemente rivelata per creare una rete molto efficiente e a basso peso, che utilizza meno parametri e calcoli per ottenere risultati di altissimo livello. Questa architettura di rete si chiama ENet ed è stata progettata da Adam Paszke. L'abbiamo già usato per il markup a singolo pixel e la risoluzione della scena.
Per maggiori informazioni su ENet, vedi l'articolo ENet: A Deep Neural Network Architecture for Real-Time Semantic Segmentation. ENet è una rete di codifica, somma e decodifica. L'encoder è un design CNN normale da classificare. Il decoder è una rete di upsampling che propaga la classificazione all'indietro all'immagine originale per la segmentazione. Questo utilizza solo reti neurali e nessun altro algoritmo per la segmentazione delle immagini.
ENet è progettato per utilizzare il minimo possibile di risorse all'inizio. Ecco perché ha uno script così piccolo, con una rete combinata di encoder e decoder che occupa 0,7 MB con una precisione di 16 fp. Anche con un modello così piccolo, ENet è simile o superiore ad altre soluzioni di reti neurali per accuratezza di segmentazione.
Analisi dei moduli L'analisi del modulo CNN, che è stata fatta nell'articolo (Systematic evaluation of CNN advances on the ImageNet), è molto utile:
Usa ELU non linearità senza batchnorm o ReLU con batchnorm. Usa una trasformazione dello spazio colore RGB imparata. Usa una strategia lineare di declino del tasso di apprendimento. Usa la somma degli strati pool media e maggiori. Usa una mini-quantità di circa 128-256 sparsi. Se è troppo grande per la tua GPU, riduce semplicemente la velocità di apprendimento a questa dimensione. Usa il livello completamente connesso come convoluzione e fai la media di tutte le previsioni per fare la previsione finale. Quando lo studio aumenta la dimensione del set di addestramento, rileva se c'è un plateau che non viene raggiunto La pulizia dei dati è più importante della loro dimensione. Se non puoi aumentare la dimensione dell'immagine di input, riduci il passo sui livelli successivi, così avrà lo stesso effetto. Se la tua rete ha un'architettura complessa e altamente ottimizzata, come GoogLeNet, devi fare attenzione a modificarla.
Altre architetture a cui vale la pena prestare attenzione FractalNet (vedi articolo: FractalNet: Ultra-Deep Neural Networks without Residuals) utilizza un'architettura ricorsiva, che non viene testata su ImageNet. Questa architettura è un derivato di ResNet o, più in generale, di ResNet.
futuro Crediamo che creare un'architettura di rete neurale sia una priorità assoluta per lo sviluppo del deep learning. Il nostro team raccomanda vivamente di leggere attentamente e comprendere gli articoli menzionati nell'articolo.
Ma ci si potrebbe chiedere perché passiamo così tanto tempo a creare architettoni? Perché non dirci cosa usare con i dati? Come combini i moduli? Queste domande sono buone, ma ancora in fase di ricerca, e c'è un articolo a cui fare riferimento: Reti neurali con struttura differenziabile.
Nota che la maggior parte delle architetture di cui abbiamo parlato in questo articolo riguarda la visione artificiale. Architetture di reti neurali simili sono state sviluppate in altri ambiti, ed è molto interessante conoscere i cambiamenti architettonici in tutti gli altri compiti.
Se sei interessato a confrontare l'architettura delle reti neurali e le prestazioni computazionali, consulta l'articolo: An Analysis of Deep Neural Network Models for Practical Applications.
|