Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 10136|Antwoord: 0

De evolutie van de Neurale Netwerkarchitectuur: Een uitgebreide review van meer dan tien architecturen van LeNet5 tot ENet

[Link kopiëren]
Geplaatst op 24-04-2018 13:08:47 | | | |
LeNet5
LeNet5 werd geboren in 1994 en is een van de eerste convolutionele neurale netwerken en heeft het vakgebied deep learning vooruit gebracht. Sinds 1988, na vele succesvolle iteraties, draagt dit baanbrekende werk van Yann LeCun de naam LeNet5 (zie: Gradient-Based Learning Applied to Document Recognition).


De architectuur van LeNet5 is gebaseerd op het idee dat (vooral) de kenmerken van een afbeelding over de hele afbeelding zijn verspreid, en dat convolutie met leerbare parameters een efficiënte manier is om vergelijkbare kenmerken op meerdere locaties met een klein aantal parameters te extraheren. Op dat moment was er geen GPU om te helpen met trainen, en zelfs de CPU was traag. Daarom is het vermogen om parameters op te slaan evenals het berekeningsproces een belangrijke ontwikkeling. Dit is het tegenovergestelde van elke pixel als aparte invoer gebruiken voor een groot, meerlaags neuraal netwerk. LeNet5 legt uit dat die pixels niet in de eerste laag gebruikt moeten worden omdat het beeld sterke ruimtelijke correlaties heeft die niet kunnen worden benut door onafhankelijke pixels in het beeld als verschillende inputfuncties te gebruiken.

De functies van LeNet5 kunnen als volgt worden samengevat:

