See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 10136|Vastuse: 0

Närvivõrgu arhitektuuri areng: Põhjalik ülevaade enam kui kümnest arhitektuurist LeNet5-st ENetini

[Kopeeri link]
Postitatud 24.04.2018 13:08:47 | | | |
LeNet5
LeNet5 sündis 1994. aastal ning on üks esimesi konvolutsioonilisi närvivõrke ning on edendanud süvaõppe valdkonda. Alates 1988. aastast, pärast mitmeid edukaid iteratsioone, on see Yann LeCuni teedrajav töö kandnud nime LeNet5 (vt: Gradient-Based Learning Applied to Document Recognition).


LeNet5 arhitektuur põhineb ideel, et (eriti) pildi omadused on jaotunud kogu pildile ning et õpitavate parameetritega konvolutsioon on tõhus viis sarnaste omaduste eraldamiseks mitmes asukohas väikese parameetrite arvuga. Sel ajal polnud GPU-d, mis aitaks treenida, ja isegi protsessor oli aeglane. Seetõttu on parameetrite salvestamise võimalus ning arvutusprotsess võtmetähtsusega. See on vastupidine sellele, et iga pikslit kasutatakse eraldi sisendina suure, mitmekihilise närvivõrgu jaoks. LeNet5 selgitab, et neid piksleid ei tohiks esimeses kihis kasutada, kuna pildil on tugevad ruumilised korrelatsioonid, mida ei saa ära kasutada sõltumatute pikslite kasutamisega erinevate sisendfunktsioonidena.

LeNet5 funktsioone võib kokku võtta järgmiselt:

Konvolutsioonilised närvivõrgud kasutavad järjestuses kolme kihti: konvolutsiooniline, koondatud, mittelineaarne → See on tõenäoliselt piltide süvaõppe võtmeomadus alates sellest artiklist!
Kasuta konvolutsioone ruumiliste objektide eraldamiseks
Alamvalim, kasutades kaardistamist ruumilise keskmise
Mittelineaarsus hüperboolse tangentsi (tanh) või S-kujulise (sigmoid) kujul.
Mitmekihilised närvivõrgud (MLP-d) on lõplikud klassifikaatorid
Hõredad ühendusmaatriksid kihtide vahel väldivad suuri arvutuskulusid

Kokkuvõttes on see võrk paljude hiljutiste arhitektuuride lähtepunkt ja on inspireerinud paljusid selles valdkonnas.

Intervall
Aastatel 1998–2010 oli närvivõrk inkubatsioonifaasis. Enamik inimesi ei tea oma kasvavast jõust, samas kui teised teadlased on selles aeglased. Tänu mobiiltelefonide kaamerate ja odavate digikaamerate tulekule kasutatakse üha rohkem andmeid. Ja arvutusvõimsus kasvab samuti, protsessorid muutuvad kiiremaks ning GPU-d muutuvad arvutustööriistadeks mitmel otstarbel. Need suundumused on võimaldanud närvivõrkudel areneda, kuigi aeglaselt. Andmed ja arvutusvõimsus muudavad närvivõrkude ülesanded järjest huvitavamaks. Pärast seda sai kõik selgeks......

Dan Ciresan Net
2010. aastal avaldasid Dan Claudiu Ciresan ja Jürgen Schmidhuber varasema GPU närvivõrgu rakenduse. See rakendus on 9-kihiline närvivõrk, mis töötab NVIDIA GTX 280 graafikaprotsessoril, sealhulgas edasi- ja tagasilevik.

AlexNet
2012. aastal avaldas Alexet (vt: ImageNeti klassifikatsioon sügavate konvolutsiooniliste närvivõrkudega), mis on LeNeti sügavam ja laiem versioon, mis võitis keerulise ImageNeti võistluse märkimisväärse edumaaga.


