|
|
Paskelbta 2018-04-24 13:08:47
|
|
|
|

LeNet5 LeNet5 gimė 1994 m. ir yra vienas pirmųjų konvoliucinių neuroninių tinklų ir patobulino gilaus mokymosi sritį. Nuo 1988 m., po daugelio sėkmingų iteracijų, šis novatoriškas Yann LeCun darbas buvo pavadintas LeNet5 (žr.: Gradientu pagrįstas mokymasis taikomas dokumentų atpažinimui).
LeNet5 architektūra pagrįsta idėja, kad (ypač) vaizdo ypatybės yra paskirstytos visame vaizde, o konvoliucija su išmokstamais parametrais yra efektyvus būdas išgauti panašias savybes keliose vietose su nedideliu parametrų skaičiumi. Tuo metu nebuvo GPU, kuris padėtų treniruotis, ir net procesorius buvo lėtas. Todėl galimybė išsaugoti parametrus ir skaičiavimo procesas yra pagrindinis pokytis. Tai yra priešingybė kiekvieno pikselio naudojimui kaip atskiram įėjimui į didelį, daugiasluoksnį neuroninį tinklą. LeNet5 paaiškina, kad šie pikseliai neturėtų būti naudojami pirmajame sluoksnyje, nes vaizdas turi stiprias erdvines koreliacijas, kurių negalima išnaudoti naudojant nepriklausomus pikselius vaizde kaip skirtingas įvesties funkcijas.
LeNet5 funkcijas galima apibendrinti taip:
Konvoliuciniai neuroniniai tinklai naudoja 3 sluoksnius kaip seką: konvoliucinis, sutelktas, netiesinis → Tai tikriausiai yra pagrindinis vaizdo gilaus mokymosi bruožas nuo šio straipsnio! Naudokite konvoliucijas erdviniams elementams išgauti Dalinė imtis naudojant susiejimą su erdviniu vidurkiu Netiesiškumas hiperbolinio tangento (tanh) arba S formos (sigmoid) pavidalu. Daugiasluoksniai neuroniniai tinklai (MLP) yra galutiniai klasifikatoriai Retos jungties matricos tarp sluoksnių išvengia didelių skaičiavimo išlaidų
Apskritai šis tinklas yra daugelio naujausių architektūrų atspirties taškas ir įkvėpė daugelį šios erdvės atstovų.
Intervalas Nuo 1998 iki 2010 m. neuroninis tinklas buvo inkubacinėje stadijoje. Dauguma žmonių nežino apie jų augančią galią, o kiti tyrėjai tai daro lėtai. Atsiradus mobiliųjų telefonų kameroms ir nebrangiems skaitmeniniams fotoaparatams, išnaudojama vis daugiau duomenų. Skaičiavimo galia taip pat auga, procesoriai tampa greitesni, o GPU tampa skaičiavimo įrankiais įvairiems tikslams. Šios tendencijos leido neuroniniams tinklams progresuoti, nors ir lėtai. Duomenys ir skaičiavimo galia daro užduotis, kurias neuroniniai tinklai gali atlikti, vis įdomesnes. Po to viskas tapo aišku......
Dan Ciresan tinklas 2010 m. Dan Claudiu Ciresan ir Jurgen Schmidhuber paskelbė ankstyviausio GPU neuroninio tinklo įgyvendinimą. Šis įgyvendinimas yra 9 sluoksnių neuroninis tinklas, veikiantis NVIDIA GTX 280 grafikos procesoriuje, įskaitant pirmyn ir atgal.
AlexNet 2012 m. Alexas Krizhevsky išleido "Alexet" (žr.: "ImageNet Classification with Deep Convolutional Neural Networks"), gilesnę ir platesnę "LeNet" versiją, kuri laimėjo sudėtingą "ImageNet" konkursą reikšmingu skirtumu.
AlexNet išplečia LeNet idėjas didesniems neuroniniams tinklams, kurie gali mokytis daug sudėtingesnių objektų ir objektų lygių. Šio darbo indėlis yra:
Naudokite modifikuotą linijinį vienetą (ReLU) kaip netiesiškumą Naudokite "Dropout" techniką, kad treniruotės metu selektyviai ignoruotumėte atskirus neuronus, kad išvengtumėte modelio pertekliaus Nepaisykite didelio telkinio, kad išvengtumėte vidutinio telkimo efekto Sutrumpinkite treniruočių laiką naudodami NVIDIA GTX 580 GPU
Tuo metu GPU gali suteikti didesnį branduolių skaičių nei procesoriai, o mokymo laiką galima pailginti 10 kartų, o tai savo ruožtu leidžia gauti didesnius duomenų rinkinius ir didesnius vaizdus.
"AlexNet" sėkmė sukėlė nedidelę revoliuciją. Konvoliuciniai neuroniniai tinklai dabar yra gilaus mokymosi pagrindas ir tapo "didelių neuroninių tinklų, kurie dabar gali išspręsti naudingas užduotis" sinonimu.
Overfeat 2013 m. gruodį Niujorko universiteto Yann LeCun laboratorija pasiūlė AlexNet darinį "Overfeat" (žr.: OverFeat: integruotas atpažinimas, lokalizacija ir aptikimas naudojant konvoliucinius tinklus). Šiame straipsnyje taip pat buvo pasiūlyta mokymosi ribojimo dėžutė, kuri paskatino daug straipsnių ta pačia tema. Manau, kad geriau išmokti skaidyti objektus, nei išmokti dirbtinius ribojančius langelius.
VGG Oksfordo universiteto VGG tinklas (žr.: Very Deep Convolutional Networks for Large-Scale Image Recognition) yra pirmasis tinklas, kuris naudoja mažesnius 3×3 filtrus kiekviename konvoliuciniame sluoksnyje ir sujungia juos, kad apdorotų juos kaip konvoliucinę seką.
Atrodo, kad tai yra priešingybė LeNet principui, kai didelės konvoliucijos naudojamos panašioms vaizdo savybėms gauti. Skirtingai nuo "AlexNet" 9×9 ar 11×11 filtrų, filtrai pradeda mažėti, priartėdami prie liūdnai pagarsėjusios 1×1 konvoliucijos anomalijos, kurios "LeNet" bando išvengti – bent jau pirmajame tinklo sluoksnyje. Tačiau VGG padarė didelę pažangą, naudodamas kelias 3×3 konvoliucijas iš eilės, kad imituotų didesnių imlių laukų, tokių kaip 5×5 ir 7×7, poveikį. Šios idėjos taip pat buvo naudojamos naujesnėse tinklo architektūrose, tokiose kaip "Inception" ir "ResNet".
VGG tinklai naudoja kelis 3×3 konvoliucinius sluoksnius, kad apibūdintų sudėtingas savybes. Atkreipkite dėmesį, kad 3, 4, 5 VGG-E blokai: 256×256 ir 512×512 3×3 filtrai naudojami kelis kartus paeiliui, siekiant išgauti sudėtingesnes šių funkcijų savybes ir derinius. Efektas prilygsta dideliam 512×512 klasifikatoriui su 3 konvoliuciniais sluoksniais. Tai akivaizdžiai reiškia, kad yra daug parametrų ir mokymosi galimybių. Tačiau šiuos tinklus sunku treniruoti, todėl juos reikia suskirstyti į mažesnius tinklus ir kaupti sluoksnis po sluoksnio. Taip yra dėl to, kad trūksta patikimo būdo sureguliuoti modelį arba daugiau ar mažiau apriboti didelę paieškos erdvę dėl didelio parametrų skaičiaus.
VGG naudoja didelius funkcijų dydžius daugelyje sluoksnių, nes išvados užima daug laiko. Kaip ir "Inception" kliūtis, sumažinus funkcijų skaičių sutaupysite tam tikrų skaičiavimo išlaidų.
Tinklas tinkle Network in Network (NiN, žr. dokumentą: Network In Network) idėja yra paprasta ir puiki: 1×1 konvoliucijos naudojimas siekiant suteikti daugiau komponuojamų galimybių konvoliucinio sluoksnio ypatybėms.
NiN architektūra naudoja erdvinius MLP sluoksnius po atskirų konvoliucijų, kad geriau sujungtų funkcijas prieš kitus sluoksnius. Vėlgi, galite manyti, kad 1×1 konvoliucijos prieštarauja pradiniam LeNet principui, tačiau iš tikrųjų jos gali sujungti konvoliucines savybes geriau nei neįmanoma tiesiog sukraunant daugiau konvoliucinių savybių. Tai skiriasi nuo pradinio pikselio naudojimo kaip kito sluoksnio įvesties. 1×1 konvoliucijos dažnai naudojamos norint sujungti funkcijas funkcijų žemėlapiuose po konvoliucijos, todėl jie iš tikrųjų gali naudoti labai mažai parametrų ir dalytis jais visuose šių funkcijų pikseliuose!
MLP gebėjimas labai padidinti atskirų konvoliucinių savybių efektyvumą, sujungiant juos į sudėtingesnes grupes. Nuo to laiko ši idėja buvo naudojama kai kuriose naujausiose architektūrose, tokiose kaip "ResNet", "Inception" ir jos dariniai.
NiN taip pat naudoja vidutinį telkimo sluoksnį kaip galutinio klasifikatoriaus dalį – dar viena praktika, kuri taps įprasta. Tai daroma prieš klasifikuojant tinklo atsakymų į kelis įvesties vaizdus vidurkį.
GoogLeNet ir pradžia Christian Szegedy iš "Google" pradėjo savo siekį sumažinti giliųjų neuroninių tinklų skaičiavimo išlaidas ir sukūrė "GoogLeNet", pirmąją "Inception" architektūrą (žr.
Tai buvo 2014 m. rudenį, o gilaus mokymosi modeliai tapo naudingi klasifikuojant vaizdą ir vaizdo kadrus. Dauguma skeptikų nebeabejoja, kad gilusis mokymasis ir neuroniniai tinklai šį kartą tikrai sugrįžo ir toliau vystysis. Atsižvelgiant į šių technologijų naudingumą, interneto milžinai, tokie kaip "Google", yra labai suinteresuoti efektyviai ir dideliu mastu įdiegti šias architektūras savo serveriuose.
Christian daug galvojo apie tai, kaip gilieji neuroniniai tinklai gali pasiekti aukštą našumo lygį, pavyzdžiui, "ImageNet", tuo pačiu sumažindami jų skaičiavimo išlaidas. Arba galima pagerinti našumą užtikrinant tas pačias skaičiavimo išlaidas.
Jis ir jo komanda sugalvojo "Inception" modulį:
Iš pirmo žvilgsnio tai iš esmės yra lygiagretus 1×1, 3×3, 5×5 konvoliucinių filtrų derinys. Tačiau puiki "Inception" idėja yra sumažinti funkcijų skaičių prieš brangius lygiagrečius modulius su 1×1 konvoliuciniais blokais (NiN). Tai paprastai vadinama "kliūtimi". Šis skyrius bus paaiškintas toliau esančiame skyriuje "Kliūčių sluoksnis".
GoogLeNet naudoja stuburą be pradinio modulio kaip pradinį sluoksnį, po kurio seka vidutinis telkimo sluoksnis ir softmax klasifikatorius, panašus į NiN. Šis klasifikatorius turi daug mažesnį operacijų skaičių nei AlexNet ir VGG klasifikatoriai. Tai taip pat lėmė labai efektyvų tinklo projektavimą, žr.
Butelio kaklelio sluoksnis Įkvėptas NiN, "Inception" kliūčių sluoksnis sumažina kiekvieno sluoksnio funkcijų skaičių, taigi ir operacijų skaičių; Taigi išvadų laikas gali būti trumpas. Funkcijų skaičius sumažėja 4 kartus, kol duomenys perduodami per brangius konvoliucinius modulius. Tai yra reikšmingas skaičiavimo išlaidų sutaupymas ir architektūros sėkmė.
Patikrinkime tai konkrečiai. Dabar, kai turite 256 funkcijų įvestis ir 256 funkcijų išvestis, tarkime, kad pradžios sluoksnis gali atlikti tik 3×3 konvoliucijas, o tai reiškia, kad iš viso 256×256×3×3 konvoliucijos (beveik 589 000 daugybos ir kaupimo (MAC) operacijų). Tai gali viršyti mūsų skaičiavimo biudžetą, tarkime, paleisti sluoksnį per 0,5 milisekundės "Google" serveriuose. Vietoj to, mes nusprendėme sumažinti funkcijų, kurias reikėjo susukti, skaičių, kuris buvo 64 (ty 256/4). Šiuo atveju pradedame nuo 256 -> 64 1×1 konvoliucijos, tada 64 konvoliucijos visose pradžios šakose, po to 1×1 konvoliucija iš 64 -> 256 funkcijos, o dabar operacija yra tokia:
256×64 × 1×1 = 16 000 s 64×64 × 3×3 = 36 000 s 64×256 × 1×1 = 16 000 s
Palyginti su ankstesniais 600 000, dabar iš viso yra 70 000 skaičiavimo tomų, o tai yra beveik 10 kartų mažiau.
Ir nors mes atlikome geresnes operacijas, šiame lygmenyje nepraradome jo bendrumo. Kliūčių sluoksnis pasirodė esąs aukščiausios klasės tokiuose duomenų rinkiniuose kaip "ImageNet", taip pat naudojamas tokiose architektūrose kaip "ResNet", kurią pristatysime toliau.
Tai sėkminga, nes įvesties funkcijos yra susijusios, todėl dubliavimą galima sumažinti tinkamai derinant jas su 1×1 konvoliucija. Tada, kai nedaug funkcijų yra susuktos, jas vėl galima išplėsti į prasmingas kombinacijas kitame sluoksnyje.
Pradžia V3 (ir V2) Christianas ir jo komanda yra labai produktyvūs tyrėjai. 2015 m. vasario mėn. "Partch-normalized Inception" buvo pristatytas kaip "Inception V2" (žr. dokumentą: "Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift"). Paketinis normalizavimas apskaičiuoja visų funkcijų žemėlapių vidurkį ir standartinį nuokrypį vieno sluoksnio išvestyje ir naudoja šias reikšmes jų atsakymams normalizuoti. Tai prilygsta duomenų "balinimui", kad visi neuroniniai žemėlapiai reaguotų tame pačiame diapazone ir būtų nulinis. Tai padeda treniruotis, kai kitam sluoksniui nereikia mokytis iš įvesties duomenų, taip pat sutelkiamas dėmesys į tai, kaip geriau derinti šias funkcijas.
2015 m. gruodį komanda išleido naują "Inception" modulio versiją ir panašią architektūrą (žr. dokumentą: "Rethinking the Inception Architecture for Computer Vision"). Straipsnyje geriau paaiškinama originali "GoogLeNet" architektūra, pateikiant daugiau informacijos apie dizaino pasirinkimus. Pradinė idėja yra tokia:
Kruopščiai kuriant tinklą, gylis ir plotis yra subalansuoti, kad būtų maksimaliai padidintas informacijos srautas į tinklą. Prieš kiekvieną telkimą įtraukite funkcijų susiejimą. Didėjant gyliui, sistemingai didėja ir tinklo sluoksnio gylis arba funkcijų skaičius. Naudokite kiekvieno sluoksnio gylio padidinimą, kad padidintumėte elementų surišimą prieš kitą sluoksnį. Naudojant tik 3×3 konvoliucijas, tam tikrus 5×5 ir 7×7 filtrus, kai įmanoma, galima padalyti į kelis 3×3. Pažvelkite į žemiau esantį paveikslėlį
Dėl to naujasis "Inception" tapo:
Taip pat galite padalyti filtrą, išlygindami konvoliuciją į sudėtingesnius modulius:
Atlikdamas įžanginius skaičiavimus, "Inception" modulis taip pat gali sumažinti duomenų dydį teikdamas telkimą. Tai iš esmės panašu į paprasto telkimo sluoksnio paleidimą lygiagrečiai vykdant konvoliuciją:
"Inception" taip pat naudoja kaupiamąjį sluoksnį ir "softmax" kaip galutinį klasifikatorių.
ResNet 2015 m. gruodį įvyko naujas pakeitimas, kuris sutapo su "Inception V3". ResNet turi paprastą idėją: tiekti dviejų iš eilės konvoliucinių sluoksnių išvestį ir apeiti įvestį į kitą sluoksnį (žr. dokumentą: Deep Residual Learning for Image Recognition).
Tai panašu į kai kurias senas idėjas anksčiau. Tačiau "ResNet" jie padalija du sluoksnius ir yra taikomi didesniu mastu. Žingsnis po 2 sluoksnių yra pagrindinė intuicija, nes vieno sluoksnio padalijimas nesuteikia daugiau patobulinimo. Perėjimas per 2 sluoksnį gali būti laikomas mažu klasifikatoriumi arba tinklu tinkle.
Tai pirmas kartas, kai tinklo sluoksnių skaičius viršija 100, ir net 1000 sluoksnių galima išmokyti.
"ResNet", turinti daug tinklo sluoksnių, pradeda naudoti tinklo sluoksnį, panašų į "Inception" kliūčių sluoksnį:
Šis sluoksnis apdoroja mažesnį funkcijų skaičių, iš pradžių susukdamas mažesnį funkcijų skaičių 1×1 su mažesne išvestimi (paprastai 1/4 įvesties), tada naudodamas 3×3 sluoksnį, o tada 1×1 sluoksnį. Panašiai kaip ir "Inception" modulis, tai užtikrina mažą skaičiavimo intensyvumą ir suteikia daug funkcijų derinių.
"ResNet" naudoja gana paprastą pradinį įvesties sluoksnį: 7×7 tūrio pagrindinį sluoksnį su dviem baseinais. Palyginkite tai su sudėtingesniais ir mažiau intuityviais Inception V3 ir V4.
ResNet taip pat naudoja pooling sluoksnį ir softmax kaip galutinį klasifikatorių.
Kitos įžvalgos apie "ResNet" vyksta kiekvieną dieną:
"ResNet" gali būti laikomas lygiagrečiu ir gretimu, daugelyje modulių įėjimus ir išėjimus (įėjimus) traktuojant kaip lygiagrečius, o kiekvieno modulio išėjimai yra nuolat sujungti. ResNet taip pat gali būti laikomas lygiagrečių arba ištisinių modulių deriniu (žr. dokumentą: Liekamieji tinklai yra eksponentiniai santykinai seklių tinklų ansambliai). Nustatyta, kad "ResNet" paprastai veikia lygiagrečiai tinklo blokuose 20–30 sluoksniuose. Užuot nuolat tekėję per visą tinklo ilgį. Kai ResNet perduoda išvestį atgal į įvestį kaip RNN, tinklas gali būti laikomas biologiškai patikimesniu žievės modeliu (žr. dokumentą: Bridging the Gaps Between Residual Learning, Recurrent Neural Networks and Visual Cortex).
Pradžia V4 Štai dar viena Christiano ir jo komandos "Inception" versija, panaši į "Inception V3":
"Inception V4" taip pat sujungia "Inception" ir "ResNet" modulius:
Manau, kad architektūra nėra labai glausta, bet joje taip pat gausu mažiau skaidrios euristikos. Sunku suprasti joje esančius pasirinkimus, o autoriams sunku paaiškinti.
Atsižvelgiant į tinklo paprastumą, kurį galima lengvai suprasti ir ištaisyti, "ResNet" gali būti geresnis.
Išspausti tinklą "SqueezeNet" (žr. dokumentą: "SqueezeNet": "AlexNet" lygio tikslumas su 50 kartų mažiau parametrų ir <0,5 MB modelio dydžio) yra neseniai paskelbta architektūra, kuri iš naujo apdoroja "ResNet" ir "Inception" sąvokas. Geresnės architektūros projektavimo tinklo modelis yra mažesnis, o parametrams dar nereikia sudėtingų glaudinimo algoritmų.
LTet Mūsų komanda planuoja sujungti visas neseniai atskleistos architektūros savybes, kad sukurtų labai efektyvų, mažo svorio tinklą, kuriame naudojama mažiau parametrų ir skaičiavimų, kad būtų pasiekti aukščiausio lygio rezultatai. Ši tinklo architektūra vadinama ENet ir ją sukūrė Adamas Paszke. Mes jau naudojome jį vieno pikselio žymėjimui ir scenos raiškai.
Daugiau informacijos apie ENet rasite straipsnyje ENet: A Deep Neural Network Architecture for Real-Time Semantic Segmentation. ENet yra kodavimo, pridėjimo ir dekodavimo tinklas. Kodavimo įrenginys yra įprastas CNN dizainas, kurį reikia klasifikuoti. Dekoderis yra atrankos didinimo tinklas, kuris platina klasifikaciją atgal į pradinį vaizdą, kad būtų galima segmentuoti. Tam naudojami tik neuroniniai tinklai ir jokie kiti vaizdo segmentavimo algoritmai.
ENet sukurta taip, kad pradžioje būtų naudojama kuo mažiau išteklių. Štai kodėl jis turi tokį mažą scenarijų, o bendras kodavimo ir dekoderių tinklas užima 0,7 MB su 16 kadrų per sekundę tikslumu. Net ir naudojant tokį mažą modelį, ENet segmentavimo tikslumu yra panašus arba aukštesnis nei kiti neuroninių tinklų sprendimai.
Modulio analizė CNN modulio analizė, kuri buvo atlikta straipsnyje (Sisteminis CNN pažangos vertinimas ImageNet), yra labai naudinga:
Naudokite ELU netiesiškumą be batchnorm arba ReLU su batchnorm. Naudokite išmoktą RGB spalvų erdvės transformaciją. Naudokite linijinę mokymosi greičio mažinimo strategiją. Naudokite vidutinių ir didesnių sutelktų sluoksnių sumą. Naudokite maždaug nuo 128 iki 256 mažų partijų. Jei tai per didelis jūsų GPU, tiesiog sumažinkite mokymosi greitį iki tokio dydžio. Naudokite visiškai sujungtą sluoksnį kaip konvoliuciją ir visų prognozių vidurkį, kad galėtumėte atlikti galutinę prognozę. Kai tyrimas padidina treniruočių rinkinio dydį, jis nustato, ar nėra plokščiakalnio, kuris nėra pasiektas Duomenų švara yra svarbesnė už duomenų dydį. Jei negalite padidinti įvesties vaizdo dydžio, sumažinkite žingsnį kituose sluoksniuose, tai turės tą patį efektą. Jei jūsų tinklas turi sudėtingą ir labai optimizuotą architektūrą, pvz., "GoogLeNet", turite būti atsargūs jį modifikuodami.
Kitos architektūros, į kurias verta atkreipti dėmesį FractalNet (žr. dokumentą: FractalNet: Ultra-Deep Neural Networks without Residuals) naudoja rekursinę architektūrą, kuri nėra išbandyta ImageNet. Ši architektūra yra "ResNet" arba apskritai "ResNet" darinys.
ateitis Manome, kad neuroninių tinklų architektūros kūrimas yra pagrindinis gilaus mokymosi plėtros prioritetas. Mūsų komanda labai rekomenduoja atidžiai perskaityti ir suprasti straipsnyje paminėtus straipsnius.
Tačiau gali kilti klausimas, kodėl mes praleidžiame tiek daug laiko kurdami architektūrą? Kodėl mums nenurodžius, ką naudoti su duomenimis? Kaip derinate modulius? Šie klausimai yra geri, bet vis dar tiriami, ir yra straipsnis, kuriuo galima remtis: Neuroniniai tinklai su diferencijuota struktūra.
Atkreipkite dėmesį, kad dauguma architektūrų, apie kurias kalbėjome šiame straipsnyje, yra susijusios su kompiuterine rega. Panašios neuroninių tinklų architektūros buvo sukurtos ir kitose srityse, todėl labai įdomu sužinoti apie architektūrinius pokyčius atliekant visas kitas užduotis.
Jei jus domina neuroninių tinklų architektūros ir skaičiavimo našumo palyginimas, skaitykite dokumentą: Giliųjų neuroninių tinklų modelių analizė praktiniam pritaikymui.
|
Ankstesnis:Keli Python vykdymo laiko skaičiavimo metodaiKitą:Antminer B3 pasako, ką kasti!
|