|
|
Julkaistu 24.4.2018 13.08.47
|
|
|
|

LeNet5 LeNet5 syntyi vuonna 1994 ja on yksi ensimmäisistä konvoluutioneuroverkoista, joka on edistänyt syväoppimisen alaa. Vuodesta 1988 lähtien, monien onnistuneiden iteraatioiden jälkeen, tämä Yann LeCunin uraauurtava työ on nimetty LeNet5:ksi (ks. Gradient-Based Learning Applied to Document Recognition).
LeNet5:n arkkitehtuuri perustuu ajatukseen, että (erityisesti) kuvan ominaisuudet jakautuvat koko kuvaan, ja että opittavien parametrien konvoluutio on tehokas tapa poimia samankaltaisia piirteitä useista paikoista pienellä parametrimäärällä. Tuolloin ei ollut GPU:ta koulutuksen avuksi, ja jopa prosessori oli hidas. Siksi kyky tallentaa parametreja sekä laskentaprosessi on keskeinen kehitysaskel. Tämä on päinvastaista kuin käyttää jokaista pikseliä erillisenä syötteenä suurelle, monikerroksiselle neuroverkolle. LeNet5 selittää, että näitä pikseleitä ei tulisi käyttää ensimmäisessä kerroksessa, koska kuvalla on vahvat avaruudelliset korrelaatiot, joita ei voi hyödyntää käyttämällä kuvan itsenäisiä pikseleitä eri syöttöominaisuuksina.
LeNet5:n ominaisuudet voidaan tiivistää seuraavasti:
Konvoluutioneuroverkot käyttävät kolmea kerrosta sarjana: konvoluutio, poolattu, epälineaarinen → Tämä on todennäköisesti keskeinen piirre kuvan syväoppimisessa tämän artikkelin jälkeen! Käytä konvoluutioita avaruudellisten piirteiden poimimiseen Alinäyte kuvaamalla spatiaaliseen keskiarvoon Epälineaarisuus hyperbolisena tangenttina (tanh) tai S-muotoisena (sigmoidina). Monikerroksiset neuroverkot (MLP:t) toimivat lopullisina luokittelijoina Harvat yhteysmatriisit kerrosten välillä välttävät suuria laskentakustannuksia
Kaiken kaikkiaan tämä verkosto on lähtökohta monille viimeaikaisille arkkitehtuureille ja on inspiroinut monia tässä tilassa.
Väliaika Vuosina 1998–2010 neuroverkko oli inkubaatiovaiheessa. Useimmat ihmiset eivät tiedä kasvavasta voimastaan, kun taas toiset tutkijat ovat hitaita siinä. Matkapuhelinkameroiden ja edullisten digikameroiden myötä yhä enemmän dataa hyödynnetään. Myös laskentateho kasvaa, suorittimet nopeutuvat ja GPU:t ovat monikäyttöisiä laskentatyökaluja. Nämä trendit ovat mahdollistaneet neuroverkkojen kehityksen, vaikkakin hitaasti. Data ja laskentateho tekevät neuroverkkojen tehtävistä yhä mielenkiintoisempia. Sen jälkeen kaikki selvisi......
Dan Ciresan Net Vuonna 2010 Dan Claudiu Ciresan ja Jurgen Schmidhuber julkaisivat toteutuksen varhaisimmasta GPU-neuroverkosta. Tämä toteutus on yhdeksänkerroksinen neuroverkko, joka toimii NVIDIA GTX 280 -grafiikkaprosessorilla, sisältäen eteenpäin- ja takaisinetenemisen.
AlexNet Vuonna 2012 Alex Krizhevsky julkaisi teoksen Alexet (ks. ImageNet Classification with Deep Convolutional Neural Networks), joka on syvempi ja laajempi versio LeNetistä, joka voitti vaikean ImageNet-kilpailun selvästi.
AlexNet laajentaa LeNetin ideoita suurempiin neuroverkkoihin, jotka voivat oppia paljon monimutkaisempia objekteja ja objektin tasoja. Tämän työn panokset ovat:
Käytä muokattua lineaarista yksikköä (ReLU) epälineaarisuutena Käytä Dropout-tekniikkaa yksittäisten neuronien valikoivaan ohittamiseen koulutuksen aikana mallin ylisovituksen välttämiseksi Ohita suuri allas välttääksesi keskimääräisen poolauksen vaikutuksen Vähennä koulutusaikaa NVIDIA GTX 580 -näytönohjaimella
Tässä vaiheessa GPU:t voivat tarjota suuremman määrän ytimiä kuin suorittimet, ja koulutusaikaa voidaan pidentää kymmenkertaiseksi, mikä puolestaan mahdollistaa suuremmat aineistot ja suuremmat kuvat.
AlexNetin menestys on johtanut pieneen vallankumoukseen. Konvoluutioneuroverkot ovat nyt syväoppimisen selkäranka, ja niistä on tullut synonyymi "suurille neuroverkoille, jotka nyt pystyvät ratkaisemaan hyödyllisiä tehtäviä."
Overfeat Joulukuussa 2013 New Yorkin yliopiston Yann LeCunin laboratorio ehdotti AlexNetin johdannaista, Overfeatia (ks. OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks). Tässä artikkelissa ehdotettiin myös oppimisen rajauslaatikkoa, mikä johti moniin artikkeleihin samasta aiheesta. Uskon, että on parempi oppia jakamaan objekteja kuin keinotekoisia rajoittavia laatikoita.
VGG Oxfordin yliopiston VGG-verkko (ks. Very Deep Convolutional Networks for Large-Scale Image Recognition) on ensimmäinen verkko, joka käyttää pienempiä 3×3-suodattimia jokaisessa konvoluutiokerroksessa ja yhdistää ne konvoluutiosekvenssiksi.
Tämä vaikuttaa olevan päinvastainen kuin LeNetin periaatteen, jossa suuria konvoluutioita käytetään samankaltaisten ominaisuuksien saamiseksi kuvassa. Toisin kuin AlexNetin 9×9- tai 11×11-suodattimet, suodattimet alkavat pienentyä, lähestyen kuuluisaa 1×1-konvoluutioanomaliaa, jota LeNet yrittää välttää – ainakin verkon ensimmäisellä tasolla. VGG on kuitenkin edistynyt merkittävästi käyttämällä useita peräkkäisiä 3×3-konvoluutioita jäljitelläkseen suurempien vastaanottokenttien, kuten 5×5:n ja 7×7:n, vaikutuksia. Näitä ideoita on käytetty myös uudemmissa verkkoarkkitehtuureissa, kuten Inceptionissa ja ResNetissä.
VGG-verkot käyttävät useita 3×3 konvoluutiokerroksia monimutkaisten ominaisuuksien karakterisointiin. Huomaa, että VGG-E:n 3., 4., 5. lohkoja: 256×256 ja 512×512 3×3-suodattimia käytetään useita kertoja monimutkaisempien ominaisuuksien ja näiden yhdistelmien poimimiseen. Vaikutus vastaa suurta 512×512-luokitinta, jossa on kolme konvoluutiokerrosta. Tämä tarkoittaa tietenkin, että on paljon parametreja ja oppimiskykyjä. Mutta näitä verkostoja on vaikea kouluttaa, ja ne täytyy jakaa pienempiin verkoihin sekä kertyä kerros kerrokselta. Tämä johtuu siitä, ettei mallia voida säännöllistää luotettavasti tai että hakutilaa rajoitetaan suurten parametrien määrän vuoksi.
VGG käyttää suuria ominaisuuksien kokoja monissa kerroksissa, koska päättely vie aikaa ajonaikaisesti. Kuten Inceptionin pullonkaulan kohdalla, ominaisuuksien määrän vähentäminen säästää laskentakustannuksia.
Verkko verkossa Ajatus Network in Networkista (NiN, ks. artikkeli: Network In Network) on yksinkertainen ja erinomainen: 1×1-konvoluution käyttö konvoluutiokerroksen ominaisuuksien koottavien ominaisuuksien tarjoamiseksi.
NiN-arkkitehtuuri käyttää avaruudellisia MLP-kerroksia yksittäisten konvoluutioiden jälkeen yhdistääkseen ominaisuuksia paremmin ennen muita kerroksia. Voi jälleen ajatella, että 1×1-konvoluutiot ovat ristiriidassa LeNetin alkuperäisen periaatteen kanssa, mutta todellisuudessa ne voivat yhdistää konvoluutiopiirteitä paremmin kuin ei olisi mahdollista yksinkertaisesti pinoamalla lisää konvoluutiopiirteitä. Tämä eroaa alkuperäisen pikselin käyttämisestä seuraavana kerroksen syötteenä. 1×1-konvoluutioita käytetään usein yhdistämään piirteitä ominaisuuskartoissa konvoluution jälkeen, joten ne voivat käyttää hyvin vähän parametreja ja jakaa ne kaikkien näiden ominaisuuksien pikselien kesken!
MLP:n kyky merkittävästi lisätä yksittäisten konvoluutiopiirteiden tehokkuutta yhdistämällä ne monimutkaisempiin ryhmiin. Tätä ideaa on sittemmin käytetty joissakin viimeaikaisissa arkkitehtuureissa, kuten ResNetissä, Inceptionissa ja niiden johdannaisissa.
NiN käyttää myös keskimääräistä pooling-kerrosta osana lopullista luokittelua, mikä on toinen käytäntö, josta tulee yleistä. Tämä tehdään keskiarvottamalla verkon vasteita useille syötekuville ennen luokittelua.
GoogLeNet ja Inception Christian Szegedy Googlesta aloitti pyrkimyksensä vähentää syvien neuroverkkojen laskennallista kuormitusta ja suunnitteli GoogLeNetin, ensimmäisen Inception-arkkitehtuurin (ks. Syvemmälle menossa konvoluutioilla).
Oli syksy 2014, ja syväoppimismallit alkoivat olla hyödyllisiä kuvan ja videon kehysten luokittelussa. Useimmat skeptikot eivät enää epäile, etteivätkö syväoppiminen ja neuroverkot olisi tällä kertaa palanneet ja kehittyvät edelleen. Näiden teknologioiden hyödyllisyyden vuoksi internet-jätit kuten Google ovat erittäin kiinnostuneita toteuttamaan nämä arkkitehtuurit tehokkaasti ja laajassa mittakaavassa palvelimillaan.
Christian pohti paljon, miten syvät neuroverkot voivat saavuttaa korkean suorituskyvyn, kuten ImageNetissä, samalla kun niiden laskentakuorma pienenee. Tai suorituskyvyn parannuksia voidaan tehdä samalla kun laskentallinen ylikuorma on sama.
Hän ja hänen tiiminsä kehittivät Inception-moduulin:
Ensisilmäyksellä tämä on käytännössä rinnakkainen yhdistelmä 1×1, 3×3, 5×5 konvoluutiosuodattimia. Mutta Inceptionin loistava idea on vähentää ominaisuuksien määrää ennen kalliita rinnakkaismoduuleja, joissa on 1×1 konvoluutiolohkoja (NiN). Tätä kutsutaan yleisesti "pullonkaulaksi". Tämä osio selitetään alla olevassa "pullonkaulakerroksessa".
GoogLeNet käyttää alkukerroksena runkoa ilman inception-moduulia, jota seuraa keskimääräinen poolauskerros sekä softmax-luokittelija, joka muistuttaa NiN:ää. Tällä luokittelijalla on paljon vähemmän operaatioita kuin AlexNetin ja VGG:n luokittimilla. Tämä johti myös erittäin tehokkaaseen verkkosuunnitteluun, ks. artikkeli: An Analysis of Deep Neural Network Models for Practical Applications.
Pullonkaulakerros NiN:n innoittamana Inceptionin pullonkaulakerros vähentää ominaisuuksien määrää jokaisessa kerroksessa ja siten operaatioiden määrää; Näin päättelyaika voidaan pitää alhaisena. Ominaisuuksien määrä vähenee nelinkertaisesti ennen kuin data kulkee kalliiden konvoluutiomoduulien läpi. Tämä on merkittävä säästö laskentakustannuksissa ja arkkitehtuurin onnistuminen.
Tarkistetaan se tarkasti. Nyt kun sinulla on 256 ominaisuustuloa ja 256 ominaisuustulosta, oletetaan, että Inception-kerros pystyy suorittamaan vain 3×3 konvoluutiota, mikä tarkoittaa yhteensä 256×256×3×3 konvoluutioa (lähes 589 000 kertolasku- ja kertymisoperaatiota (MAC). Tämä saattaa ylittää laskentabudjettimme, esimerkiksi ajaa kerrosta 0,5 millisekunnissa Googlen palvelimilla. Sen sijaan päätimme vähentää monimutkaisten ominaisuuksien määrää, joka oli 64 (eli 256/4). Tässä tapauksessa aloitetaan konvoluutiolla 256 -> 64 1×1, sitten 64 konvoluutiota kaikilla Inceptionin haaroilla, ja sen jälkeen 1×1 konvoluutio ominaisuudesta 64 -> 256, ja nyt operaatio on seuraava:
256×64 × 1×1 = 16 000 64×64 × 3×3 = 36 000s 64×256 × 1×1 = 16 000s
Aiempiin 600 000:een verrattuna nyt yhteensä on 70 000 laskentavolyymia, mikä on lähes kymmenen kertaa vähemmän.
Ja vaikka teimme parempia operaatioita, emme menettäneet sen yleisyyttä tällä kerroksella. Pullonkaulakerros on osoittautunut huipputasoiseksi aineistoissa kuten ImageNet, ja sitä käytetään myös arkkitehtuureissa kuten ResNet, jonka esittelemme seuraavaksi.
Se onnistuu, koska syöteominaisuudet liittyvät toisiinsa, joten redundanssia voidaan vähentää yhdistämällä ne oikein 1×1 konvoluutioon. Sitten, kun pieni määrä piirteitä on monimutkaistettu, ne voidaan laajentaa merkityksellisiksi yhdistelmiksi seuraavalla kerroksella.
Inception V3 (ja V2) Christian ja hänen tiiminsä ovat erittäin tuotteliaita tutkijoita. Helmikuussa 2015 Batch-normalisoitu Inception esiteltiin nimellä Inception V2 (ks. artikkeli: Batch Normalization: Accelerating Deep Network Training by Reduction Internal Covariate Shift). Eränormalisointi laskee kaikkien yhden kerroksen ominaisuuskuvausten keskiarvon ja keskihajonnan ja käyttää näitä arvoja niiden vastausten normalisoimiseen. Tämä vastaa datan "valkaisemista", jolloin kaikki hermokartat vastaavat samalla alueella ja ovat nollakeskiarvoja. Tämä auttaa koulutuksessa, kun seuraavan kerroksen ei tarvitse oppia offsetia syötedatasta, ja keskittyy myös näiden ominaisuuksien parempaan yhdistämiseen.
Joulukuussa 2015 tiimi julkaisi uuden version Inception-moduulista ja vastaavasta arkkitehtuurista (ks. artikkeli: Rethinking the Inception Architecture for Computer Vision). Artikkeli selittää paremmin alkuperäistä GoogLeNet-arkkitehtuuria ja antaa enemmän yksityiskohtia suunnitteluvalinnoista. Alkuperäinen idea on seuraava:
Rakentamalla verkon huolellisesti syvyys ja leveys tasapainotetaan, jotta tiedon virta verkkoon maksimoidaan. Ennen jokaista poolausta lisää ominaisuuksien kartoitus. Kun syvyys kasvaa, myös verkon kerroksen ominaisuuksien syvyys tai määrä kasvaa järjestelmällisesti. Käytä jokaista kerroksen syvyyslisäystä lisätäksesi piirteiden sitoutumista ennen seuraavaa kerrosta. Käyttämällä vain 3×3 konvoluutiota, annettu 5×5- ja 7×7-suodatin voidaan jakaa useampaan 3×3-muotoon mahdollisuuksien mukaan. Katso alla olevaa kuvaa
Tämän seurauksena uusi Inception muuttui:
Voit myös jakaa suodattimen litistämällä konvoluution monimutkaisempiin moduuleihin:
Inception-laskelmissa Inception-moduuli voi myös pienentää datan kokoa tarjoamalla poolausta. Tämä on pohjimmiltaan samanlaista kuin yksinkertaisen poolauskerroksen ajaminen rinnakkain konvoluutiota ajaessa:
Inception käyttää myös pooling-kerrosta ja softmaxia lopullisena luokittelijana.
ResNet Joulukuussa 2015 tapahtui uusi muutos, joka ajoittui samaan aikaan Inception V3:n kanssa. ResNetillä on yksinkertainen idea: syöttää kahden peräkkäisen konvoluutiokerroksen ulostulo ja ohittaa syöte seuraavalle kerrokselle (ks. artikkeli: Deep Residual Learning for Image Recognition).
Tämä on samankaltaista kuin jotkut aiemmat ideat. Mutta ResNetissä ne jakavat kaksi kerrosta ja niitä sovelletaan suuremmassa mittakaavassa. Kahden kerroksen jälkeen triding on keskeinen intuitio, koska yhden kerroksen jakaminen ei anna enempää parannusta. Kerroksen 2 läpi kulkemista voidaan ajatella pienenä luokittajana tai verkko-verkkona.
Tämä on ensimmäinen kerta, kun verkkokerrosten määrä ylittää 100, ja jopa 1000 kerrosta voidaan kouluttaa.
ResNet, jolla on suuri määrä verkkokerroksia, alkaa käyttää verkkokerrosta, joka muistuttaa Inceptionin pullonkaulakerrosta:
Tämä kerros käsittelee pienemmän määrän ominaisuuksia ensin monimutkaistamalla pienempi määrä piirteitä 1×1:llä, jolla on pienempi ulostulo (yleensä 1/4 tulosta), sitten käyttämällä kerrosta 3×3 ja lopuksi kerrosta 1×1. Samoin kuin Inception-moduulissa, tämä takaa alhaisen laskennallisen intensiteetin samalla kun tarjoaa monipuolisia ominaisuusyhdistelmiä.
ResNet käyttää suhteellisen yksinkertaista aloituskerrosta tuloissa: 7×7-volyymin peruskerrosta, jossa on kaksi poolia. Vertaa tätä monimutkaisempiin ja vähemmän intuitiivisiin Inception V3:een ja V4:ään.
ResNet käyttää myös pooling-kerrosta sekä softmaxia lopullisena luokittelijana.
Muita oivalluksia ResNetistä tulee joka päivä:
ResNetiä voidaan pitää sekä rinnakkaisena että yhtenäisenä, ja monissa moduuleissa tulot ja ulostulot (inoutit) käsitellään rinnakkaisina, kun taas kunkin moduulin ulostulot ovat jatkuvasti yhteydessä. ResNetiä voidaan myös pitää rinnakkaisten tai jatkuvien moduulien yhdistelmänä (ks. artikkeli: Residual Networks are Exponential Ensembles of Relatively Shallow Networks). On havaittu, että ResNet toimii tyypillisesti rinnakkain verkkolohkoissa kerroksilla 20–30. Sen sijaan, että se virtaisi jatkuvasti koko verkon pituudella. Kun ResNet syöttää tulosta takaisin syötteeseen kuten RNN, verkkoa voidaan pitää biologisesti luotettavampana aivokuoren mallina (ks. artikkeli: Bridging the Gaps Between Residual Learning, Recurrent Neural Networks and Visual Cortex).
Inception V4 Tässä on toinen versio Inceptionista Christianilta ja hänen tiimiltään, joka on samankaltainen kuin Inception V3:
Inception V4 yhdistää myös Inception-moduulin ja ResNet-moduulin:
Mielestäni arkkitehtuuri ei ole kovin ytimekäs, mutta se on myös täynnä vähemmän läpinäkyviä heuristiikkoja. On vaikea ymmärtää sen valintoja, ja kirjoittajien on vaikea selittää.
Verkon yksinkertaisuuden vuoksi, joka on helposti ymmärrettävissä ja korjattavissa, ResNet saattaa olla parempi.
SqueezeNet SqueezeNet (ks. artikkeli: SqueezeNet: AlexNet-tason tarkkuus 50x vähemmillä parametreilla ja <0,5MB mallikoko) on äskettäin julkaistu arkkitehtuuri, joka käsittelee uudelleen ResNetin ja Inceptionin käsitteitä. Parempi arkkitehtuurin suunnitteluverkkomalli on pienempi, eikä parametrit vielä vaadi monimutkaisia pakkausalgoritmeja.
ENet Tiimimme aikoo yhdistää kaikki äskettäin paljastetun arkkitehtuurin ominaisuudet luodakseen erittäin tehokkaan, kevyen verkon, joka käyttää vähemmän parametreja ja laskelmia huippuluokan tulosten saavuttamiseksi. Tätä verkkoarkkitehtuuria kutsutaan ENetiksi, ja sen suunnitteli Adam Paszke. Olemme jo käyttäneet sitä yksittäisen pikselin merkintä- ja kohtausresoluutioon.
Lisätietoja ENetistä löytyy artikkelista ENet: A Deep Neural Network Architecture for Real-Time Semantic Segmentation. ENet on verkko, joka koostuu koodauksesta, lisäämisestä ja purkamisesta. Enkooderi on tavallinen CNN-malli luokitella. Dekooderi on upsample-verkko, joka välittää luokittelun takaisinpäin alkuperäiseen kuvaan segmentointia varten. Tämä käyttää vain neuroverkkoja eikä muita kuvien segmentointialgoritmeja.
ENet on suunniteltu käyttämään alussa mahdollisimman vähän resursseja. Siksi siinä on niin pieni skripti, jossa yhdistetty verkko enkoodereita ja dekoodereita vie 0,7 MB ja tarkkuus on 16 fp. Vaikka malli on näin pieni, ENet on segmentointitarkkuudeltaan samankaltainen tai parempi kuin muut neuroverkkoratkaisut.
Moduulianalyysi CNN-moduulin analyysi, joka on tehty artikkelissa (Systematic evaluation of CNN advances on the ImageNet), on erittäin hyödyllinen:
Käytä ELU:n epälineaarisuutta ilman batchnormia tai ReLU:ta batchnormin kanssa. Käytä opittua RGB-väriavaruuden muunnosta. Käytä lineaarista oppimisnopeuden laskustrategiaa. Käytä keskimääräisten ja suurempien yhteisten kerrosten summaa. Käytä minieräkokoa, noin 128–256. Jos se on liian iso näytönohjaimellesi, skaalaa oppimisnopeus tähän kokoon. Käytä täysin yhdistettyä kerrosta konvoluutiona ja keskiarvona kaikki ennusteet lopullisen ennusteen tekemiseen. Kun tutkimus kasvattaa harjoitussarjan kokoa, se havaitsee, onko olemassa tasoa, jota ei ole saavutettu Datan puhtaus on tärkeämpää kuin datan koko. Jos et voi kasvattaa syötekuvan kokoa, vähennä askelia seuraavilla kerroksilla, sillä se tekee saman vaikutuksen. Jos verkossasi on monimutkainen ja erittäin optimoitu arkkitehtuuri, kuten GoogLeNet, sinun täytyy olla varovainen sen muokkaamisessa.
Muita arkkitehtuureja, joihin kannattaa kiinnittää huomiota FractalNet (ks. artikkeli: FractalNet: Ultra-Deep Neural Networks without Residuals) käyttää rekursiivista arkkitehtuuria, jota ei testata ImageNetissä. Tämä arkkitehtuuri on johdannainen ResNetistä tai yleisemmin ResNetistä.
tulevaisuus Uskomme, että neuroverkkoarkkitehtuurin luominen on syväoppimisen kehityksen ensisijainen tavoite. Tiimimme suosittelee lämpimästi huolellisesti lukemaan ja ymmärtämään artikkelissa mainitut artikkelit.
Mutta voisi ihmetellä, miksi käytämme niin paljon aikaa arkkitehtuurien tekemiseen? Miksi et kertoisi meille, mitä datan kanssa kannattaa käyttää? Miten yhdistät moduulit? Nämä kysymykset ovat hyviä, mutta vielä tutkimuksen alla, ja on olemassa tutkimusartikkeli: Neuroverkot derivoituvalla rakenteella.
Huomaa, että suurin osa tässä artikkelissa käsittelemistämme arkkitehtuureista liittyy konenäköön. Samankaltaisia neuroverkkoarkkitehtuureja on kehitetty myös muilla alueilla, ja on erittäin mielenkiintoista oppia arkkitehtonisista muutoksista kaikissa muissa tehtävissä.
Jos olet kiinnostunut vertailemaan neuroverkkojen arkkitehtuuria ja laskennallista suorituskykyä, katso artikkeli: An Analysis of Deep Neural Network Models for Practical Applications.
|
Edellinen:Useita Pythonin suoritusajan laskentamenetelmiäSeuraava:Antminer B3 kertoo, mitä kaivaa!
|