Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 10136|Svar: 0

Utvecklingen av neural nätverksarkitektur: En omfattande översikt av mer än tio arkitekturer från LeNet5 till ENet

[Kopiera länk]
Publicerad på 2018-04-24 13:08:47 | | | |
LeNet5
LeNet5 föddes 1994 och är ett av de första konvolutionella neurala nätverken samt har utvecklat djupinlärningsfältet. Sedan 1988, efter många framgångsrika iterationer, har detta banbrytande arbete av Yann LeCun fått namnet LeNet5 (se: Gradient-Based Learning Applied to Document Recognition).


LeNet5:s arkitektur bygger på idén att (särskilt) egenskaperna i en bild är fördelade över hela bilden, och att konvolution med lärbara parametrar är ett effektivt sätt att extrahera liknande egenskaper på flera platser med ett litet antal parametrar. Vid den tiden fanns det inget grafikkort för att hjälpa till med träningen, och till och med CPU:n var långsam. Därför är möjligheten att spara parametrar såväl som beräkningsprocessen en viktig utveckling. Detta är motsatsen till att använda varje pixel som separat indata för ett stort, flerskiktat neuralt nätverk. LeNet5 förklarar att dessa pixlar inte bör användas i det första lagret eftersom bilden har starka rumsliga korrelationer som inte kan utnyttjas genom att använda oberoende pixlar i bilden som olika inmatningsfunktioner.

LeNet5:s funktioner kan sammanfattas enligt följande:

Konvolutionella neurala nätverk använder tre lager som sekvens: konvolutionellt, poolat, icke-linjärt → Detta är förmodligen en nyckelfunktion i bilddjupinlärning sedan denna artikel!
Använd konvolutioner för att extrahera rumsliga egenskaper
Delprov med hjälp av avbildning till rumsligt medelvärde
Icke-linjäritet i form av hyperbolisk tangent (tanh) eller S-formad (sigmoid).
Multilayer Neural Networks (MLP) fungerar som de sista klassificerarna
Glesa anslutningsmatriser mellan lager undviker stora beräkningskostnader

Sammanfattningsvis är detta nätverk utgångspunkten för ett stort antal nya arkitekturer och har inspirerat många inom detta område.

Intervall
Från 1998 till 2010 befann sig det neurala nätverket i sin inkubationsfas. De flesta är omedvetna om deras växande kraft, medan andra forskare är långsamma med att göra det. Tack vare mobilkamerors och billiga digitalkameror utnyttjas allt mer data. Och datorkraften ökar också, CPU:er blir snabbare och GPU:er blir beräkningsverktyg för flera syften. Dessa trender har tillåtit neurala nätverk att utvecklas, om än långsamt. Data och datorkraft gör de uppgifter som neurala nätverk kan utföra allt mer intressanta. Efter det blev allt klart......

Dan Ciresan Net
År 2010 publicerade Dan Claudiu Ciresan och Jürgen Schmidhuber en implementation av det tidigaste GPU-neurala nätverket. Denna implementation är ett 9-lagers neuralt nätverk som körs på en NVIDIA GTX 280-grafikprocessor, inklusive framåt- och bakpropagation.

AlexNet
År 2012 publicerade Alex Krizhevsky Alexet (se: ImageNet Classification with Deep Convolutional Neural Networks), en djupare och bredare version av LeNet som vann den svåra ImageNet-tävlingen med stor marginal.


AlexNet utvidgar LeNets idéer till större neurala nätverk som kan lära sig mycket mer komplexa objekt och objektnivåer. Bidragen från detta arbete är:

Använd en modifierad linjär enhet (ReLU) som en icke-linjäritet
Använd Dropout-tekniken för att selektivt ignorera enskilda neuroner under träningen för att undvika modellöveranpassning
Överskrid en stor pool för att undvika den genomsnittliga effekten av genomsnittlig pooling
Minska träningstiden med NVIDIA GTX 580-GPU:n

Vid den tidpunkten kan GPU:er tillhandahålla fler kärnor än CPU:er, och träningstiden kan ökas med 10 gånger, vilket i sin tur möjliggör större datamängder och större bilder.