AlexNet laiendab LeNeti ideid suurematele närvivõrkudele, mis suudavad õppida palju keerukamaid objekte ja objektitasemeid. Selle töö panused on:

Kasuta muudetud lineaarset ühikut (ReLU) mittelineaarsusena
Kasuta Dropout tehnikat, et treeningu ajal üksikuid neuroneid selektiivselt ignoreerida, et vältida mudeli ülesobitamist
Tühista suur bassein, et vältida keskmist poolingu mõju
Vähenda treeningaega NVIDIA GTX 580 GPU-ga

Sel hetkel suudavad GPU-d pakkuda rohkem tuumasid kui protsessorid ning treeningaega saab suurendada 10 korda, mis omakorda võimaldab suuremaid andmekogumeid ja suuremaid pilte.

AlexNeti edu on viinud väikese revolutsioonini. Konvolutsioonilised närvivõrgud on nüüd süvaõppe selgroog ning neist on saanud sünonüüm "suurtele närvivõrkudele, mis suudavad nüüd lahendada kasulikke ülesandeid."

Overfeat
2013. aasta detsembris pakkus New Yorgi Ülikooli Yann LeCuni labor välja AlexNeti tuletise nimega Overfeat (vt: OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks). See artikkel pakkus välja ka õppimise piiramise kasti, mis viis paljude artikliteni samal teemal. Usun, et parem on õppida objekte jagama kui kunstlikke piiravaid kaste.

VGG
Oxfordi Ülikooli VGG võrk (vt: Very Deep Convolutional Networks for Large-Scale Image Recognition) on esimene võrk, mis kasutab iga konvolutsioonikihi juures väiksemaid 3×3 filtreid ja kombineerib neid, et töödelda neid konvolutsioonijadana.

See tundub olevat vastupidine LeNeti põhimõttele, kus suured konvolutsioonid võimaldavad saada sarnaseid tunnuseid pildil. Erinevalt AlexNeti 9×9 või 11×11 filtritest hakkavad filtrid väiksemaks muutuma, jõudes lähemale kurikuulsale 1×1 konvolutsioonianomaaliale, mida LeNet püüab vältida – vähemalt võrgu esimesel kihil. Siiski on VGG teinud suuri edusamme, kasutades järjestikku mitut 3×3 konvolutsiooni, et jäljendada suuremate vastuvõtuväljade, nagu 5×5 ja 7×7, efekte. Neid ideid on kasutatud ka uuemates võrguarhitektuurides, nagu Inception ja ResNet.


VGG võrgud kasutavad keerukate tunnuste iseloomustamiseks mitut 3×3 konvolutsioonikihti. Pane tähele, et VGG-E 3., 4. ja 5. plokk: 256×256 ja 512×512 3×3 filtrid kasutatakse kordamööda, et eraldada keerukamaid omadusi ja nende kombinatsioone. Efekt on ekvivalentne suure 512×512 klassifikaatoriga, millel on 3 konvolutsioonikihti. See tähendab ilmselgelt, et on palju parameetreid ja õppimisvõimalusi. Kuid neid võrke on raske treenida ja neid tuleb jagada väiksemateks võrkudeks ning koguda kihthaaval. See tuleneb sellest, et mudeli regulaariseerimiseks puudub robustne viis või et otsinguruumi piiramine parameetrite suure hulga tõttu.

VGG kasutab suuri funktsioonide suurusi paljudes kihtides, sest järeldamine võtab käitusajal aega. Nagu Inceptioni pudelikaela puhul, säästab funktsioonide arvu vähendamine mõningaid arvutuskulusid.

Võrk võrgus
Võrgu idee võrgus (NiN, vt artiklit: Võrk võrgus) on lihtne ja suurepärane: 1×1 konvolutsiooni kasutamine, et pakkuda konvolutsioonikihi omadustele rohkem komposiiteeritavaid võimalusi.

