LeNet5 LeNet5 dzimis 1994. gadā un ir viens no pirmajiem konvolūcijas neironu tīkliem un ir attīstījis dziļās mācīšanās jomu. Kopš 1988. gada, pēc daudzām veiksmīgām iterācijām, šis novatoriskais Yann LeCun darbs ir nosaukts par LeNet5 (sk.: Gradient-based Learning Applied to Document Recognition).
LeNet5 arhitektūra ir balstīta uz ideju, ka (īpaši) attēla iezīmes ir sadalītas visā attēlā, un ka konvolūcija ar apgūstamiem parametriem ir efektīvs veids, kā iegūt līdzīgas funkcijas vairākās vietās ar nelielu parametru skaitu. Tajā laikā nebija GPU, kas palīdzētu trenēties, un pat CPU bija lēns. Tāpēc spēja saglabāt parametrus, kā arī aprēķina process ir galvenais notikums. Tas ir pretējs katra pikseļa izmantošanai kā atsevišķai ieejai lielam, daudzslāņainam neironu tīklam. LeNet5 paskaidro, ka šos pikseļus nevajadzētu izmantot pirmajā slānī, jo attēlam ir spēcīgas telpiskās korelācijas, kuras nevar izmantot, izmantojot neatkarīgus pikseļus attēlā kā dažādas ievades funkcijas.
LeNet5 funkcijas var apkopot šādi:
Konvolūcijas neironu tīkli secīgi izmanto 3 slāņus: konvolūcijas, apvienotos, nelineāros → Tas, iespējams, ir galvenā attēlu dziļās mācīšanās iezīme kopš šī raksta! Izmantojiet konvolūcijas, lai iegūtu telpiskos elementus Apakšizlase, izmantojot kartēšanu uz telpisko vidējo Nelinearitāte hiperboliskas pieskares (tanh) vai S formas (sigmoīda) veidā. Daudzslāņu neironu tīkli (MLP) kalpo kā galīgie klasifikatori Retas savienojuma matricas starp slāņiem novērš lielas skaitļošanas izmaksas
Kopumā šis tīkls ir sākumpunkts daudzām jaunākajām arhitektūrām un ir iedvesmojis daudzus šajā telpā.
Intervāls No 1998. līdz 2010. gadam neironu tīkls bija inkubācijas stadijā. Lielākā daļa cilvēku neapzinās savu pieaugošo spēku, bet citi pētnieki to dara lēni. Pateicoties mobilo tālruņu kameru un lētu digitālo kameru parādīšanās, arvien vairāk datu tiek izmantoti. Un skaitļošanas jauda arī pieaug, CPU kļūst ātrāki, un GPU kļūst par skaitļošanas rīkiem vairākiem mērķiem. Šīs tendences ir ļāvušas neironu tīkliem progresēt, kaut arī lēni. Dati un skaitļošanas jauda padara uzdevumus, ko neironu tīkli var paveikt, arvien interesantākus. Pēc tam viss kļuva skaidrs......
Dan Ciresan tīkls 2010. gadā Dan Claudiu Ciresan un Jurgen Schmidhuber publicēja agrākā GPU neironu tīkla ieviešanu. Šī ieviešana ir 9 slāņu neironu tīkls, kas darbojas ar NVIDIA GTX 280 grafikas procesoru, ieskaitot virzīšanu uz priekšu un atpakaļ.
Aleksandrs 2012. gadā Alekss Križevskis publicēja Alexet (sk.: ImageNet klasifikācija ar dziļiem konvolūcijas neironu tīkliem), dziļāku un plašāku LeNet versiju, kas ar ievērojamu starpību uzvarēja sarežģītajā ImageNet konkursā.
AlexNet paplašina LeNet idejas lielākiem neironu tīkliem, kas var apgūt daudz sarežģītākus objektus un objektu līmeņus. Šī darba ieguldījums ir:
Modificētas lineārās vienības (ReLU) izmantošana kā nelinearitāte Izmantojiet Dropout tehniku, lai treniņa laikā selektīvi ignorētu atsevišķus neironus, lai izvairītos no modeļa pārmērīgas pielāgošanas Liela baseina ignorēšana, lai izvairītos no vidējās apvienošanas vidējā efekta Samaziniet treniņu laiku ar NVIDIA GTX 580 GPU
Tajā brīdī GPU var nodrošināt lielāku kodolu skaitu nekā CPU, un apmācības laiku var palielināt par 10 reizēm, kas savukārt ļauj iegūt lielākas datu kopas un lielākus attēlus.
AlexNet panākumi ir noveduši pie nelielas revolūcijas. Konvolūcijas neironu tīkli tagad ir dziļās mācīšanās mugurkauls, un tie ir kļuvuši par sinonīmu "lieliem neironu tīkliem, kas tagad var atrisināt noderīgus uzdevumus".
Pārspīlējums 2013. gada decembrī Ņujorkas universitātes Yann LeCun laboratorija ierosināja AlexNet atvasinājumu Overfeat (sk.: OverFeat: integrēta atpazīšana, lokalizācija un noteikšana, izmantojot konvolūcijas tīklus). Šajā rakstā tika ierosināts arī mācību ierobežojošs lodziņš, kas noveda pie daudziem rakstiem par šo pašu tēmu. Es uzskatu, ka labāk ir iemācīties sadalīt objektus, nekā iemācīties mākslīgās ierobežojošās kastes.
VGG Oksfordas Universitātes VGG tīkls (sk.: Very Deep Convolutional Networks for Large-Scale Image Recognition) ir pirmais tīkls, kas katrā konvolūcijas slānī izmanto mazākus 3×3 filtrus un apvieno tos, lai tos apstrādātu kā konvolūcijas secību.
Šķiet, ka tas ir pretējs LeNet principam, kur lielas konvolūcijas tiek izmantotas, lai iegūtu līdzīgas iezīmes attēlā. Atšķirībā no AlexNet 9×9 vai 11×11 filtriem, filtri sāk kļūt mazāki, tuvojoties bēdīgi slavenajai 1×1 konvolūcijas anomālijai, no kuras LeNet cenšas izvairīties - vismaz tīkla pirmajā slānī. Tomēr VGG ir guvis lielu progresu, izmantojot vairākas 3×3 konvolūcijas pēc kārtas, lai atdarinātu lielāku uztverošo lauku, piemēram, 5×5 un 7×7, ietekmi. Šīs idejas ir izmantotas arī jaunākās tīkla arhitektūrās, piemēram, Inception un ResNet.
VGG tīkli izmanto vairākus 3×3 konvolūcijas slāņus, lai raksturotu sarežģītas funkcijas. Ņemiet vērā, ka VGG-E 3., 4., 5. bloks: 256×256 un 512×512 3×3 filtri tiek izmantoti vairākas reizes, lai iegūtu sarežģītākas funkcijas un šo funkciju kombinācijas. Efekts ir līdzvērtīgs lielam 512×512 klasifikatoram ar 3 konvolūcijas slāņiem. Tas acīmredzami nozīmē, ka ir daudz parametru un mācīšanās iespēju. Taču šos tīklus ir grūti apmācīt, un tie ir jāsadala mazākos tīklos un jāuzkrāj slānis pa slānim. Tas ir saistīts ar to, ka trūkst stabila veida, kā regulēt modeli vai vairāk vai mazāk ierobežot lielu meklēšanas vietu lielā parametru skaita dēļ.
VGG izmanto lielus līdzekļu izmērus daudzos slāņos, jo izpildlaikā secinājumi ir laikietilpīgi. Tāpat kā Inception vājā kakla gadījumā, funkciju skaita samazināšana ietaupīs dažas skaitļošanas izmaksas.
Tīkls tīklā Ideja par tīklu tīklā (NiN, skatīt dokumentu: Tīkls tīklā) ir vienkārša un lieliska: 1×1 konvolūcijas izmantošana, lai nodrošinātu vairāk komponējamu iespēju konvolūcijas slāņa funkcijām.
NiN arhitektūra izmanto telpiskos MLP slāņus pēc atsevišķām konvolūcijām, lai labāk apvienotu funkcijas pirms citiem slāņiem. Atkal, jūs varat domāt, ka 1×1 konvolūcijas ir pretrunā ar LeNet sākotnējo principu, bet patiesībā tās var apvienot konvolūcijas funkcijas labākā veidā, nekā tas nav iespējams, vienkārši sakraujot vairāk konvolūcijas funkciju. Tas atšķiras no sākotnējā pikseļa izmantošanas kā nākamā slāņa ievades. 1×1 konvolūcijas bieži tiek izmantotas, lai pēc konvolūcijas spētiski apvienotu funkcijas funkciju kartēs, tāpēc tās faktiski var izmantot ļoti maz parametru un koplietot tos visos šo funkciju pikseļos!
MLP spēja ievērojami palielināt atsevišķu konvolūcijas funkciju efektivitāti, apvienojot tās sarežģītākās grupās. Kopš tā laika šī ideja ir izmantota dažās jaunākajās arhitektūrās, piemēram, ResNet, Inception un tā atvasinājumiem.
NiN izmanto arī vidējo apvienošanas slāni kā daļu no galīgā klasifikatora, vēl viena prakse, kas kļūs izplatīta. Tas tiek darīts, pirms klasifikācijas vidēji nosakot tīkla atbildes uz vairākiem ievades attēliem.
GoogLeNet un sākums Christian Szegedy no Google sāka savus meklējumus, lai samazinātu dziļo neironu tīklu skaitļošanas pieskaitāmās izmaksas un izstrādāja GoogLeNet, pirmo Inception arhitektūru (sk.: Going Deeper with Convolutions).
Tas bija 2014. gada rudenī, un dziļās mācīšanās modeļi kļuva noderīgi, klasificējot attēlus pret video kadriem. Lielākā daļa skeptiķu vairs nešaubās, ka dziļā mācīšanās un neironu tīkli šoreiz patiešām ir atgriezušies un turpinās attīstīties. Ņemot vērā šo tehnoloģiju lietderību, interneta giganti, piemēram, Google, ir ļoti ieinteresēti efektīvi un mērogā izvietot šīs arhitektūras savos serveros.
Kristians daudz domāja par to, kā dziļie neironu tīkli var sasniegt augstu veiktspējas līmeni, piemēram, ImageNet, vienlaikus samazinot skaitļošanas pieskaitāmās izmaksas. Vai arī veiktspējas uzlabojumus var veikt, nodrošinot vienādas skaitļošanas pieskaitāmās izmaksas.
Viņš un viņa komanda nāca klajā ar Inception moduli:
No pirmā acu uzmetiena tā būtībā ir paralēla 1×1, 3×3, 5×5 konvolūcijas filtru kombinācija. Bet lieliskā Inception ideja ir samazināt funkciju skaitu pirms dārgiem paralēliem moduļiem ar 1×1 konvolūcijas blokiem (NiN). To parasti sauc par "sastrēgumu". Šī sadaļa tiks izskaidrota zemāk esošajā sadaļā "sastrēguma kakla slānis".
GoogLeNet izmanto mugurkaulu bez sākuma moduļa kā sākotnējo slāni, kam seko vidējais apvienošanas slānis un softmax klasifikators, kas līdzīgs NiN. Šim klasifikatoram ir daudz mazāks operāciju skaits nekā AlexNet un VGG klasifikatoriem. Tas arī noveda pie ļoti efektīva tīkla dizaina, skatīt dokumentu: Dziļo neironu tīklu modeļu analīze praktiskiem pielietojumiem.
Vājās vietas slānis Iedvesmojoties no NiN, Inception vājās kakla slānis samazina funkciju skaitu katrā slānī un līdz ar to arī operāciju skaitu; Tātad secinājumu laiku var saglabāt zemu. Funkciju skaits tiek samazināts 4 reizes, pirms dati tiek nodoti caur dārgiem konvolūcijas moduļiem. Tas ir ievērojams ietaupījums skaitļošanas izmaksu un arhitektūras panākumu ziņā.
Pārbaudīsim to konkrēti. Tagad, kad jums ir 256 funkciju ievades un 256 funkciju izejas, pieņemsim, ka sākuma slānis var veikt tikai 3×3 konvolūcijas, kas nozīmē kopumā 256×256×3×3 konvolūcijas (gandrīz 589 000 reizināšanas un uzkrāšanas (MAC) operācijas). Tas var pārsniegt mūsu skaitļošanas budžetu, piemēram, lai palaistu slāni 0,5 milisekundēs Google serveros. Tā vietā mēs nolēmām samazināt nepieciešamo funkciju skaitu, kas bija 64 (t.i., 256/4). Šajā gadījumā mēs sākam ar 256 -> 64 1×1 konvolūciju, pēc tam 64 konvolūcijas visās sākuma filiālēs, kam seko 1×1 konvolūcija no 64 > 256 iezīmes, un tagad darbība ir šāda:
256×64 × 1×1 = 16 000 64×64 × 3×3 = 36 000 64×256 × 1×1 = 16 000
Salīdzinot ar iepriekšējiem 600 000, tagad kopumā ir 70 000 skaitļošanas apjomu, kas ir gandrīz 10 reizes mazāk.
Un, lai gan mēs veicām labākas operācijas, mēs nezaudējām tās vispārinājumu šajā slānī. Sastrēguma kakla slānis ir izrādījies visaugstākais tādās datu kopās kā ImageNet, un tas tiek izmantots arī tādās arhitektūrās kā ResNet, kuru mēs ieviesīsim tālāk.
Tas ir veiksmīgs, jo ievades funkcijas ir saistītas, tāpēc dublēšanu var samazināt, pareizi apvienojot tās ar 1×1 konvolūciju. Pēc tam, kad neliels skaits funkciju ir saliektas, tās var atkal paplašināt jēgpilnās kombinācijās nākamajā slānī.
Sākums V3 (un V2) Kristians un viņa komanda ir ļoti produktīvi pētnieki. 2015. gada februārī partijas normalizētais sākums tika ieviests kā Inception V2 (skatīt dokumentu: Partijas normalizācija: dziļā tīkla apmācības paātrināšana, samazinot iekšējo kovariātu nobīdi). Pakešu normalizācija aprēķina visu objektu karšu vidējo un standarta novirzi viena slāņa izvadē un izmanto šīs vērtības, lai normalizētu to atbildes. Tas ir līdzvērtīgs datu "balināšanai", lai visas neironu kartes reaģētu vienā diapazonā un būtu nulles vidējais. Tas palīdz trenēties, kad nākamajam slānim nav jāapgūst nobīde no ievades datiem, kā arī koncentrējas uz to, kā labāk apvienot šīs funkcijas.
2015. gada decembrī komanda izlaida jaunu Inception moduļa versiju un līdzīgu arhitektūru (skatīt dokumentu: Rethinking the Inception Architecture for Computer Vision). Darbs labāk izskaidro oriģinālo GoogLeNet arhitektūru, sniedzot sīkāku informāciju par dizaina izvēli. Sākotnējā ideja ir šāda:
Rūpīgi veidojot tīklu, dziļums un platums ir līdzsvaroti, lai maksimāli palielinātu informācijas plūsmu tīklā. Pirms katras apvienošanas pievienojiet līdzekļu kartēšanu. Palielinoties dziļumam, sistemātiski palielinās arī tīkla slāņa dziļums vai funkciju skaits. Izmantojiet katra slāņa dziļuma palielinājumu, lai palielinātu objektu saistīšanu pirms nākamā slāņa. Izmantojot tikai 3×3 konvolūcijas, doto 5×5 un 7×7 filtru var sadalīt vairākos 3×3 filtros, ja iespējams. Apskatiet zemāk redzamo attēlu
Tā rezultātā jaunais Inception kļuva:
Filtru var arī sadalīt, saplacināt konvolūciju sarežģītākos moduļos:
Veicot sākuma aprēķinus, sākuma modulis var arī samazināt datu lielumu, nodrošinot apvienošanu. Tas būtībā ir līdzīgs vienkārša apvienošanas slāņa palaišanai paralēli, veicot konvolūciju:
Inception izmanto arī apvienošanas slāni un softmax kā galīgo klasifikatoru.
ResNet 2015. gada decembrī tika veiktas jaunas izmaiņas, kas sakrita ar Inception V3. ResNet ir vienkārša ideja: barot divu secīgu konvolūcijas slāņu izvadi un apiet ievadi nākamajā slānī (skatīt dokumentu: Deep Residual Learning for Image Recognition).
Tas ir līdzīgi dažām vecajām idejām iepriekš. Bet ResNet tie sadala divus slāņus un tiek pielietoti plašākā mērogā. Slīpēšana pēc 2 slāņiem ir galvenā intuīcija, jo viena slāņa sadalīšana nedod vairāk uzlabojumu. Izejot cauri 2. slānim, var uzskatīt par nelielu klasifikatoru vai tīklu tīklā.
Šī ir pirmā reize, kad tīkla slāņu skaits pārsniedz 100, un var apmācīt pat 1000 slāņus.
ResNet, kuram ir liels skaits tīkla slāņu, sāk izmantot tīkla slāni, kas līdzīgs Inception sastrēguma slānim:
Šis slānis apstrādā mazāku funkciju skaitu, vispirms saliekot mazāku funkciju skaitu ar 1×1 ar mazāku izeju (parasti 1/4 no ievades), pēc tam izmantojot 3×3 slāni un pēc tam 1×1 slāni. Līdzīgi kā Inception modulis, tas nodrošina zemu skaitļošanas intensitāti, vienlaikus nodrošinot bagātīgas funkciju kombinācijas.
ResNet izmanto salīdzinoši vienkāršu sākotnējo slāni uz ieejām: 7×7 apjomu bāzes slāni ar diviem baseiniem. Salīdziniet to ar sarežģītākiem un mazāk intuitīviem Inception V3 un V4.
ResNet izmanto arī apvienošanas slāni un softmax kā galīgo klasifikatoru.
Citas atziņas par ResNet notiek katru dienu:
ResNet var uzskatīt gan par paralēlu, gan blakus esošu, daudzos moduļos apstrādājot ieejas un izejas (ieejas) kā paralēlas, bet katra moduļa izejas ir savienotas nepārtraukti. ResNet var uzskatīt arī par paralēlu vai nepārtrauktu moduļu kombināciju (skatīt dokumentu: Atlikušie tīkli ir relatīvi seklu tīklu eksponenciālie ansambļi). Ir konstatēts, ka ResNet parasti darbojas paralēli tīkla blokos 20-30 slāņos. Tā vietā, lai nepārtraukti plūstu pa visu tīkla garumu. Kad ResNet padod izeju atpakaļ uz ievadi, piemēram, RNN, tīklu var uzskatīt par labāk bioloģiski uzticamu kortikālo modeli (skatīt dokumentu: Bridging the Gaps Between Residual Learning, Recurrent Neural Networks and Visual Cortex).
Sākums V4 Šeit ir vēl viena Kristiāna un viņa komandas Inception versija, kas ir līdzīga Inception V3:
Inception V4 apvieno arī Inception moduli un ResNet moduli:
Es domāju, ka arhitektūra nav ļoti kodolīga, bet tā ir arī pilna ar mazāk caurspīdīgu heiristiku. Ir grūti saprast tajā esošās izvēles, un autoriem ir grūti izskaidrot.
Ņemot vērā tīkla vienkāršību, ko var viegli saprast un labot, ResNet var būt labāks.
Saspiest tīklu SqueezeNet (skatīt dokumentu: SqueezeNet: AlexNet līmeņa precizitāte ar 50x mazāk parametru un <0,5 MB modeļa lielums) ir nesen publicēta arhitektūra, kas pārstrādā ResNet un Inception jēdzienus. Labāks arhitektūras dizaina tīkla modelis ir mazāks, un parametriem vēl nav nepieciešami sarežģīti saspiešanas algoritmi.
LVet Mūsu komanda plāno apvienot visas nesen atklātās arhitektūras funkcijas, lai izveidotu ļoti efektīvu, maza svara tīklu, kas izmanto mazāk parametru un aprēķinu, lai sasniegtu augstākā līmeņa rezultātus. Šo tīkla arhitektūru sauc par ENet, un to izstrādāja Adam Paszke. Mēs to jau esam izmantojuši viena pikseļa marķējumam un ainas izšķirtspējai.
Plašāku informāciju par ENet skatiet rakstā ENet: A Deep Neural Network Architecture for Real-Time Semantic Segmentation. ENet ir kodēšanas, pievienošanas un dekodēšanas tīkls. Kodētājs ir parasts CNN dizains, lai klasificētu. Dekodētājs ir augšupejošais tīkls, kas segmentēšanai izplata klasifikāciju atpakaļ uz sākotnējo attēlu. Tas izmanto tikai neironu tīklus un nekādus citus algoritmus attēlu segmentēšanai.
ENet ir izstrādāts, lai sākumā izmantotu minimālo iespējamo resursu apjomu. Tāpēc tam ir tik mazs skripts, ar kombinēto kodētāju un dekoderu tīklu, kas aizņem 0,7 MB ar 16 kadru sekundes precizitāti. Pat ar tik mazu modeli ENet segmentācijas precizitātes ziņā ir līdzīgs vai augstāks par citiem neironu tīkla risinājumiem.
Moduļu analīze CNN moduļa analīze, kas tika veikta dokumentā (Sistemātiska CNN progresa novērtēšana ImageNet), ir ļoti noderīga:
Izmantojiet ELU nelinearitāti bez batchnorm vai ReLU ar batchnorm. Izmantojiet apgūto RGB krāsu telpas transformāciju. Izmantojiet lineāru mācīšanās ātruma samazināšanas stratēģiju. Izmantojiet vidējo un lielāko apvienoto slāņu summu. Izmantojiet mini partijas lielumu no aptuveni 128 līdz 256. Ja tas ir pārāk liels jūsu GPU, vienkārši samaziniet mācīšanās ātrumu līdz šim lielumam. Izmantojiet pilnībā savienoto slāni kā konvolūciju un vidējo visu prognozi, lai veiktu galīgo prognozi. Kad pētījums palielina treniņu komplekta lielumu, tas nosaka, vai nav sasniegts plato Datu tīrība ir svarīgāka par datu lielumu. Ja nevarat palielināt ievades attēla lielumu, samaziniet soli nākamajos slāņos, jo tam ir tāds pats efekts. Ja jūsu tīklam ir sarežģīta un ļoti optimizēta arhitektūra, piemēram, GoogLeNet, jums jābūt uzmanīgiem, modificējot to.
Citas arhitektūras, kurām vērts pievērst uzmanību FractalNet (skatīt dokumentu: FractalNet: Ultra-Deep Neural Networks without Resuduals) izmanto rekursīvu arhitektūru, kas nav pārbaudīta ImageNet. Šī arhitektūra ir ResNet vai vispārīgāk ResNet atvasinājums.
nākotne Mēs uzskatām, ka neironu tīkla arhitektūras izveide ir galvenā prioritāte dziļās mācīšanās attīstībā. Mūsu komanda ļoti iesaka rūpīgi izlasīt un izprast rakstā minētos dokumentus.
Bet kāds varētu brīnīties, kāpēc mēs pavadām tik daudz laika, veidojot arhitektūru? Kāpēc gan nepateikt, ko izmantot ar datiem? Kā jūs apvienojat moduļus? Šie jautājumi ir labi, bet joprojām tiek pētīti, un ir dokuments, uz kuru atsaukties: Neironu tīkli ar diferencējamu struktūru.
Ņemiet vērā, ka lielākā daļa arhitektūru, par kurām mēs runājām šajā rakstā, ir saistītas ar datorredzi. Līdzīgas neironu tīklu arhitektūras ir izstrādātas arī citās jomās, un ir ļoti interesanti uzzināt par arhitektūras izmaiņām visos citos uzdevumos.
Ja jūs interesē neironu tīkla arhitektūras un skaitļošanas veiktspējas salīdzināšana, skatiet rakstu: Dziļo neironu tīklu modeļu analīze praktiskiem pielietojumiem.
|