Convolutionele neurale netwerken gebruiken 3 lagen als sequentie: convolutioneel, gepoold, niet-lineair → Dit is waarschijnlijk een belangrijk kenmerk van image deep learning sinds dit artikel!
Gebruik convoluties om ruimtelijke kenmerken te extraheren
Subsample met mapping naar ruimtelijk gemiddelde
Niet-lineariteit in de vorm van hyperbolische tangent (tanh) of S-vormig (sigmoïd).
Multilayer Neurale Netwerken (MLP's) dienen als de laatste classificatoren
Spaarzame verbindingsmatrices tussen lagen voorkomen hoge rekenkosten

Al met al is dit netwerk het startpunt voor een groot aantal recente architecturen en heeft het velen in dit domein geïnspireerd.

Interval
Van 1998 tot 2010 bevond het neuraal netwerk zich in de incubatiefase. De meeste mensen zijn zich niet bewust van hun groeiende kracht, terwijl andere onderzoekers daar traag in zijn. Dankzij de komst van mobiele telefooncamera's en goedkope digitale camera's wordt steeds meer data benut. En de rekenkracht groeit ook, CPU's worden sneller en GPU's worden computertools voor meerdere doeleinden. Deze trends hebben het mogelijk gemaakt dat neurale netwerken zich ontwikkelen, zij het langzaam. Data en rekenkracht maken de taken die neurale netwerken kunnen uitvoeren steeds interessanter. Daarna werd alles duidelijk......

Dan Ciresan Net
In 2010 publiceerden Dan Claudiu Ciresan en Jürgen Schmidhuber een implementatie van het vroegste GPU-neurale netwerk. Deze implementatie is een neuraal netwerk met 9 lagen dat draait op een NVIDIA GTX 280 grafische processor, inclusief forward- en backpropagatie.

AlexNet
In 2012 publiceerde Alex Krizhevsky Alexet (zie: ImageNet Classification with Deep Convolutional Neural Networks), een diepere en bredere versie van LeNet die de moeilijke ImageNet-competitie met een aanzienlijke marge won.


AlexNet breidt de ideeën van LeNet uit naar grotere neurale netwerken die veel complexere objecten en objectniveaus kunnen leren. De bijdragen van dit werk zijn:

Gebruik een aangepaste lineaire eenheid (ReLU) als niet-lineariteit
Gebruik de Dropout-techniek om individuele neuronen tijdens training selectief te negeren om overfitting van modellen te voorkomen
Overrul een grote pool om het gemiddelde effect van gemiddelde pooling te vermijden
Verminder de trainingstijd met de NVIDIA GTX 580 GPU

Op dat moment kunnen GPU's een hoger aantal cores leveren dan CPU's, en kan de trainingstijd met tien keer worden verlengd, wat op zijn beurt grotere datasets en grotere afbeeldingen mogelijk maakt.

Het succes van AlexNet heeft geleid tot een kleine revolutie. Convolutionele neurale netwerken vormen nu de ruggengraat van deep learning en zijn synoniem geworden met "grote neurale netwerken die nu nuttige taken kunnen oplossen."

Overprestatie
In december 2013 stelde het Yann LeCun-lab van de New York University een afgeleide van AlexNet voor, Overfeat (zie: OverFeat: Geïntegreerde Herkenning, Lokalisatie en Detectie met Convolutionele Netwerken). Dit artikel stelde ook een leerbegrenzingsbox voor, wat leidde tot veel artikelen over ditzelfde onderwerp. Ik geloof dat het beter is om te leren objecten te splitsen dan om kunstmatige begrenzingsboxen te leren.

VGG
Het VGG-netwerk van de Universiteit van Oxford (zie: Very Deep Convolutional Networks for Large-Scale Image Recognition) is het eerste netwerk dat kleinere 3×3 filters op elke convolutionele laag gebruikt en deze combineert om ze als convolutionele sequentie te verwerken.

Dit lijkt het tegenovergestelde te zijn van het principe van LeNet, waarbij grote convoluties worden gebruikt om vergelijkbare kenmerken in een afbeelding te verkrijgen. In tegenstelling tot AlexNets 9×9- of 11×11-filters beginnen de filters kleiner te worden en komen ze dichter bij de beruchte 1×1-convolutie-anomalie die LeNet probeert te vermijden—althans op de eerste laag van het netwerk. VGG heeft echter grote vooruitgang geboekt door meerdere 3×3-convoluties achter elkaar te gebruiken om de effecten van grotere receptieve velden, zoals 5×5 en 7×7, na te bootsen. Deze ideeën zijn ook gebruikt in recentere netwerkarchitecturen, zoals Inception en ResNet.


VGG-netwerken gebruiken meerdere 3×3 convolutionele lagen om complexe kenmerken te karakteriseren. Let op dat de 3e, 4e, 5e blokken van VGG-E: 256×256 en 512×512 3×3 filters meerdere keren worden gebruikt om complexere kenmerken en combinaties ervan te extraheren. Het effect is gelijkwaardig aan een grote 512×512-classifier met 3 convolutionele lagen. Dit betekent uiteraard dat er veel parameters en leermogelijkheden zijn. Maar deze netwerken zijn moeilijk te trainen en moeten worden opgedeeld in kleinere netwerken en laag voor laag worden opgebouwd. Dit komt door het ontbreken van een robuuste manier om het model te regulariseren of om een grote hoeveelheid zoekruimte min of meer te beperken door het grote aantal parameters.

VGG gebruikt grote featuregroottes in veel lagen omdat inferentie tijdrovend is tijdens runtime. Net als bij de bottleneck van Inception bespaart het verminderen van het aantal functies wat rekenkosten.

Netwerk-in-netwerk
Het idee van Network in Network (NiN, zie paper: Network In Network) is eenvoudig en geweldig: het gebruik van 1×1-convolutie om meer composeerbare mogelijkheden te bieden voor de kenmerken van de convolutionele laag.

De NiN-architectuur gebruikt ruimtelijke MLP-lagen na individuele convoluties om features beter te combineren vóór andere lagen. Opnieuw kun je denken dat 1×1-convoluties in strijd zijn met het oorspronkelijke principe van LeNet, maar in feite kunnen ze convolutionele kenmerken op een betere manier combineren dan niet mogelijk is door simpelweg meer convolutionele kenmerken te stapelen. Dit is anders dan het gebruik van de originele pixel als invoer voor de volgende laag. 1×1-convoluties worden vaak gebruikt om features op feature maps spattisch te combineren na convolutie, zodat ze eigenlijk heel weinig parameters kunnen gebruiken en deze kunnen delen over alle pixels van deze features!


MLP's vermogen om de effectiviteit van individuele convolutionele kenmerken sterk te vergroten door ze te combineren in complexere groepen. Dit idee is sindsdien gebruikt in enkele recente architecturen, zoals ResNet, Inception en zijn afgeleiden.

NiN gebruikt ook een gemiddelde poollaag als onderdeel van de uiteindelijke classifier, een andere praktijk die gebruikelijk zal worden. Dit gebeurt door de netwerkreacties op meerdere invoerbeelden te middelen vóór classificatie.

GoogLeNet en Inception
Christian Szegedy van Google begon zijn zoektocht om de rekenkracht van diepe neurale netwerken te verminderen en ontwierp GoogLeNet, de eerste Inception-architectuur (zie: Dieper gaan met Convolutions).

Het was in het najaar van 2014, en deep learning-modellen werden steeds nuttiger bij het classificeren van beeld- versus videoframes. De meeste sceptici twijfelen er niet langer aan dat deep learning en neurale netwerken deze keer echt terug zijn en zich zullen blijven ontwikkelen. Gezien het nut van deze technologieën zijn internetgiganten zoals Google zeer geïnteresseerd in het efficiënt en op grote schaal implementeren van deze architecturen op hun servers.

Christian dacht veel na over hoe diepe neurale netwerken hoge prestatieniveaus kunnen bereiken, zoals op ImageNet, terwijl hun rekenkracht wordt verminderd. Of prestatieverbeteringen kunnen worden bereikt terwijl dezelfde rekenkracht wordt gegarandeerd.

Hij en zijn team bedachten de Inception-module:


Op het eerste gezicht is dit in feite een parallelle combinatie van 1×1, 3×3, 5×5 convolutionele filters. Maar het grote idee van Inception is om het aantal features vóór dure parallelle modules met 1×1 convolutionele blokken (NiN) te verminderen. Dit wordt vaak een "bottleneck" genoemd. Deze sectie wordt uitgelegd in de sectie "bottleneck layer" hieronder.

GoogLeNet gebruikt een backbone zonder inceptiemodule als initiële laag, gevolgd door een gemiddelde poollaag plus een softmax-classifier vergelijkbaar met NiN. Deze classifier heeft een veel kleiner aantal bewerkingen dan de classifiers van AlexNet en VGG. Dit leidde ook tot een zeer effectief netwerkontwerp, zie het artikel: An Analysis of Deep Neural Network Models for Practical Applications.

Bottleneck-laag
Geïnspireerd door NiN vermindert de bottlenecklaag van Inception het aantal features in elke laag, en daarmee het aantal bewerkingen; Dus de inferentietijd kan laag worden gehouden. Het aantal features wordt vier keer verminderd voordat de data door dure convolutionele modules wordt gestuurd. Dit is een aanzienlijke besparing qua rekenkosten en een succes van de architectuur.

Laten we het specifiek verifiëren. Nu je 256 feature-inputs en 256 feature-outputs hebt, laten we aannemen dat de Inception-laag slechts 3×3 convoluties kan uitvoeren, wat betekent in totaal 256×256×3×3 convoluties (bijna 589.000 vermenigvuldigings- en accumulatiebewerkingen (MAC)). Dit kan bijvoorbeeld buiten ons rekenbudget vallen om de laag in 0,5 milliseconden op Google-servers te draaien. In plaats daarvan besloten we het aantal features dat geconvoluteerd moest worden te verminderen, wat 64 was (d.w.z. 256/4). In dit geval beginnen we met een convolutie van 256 -> 64 1×1, dan 64 convoluties op alle takken van de Inception, gevolgd door een 1×1 convolutie van een kenmerk van 64 -> 256, en nu is de bewerking als volgt:

256×64 × 1×1 = 16.000s
64×64 × 3×3 = 36.000 seconden
64×256 × 1×1 = 16.000s

Vergeleken met de vorige 600.000 zijn er nu in totaal 70.000 computationele volumes, wat bijna tien keer minder is.

En hoewel we betere operaties deden, verloren we de algemeenheid op deze laag niet. De bottleneck-laag is bewezen van topniveau op datasets zoals ImageNet, en wordt ook gebruikt in architecturen zoals ResNet, die we als volgende zullen introduceren.

Het is succesvol omdat de invoerkenmerken gerelateerd zijn, waardoor redundantie kan worden verminderd door ze correct te combineren met 1×1-convolutie. Vervolgens, nadat een klein aantal features is vervormd, kunnen ze opnieuw worden uitgebreid tot betekenisvolle combinaties op de volgende laag.

Inception V3 (en V2)
Christian en zijn team zijn zeer productieve onderzoekers. In februari 2015 werd batch-genormaliseerde Inception geïntroduceerd als Inception V2 (zie artikel: Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift). Batchnormalisatie berekent het gemiddelde en de standaarddeviatie van alle feature maps op de output van één laag en gebruikt deze waarden om hun responsen te normaliseren. Dit is gelijk aan het "witteren" van de data, zodat alle neurale kaarten in hetzelfde bereik reageren en nul gemiddeld zijn. Dit helpt bij training wanneer de volgende laag niet offset hoeft te leren van de invoerdata, en richt zich ook op hoe deze functies beter gecombineerd kunnen worden.

In december 2015 bracht het team een nieuwe versie van de Inception-module en vergelijkbare architectuur uit (zie artikel: Rethinking the Inception Architecture for Computer Vision). Het artikel legt de oorspronkelijke GoogLeNet-architectuur beter uit en geeft meer details over ontwerpkeuzes. Het oorspronkelijke idee is als volgt:

Door het netwerk zorgvuldig op te bouwen, worden diepte en breedte in balans gebracht, zodat de informatiestroom in het netwerk wordt gemaximaliseerd. Voeg voor elke pooling feature mapping toe.
Naarmate de diepte toeneemt, neemt ook de diepte of het aantal kenmerken van de netwerklaag systematisch toe.
Gebruik elke laagdiepteverhoging om de binding van features te vergroten vóór de volgende laag.
Met slechts 3×3 convoluties kunnen een gegeven 5×5 en 7×7 filters worden opgesplitst in meerdere 3×3's wanneer mogelijk. Kijk naar de afbeelding hieronder


Als gevolg hiervan werd de nieuwe Inception:


Je kunt het filter ook splitsen door de convolutie af te vlakken in complexere modules:


Tijdens het uitvoeren van inceptieberekeningen kan de Inception-module ook de grootte van de data verkleinen door pooling te bieden. Dit is in wezen vergelijkbaar met het parallel uitvoeren van een eenvoudige poolinglaag bij het uitvoeren van een convolutie:


Inception gebruikt ook een poolinglaag en softmax als laatste classifier.

ResNet
In december 2015 vond een nieuwe wijziging plaats, die samenviel met Inception V3. ResNet heeft een eenvoudig idee: voer de output van twee opeenvolgende convolutionele lagen en sla de invoer over naar de volgende laag (zie het artikel: Deep Residual Learning for Image Recognition).


Dit lijkt op sommige van de oude ideeën van eerder. Maar in ResNet splitsen ze de twee lagen en worden ze op grotere schaal toegepast. Trijen na 2 lagen is een belangrijke intuïtie, want het splitsen van één laag levert geen verdere verbetering op. Door laag 2 gaan kan worden gezien als een kleine classifier, of een netwerk-in-netwerk.

Dit is de eerste keer dat het aantal netwerklagen meer dan 100 overschrijdt, en zelfs 1000 lagen kunnen worden getraind.

ResNet, dat een groot aantal netwerklagen heeft, begint een netwerklaag te gebruiken die lijkt op de Inception-bottlenecklaag:


Deze laag verwerkt een kleiner aantal features door eerst een kleiner aantal features te convoluteren met een 1×1 met een kleinere output (meestal 1/4 van de input), vervolgens een laag van 3×3 en vervolgens een laag van 1×1. Net als bij de Inception-module zorgt dit voor een lage rekenintensiteit terwijl het rijke combinaties van functies biedt.

ResNet gebruikt een relatief eenvoudige beginlaag op de inputs: een basislaag van 7×7 volumes met twee pools. Vergelijk dit met de complexere en minder intuïtieve Inception V3 en V4.

ResNet gebruikt ook een poolinglaag plus softmax als laatste classifier.

Andere inzichten over ResNet komen elke dag voorbij:

ResNet kan zowel parallel als aaneengesloten worden beschouwd, waarbij ingangen en uitgangen (in-outs) in veel modules als parallel worden behandeld, terwijl de uitgangen van elke module continu verbonden zijn.
ResNet kan ook worden beschouwd als een combinatie van parallelle of continue modules (zie het artikel: Residual Networks are Exponential Ensembles of Relatively Shallow Networks).
Er is vastgesteld dat ResNet doorgaans parallel werkt op netwerkblokken op lagen 20-30. In plaats van continu door de hele lengte van het netwerk te stromen.
Wanneer ResNet output terugstuurt naar input zoals een RNN, kan het netwerk worden beschouwd als een biologisch beter vertrouwd corticaal model (zie artikel: Bridging the Gaps Between Residual Learning, Recurrent Neural Networks and Visual Cortex).

Inception V4
Hier is een andere versie van Inception van Christian en zijn team, die lijkt op Inception V3:


Inception V4 combineert ook de Inception-module en de ResNet-module:


Ik vind de architectuur niet erg beknopt, maar het zit ook vol met minder transparante heuristieken. Het is moeilijk om de keuzes erin te begrijpen, en het is moeilijk voor de auteurs om uit te leggen.

Gezien de eenvoud van het netwerk, dat gemakkelijk te begrijpen en te corrigeren is, kan ResNet beter zijn.

SqueezeNet
SqueezeNet (zie artikel: SqueezeNet: AlexNet-level accuracy with 50x less parameters and <0,5MB modelgrootte) is een recent gepubliceerde architectuur die de concepten in ResNet en Inception herverwerkt. Een beter architectuurontwerp-netwerkmodel is kleiner, en de parameters vereisen nog geen complexe compressie-algoritmen.

ENet
Ons team is van plan alle kenmerken van de recent onthulde architectuur te combineren om een zeer efficiënt, laaggewicht netwerk te creëren dat minder parameters en berekeningen gebruikt om topresultaten te behalen. Deze netwerkarchitectuur heet ENet en is ontworpen door Adam Paszke. We hebben het al gebruikt voor single-pixel markup en scèneresolutie.

Voor meer informatie over ENet, zie het artikel ENet: A Deep Neural Network Architecture for Real-Time Semantic Segmentation. ENet is een netwerk van codering, optellen en decoderen. De encoder is een regulier CNN-ontwerp om te classificeren. De decoder is een upsamplingnetwerk dat de classificatie terugstuurt naar het oorspronkelijke beeld voor segmentatie. Dit gebruikt alleen neurale netwerken en geen andere algoritmen voor beeldsegmentatie.

ENet is ontworpen om aan het begin zoveel mogelijk middelen te gebruiken. Daarom heeft het zo'n klein script, met een gecombineerd netwerk van encoders en decoders dat 0,7 MB bezet maakt met een nauwkeurigheid van 16 fp. Zelfs met zo'n klein model is ENet vergelijkbaar met of beter dan andere neurale netwerkoplossingen qua segmentatienauwkeurigheid.

Moduleanalyse
De analyse van de CNN-module, die in het artikel (Systematic evaluation of CNN advances on the ImageNet) is uitgevoerd, is zeer nuttig:

Gebruik ELU-nietlineariteit zonder batchnorm of ReLU met batchnorm.
Gebruik een geleerde RGB-kleurruimtetransformatie.
Gebruik een lineaire strategie om het afnemen van de leersnelheid.
Gebruik de som van de gemiddelde en de grotere gepoolde lagen.
Gebruik een mini-batch van ongeveer 128 tot 256. Als dat te groot is voor je GPU, schal dan gewoon de leersnelheid terug naar deze grootte.
Gebruik de volledig verbonden laag als convolutie en maak het gemiddelde van alle voorspellingen voor de uiteindelijke voorspelling.
Wanneer de studie de trainingsset vergroot, detecteert het of er een plateau is dat niet is bereikt
De netheid van de data is belangrijker dan de grootte van de data.
Als je de grootte van het invoerbeeld niet kunt vergroten, verkort de stap op volgende lagen, heeft dat hetzelfde effect.
Als je netwerk een complexe en sterk geoptimaliseerde architectuur heeft, zoals GoogLeNet, moet je voorzichtig zijn met het aanpassen ervan.

Andere architecturen waar je op moet letten
FractalNet (zie artikel: FractalNet: Ultra-Deep Neural Networks without Residuals) gebruikt een recursieve architectuur, die niet wordt getest op ImageNet. Deze architectuur is een afgeleide van ResNet of algemener, ResNet.

toekomst
Wij geloven dat het creëren van een neurale netwerkarchitectuur een topprioriteit is voor de ontwikkeling van deep learning. Ons team raadt sterk aan om de artikelen in het artikel zorgvuldig te lezen en te begrijpen.

Maar je zou je kunnen afvragen waarom we zoveel tijd besteden aan het maken van architecturen? Waarom vertel je ons niet wat we met data moeten gebruiken? Hoe combineer je modules? Deze vragen zijn goed, maar worden nog onderzocht, en er is een artikel om naar te verwijzen: Neurale netwerken met differentieerbare structuur.

Let op dat de meeste architecturen die we in dit artikel hebben besproken, over computer vision gaan. Vergelijkbare neurale netwerkarchitecturen zijn in andere gebieden ontwikkeld, en het is erg interessant om te leren over architecturale veranderingen in alle andere taken.

Als je geïnteresseerd bent in het vergelijken van neurale netwerkarchitectuur en rekenprestaties, zie dan het artikel: An Analysis of Deep Neural Network Models for Practical Applications.







Vorig:Verschillende methoden voor het berekenen van uitvoeringstijden in Python
Volgend:Antminer B3 vertelt je wat je moet graven!
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com