AlexNets framgång har lett till en liten revolution. Konvolutionella neurala nätverk är nu ryggraden i djupinlärning, och de har blivit synonymt med "stora neurala nätverk som nu kan lösa användbara uppgifter."

Överprestation
I december 2013 föreslog Yann LeCun-laboratoriet vid New York University en derivat av AlexNet, Overfeat (se: OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks). Denna artikel föreslog också en lärande begränsningsbox, vilket ledde till många artiklar om samma ämne. Jag tror det är bättre att lära sig dela upp objekt än att lära sig konstgjorda begränsningsrutor.

VGG
VGG-nätverket från University of Oxford (se: Very Deep Convolutional Networks for Large-Scale Image Recognition) är det första nätverket som använder mindre 3×3-filter på varje konvolutionslager och kombinerar dem för att bearbeta dem som en konvolutionssekvens.

Detta verkar vara motsatsen till LeNets princip, där stora konvolutioner används för att uppnå liknande drag i en bild. Till skillnad från AlexNets 9×9- eller 11×11-filter börjar filtren bli mindre och närmar sig den ökända 1×1-konvolutionsanomalin som LeNet försöker undvika – åtminstone på nätverkets första lager. VGG har dock gjort stora framsteg genom att använda flera 3×3-konvolutioner i följd för att efterlikna effekterna av större receptiva fält, såsom 5×5 och 7×7. Dessa idéer har också använts i nyare nätverksarkitekturer, såsom Inception och ResNet.


VGG-nätverk använder flera 3×3-konvolutionella lager för att karakterisera komplexa funktioner. Observera att de 3:e, 4:e, 5:e blocken av VGG-E: 256×256 och 512×512 3×3-filter används flera gånger i tur och ordning för att extrahera mer komplexa funktioner och kombinationer av dessa egenskaper. Effekten motsvarar en stor 512×512-klassificerare med 3 konvolutionella lager. Detta innebär uppenbarligen att det finns många parametrar och inlärningsmöjligheter. Men dessa nätverk är svåra att träna och måste delas upp i mindre nätverk och ackumuleras lager för lager. Detta beror på bristen på ett robust sätt att regularisera modellen eller att mer eller mindre begränsa en stor mängd sökutrymme på grund av det stora antalet parametrar.

VGG använder stora funktionsstorlekar i många lager eftersom inferens är tidskrävande vid körning. Precis som med Inceptions flaskhals kommer en minskning av antalet funktioner att spara vissa beräkningskostnader.

Nätverk-i-nätverk
Idén med Network in Network (NiN, se artikel: Network In Network) är enkel och fantastisk: användningen av 1×1-konvolution för att ge mer komposabla möjligheter för funktionerna i konvolutionslagret.

NiN-arkitekturen använder rumsliga MLP-lager efter individuella konvolutioner för att bättre kombinera funktioner före andra lager. Återigen kan man tänka att 1×1-konvolutioner strider mot LeNets ursprungliga princip, men i själva verket kan de kombinera konvolutionella egenskaper på ett bättre sätt än vad som inte är möjligt genom att helt enkelt stapla fler konvolutionella funktioner. Detta skiljer sig från att använda den ursprungliga pixeln som nästa lagerinmatning. 1×1-konvolutioner används ofta för att spatiskt kombinera funktioner på featurekartor efter konvolution, så de kan faktiskt använda mycket få parametrar och dela dem över alla pixlar av dessa funktioner!


MLP:s förmåga att kraftigt öka effektiviteten hos individuella konvolutionella egenskaper genom att kombinera dem till mer komplexa grupper. Denna idé har sedan dess använts i några nyare arkitekturer, såsom ResNet, Inception och dess derivat.

NiN använder också ett genomsnittligt poolinglager som en del av den slutliga klassificeraren, en annan praxis som kommer att bli vanlig. Detta görs genom att medelvärde av nätverkets svar på flera inmatningsbilder innan klassificering.

GoogLeNet och Inception
Christian Szegedy från Google inledde sin strävan att minska den beräkningsmässiga belastningen för djupa neurala nätverk och designade GoogLeNet, den första Inception-arkitekturen (se: Going Deeper with Convolutions).

