Denne artikel er en spejling af maskinoversættelse, klik venligst her for at springe til den oprindelige artikel.

Udsigt: 10136|Svar: 0

Udviklingen af neural netværksarkitektur: En omfattende gennemgang af mere end ti arkitekturer fra LeNet5 til ENet

[Kopier link]
Opslået på 24/04/2018 13.08.47 | | | |
LeNet5
LeNet5 blev født i 1994 og er et af de første konvolutionelle neurale netværk og har gjort dyb læring et bedre område. Siden 1988, efter mange succesfulde iterationer, har dette banebrydende arbejde af Yann LeCun været kaldt LeNet5 (se: Gradient-Based Learning Applied to Document Recognition).


LeNet5's arkitektur bygger på idéen om, at (især) egenskaberne i et billede er fordelt over hele billedet, og at konvolution med lærbare parametre er en effektiv måde at udtrække lignende funktioner flere steder med et lille antal parametre. På det tidspunkt var der ikke noget GPU til at hjælpe med træningen, og selv CPU'en var langsom. Derfor er muligheden for at gemme parametre såvel som beregningsprocessen en vigtig udvikling. Dette er det modsatte af at bruge hver pixel som en separat input til et stort, flerlags neuralt netværk. LeNet5 forklarer, at disse pixels ikke bør bruges i det første lag, fordi billedet har stærke rumlige korrelationer, som ikke kan udnyttes ved at bruge uafhængige pixels i billedet som forskellige inputfunktioner.

LeNet5-funktionerne kan opsummeres således:

Konvolutionelle neurale netværk bruger 3 lag som en sekvens: konvolutionelt, poolet, ikke-lineært → Dette er sandsynligvis en nøglefunktion ved image deep learning siden denne artikel!
Brug konvolutioner til at udtrække rumlige træk
Delprøve ved brug af mapping til rumligt gennemsnit
Ikke-linearitet i form af hyperbolsk tangent (tanh) eller S-formet (sigmoid).
Multilayer Neurale Netværk (MLP'er) fungerer som de endelige klassifikatorer
Spredte forbindelsesmatricer mellem lag undgår store beregningsomkostninger

Alt i alt er dette netværk udgangspunktet for et stort antal nyere arkitekturer og har inspireret mange inden for dette område.

Interval
Fra 1998 til 2010 var det neurale netværk i sin inkubationsfase. De fleste er uvidende om deres voksende kraft, mens andre forskere er langsomme til at gøre det. Takket være fremkomsten af mobiltelefonkameraer og billige digitalkameraer bliver mere og mere data udnyttet. Og computerkraften vokser også, CPU'er bliver hurtigere, og GPU'er bliver computerværktøjer til flere formål. Disse tendenser har gjort det muligt for neurale netværk at udvikle sig, omend langsomt. Data og regnekraft gør de opgaver, som neurale netværk kan udføre, mere og mere interessante. Derefter blev alt klart......

Dan Ciresan Net
I 2010 offentliggjorde Dan Claudiu Ciresan og Jürgen Schmidhuber en implementering af det tidligste GPU-neurale netværk. Denne implementering er et 9-lags neuralt netværk, der kører på en NVIDIA GTX 280 grafikprocessor, inklusive fremad- og bagudpropagering.

AlexNet
I 2012 udgav Alex Krizhevsky Alexet (se: ImageNet Classification with Deep Convolutional Neural Networks), en dybere og bredere version af LeNet, som vandt den vanskelige ImageNet-konkurrence med stor margin.


AlexNet udvider LeNets idéer til større neurale netværk, der kan lære langt mere komplekse objekter og objektniveauer. Bidragene fra dette værk er:

Brug en modificeret lineær enhed (ReLU) som en ikke-linearitet
Brug Dropout-teknikken til selektivt at ignorere individuelle neuroner under træning for at undgå modelovertilpasning
Overstyr en stor pool for at undgå den gennemsnitlige effekt af gennemsnitlig pooling
Reducer træningstiden med NVIDIA GTX 580 GPU'en

På det tidspunkt kan GPU'er levere et større antal kerner end CPU'er, og træningstiden kan øges med 10 gange, hvilket igen tillader større datasæt og større billeder.

AlexNets succes har ført til en lille revolution. Konvolutionelle neurale netværk er nu rygraden i dyb læring, og de er blevet synonymt med "store neurale netværk, der nu kan løse nyttige opgaver."

Overfeat
I december 2013 foreslog Yann LeCun-laboratoriet ved New York University en afledt version af AlexNet, Overfeat (se: OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks). Denne artikel foreslog også en læringsafgrænsningsboks, hvilket førte til mange artikler om samme emne. Jeg mener, det er bedre at lære at splitte objekter end at lære kunstige afgrænsningsbokse.

VGG
VGG-netværket fra University of Oxford (se: Very Deep Convolutional Networks for Large-Scale Image Recognition) er det første netværk, der bruger mindre 3×3-filtre på hvert konvolutionslag og kombinerer dem for at behandle dem som en konvolutionssekvens.

Dette synes at være det modsatte af LeNets princip, hvor store konvolutioner bruges til at opnå lignende træk i et billede. I modsætning til AlexNets 9×9- eller 11×11-filtre begynder filtrene at blive mindre og nærmer sig den berygtede 1×1-konvolutionsanomali, som LeNet forsøger at undgå – i hvert fald på det første lag af netværket. VGG har dog gjort store fremskridt ved at bruge flere 3×3-konvolutioner i rækkefølge for at efterligne effekterne af større receptive felter, såsom 5×5 og 7×7. Disse idéer er også blevet brugt i nyere netværksarkitekturer, såsom Inception og ResNet.


VGG-netværk bruger flere 3×3 konvolutionslag til at karakterisere komplekse funktioner. Bemærk, at blokkene 3., 4., 5. af VGG-E: 256×256 og 512×512 3×3 filtre bruges flere gange i tur og ordning for at udtrække mere komplekse funktioner og kombinationer af disse egenskaber. Effekten svarer til en stor 512×512-klassifikator med 3 konvolutionslag. Det betyder selvfølgelig, at der er mange parametre og læringsmuligheder. Men disse netværk er svære at træne og skal opdeles i mindre netværk og akkumuleres lag for lag. Dette skyldes manglen på en robust måde at regularisere modellen på eller til mere eller mindre at begrænse en stor mængde søgeplads på grund af det store antal parametre.

VGG bruger store funktionsstørrelser i mange lag, fordi slutning er tidskrævende under kørsel. Ligesom med Inceptions flaskehals vil reduktion af antallet af funktioner spare nogle beregningsomkostninger.

Netværk-i-netværk
Ideen om Network in Network (NiN, se artikel: Network In Network) er enkel og fantastisk: brugen af 1×1-konvolution for at give mere komponerbare funktioner for funktionerne i konvolutionslaget.

NiN-arkitekturen bruger rumlige MLP-lag efter individuelle konvolutioner for bedre at kombinere funktioner før andre lag. Igen kan man tænke, at 1×1-konvolutioner er i modstrid med det oprindelige princip i LeNet, men faktisk kan de kombinere konvolutionsfunktioner på en bedre måde, end det ikke er muligt ved blot at stable flere konvolutionsfunktioner. Dette er anderledes end at bruge den oprindelige pixel som næste lag-input. 1×1-konvolutioner bruges ofte til at spattisk kombinere features på featurekort efter konvolution, så de faktisk kan bruge meget få parametre og dele dem på tværs af alle pixels af disse features!


MLP's evne til i høj grad at øge effektiviteten af individuelle konvolutionelle træk ved at kombinere dem i mere komplekse grupper. Denne idé er siden blevet brugt i nogle nyere arkitekturer, såsom ResNet, Inception og dets afledte.

NiN bruger også et gennemsnitligt poolinglag som en del af den endelige klassifikator, en anden praksis, der vil blive almindelig. Dette gøres ved at gennemsnitliggøre netværkets svar på flere inputbilleder før klassificering.

GoogLeNet og Inception
Christian Szegedy fra Google begyndte sin mission for at reducere den beregningsmæssige overhead ved dybe neurale netværk og designede GoogLeNet, den første Inception-arkitektur (se: Going Deeper with Convolutions).

Det var i efteråret 2014, og deep learning-modeller blev nyttige til at klassificere billed- versus videoframes. De fleste skeptikere tvivler ikke længere på, at deep learning og neurale netværk virkelig er tilbage denne gang og vil fortsætte med at udvikle sig. I betragtning af brugen af disse teknologier er internetgiganter som Google meget interesserede i at implementere disse arkitekturer effektivt og i stor skala på deres servere.

Christian tænkte meget over, hvordan dybe neurale netværk kan opnå høje ydelsesniveauer, som på ImageNet, samtidig med at deres beregningsmæssige overhead reduceres. Eller også kan der opnås forbedringer i ydeevnen, samtidig med at den samme beregningsmæssige overhead sikres.

Han og hans team udviklede Inception-modulet:


Ved første øjekast er dette grundlæggende en parallel kombination af 1×1, 3×3, 5×5 konvolutionsfiltre. Men den store idé med Inception er at reducere antallet af funktioner før dyre parallelle moduler med 1×1 konvolutionsblokke (NiN). Dette kaldes almindeligvis en "flaskehals". Dette afsnit vil blive forklaret i afsnittet om "flaskehalslaget" nedenfor.

GoogLeNet bruger en backbone uden et inception-modul som det indledende lag, efterfulgt af et gennemsnitligt poolinglag plus en softmax-klassifikator svarende til NiN. Denne klassifikator har et meget færre antal operationer end AlexNets og VGG's klassifikatorer. Dette førte også til et meget effektivt netværksdesign, se artiklen: An Analysis of Deep Neural Network Models for Practical Applications.

Flaskehalslag
Inspireret af NiN reducerer Inceptions flaskehalslag antallet af funktioner i hvert lag og dermed antallet af operationer; Så slutningstiden kan holdes lav. Antallet af funktioner reduceres med 4 gange, før dataene sendes gennem dyre konvolutionsmoduler. Dette er en betydelig besparelse i form af beregningsomkostninger og en succes med arkitekturen.

Lad os verificere det specifikt. Nu hvor du har 256 feature-input og 256 feature-output, lad os antage, at Inception-laget kun kan udføre 3×3 konvolutioner, hvilket betyder i alt 256×256×3×3 konvolutioner (næsten 589.000 multiplikations- og akkumulationsoperationer (MAC)). Det kan være ud over vores computebudget, for eksempel at køre laget på 0,5 millisekunder på Google-servere. I stedet besluttede vi at reducere antallet af funktioner, der skulle indvikles, hvilket var 64 (dvs. 256/4). I dette tilfælde starter vi med en konvolution på 256 -> 64 1×1, derefter 64 konvolutioner på alle grene af Inceptionen, efterfulgt af en 1×1 konvolution fra en funktion på 64 -> 256, og nu er operationen som følger:

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

Sammenlignet med de tidligere 600.000 er der nu i alt 70.000 beregningsvolumener, hvilket er næsten 10 gange færre.

Og selvom vi udførte bedre operationer, mistede vi ikke dens generelle karakter på dette lag. Flaskehalslaget har vist sig at være i topklasse på datasæt som ImageNet, og det bruges også i arkitekturer som ResNet, som vi vil introducere næste gang.

Det lykkes, fordi inputfunktionerne er relaterede, så redundansen kan reduceres ved korrekt at kombinere dem med 1×1-konvolution. Derefter, efter at et lille antal funktioner er blevet indviklet, kan de igen udvides til meningsfulde kombinationer på næste lag.

Inception V3 (og V2)
Christian og hans team er meget produktive forskere. I februar 2015 blev batch-normaliseret Inception introduceret som Inception V2 (se artikel: Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift). Batch-normalisering beregner gennemsnit og standardafvigelse for alle feature maps på outputtet fra ét lag og bruger disse værdier til at normalisere deres responser. Dette svarer til at "hvidgøre" dataene, så alle neurale kort svarer i samme område og har nul gennemsnit. Dette hjælper med træning, når det næste lag ikke behøver at lære offset fra inputdataene, og fokuserer også på, hvordan man bedre kan kombinere disse funktioner.

I december 2015 udgav teamet en ny version af Inception-modulet og lignende arkitektur (se artikel: Rethinking the Inception Architecture for Computer Vision). Artiklen forklarer bedre den oprindelige GoogLeNet-arkitektur og giver flere detaljer om designvalg. Den oprindelige idé er som følger:

Ved omhyggeligt at opbygge netværket balanceres dybde og bredde, så informationsstrømmen ind i netværket maksimeres. Før hver pooling, tilføj feature mapping.
Når dybden øges, stiger også dybden eller antallet af funktioner i netværkslaget systematisk.
Brug hver lagdybdeforøgelse til at øge bindingen af features før næste lag.
Ved kun at bruge 3×3 konvolutioner kan et givent 5×5 og 7×7 filtre opdeles i flere 3×3'ere, når det er muligt. Se billedet nedenfor


Som følge heraf blev den nye Inception:


Du kan også opdele filteret ved at flade konvolutionen ud i mere komplekse moduler:


Under udførelse af inception-beregninger kan Inception-modulet også reducere datastørrelsen ved at tilbyde pooling. Dette svarer grundlæggende til at køre et simpelt pooling-lag parallelt, når man kører en konvolution:


Inception bruger også et pooling-lag og softmax som den endelige klassifikator.

ResNet
December 2015 bød på en ny ændring, som faldt sammen med Inception V3. ResNet har en simpel idé: fodre outputtet fra to på hinanden følgende konvolutionslag og omgå inputtet til det næste lag (se artiklen: Deep Residual Learning for Image Recognition).


Dette ligner nogle af de gamle idéer før. Men i ResNet deler de de to lag op og anvendes i større skala. At trække efter 2 lag er en vigtig intuition, fordi det ikke giver mere forbedring at splitte ét lag. Passage gennem lag 2 kan betragtes som en lille klassifikator eller et netværk-i-netværk.

Dette er første gang, at antallet af netværkslag overstiger 100, og endda 1000 lag kan trænes.

ResNet, som har et stort antal netværkslag, begynder at bruge et netværkslag, der ligner Inception-flaskehalslaget:


Dette lag behandler et mindre antal features ved først at indvikle et mindre antal features med en 1×1 med et mindre output (normalt 1/4 af inputtet), derefter bruge et lag på 3×3 og til sidst et lag på 1×1. Ligesom Inception-modulet sikrer dette lav beregningsintensitet, samtidig med at det leverer rige funktionskombinationer.

ResNet bruger et relativt simpelt initiallag på inputtene: et 7×7-volumen baselag med to pools. Sammenlign dette med de mere komplekse og mindre intuitive Inception V3 og V4.

ResNet bruger også et pooling-lag plus softmax som den endelige klassifikator.

Andre indsigter om ResNet sker hver dag:

ResNet kan betragtes både parallelt og sammenhængende, idet indgange og udgange (inouts) behandles som parallelle i mange moduler, mens outputtene fra hvert modul er kontinuerligt forbundet.
ResNet kan også betragtes som en kombination af parallelle eller kontinuerte moduler (se artiklen: Residual Networks are Exponential Ensembles of Relatively Shallow Networks).
Det er blevet konstateret, at ResNet typisk opererer parallelt på netværksblokke på lag 20-30. I stedet for at flyde kontinuerligt gennem hele netværkets længde.
Når ResNet sender output tilbage til input som en RNN, kan netværket betragtes som en bedre biologisk pålidelig kortikal model (se artikel: Bridging the Gaps Between Residual Learning, Recurrent Neural Networks and Visual Cortex).

Inception V4
Her er en anden version af Inception fra Christian og hans hold, som ligner Inception V3:


Inception V4 kombinerer også Inception-modulet og ResNet-modulet:


Jeg synes, arkitekturen ikke er særlig præcis, men den er også fuld af mindre gennemsigtige heuristikker. Det er svært at forstå valgmulighederne i den, og det er svært for forfatterne at forklare.

Givet netværkets enkelhed, som let kan forstås og rettes, kan ResNet være bedre.

SqueezeNet
SqueezeNet (se artikel: SqueezeNet: AlexNet-niveau nøjagtighed med 50x færre parametre og <0,5MB modelstørrelse) er en nyligt offentliggjort arkitektur, der genbehandler koncepterne i ResNet og Inception. En bedre arkitekturdesignet netværksmodel er mindre, og parametrene kræver endnu ikke komplekse komprimeringsalgoritmer.

ENet
Vores team planlægger at kombinere alle funktionerne fra den nyligt afslørede arkitektur for at skabe et meget effektivt, lavvægtsnetværk, der bruger færre parametre og beregninger for at opnå resultater i topklasse. Denne netværksarkitektur kaldes ENet og blev designet af Adam Paszke. Vi har allerede brugt det til enkeltpixel-markup og sceneopløsning.

For mere information om ENet, se artiklen ENet: A Deep Neural Network Architecture for Real-Time Semantic Segmentation. ENet er et netværk af kodning, tilføjelse og dekodning. Encoderen er et almindeligt CNN-design til klassificering. Dekoderen er et upsamplelsesnetværk, der videresender klassifikationen bagud til det oprindelige billede for segmentering. Dette bruger kun neurale netværk og ingen andre algoritmer til billedsegmentering.

ENet er designet til at bruge så mange ressourcer som muligt i starten. Derfor har den et så lille script, med et kombineret netværk af encoders og decoders, der fylder 0,7 MB med 16 fp nøjagtighed. Selv med en så lille model er ENet lignende eller bedre end andre neurale netværksløsninger i segmenteringsnøjagtighed.

Modulanalyse
Analysen af CNN-modulet, som er lavet i artiklen (Systematic evaluation of CNN advances on the ImageNet), er meget hjælpsom:

Brug ELU-ikke-linearitet uden batchnorm eller ReLU med batchnorm.
Brug en indlært RGB-farverumstransformation.
Brug en lineær strategi for nedgang i læringsraten.
Brug summen af gennemsnitlige og større samlede lag.
Brug en mini-batchstørrelse på cirka 128 til 256 stykker. Hvis det er for stort til dit grafikkort, så skru bare læringshastigheden ned til denne størrelse.
Brug det fuldt forbundne lag som konvolution og gennemsnit alle forudsigelser for at lave den endelige forudsigelse.
Når studiet øger træningssættets størrelse, opdager det, om der er et plateau, der ikke nås
Renligheden af dataene er vigtigere end datastørrelsen.
Hvis du ikke kan øge størrelsen på inputbilledet, så reducer skridtet på de efterfølgende lag, og det har samme effekt.
Hvis dit netværk har en kompleks og højt optimeret arkitektur, såsom GoogLeNet, skal du være forsigtig med at ændre det.

Andre arkitekturer, der er værd at lægge mærke til
FractalNet (se artikel: FractalNet: Ultra-Deep Neural Networks without Residuals) bruger en rekursiv arkitektur, som ikke testes på ImageNet. Denne arkitektur er en afledning af ResNet eller mere generelt, ResNet.

fremtid
Vi mener, at skabelsen af en neuralt netværksarkitektur er en topprioritet for udviklingen af deep learning. Vores team anbefaler kraftigt, at man læser og forstår de artikler, der nævnes i artiklen, omhyggeligt.

Men man kunne undre sig over, hvorfor vi bruger så meget tid på at lave arkitekturer? Hvorfor ikke fortælle os, hvad vi skal bruge med data? Hvordan kombinerer man moduler? Disse spørgsmål er gode, men stadig under forskning, og der findes en artikel at henvise til: Neurale netværk med differentierbar struktur.

Bemærk, at de fleste af de arkitekturer, vi har talt om i denne artikel, handler om computer vision. Lignende neurale netværksarkitekturer er blevet udviklet på andre områder, og det er meget interessant at lære om arkitektoniske ændringer i alle andre opgaver.

Hvis du er interesseret i at sammenligne neural netværksarkitektur og beregningsydelse, se artiklen: An Analysis of Deep Neural Network Models for Practical Applications.







Tidligere:Flere Python-metoder til beregning af eksekveringstid
Næste:Antminer B3 fortæller dig, hvad du skal grave i!
Ansvarsfraskrivelse:
Al software, programmeringsmaterialer eller artikler udgivet af Code Farmer Network er kun til lærings- og forskningsformål; Ovenstående indhold må ikke bruges til kommercielle eller ulovlige formål, ellers skal brugerne bære alle konsekvenser. Oplysningerne på dette site kommer fra internettet, og ophavsretstvister har intet med dette site at gøre. Du skal slette ovenstående indhold fuldstændigt fra din computer inden for 24 timer efter download. Hvis du kan lide programmet, så understøt venligst ægte software, køb registrering og få bedre ægte tjenester. Hvis der er nogen overtrædelse, bedes du kontakte os via e-mail.

Mail To:help@itsvse.com