NiN arhitektuur kasutab ruumilisi MLP kihte pärast üksikuid konvolutsioone, et paremini ühendada omadusi enne teisi kihte. Jällegi võib arvata, et 1×1 konvolutsioonid on vastuolus LeNeti algse põhimõttega, kuid tegelikult suudavad need konvolutsioonilisi omadusi paremini kombineerida, kui lihtsalt rohkem konvolutsioonilisi tunnuseid kuhjates poleks võimalik. See erineb originaalse piksli kasutamisest järgmise kihi sisendina. 1×1 konvolutsioone kasutatakse sageli funktsioonide kaartide spaatseks kombineerimiseks pärast konvolutsiooni, nii et nad saavad kasutada väga vähe parameetreid ja jagada neid kõigi nende omaduste pikslite vahel!


MLP võime oluliselt suurendada üksikute konvolutsiooniliste tunnuste tõhusust, kombineerides neid keerukamateks rühmadeks. Seda ideed on hiljem kasutatud mõnes hiljutises arhitektuuris, nagu ResNet, Inception ja selle tuletised.

NiN kasutab ka keskmist kogumiskihti lõpliku klassifikaatori osana, mis on samuti tavapärane. Seda tehakse võrgu vastuste keskmistamisega mitmele sisendpildile enne klassifitseerimist.

GoogLeNet ja Inception
Google'i Christian Szegedy alustas oma otsingut vähendada sügavate närvivõrkude arvutuslikku koormust ja kujundas GoogLeNeti, esimese Inceptioni arhitektuuri (vt: Going Deeper with Convolutions).

See oli 2014. aasta sügisel ja süvaõppemudelid muutusid kasulikuks pildi ja video kaadrite klassifitseerimisel. Enamik skeptikuid ei kahtle enam, et süvaõpe ja närvivõrgud on seekord tõesti tagasi ning arenevad edasi. Arvestades nende tehnoloogiate kasulikkust, on internetihiiglased nagu Google väga huvitatud nende arhitektuuride tõhusa ja suuremahulise juurutamisest oma serverites.

Christian mõtles palju sellele, kuidas sügavad närvivõrgud suudavad saavutada kõrget jõudlust, näiteks ImageNetis, samal ajal vähendades arvutuslikku koormust. Või saab teha jõudluse parandusi, tagades samal ajal sama arvutusliku koormuse.

Tema ja tema meeskond töötasid välja Inceptioni mooduli:


Esmapilgul on see põhimõtteliselt paralleelne kombinatsioon 1×1, 3×3, 5×5 konvolutsioonifiltritest. Kuid Inceptioni suurepärane idee on vähendada funktsioonide arvu enne kallite paralleelmoodulite kasutamist, millel on 1×1 konvolutsiooniplokk (NiN). Seda nimetatakse sageli "pudelikaelaks". Seda osa selgitatakse allpool jaotises "kitsaskoha kiht".

GoogLeNet kasutab algkihina selgroogu ilma inception-moodulita, millele järgneb keskmine pooling-kiht pluss softmax-klassifikaatorit, mis sarnaneb NiN-ile. Sellel klassifikaatoril on palju vähem operatsioone kui AlexNeti ja VGG klassifikaatoritel. See viis ka väga tõhusa võrgudisainini, vt artiklit: An Analysis of Deep Neural Network Models for Practical Applications.

Pudelikaela kiht
NiN-ist inspireerituna vähendab Inceptioni kitsaskoha kiht iga kihi funktsioonide arvu ja seega ka operatsioonide arvu; Seega saab järeldusaega hoida madalana. Tunnuste arv väheneb neli korda enne, kui andmed läbivad kallid konvolutsioonimoodulid. See on märkimisväärne kokkuhoid arvutuskulude ja arhitektuuri edu osas.