Det var hösten 2014, och djupinlärningsmodeller blev användbara för att klassificera bild- kontra videobilder. De flesta skeptiker tvivlar inte längre på att djupinlärning och neurala nätverk verkligen är tillbaka den här gången, och kommer att fortsätta utvecklas. Med tanke på användbarheten av dessa teknologier är internetjättar som Google mycket intresserade av att implementera dessa arkitekturer effektivt och i stor skala på sina servrar.

Christian funderade mycket på hur djupa neurala nätverk kan uppnå höga prestandanivåer, som på ImageNet, samtidigt som de minskar deras beräkningsmässiga överhead. Eller så kan prestandaförbättringar göras samtidigt som samma beräkningsmässiga överhead säkerställs.

Han och hans team tog fram Inception-modulen:


Vid första anblicken är detta i princip en parallell kombination av 1×1, 3×3, 5×5 konvolutionsfilter. Men den stora idén med Inception är att minska antalet funktioner innan dyra parallellmoduler med 1×1 konvolutionsblock (NiN). Detta kallas ofta för en "flaskhals". Detta avsnitt kommer att förklaras i avsnittet "flaskhalsskikt" nedan.

GoogLeNet använder en ryggrad utan en inceptionsmodul som initialt lager, följt av ett genomsnittligt poolinglager plus en softmax-klassificerare liknande NiN. Denna klassificerare har ett mycket färre antal operationer än AlexNets och VGG:s klassificerare. Detta ledde också till en mycket effektiv nätverksdesign, se artikeln: An Analysis of Deep Neural Network Models for Practical Applications.

Flaskhalsskiktet
Inspirerad av NiN minskar Inceptions flaskhalslager antalet funktioner i varje lager, och därmed antalet operationer; Så att slutledningstiden kan hållas låg. Antalet funktioner minskas med fyra gånger innan data passerar genom dyra konvolutionsmoduler. Detta är en betydande besparing i beräkningskostnader och en framgång för arkitekturen.

Låt oss verifiera det specifikt. Nu när du har 256 funktionsinmatningar och 256 funktionsutgångar, låt oss anta att Inception-lagret bara kan utföra 3×3 konvolutioner, vilket innebär totalt 256×256×3×3 konvolutioner (nästan 589 000 multiplikations- och ackumuleringsoperationer (MAC)). Detta kan vara utöver vår beräkningsbudget, säg, för att köra lagret på 0,5 millisekunder på Googles servrar. Istället beslutade vi att minska antalet funktioner som behövde kompliceras, vilket var 64 (dvs. 256/4). I detta fall börjar vi med en konvolution på 256 -> 64 1×1, sedan 64 konvolutioner på alla grenar av Inceptionen, följt av en 1×1-konvolution från en egenskap 64 -> 256, och nu är operationen följande:

256×64 × 1×1 = 16 000 shilling
64×64 × 3×3 = 36 000 shilling
64×256 × 1×1 = 16 000 shilling

Jämfört med tidigare 600 000 finns det nu totalt 70 000 beräkningsvolymer, vilket är nästan tio gånger mindre.

Och även om vi gjorde bättre operationer förlorade vi inte dess allmänkraft på detta lager. Flaskhalsskiktet har visat sig vara förstklassigt på dataset som ImageNet, och det används också i arkitekturer som ResNet, som vi kommer att introducera härnäst.

Det lyckas eftersom indatafunktionerna är relaterade, så redundansen kan minskas genom att korrekt kombinera dem med 1×1-konvolution. Sedan, efter att ett litet antal funktioner har blivit sammanflätade, kan de utökas igen till meningsfulla kombinationer på nästa lager.

Inception V3 (och V2)
Christian och hans team är mycket produktiva forskare. I februari 2015 introducerades batch-normaliserad Inception som Inception V2 (se artikel: Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift). Batchnormalisering beräknar medelvärdet och standardavvikelsen för alla funktionskartor på utdata från ett lager och använder dessa värden för att normalisera deras svar. Detta motsvarar att "vita" datan, så att alla neurala kartor svarar inom samma intervall och är nollmedelvärde. Detta hjälper till med träning när nästa lager inte behöver lära sig offset från indata, och fokuserar också på hur man bättre kan kombinera dessa funktioner.

