LeNet5 LeNet5 ble født i 1994 og er et av de første konvolusjonelle nevrale nettverkene og har gjort et fremskritt innen dyp læring. Siden 1988, etter mange vellykkede iterasjoner, har dette banebrytende arbeidet av Yann LeCun fått navnet LeNet5 (se: Gradient-Based Learning Applied to Document Recognition).
LeNet5s arkitektur er basert på ideen om at (spesielt) egenskapene i et bilde er fordelt over hele bildet, og at konvolusjon med lærbare parametere er en effektiv måte å hente ut lignende egenskaper på flere steder med et lite antall parametere. På den tiden fantes det ingen GPU som kunne hjelpe med treningen, og selv CPU-en var treg. Derfor er evnen til å lagre parametere så vel som beregningsprosessen en nøkkelutvikling. Dette er det motsatte av å bruke hver piksel som en separat inngang for et stort, flerlags nevralt nettverk. LeNet5 forklarer at disse pikslene ikke bør brukes i det første laget fordi bildet har sterke romlige korrelasjoner som ikke kan utnyttes ved å bruke uavhengige piksler i bildet som ulike inputfunksjoner.
LeNet5-funksjonene kan oppsummeres slik:
Konvolusjonelle nevrale nettverk bruker 3 lag som sekvens: konvolusjonell, poolet, ikke-lineær → Dette er sannsynligvis en nøkkelfunksjon ved bilde-dyp læring siden denne artikkelen! Bruk konvolusjoner for å trekke ut romlige trekk Delutvalg ved bruk av avbildning til romlig gjennomsnitt Ikke-linearitet i form av hyperbolsk tangent (tanh) eller S-formet (sigmoid). Flerlags nevrale nettverk (MLP) fungerer som de siste klassifikatorene Spredte tilkoblingsmatriser mellom lag unngår store beregningskostnader
Alt i alt er dette nettverket utgangspunktet for et stort antall nyere arkitekturer og har inspirert mange innen dette området.
Intervall Fra 1998 til 2010 var det nevrale nettverket i inkubasjonsfasen. De fleste er uvitende om deres økende kraft, mens andre forskere er trege med å gjøre det. Takket være fremveksten av mobiltelefonkameraer og rimelige digitalkameraer, blir stadig mer data utnyttet. Og datakraften øker også, CPU-er blir raskere, og GPU-er blir dataverktøy for flere formål. Disse trendene har gjort det mulig for nevrale nettverk å utvikle seg, om enn sakte. Data og datakraft gjør oppgavene nevrale nettverk kan utføre mer og mer interessante. Etter det ble alt klart......
Dan Ciresan Net I 2010 publiserte Dan Claudiu Ciresan og Jurgen Schmidhuber en implementering av det tidligste GPU-nevrale nettverket. Denne implementeringen er et 9-lags nevralt nettverk som kjører på en NVIDIA GTX 280-grafikkprosessor, inkludert fremdrift og tilbakepropagasjon.
AlexNet I 2012 publiserte Alex Krizhevsky Alexet (se: ImageNet Classification with Deep Convolutional Neural Networks), en dypere og bredere versjon av LeNet som vant den vanskelige ImageNet-konkurransen med betydelig margin.
AlexNet utvider LeNets ideer til større nevrale nettverk som kan lære mye mer komplekse objekter og objektnivåer. Bidragene fra dette arbeidet er:
Bruk en modifisert lineær enhet (ReLU) som en ikke-linearitet Bruk Dropout-teknikken for selektivt å ignorere individuelle nevroner under trening for å unngå modellovertilpasning Overstyr en stor pool for å unngå gjennomsnittlig effekt av gjennomsnittlig pooling Reduser treningstiden med NVIDIA GTX 580 GPU
På dette tidspunktet kan GPU-er levere et høyere antall kjerner enn CPU-er, og treningstiden kan økes med ti ganger, noe som igjen tillater større datasett og større bilder.
AlexNets suksess har ført til en liten revolusjon. Konvolusjonelle nevrale nettverk er nå ryggraden i dyp læring, og de har blitt synonymt med «store nevrale nettverk som nå kan løse nyttige oppgaver.»
Overprestasjon I desember 2013 foreslo Yann LeCun-laboratoriet ved New York University en derivat av AlexNet, Overfeat (se: OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks). Denne artikkelen foreslo også en læringsgrenseboks, noe som førte til mange artikler om dette samme temaet. Jeg mener det er bedre å lære å splitte objekter enn å lære kunstige avgrensningsbokser.
VGG VGG-nettverket fra University of Oxford (se: Very Deep Convolutional Networks for Large-Scale Image Recognition) er det første nettverket som bruker mindre 3×3-filtre på hvert konvolusjonslag og kombinerer dem for å behandle dem som en konvolusjonssekvens.
Dette ser ut til å være det motsatte av Lenets prinsipp, hvor store konvolusjoner brukes for å oppnå lignende trekk i et bilde. I motsetning til AlexNets 9×9- eller 11×11-filtre, begynner filtrene å bli mindre, og nærmer seg den beryktede 1×1-konvolusjonsanomalien som LeNet prøver å unngå—i hvert fall på det første laget av nettverket. VGG har imidlertid gjort store fremskritt ved å bruke flere 3×3-konvolusjoner i rekkefølge for å etterligne effektene av større reseptive felt, som 5×5 og 7×7. Disse ideene har også blitt brukt i nyere nettverksarkitekturer, som Inception og ResNet.
VGG-nettverk bruker flere 3×3 konvolusjonslag for å karakterisere komplekse funksjoner. Merk at den 3., 4., 5. blokken av VGG-E: 256×256 og 512×512 3×3-filtre brukes flere ganger etter tur for å trekke ut mer komplekse funksjoner og kombinasjoner av disse. Effekten tilsvarer en stor 512×512-klassifisator med 3 konvolusjonslag. Dette betyr åpenbart at det finnes mange parametere og læringsmuligheter. Men disse nettverkene er vanskelige å trene og må deles inn i mindre nettverk og akkumuleres lag for lag. Dette skyldes mangelen på en robust måte å regularisere modellen på, eller for mer eller mindre å begrense en stor mengde søkeplass på grunn av det store antallet parametere.
VGG bruker store funksjonsstørrelser i mange lag fordi slutning er tidkrevende under kjøring. Som med Inceptions flaskehals, vil det å redusere antall funksjoner spare noen beregningskostnader.
Nettverk-i-nettverk Ideen om Network in Network (NiN, se artikkel: Network In Network) er enkel og flott: bruk av 1×1-konvolusjon for å gi flere komponerbare muligheter for funksjonene til konvolusjonslaget.
NiN-arkitekturen bruker romlige MLP-lag etter individuelle konvolusjoner for bedre å kombinere funksjoner før andre lag. Igjen kan du tenke at 1×1-konvolusjoner er i strid med det opprinnelige prinsippet i LeNet, men faktisk kan de kombinere konvolusjonsfunksjoner på en bedre måte enn det som ikke er mulig ved å stable flere konvolusjonsfunksjoner. Dette er annerledes enn å bruke den opprinnelige pikselen som neste lag-inngang. 1×1-konvolusjoner brukes ofte til å spattisk kombinere funksjoner på funksjonskart etter konvolusjon, slik at de faktisk kan bruke svært få parametere og dele dem på tvers av alle pikslene til disse funksjonene!
MLPs evne til å øke effektiviteten til individuelle konvolusjonstrekk betydelig ved å kombinere dem i mer komplekse grupper. Denne ideen har siden blitt brukt i noen nyere arkitekturer, som ResNet, Inception og dets derivater.
NiN bruker også et gjennomsnittlig pooling-lag som en del av den endelige klassifisereren, en annen praksis som vil bli vanlig. Dette gjøres ved å gjennomsnittliggjøre nettverkets svar på flere inndatabilder før klassifisering.
GoogLeNet og Inception Christian Szegedy fra Google startet sin søken etter å redusere den beregningsmessige belastningen ved dype nevrale nettverk og designet GoogLeNet, den første Inception-arkitekturen (se: Going Deeper with Convolutions).
Det var høsten 2014, og dyp læringsmodeller ble nyttige for å klassifisere bilde- versus videorammer. De fleste skeptikere tviler ikke lenger på at dyp læring og nevrale nettverk virkelig er tilbake denne gangen, og vil fortsette å utvikle seg. Gitt nytten av disse teknologiene, er internettgiganter som Google svært interessert i å distribuere disse arkitekturene effektivt og i stor skala på sine servere.
Christian tenkte mye på hvordan dype nevrale nettverk kan oppnå høye ytelsesnivåer, som på ImageNet, samtidig som de reduserer deres beregningskostnader. Eller ytelsesforbedringer kan gjøres samtidig som samme beregningsoverhead sikres.
Han og teamet hans kom opp med Inception-modulen:
Ved første øyekast er dette i bunn og grunn en parallell kombinasjon av 1×1, 3×3, 5×5 konvolusjonsfiltre. Men den store ideen med Inception er å redusere antall funksjoner før dyre parallelle moduler med 1×1 konvolusjonsblokker (NiN). Dette kalles ofte en «flaskehals». Denne delen vil bli forklart i avsnittet om «flaskehalslag» nedenfor.
GoogLeNet bruker en ryggrad uten en oppstartsmodul som det første laget, etterfulgt av et gjennomsnittlig pooling-lag pluss en softmax-klassifisator lik NiN. Denne klassifisatoren har et mye færre antall operasjoner enn AlexNet og VGGs klassifikatorer. Dette førte også til et svært effektivt nettverksdesign, se artikkelen: An Analysis of Deep Neural Network Models for Practical Applications.
Flaskehalslag Inspirert av NiN reduserer Inceptions flaskehalslag antallet funksjoner i hvert lag, og dermed antall operasjoner; Så slutningstiden kan holdes lav. Antallet funksjoner reduseres fire ganger før dataene sendes gjennom dyre konvolusjonsmoduler. Dette er en betydelig besparelse i beregningskostnader og en suksess for arkitekturen.
La oss verifisere det spesifikt. Nå som du har 256 feature-innganger og 256 feature-utganger, la oss anta at Inception-laget bare kan utføre 3×3 konvolusjoner, noe som betyr totalt 256×256×3×3 konvolusjoner (nesten 589 000 multiplikasjons- og akkumuleringsoperasjoner (MAC)). Dette kan være utenfor vårt beregningsbudsjett, for eksempel å kjøre laget på 0,5 millisekunder på Google-servere. I stedet bestemte vi oss for å redusere antall funksjoner som måtte innvikles, som var 64 (dvs. 256/4). I dette tilfellet starter vi med en konvolusjon på 256 -> 64 1×1, deretter 64 konvolusjoner på alle grener av Inception, etterfulgt av en 1×1-konvolusjon fra en egenskap på 64 -> 256, og nå er operasjonen som følger:
256×64 × 1×1 = 16 000s 64×64 × 3×3 = 36 000-tallet 64×256 × 1×1 = 16 000
Sammenlignet med tidligere 600 000, er det nå totalt 70 000 datavolumer, noe som er nesten ti ganger mindre.
Og selv om vi gjorde bedre operasjoner, mistet vi ikke generaliteten på dette laget. Flaskehalslaget har vist seg å være førsteklasses på datasett som ImageNet, og det brukes også i arkitekturer som ResNet, som vi skal introdusere neste gang.
Det lykkes fordi inputfunksjonene er relaterte, så redundans kan reduseres ved å kombinere dem korrekt med 1×1-konvolusjon. Deretter, etter at et lite antall funksjoner er komplisert, kan de utvides igjen til meningsfulle kombinasjoner på neste lag.
Inception V3 (og V2) Christian og teamet hans er svært produktive forskere. I februar 2015 ble batch-normalisert Inception introdusert som Inception V2 (se artikkel: Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift). Batch-normalisering beregner gjennomsnitt og standardavvik for alle funksjonsavbildninger på utgangen av ett lag, og bruker disse verdiene til å normalisere responsene deres. Dette tilsvarer å «hvite» dataene, slik at alle nevrale kart svarer i samme område og har null gjennomsnitt. Dette hjelper med trening når neste lag ikke trenger å lære offset fra inputdataene, og fokuserer også på hvordan man bedre kan kombinere disse funksjonene.
I desember 2015 lanserte teamet en ny versjon av Inception-modulen og lignende arkitektur (se artikkel: Rethinking the Inception Architecture for Computer Vision). Artikkelen forklarer bedre den opprinnelige GoogLeNet-arkitekturen, og gir mer detaljer om designvalg. Den opprinnelige ideen er som følger:
Ved å bygge nettverket nøye balanseres dybde og bredde, slik at informasjonsflyten inn i nettverket maksimeres. Før hver pooling, legg til funksjonskartlegging. Etter hvert som dybden øker, øker også dybden eller antallet funksjoner i nettverkslaget systematisk. Bruk hver lagdybdeøkning for å øke bindingen av funksjoner før neste lag. Ved kun å bruke 3×3-konvolusjoner kan gitte 5×5- og 7×7-filtre deles opp i flere 3×3-filtre når det er mulig. Se på bildet nedenfor
Som et resultat ble den nye Inception:
Du kan også dele filteret ved å flate ut konvolusjonen til mer komplekse moduler:
Mens Inception-modulen utfører inception-beregninger, kan den også redusere datastørrelsen ved å tilby pooling. Dette er i bunn og grunn likt å kjøre et enkelt pooling-lag parallelt når man kjører en konvolusjon:
Inception bruker også et pooling-lag og softmax som siste klassifiserer.
ResNet Desember 2015 kom en ny endring, som sammenfalt med Inception V3. ResNet har en enkel idé: mater utgangen fra to påfølgende konvolusjonslag og omgår inputen til neste lag (se artikkelen: Deep Residual Learning for Image Recognition).
Dette ligner på noen av de gamle ideene fra før. Men i ResNet deler de de to lagene og brukes i større skala. Å tre etter to lag er en viktig intuisjon fordi å dele ett lag ikke gir mer forbedring. Å passere gjennom lag 2 kan betraktes som en liten klassifiser, eller et nettverk-i-nettverk.
Dette er første gang antallet nettverkslag overstiger 100, og til og med 1000 lag kan trenes.
ResNet, som har et stort antall nettverkslag, begynner å bruke et nettverkslag som ligner på Inception-flaskehalslaget:
Dette laget behandler et mindre antall funksjoner ved først å vikle et mindre antall funksjoner med en 1×1 med en mindre utdata (vanligvis 1/4 av input), deretter bruke et lag på 3×3 og deretter et lag på 1×1. I likhet med Inception-modulen sikrer dette lav beregningsintensitet samtidig som det gir rike funksjonskombinasjoner.
ResNet bruker et relativt enkelt initiallag på inngangene: et 7×7-volums baselag med to pooler. Sammenlign dette med de mer komplekse og mindre intuitive Inception V3 og V4.
ResNet bruker også et pooling-lag pluss softmax som siste klassifikator.
Andre innsikter om ResNet skjer hver dag:
ResNet kan betraktes som både parallell og sammenhengende, og behandler innganger og utganger (innutganger) som parallelle i mange moduler, mens utgangene til hver modul er kontinuerlig koblet sammen. ResNet kan også betraktes som en kombinasjon av parallelle eller kontinuerlige moduler (se artikkelen: Residual Networks are Exponential Ensembles of Relatively Shallow Networks). Det har vist seg at ResNet vanligvis opererer parallelt på nettverksblokker på lag 20-30. I stedet for å flyte kontinuerlig gjennom hele nettverkets lengde. Når ResNet sender output tilbake til input som en RNN, kan nettverket betraktes som en bedre biologisk pålitelig kortikal modell (se artikkel: Bridging the Gaps Between Residual Learning, Recurrent Neural Networks and Visual Cortex).
Inception V4 Her er en annen versjon av Inception fra Christian og teamet hans, som ligner på Inception V3:
Inception V4 kombinerer også Inception-modulen og ResNet-modulen:
Jeg synes arkitekturen ikke er særlig konsis, men den er også full av mindre transparente heuristikker. Det er vanskelig å forstå valgene i den, og det er vanskelig for forfatterne å forklare.
Gitt nettverkets enkelhet, som lett kan forstås og korrigeres, kan ResNet være bedre.
SqueezeNet SqueezeNet (se artikkel: SqueezeNet: AlexNet-nivå nøyaktighet med 50 ganger færre parametere og <0,5 MB modellstørrelse) er en nylig publisert arkitektur som reprosesserer konseptene i ResNet og Inception. En bedre arkitekturdesignet nettverksmodell er mindre, og parameterne krever ennå ikke komplekse komprimeringsalgoritmer.
ENet Vårt team planlegger å kombinere alle funksjonene i den nylig avslørte arkitekturen for å skape et svært effektivt, lavvektsnettverk som bruker færre parametere og beregninger for å oppnå førsteklasses resultater. Denne nettverksarkitekturen kalles ENet og ble designet av Adam Paszke. Vi har allerede brukt den til enkeltpiksel-markering og sceneoppløsning.
For mer informasjon om ENet, se artikkelen ENet: A Deep Neural Network Architecture for Real-Time Semantic Segmentation. ENet er et nettverk av koding, tillegg og dekoding. Koderen er et vanlig CNN-design å klassifisere. Dekoderen er et oppsamplingsnettverk som viderefører klassifiseringen bakover til det opprinnelige bildet for segmentering. Dette bruker kun nevrale nettverk og ingen andre algoritmer for bildesegmentering.
ENet er designet for å bruke minst mulig ressurser i starten. Derfor har den et så lite skript, med et kombinert nettverk av kodere og dekodere som opptar 0,7 MB med 16 fp nøyaktighet. Selv med en så liten modell er ENet lik eller bedre enn andre nevrale nettverksløsninger når det gjelder segmenteringsnøyaktighet.
Modulanalyse Analysen av CNN-modulen, som er gjort i artikkelen (Systematic evaluation of CNN advances on the ImageNet), er svært nyttig:
Bruk ELU-ikke-linearitet uten batchnorm eller ReLU med batchnorm. Bruk en lært RGB-fargeromstransformasjon. Bruk en lineær strategi for nedgang i læringsraten. Bruk summen av gjennomsnittlige og større samlede lag. Bruk en minibatch på omtrent 128 til 256. Hvis det er for stort for GPU-en din, skaler bare læringsraten ned til denne størrelsen. Bruk det fullt sammenkoblede laget som konvolusjon og gjennomsnittlig alle prediksjoner for å lage den endelige prediksjonen. Når studien øker størrelsen på treningssettet, oppdager den om det er et platå som ikke nås Rensligheten i dataene er viktigere enn størrelsen på dataene. Hvis du ikke kan øke størrelsen på inngangsbildet, redusere steget på påfølgende lag, har det samme effekt. Hvis nettverket ditt har en kompleks og høyt optimalisert arkitektur, som GoogLeNet, må du være forsiktig med å endre det.
Andre arkitekturer det er verdt å følge med på FractalNet (se artikkel: FractalNet: Ultra-Deep Neural Networks without Residuals) bruker en rekursiv arkitektur, som ikke testes på ImageNet. Denne arkitekturen er en avledning av ResNet eller mer generelt, ResNet.
fremtidig Vi mener at det å skape en nevralt nettverksarkitektur er en topp prioritet for utviklingen av dyp læring. Vårt team anbefaler sterkt å nøye lese og forstå artiklene som nevnes i artikkelen.
Men man kan lure på hvorfor vi bruker så mye tid på å lage arkitekturer? Hvorfor ikke fortelle oss hva vi skal bruke med data? Hvordan kombinerer du moduler? Disse spørsmålene er gode, men fortsatt under forskning, og det finnes en artikkel å referere til: Neurale nettverk med differensierbar struktur.
Merk at de fleste arkitekturene vi har snakket om i denne artikkelen, handler om datamaskinsyn. Lignende nevrale nettverksarkitekturer er utviklet på andre områder, og det er veldig interessant å lære om arkitektoniske endringer i alle andre oppgaver.
Hvis du er interessert i å sammenligne nevralt nettverksarkitektur og beregningsytelse, se artikkelen: An Analysis of Deep Neural Network Models for Practical Applications.
|