Kontrollime seda konkreetselt. Nüüd, kui sul on 256 funktsiooni sisendit ja 256 funktsiooniväljundit, oletame, et Inceptioni kiht suudab teha ainult 3×3 konvolutsiooni, mis tähendab kokku 256×256×3×3 konvolutsiooni (peaaegu 589 000 korrutamise ja akumulatsiooni (MAC) operatsiooni). See võib olla meie arvutuseelarvest väljas, näiteks kihti käivitamiseks 0,5 millisekundiga Google'i serverites. Selle asemel otsustasime vähendada keerukate funktsioonide arvu, mis oli 64 (ehk 256/4). Sel juhul alustame konvolutsiooniga 256 -> 64 1×1, seejärel 64 konvolutsiooni kõigil Inceptioni harudel, millele järgneb 1×1 konvolutsioon tunnusest 64 -> 256, ja nüüd on operatsioon järgmine:

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

Võrreldes varasemate 600 000-ga on nüüd kokku 70 000 arvutusmahtu, mis on peaaegu 10 korda vähem.

Ja kuigi tegime paremaid operatsioone, ei kaotanud me selle üldistust sellel kihil. Pudelikaela kiht on osutunud tipptasemel andmekogumites nagu ImageNet ning seda kasutatakse ka arhitektuurides nagu ResNet, mida tutvustame järgmisena.

See on edukas, kuna sisendomadused on omavahel seotud, seega saab redundantsust vähendada, kombineerides neid korrektselt 1×1 konvolutsiooniga. Seejärel, pärast väikese hulga omaduste keerukust, saab neid järgmises kihis taas tähenduslikeks kombinatsioonideks laiendada.

Inception V3 (ja V2)
Christian ja tema meeskond on väga viljakad teadlased. 2015. aasta veebruaris tutvustati partii-normaliseeritud Inceptionit nimega Inception V2 (vt artikkel: Partii normaliseerimine: Accelerating Deep Network Training by Reduction Internal Covariate Shift). Partii normaliseerimine arvutab kõigi ühe kihi väljundi tunnuskaardistuste keskmise ja standardhälve ning kasutab neid väärtusi nende vastuste normaliseerimiseks. See on võrdne andmete "valgendamisega", nii et kõik närvikaardid reageerivad samas vahemikus ja on nullkeskmised. See aitab treenimisel siis, kui järgmine kiht ei pea õppima sisendandmete nihkeid, ning keskendub ka sellele, kuidas neid omadusi paremini kombineerida.

2015. aasta detsembris andis meeskond välja uue versiooni Inception moodulist ja sarnasest arhitektuurist (vt artikkel: Rethinking the Inception Architecture for Computer Vision). Artikkel selgitab paremini algset GoogLeNeti arhitektuuri, andes rohkem detaile disainivalikute kohta. Algne idee on järgmine:

Võrgu hoolika ülesehitamisega tasakaalustatakse sügavus ja laius, et maksimeerida info voogu võrku. Enne iga ühendamist lisa funktsioonide kaardistamine.
Sügavuse suurenedes suureneb ka võrgukihi sügavus või tunnuste arv süsteemselt.
Kasuta iga kihi sügavuse suurendamist, et suurendada tunnuste sidumist enne järgmist kihti.
Kasutades ainult 3×3 konvolutsiooni, saab antud 5×5 ja 7×7 filtrid võimalusel jagada mitmeks 3×3-ks. Vaata allolevat pilti


Selle tulemusena sai uus Inception järgmiseks:


Filtri saab jagada ka konvolutsiooni tasandades keerukamateks mooduliteks:


Inceptioni arvutusi tehes saab Inceptioni moodul vähendada andmete suurust, pakkudes kogumist. See on põhimõtteliselt sarnane lihtsa pooling-kihi paralleelselt käivitamisele konvolutsiooni käivitamisel:


Inception kasutab ka pooling-kihti ja softmaxi lõpliku klassifikaatorina.