I december 2015 släppte teamet en ny version av Inception-modulen och liknande arkitektur (se artikel: Rethinking the Inception Architecture for Computer Vision). Artikeln förklarar bättre den ursprungliga GoogLeNet-arkitekturen och ger mer detaljer om designval. Den ursprungliga idén är följande:

Genom att noggrant bygga nätverket balanseras djup och bredd för att maximera informationsflödet in i nätverket. Innan varje poolning, lägg till funktionskartläggning.
När djupet ökar ökar även nätverkslagrets djup eller antal funktioner.
Använd varje lagerdjupsökning för att öka bindningen av funktioner innan nästa lager.
Med endast 3×3-konvolutioner kan ett givet 5×5 och 7×7-filter delas upp i flera 3×3-filter när det är möjligt. Titta på bilden nedan


Som ett resultat blev den nya Inception:


Du kan också dela upp filtret genom att platta ut konvolutionen i mer komplexa moduler:


När Inception-modulen utför inceptionberäkningar kan den också minska datastorleken genom att tillhandahålla pooling. Detta är i princip liknande att köra ett enkelt pooling-lager parallellt när man kör en konvolution:


Inception använder också ett pooling-lager och softmax som slutgiltig klassificerare.

ResNet
I december 2015 skedde en ny förändring, som sammanföll med Inception V3. ResNet har en enkel idé: mata ut utdata från två på varandra följande konvolutionella lager och förbi inmatningen till nästa lager (se artikeln: Deep Residual Learning for Image Recognition).


Detta liknar några av de gamla idéerna tidigare. Men i ResNet delar de upp de två lagren och tillämpas i större skala. Att tradja efter två lager är en viktig intuition eftersom att dela ett lager inte ger mer förbättring. Passage genom lager 2 kan ses som en liten klassificerare eller ett nätverk-i-nätverk.

Detta är första gången som antalet nätverkslager överstiger 100, och till och med 1000 lager kan tränas.

ResNet, som har ett stort antal nätverkslager, börjar använda ett nätverkslager liknande Inception-flaskhalslagret:


Detta lager bearbetar ett mindre antal funktioner genom att först sammanflämja ett mindre antal funktioner med en 1×1 med en mindre utdata (vanligtvis 1/4 av indatan), sedan använda ett lager av 3×3 och därefter ett lager av 1×1. Liknande Inception-modulen säkerställer detta låg beräkningsintensitet samtidigt som det ger rika funktionskombinationer.

ResNet använder ett relativt enkelt initialt lager på indatana: ett baslager på 7×7 volymer med två pooler. Jämför detta med de mer komplexa och mindre intuitiva Inception V3 och V4.

ResNet använder också ett pooling-lager plus softmax som slutgiltig klassificerare.

Andra insikter om ResNet kommer varje dag:

ResNet kan betraktas både parallellt och sammanhängande, där in- och utgångar (inutgångar) behandlas parallellt i många moduler, medan utgångarna från varje modul är kontinuerligt sammankopplade.
ResNet kan också betraktas som en kombination av parallella eller kontinuerliga moduler (se artikeln: Residual Networks are Exponential Ensembles of Relatively Shallow Networks).
Det har visat sig att ResNet vanligtvis arbetar parallellt på nätverksblock på lager 20–30. Istället för att flöda kontinuerligt genom hela nätverkets längd.
När ResNet skickar tillbaka utdata till indata som en RNN kan nätverket betraktas som en bättre biologiskt betrodda kortikal modell (se artikel: Bridging the Gaps Between Residual Learning, Recurrent Neural Networks and Visual Cortex).

Inception V4
Här är en annan version av Inception från Christian och hans team, som liknar Inception V3:


Inception V4 kombinerar också Inception-modulen och ResNet-modulen:


Jag tycker att arkitekturen inte är särskilt koncist, men den är också full av mindre transparenta heuristiker. Det är svårt att förstå valen i den, och det är svårt för författarna att förklara.

Med tanke på nätverkets enkelhet, som lätt kan förstås och rättas, kan ResNet vara bättre.