ResNet
2015. aasta detsembris toimus uus muudatus, mis langes kokku Inception V3-ga. ResNetil on lihtne idee: toita kahe järjestikuse konvolutsioonilise kihi väljund ja mööda sisend järgmisele kihile (vt artiklit: Deep Residual Learning for Image Recognition).


See on sarnane mõnele varasemale ideele. Aga ResNetis jagatakse need kaks kihti ja rakendatakse suuremas mahus. Kahe kihi järel liikumine on oluline intuitsioon, sest ühe kihi jagamine ei anna rohkem paranemist. Teise kihi läbimist võib pidada väikeseks klassifikaatoriks või võrgu-võrguks.

See on esimene kord, kui võrgukihtide arv ületab 100 ja isegi 1000 kihti saab treenida.

ResNet, millel on palju võrgukihte, hakkab kasutama võrgukihti, mis sarnaneb Inceptioni kitsaskoha kihile:


See kiht töötleb väiksemat arvu omadusi, konvolverdades esmalt väiksema hulga omadusi 1×1 võrra väiksema väljundiga (tavaliselt 1/4 sisendist), seejärel kasutades kihti 3×3 ja lõpuks kihti 1×1. Sarnaselt Inceptioni moodulile tagab see madala arvutusliku intensiivsuse ning pakub rikkalikke funktsioonikombinatsioone.

ResNet kasutab sisenditel suhteliselt lihtsat algkihti: 7×7-mahulist baaskihti kahe basseiniga. Võrdle seda keerukamate ja vähem intuitiivsete Inception V3 ja V4-ga.

ResNet kasutab ka pooling-kihti pluss softmaxi lõpliku klassifikaatorina.

Teisi teadmisi ResNeti kohta ilmub iga päev:

ResNeti võib pidada nii paralleelseks kui ka järjestikuks, käsitledes paljudes moodulites sisendeid ja väljundeid (inoute) paralleelsetena, samal ajal kui iga mooduli väljundid on pidevalt ühendatud.
ResNeti võib käsitleda ka paralleelsete või pidevate moodulite kombinatsioonina (vt artiklit: Jääkvõrgud on suhteliselt madalate võrkude eksponentsiaalsed ansamblid).
On leitud, et ResNet töötab tavaliselt paralleelselt võrguplokkidel kihtidel 20–30. Selle asemel, et voolata pidevalt kogu võrgu pikkuses.
Kui ResNet suunab väljundi tagasi sisendisse nagu RNN, võib võrku pidada bioloogiliselt usaldusväärsemaks ajukoore mudeliks (vt artikkel: Bridging the Gaps Between Residual Learning, Recurrent Neural Networks and Visual Cortex).

Inception V4
Siin on veel üks versioon Inceptionist Christianilt ja tema meeskonnalt, mis on sarnane Inception V3-le:


Inception V4 ühendab ka Inceptioni mooduli ja ResNet mooduli:


Arvan, et arhitektuur ei ole väga lühike, kuid seal on ka vähem läbipaistvaid heuristikaid. Valikuid on raske mõista ja autoritel on raske neid selgitada.

Arvestades võrgu lihtsust, mida on lihtne mõista ja parandada, võib ResNet olla parem.

SqueezeNet
SqueezeNet (vt artikkel: SqueezeNet: AlexNet-taseme täpsus 50x väiksemate parameetritega ja <0,5MB mudelisuurusega) on hiljuti avaldatud arhitektuur, mis töötleb ResNeti ja Inceptioni kontseptsioone uuesti. Parem arhitektuuridisaini võrgumudel on väiksem ja parameetrid ei nõua veel keerukaid tihendusalgoritme.

ENet
Meie meeskond plaanib ühendada kõik hiljuti avalikustatud arhitektuuri omadused, et luua väga tõhus ja madala kaaluga võrk, mis kasutab vähem parameetreid ja arvutusi, et saavutada tipptasemel tulemusi. See võrguarhitektuur kannab nime ENet ja selle kujundas Adam Paszke. Oleme seda juba kasutanud ühe piksli märgistuse ja stseeni resolutsiooni jaoks.

Lisateabe saamiseks ENet'i kohta vaata artiklit ENet: Sügav närvivõrgu arhitektuur reaalajas semantilise segmenteerimise jaoks. ENet on kodeerimise, liitmise ja dekodeerimise võrk. Kodeerija on tavaline CNN-i disain, mida klassifitseerida. Dekooder on ülesproovimise võrk, mis levitab klassifikatsiooni tagasi algsele pildile segmentimiseks. See kasutab ainult närvivõrke ega kasuta muid algoritme pildisegmentimiseks.

ENet on loodud nii, et alguses kasutataks võimalikult vähe ressursse. Seetõttu on sellel nii väike skript, kus kombineeritud kodeerijate ja dekoodrite võrgustik hõivab 0,7 MB ja 16 kaadrit täpsusega. Isegi nii väikese mudeli puhul on ENet sarnane või kõrgem segmenteerimistäpsuse poolest teistest närvivõrkude lahendustest.

Mooduli analüüs
CNN mooduli analüüs, mis on tehtud artiklis (CNN-i edusammude süsteemne hindamine ImageNetis), on väga kasulik:

Kasuta ELU mittelineaarsust ilma batchnormita või ReLU-d batchnormiga.
Kasuta õpitud RGB värviruumi teisendust.
Kasuta lineaarse õppimiskiiruse languse strateegiat.
Kasuta keskmiste ja suuremate kogutud kihtide summat.
Kasuta mini-partii suurust umbes 128 kuni 256. Kui see on GPU jaoks liiga suur, siis lihtsalt skaleeri õppimiskiirus selle suuruseni.
Kasuta täielikult ühendatud kihti konvolutsioonina ja keskmistame kõik ennustused lõpliku ennustuse tegemiseks.
Kui uuring suurendab treeningkomplekti suurust, tuvastab see, kas on platoo, mida pole saavutatud
Andmete puhtus on olulisem kui andmete suurus.
Kui sa ei saa sisendpildi suurust suurendada, vähenda sammu järgmistel kihtidel, see annab sama efekti.
Kui teie võrgul on keerukas ja väga optimeeritud arhitektuur, nagu GoogLeNet, peate selle muutmisel ettevaatlik olema.

Teised arhitektuurid, millele tasub tähelepanu pöörata
FractalNet (vt artiklit: FractalNet: Ultra-Deep Neural Networks without Residuals) kasutab rekursiivset arhitektuuri, mida ImageNetis ei testita. See arhitektuur on ResNeti või üldisemalt ResNeti tuletis.

tulevik
Usume, et närvivõrgu arhitektuuri loomine on süvaõppe arendamisel esmatähtis. Meie meeskond soovitab tungivalt hoolikalt lugeda ja mõista artiklis mainitud artikleid.

Aga võib imestada, miks me kulutame nii palju aega arhitektuuride loomisele? Miks mitte öelda, mida andmetega kasutada? Kuidas mooduleid kombineerida? Need küsimused on head, kuid veel uurimisel ning on olemas artikkel, millele viidata: Närvivõrgud diferentseeruva struktuuriga.

Pane tähele, et enamik arhitektuure, millest selles artiklis rääkisime, on seotud arvutinägemisega. Sarnaseid närvivõrkude arhitektuure on välja töötatud ka teistes valdkondades ning on väga huvitav õppida arhitektuurilisi muutusi kõigis teistes ülesannetes.

Kui sind huvitab närvivõrgu arhitektuuri ja arvutusliku jõudluse võrdlemine, vaata artiklit: Sügavate närvivõrkude mudelite analüüs praktilisteks rakendusteks.







Eelmine:Mitmed Python'i täitmisaja arvutamise meetodid
Järgmine:Antminer B3 ütleb, mida kaevata!
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com