SqueezeNet
SqueezeNet (se artikel: SqueezeNet: AlexNet-nivå noggrannhet med 50 gånger färre parametrar och <0,5 MB modellstorlek) är en nyligen publicerad arkitektur som återbearbetar koncepten i ResNet och Inception. En bättre arkitekturdesign för nätverksmodell är mindre, och parametrarna kräver ännu inte komplexa komprimeringsalgoritmer.

ENet
Vårt team planerar att kombinera alla funktioner från den nyligen avslöjade arkitekturen för att skapa ett mycket effektivt, lättviktsnätverk som använder färre parametrar och beräkningar för att uppnå toppresultat. Denna nätverksarkitektur kallas ENet och designades av Adam Paszke. Vi har redan använt det för enpixelmarkering och scenupplösning.

För mer information om ENet, se artikeln ENet: A Deep Neural Network Architecture for Real-Time Semantic Segmentation. ENet är ett nätverk av kodning, tillägg och avkodning. Kodaren är en vanlig CNN-design att klassificera. Dekodern är ett uppsamplingsnätverk som propagerar klassificeringen bakåt till den ursprungliga bilden för segmentering. Detta använder endast neurala nätverk och inga andra algoritmer för bildsegmentering.

ENet är utformat för att använda så få resurser som möjligt i början. Det är därför det har ett så litet skript, med ett kombinerat nätverk av kodare och avkodare som upptar 0,7 MB med 16 fp-noggrannhet. Även med en så liten modell är ENet liknande eller bättre än andra neurala nätverkslösningar när det gäller segmenteringsnoggrannhet.

Modulanalys
Analysen av CNN-modulen, som har gjorts i artikeln (Systematic evaluation of CNN advances on the ImageNet), är mycket hjälpsam:

Använd ELU-icke-linjäritet utan batchnorm eller ReLU med batchnorm.
Använd en inlärd RGB-färgrymdstransformation.
Använd en linjär strategi för inlärningshastighet och minskning.
Använd summan av genomsnittliga och större poolade lager.
Använd en minisats på cirka 128 till 256. Om det är för stort för ditt grafikkort, skala bara ner inlärningshastigheten till den här storleken.
Använd det fullt sammanhängande lagret som konvolution och medelvärde alla förutsägelser för att göra den slutgiltiga förutsägelsen.
När studien ökar träningssetets storlek upptäcker den om det finns en platå som inte nås
Renheten i datan är viktigare än datans storlek.
Om du inte kan öka storleken på inmatningsbilden, minska striden på efterföljande lager, ger det samma effekt.
Om ditt nätverk har en komplex och mycket optimerad arkitektur, som GoogLeNet, måste du vara försiktig med att modifiera det.

Andra arkitekturer värda att uppmärksamma
FractalNet (se artikel: FractalNet: Ultra-Deep Neural Networks without Residuals) använder en rekursiv arkitektur, som inte testas på ImageNet. Denna arkitektur är en derivat av ResNet eller mer generellt, ResNet.

framtid
Vi anser att skapandet av en neural nätverksarkitektur är en högsta prioritet för utvecklingen av djupinlärning. Vårt team rekommenderar starkt att noggrant läsa och förstå de artiklar som nämns i artikeln.

Men man kan undra varför vi lägger så mycket tid på att skapa arkitekturer? Varför inte berätta för oss vad vi ska använda med data? Hur kombinerar man moduler? Dessa frågor är bra, men fortfarande under forskning, och det finns en artikel att hänvisa till: Neurala nätverk med differentierbar struktur.

Observera att de flesta av de arkitekturer vi har pratat om i denna artikel handlar om datorseende. Liknande neurala nätverksarkitekturer har utvecklats inom andra områden, och det är mycket intressant att lära sig om arkitektoniska förändringar i alla andra uppgifter.

Om du är intresserad av att jämföra neural nätverksarkitektur och beräkningsprestanda, se artikeln: En analys av djupa neurala nätverksmodeller för praktiska tillämpningar.







Föregående:Flera metoder för beräkning av exekveringstid i Python
Nästa:Antminer B3 berättar vad du ska gräva!
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com