Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 10136|Răspunde: 0

Evoluția arhitecturii rețelelor neuronale: O revizuire cuprinzătoare a peste zece arhitecturi de la LeNet5 la ENet

[Copiază linkul]
Postat pe 24.04.2018 13:08:47 | | | |
LeNet5
LeNet5 s-a născut în 1994 și este una dintre primele rețele neuronale convoluționale, avansând domeniul învățării profunde. Din 1988, după multe iterații de succes, această lucrare de pionierat a lui Yann LeCun poartă numele LeNet5 (vezi: Învățare bazată pe gradient aplicată recunoașterii documentelor).


Arhitectura LeNet5 se bazează pe ideea că (în special) caracteristicile unei imagini sunt distribuite pe întreaga imagine și că convoluția cu parametri învățabili este o modalitate eficientă de a extrage caracteristici similare în mai multe locații cu un număr mic de parametri. La acea vreme, nu exista GPU care să ajute la antrenament, iar chiar și CPU-ul era lent. Prin urmare, capacitatea de a salva parametrii, precum și procesul de calcul, reprezintă o evoluție cheie. Aceasta este opusul folosirii fiecărui pixel ca intrare separată pentru o rețea neuronală mare, cu mai multe straturi. LeNet5 explică faptul că acei pixeli nu ar trebui folosiți în primul strat deoarece imaginea are corelații spațiale puternice care nu pot fi exploatate folosind pixeli independenți din imagine ca elemente de intrare diferite.

Caracteristicile LeNet5 pot fi rezumate astfel:

Rețelele neuronale convoluționale folosesc 3 straturi ca o secvență: convoluțională, pooled, neliniară → Aceasta este probabil o caracteristică cheie a învățării profunde a imaginii de la această lucrare!
Folosiți convoluții pentru a extrage trăsături spațiale
Subeșantionare folosind maparea la media spațială
Nonlinearitatea sub forma tangentului hiperbolic (tanh) sau a S-formei (sigmoid).
Rețelele neuronale multilayer (MLP) servesc ca clasificatori finali
Matricile de conexiune rare între straturi evită costuri computaționale mari

Per ansamblu, această rețea reprezintă punctul de plecare pentru un număr mare de arhitecturi recente și a inspirat mulți din acest domeniu.

Interval
Între 1998 și 2010, rețeaua neuronală a fost în stadiul de incubare. Majoritatea oamenilor nu sunt conștienți de puterea lor în creștere, în timp ce alți cercetători sunt lenți în a face acest lucru. Datorită apariției camerelor foto pentru telefoanele mobile și a camerelor digitale ieftine, tot mai multe date sunt exploatate. Iar puterea de calcul crește, procesoarele devin tot mai rapide, iar GPU-urile devin instrumente de calcul pentru multiple scopuri. Aceste tendințe au permis rețelelor neuronale să progreseze, deși lent. Datele și puterea de calcul fac sarcinile pe care rețelele neuronale le pot realiza din ce în ce mai interesante. După aceea, totul a devenit clar......

Dan Ciresan Net
În 2010, Dan Claudiu Ciresan și Jurgen Schmidhuber au publicat o implementare a celei mai timpurii rețele neuronale GPU. Această implementare este o rețea neuronală cu 9 straturi care rulează pe un procesor grafic NVIDIA GTX 280, inclusiv propagare înainte și înapoi.

AlexNet
În 2012, Alex Krizhevsky a publicat Alexet (vezi: ImageNet Classification with Deep Convolutional Neural Networks), o versiune mai profundă și mai largă a LeNet care a câștigat competiția dificilă ImageNet la o diferență semnificativă.


AlexNet extinde ideile LeNet către rețele neuronale mai mari, care pot învăța obiecte și niveluri mult mai complexe. Contribuțiile acestei lucrări sunt:

Folosiți o unitate liniară modificată (ReLU) ca neliniaritate
Folosiți tehnica Dropout pentru a ignora selectiv neuronii individuali în timpul antrenamentului, pentru a evita supraajustarea modelului
Anulează un pool mare pentru a evita efectul mediu al pooling-ului mediu
Reduce timpul de antrenare cu placa video NVIDIA GTX 580

În acel moment, GPU-urile pot furniza un număr mai mare de nuclee decât procesoarele, iar timpul de antrenare poate fi mărit de 10 ori, ceea ce permite seturi de date mai mari și imagini mai mari.

Succesul AlexNet a dus la o mică revoluție. Rețelele neuronale convoluționale sunt acum coloana vertebrală a învățării profunde și au devenit sinonime cu "rețele neuronale mari care pot rezolva acum sarcini utile."

Excesiv
În decembrie 2013, laboratorul Yann LeCun de la Universitatea din New York a propus un derivat al AlexNet, Overfeat (vezi: OverFeat: Recunoaștere, Localizare și Detecție Integrată folosind Rețele Convoluționale). Acest articol a propus, de asemenea, o cutie de delimitare pentru învățare, ceea ce a dus la numeroase lucrări pe aceeași temă. Cred că este mai bine să înveți să împarți obiecte decât să înveți cutii de delimitare artificiale.

VGG
Rețeaua VGG de la Universitatea Oxford (vezi: Very Deep Convolutional Networks for Large-Scale Image Recognition) este prima rețea care folosește filtre mai mici de 3×3 la fiecare strat convoluțional și le combină pentru a le procesa ca o secvență convoluțională.

Aceasta pare a fi opusul principiului LeNet, unde se folosesc convoluții mari pentru a obține caracteristici similare într-o imagine. Spre deosebire de filtrele 9×9 sau 11×11 de la AlexNet, filtrele încep să devină mai mici, apropiindu-se de faimoasa anomalie a convoluției 1×1 pe care LeNet încearcă să o evite — cel puțin pe primul strat al rețelei. Totuși, VGG a făcut progrese semnificative folosind mai multe convoluții 3×3 succesiv pentru a imita efectele câmpurilor receptive mai mari, cum ar fi 5×5 și 7×7. Aceste idei au fost folosite și în arhitecturi de rețea mai recente, precum Inception și ResNet.


Rețelele VGG folosesc mai multe straturi convoluționale 3×3 pentru a caracteriza caracteristici complexe. Rețineți că blocurile 3, 4, 5 ale VGG-E: 256×256 și 512×512 3×3 sunt folosite de mai multe ori pentru a extrage caracteristici și combinații mai complexe ale acestor caracteristici. Efectul este echivalent cu un clasificator mare 512×512 cu 3 straturi convoluționale. Acest lucru înseamnă, evident, că există mulți parametri și capacități de învățare. Dar aceste rețele sunt dificil de antrenat și trebuie împărțite în rețele mai mici și acumulate strat cu strat. Acest lucru se datorează lipsei unei metode robuste de regularizare a modelului sau de a restricționa mai mult sau mai puțin o cantitate mare de spațiu de căutare din cauza numărului mare de parametri.

VGG folosește dimensiuni mari de caracteristici în multe straturi deoarece inferența este consumatoare de timp la rulare. La fel ca în cazul blocajului din Inception, reducerea numărului de funcționalități va economisi unele costuri computaționale.

Rețea-în-rețea
Ideea Network in Network (NiN, vezi lucrarea: Network In Network) este simplă și grozavă: utilizarea convoluției 1×1 pentru a oferi mai multe capabilități compoziabile pentru caracteristicile stratului convoluțional.

Arhitectura NiN folosește straturi spațiale MLP după convoluții individuale pentru a combina mai bine caracteristicile înaintea altor straturi. Din nou, poți crede că convoluțiile 1×1 sunt contrare principiului original al LeNet, dar de fapt ele pot combina caracteristici convoluționale într-un mod mai bun decât nu este posibil, doar prin suprapunerea mai multor caracteristici convoluționale. Acest lucru este diferit față de folosirea pixelului original ca intrare a următorului strat. Convoluțiile 1×1 sunt adesea folosite pentru a combina strategic caracteristici pe hărțile de caracteristici după convoluție, astfel încât să poată folosi foarte puțini parametri și să-i împartă între toți pixelii acestor caracteristici!


Capacitatea MLP de a crește semnificativ eficiența caracteristicilor convoluționale individuale prin combinarea lor în grupuri mai complexe. Această idee a fost folosită ulterior în unele arhitecturi recente, precum ResNet, Inception și derivatele sale.

NiN folosește, de asemenea, un strat mediu de pooling ca parte a clasificatorilor finali, o altă practică care va deveni comună. Acest lucru se face prin media răspunsurilor rețelei la mai multe imagini de intrare înainte de clasificare.

GoogLeNet și Inception
Christian Szegedy de la Google și-a început căutarea de a reduce suprasolicitarea computațională a rețelelor neuronale profunde și a proiectat GoogLeNet, prima arhitectură Inception (vezi: Mergând mai profund cu convoluții).

Era toamna anului 2014, iar modelele de deep learning deveneau utile în clasificarea cadrelor de imagine versus video. Majoritatea scepticilor nu se mai îndoiesc că învățarea profundă și rețelele neuronale au revenit cu adevărat de data aceasta și vor continua să evolueze. Având în vedere utilitatea acestor tehnologii, giganți ai internetului precum Google sunt foarte interesați să implementeze aceste arhitecturi eficient și la scară largă pe serverele lor.

Christian s-a gândit mult la modul în care rețelele neuronale profunde pot atinge niveluri ridicate de performanță, cum ar fi pe ImageNet, reducând în același timp costul lor computațional. Sau se pot face îmbunătățiri de performanță, asigurând același overhead computațional.

El și echipa sa au venit cu modulul Inception:


La prima vedere, aceasta este practic o combinație paralelă de filtre convoluționale 1×1, 3×3, 5×5. Dar ideea grozavă a Inception este să reducă numărul de caracteristici înaintea modulelor paralele costisitoare cu blocuri convoluționale 1×1 (NiN). Acest lucru este denumit în mod obișnuit "blocaj". Această secțiune va fi explicată în secțiunea "stratul de blocaj" de mai jos.

GoogLeNet folosește o coloană vertebrală fără un modul inception ca strat inițial, urmată de un strat mediu de pooling plus un clasificator softmax similar cu NiN. Acest clasificator are un număr mult mai mic de operații decât clasificatoarele AlexNet și VGG. Aceasta a condus, de asemenea, la un design de rețea foarte eficient, vezi lucrarea: An Analysis of Deep Neural Network Models for Practical Applications.

Stratul de blocaj
Inspirat de NiN, stratul de blocaj al Inception reduce numărul de caracteristici din fiecare strat și, implicit, numărul de operații; Astfel, timpul de inferență poate fi menținut scăzut. Numărul de caracteristici este redus de 4 ori înainte ca datele să fie transmise prin module convoluționale costisitoare. Aceasta reprezintă o economie semnificativă în termeni de costuri computaționale și un succes al arhitecturii.

Hai să verificăm în mod specific. Acum că ai 256 de intrări de funcționalitate și 256 de ieșiri de funcționalități, să presupunem că stratul Inception poate efectua doar 3×3 convoluții, ceea ce înseamnă un total de 256×256×3×3 convoluții (aproape 589.000 de operații de înmulțire și acumulare (MAC)). Acest lucru poate depăși bugetul nostru de calcul, să zicem, să rulezi stratul în 0,5 milisecunde pe serverele Google. În schimb, am decis să reducem numărul de caracteristici care trebuiau complicate, adică 64 (adică 256/4). În acest caz, începem cu o convoluție de 256 -> 64 1×1, apoi 64 de convoluții pe toate ramurile Incepției, urmate de o convoluție 1×1 dintr-o caracteristică de 64 -> 256, iar acum operația este următoarea:

256×64 × 1×1 = 16.000s
64×64 × 3×3 = 36.000s
64×256 × 1×1 = 16.000s

Comparativ cu cele 600.000 anterioare, există acum un total de 70.000 de volume computaționale, ceea ce este aproape de 10 ori mai puțin.

Și chiar dacă am făcut operațiuni mai bune, nu i-am pierdut generalitatea la acest nivel. Stratul de blocaj s-a dovedit a fi de top pe seturi de date precum ImageNet și este folosit și în arhitecturi precum ResNet, pe care îl vom introduce în continuare.

Este de succes deoarece caracteristicile de intrare sunt legate, astfel încât redundanța poate fi redusă prin combinarea corectă a lor cu convoluția 1×1. Apoi, după ce un număr mic de caracteristici sunt complicate, ele pot fi extinse din nou în combinații semnificative la următorul strat.

Inception V3 (și V2)
Christian și echipa sa sunt cercetători foarte prolifici. În februarie 2015, Inception normalizat pe loturi a fost introdus ca Inception V2 (vezi lucrarea: Normalizarea pe loturi: Accelerarea antrenamentului în rețele profunde prin reducerea schimbării covariate interne). Normalizarea pe loturi calculează media și abaterea standard a tuturor hărților de caracteristici pe ieșirea unui strat și folosește aceste valori pentru a normaliza răspunsurile acestora. Aceasta este echivalentă cu "albirea" datelor, astfel încât toate hărțile neuronale să răspundă în același interval și să aibă media zero. Acest lucru ajută la antrenament atunci când următorul strat nu trebuie să învețe offset din datele de intrare și se concentrează și pe modul de a combina mai bine aceste caracteristici.

În decembrie 2015, echipa a lansat o nouă versiune a modulului Inception și a unei arhitecturi similare (vezi lucrarea: Rethinking the Inception Architecture for Computer Vision). Lucrarea explică mai bine arhitectura originală GoogLeNet, oferind mai multe detalii despre alegerile de design. Ideea originală este următoarea:

Prin construirea atentă a rețelei, adâncimea și lățimea sunt echilibrate, pentru a maximiza fluxul de informații în rețea. Înainte de fiecare pooling, adaugă maparea caracteristicilor.
Pe măsură ce adâncimea crește, adâncimea sau numărul de caracteristici ale stratului de rețea crește sistematic.
Folosiți fiecare creștere a adâncimii stratului pentru a crește legătura caracteristicilor înainte de următorul strat.
Folosind doar 3×3 convoluții, un anumit 5×5 și 7×7 poate fi împărțit în mai multe 3×3 atunci când este posibil. Uită-te la imaginea de mai jos


Ca urmare, noul Inception a devenit:


De asemenea, poți împărți filtrul aplatizând convoluția în module mai complexe:


În timpul efectuării calculelor de inception, modulul Inception poate reduce și dimensiunea datelor prin furnizarea pooling-ului. Acest lucru este practic similar cu rularea unui strat simplu de pooling în paralel când rulezi o convoluție:


Inception folosește, de asemenea, un strat de pooling și softmax ca clasificator final.

ResNet
Decembrie 2015 a adus o nouă schimbare, care a coincis cu Inception V3. ResNet are o idee simplă: să alimenteze ieșirea a două straturi convoluționale consecutive și să ocolească intrarea către următorul strat (vezi lucrarea: Deep Residual Learning for Image Recognition).


Acest lucru este similar cu unele dintre ideile vechi de dinainte. Dar în ResNet, ele separă cele două straturi și sunt aplicate la o scară mai mare. Tridarea după 2 straturi este o intuiție esențială, pentru că împărțirea unui singur strat nu aduce mai multă îmbunătățire. Trecerea prin stratul 2 poate fi considerată un clasificator mic sau o rețea în rețea.

Aceasta este prima dată când numărul straturilor de rețea depășește 100, iar chiar și 1000 de straturi pot fi antrenate.

ResNet, care are un număr mare de straturi de rețea, începe să folosească un strat de rețea similar cu stratul de blocaj Inception:


Acest strat procesează un număr mai mic de caracteristici prin mai întâi concurvând un număr mai mic de caracteristici cu un 1×1 cu o ieșire mai mică (de obicei 1/4 din intrare), apoi folosind un strat de 3×3 și apoi un strat de 1×1. Similar modulului Inception, acesta asigură o intensitate computațională redusă, oferind totodată combinații bogate de funcționalități.

ResNet folosește un strat inițial relativ simplu la intrări: un strat de bază cu 7×7 volume și două pool-uri. Compară asta cu Inception V3 și V4, mai complexe și mai puțin intuitive.

ResNet folosește, de asemenea, un strat de pooling plus softmax ca clasificator final.

Alte perspective despre ResNet apar zilnic:

ResNet poate fi considerat atât paralel, cât și contigu, tratând intrările și ieșirile (intrări) ca paralele în multe module, în timp ce ieșirile fiecărui modul sunt conectate continuu.
ResNet poate fi considerată și ca o combinație de module paralele sau continue (vezi lucrarea: Rețelele reziduale sunt ansambluri exponențiale de rețele relativ superficiale).
S-a constatat că ResNet funcționează de obicei în paralel pe blocuri de rețea la straturile 20-30. În loc să curgă continuu pe toată lungimea rețelei.
Când ResNet trimite ieșirea înapoi către intrare ca un RNN, rețeaua poate fi considerată un model cortical de încredere biologică mai bun (vezi lucrarea: Legătura între învățarea reziduală, rețelele neuronale recurente și cortexul vizual).

Inception V4
Iată o altă versiune a Inception de la Christian și echipa lui, care este similară cu Inception V3:


Inception V4 combină, de asemenea, modulul Inception și modulul ResNet:


Cred că arhitectura nu este foarte concisă, dar este plină și de euristici mai puțin transparente. Este dificil să înțelegi alegerile din el și este dificil pentru autori să le explice.

Având în vedere simplitatea rețelei, care poate fi ușor de înțeles și corectat, ResNet ar putea fi mai bun.

SqueezeNet
SqueezeNet (vezi lucrarea: SqueezeNet: acuratețe la nivel AlexNet cu 50 de ori mai puțini parametri și dimensiunea modelului de <0,5MB) este o arhitectură recent publicată care reprocesează conceptele din ResNet și Inception. Un model de rețea cu design arhitectural mai bun este mai mic, iar parametrii nu necesită încă algoritmi complecși de compresie.

ENet
Echipa noastră plănuiește să combine toate caracteristicile arhitecturii recent dezvăluite pentru a crea o rețea foarte eficientă, cu greutate redusă, care folosește mai puțini parametri și calcule pentru a obține rezultate de top. Această arhitectură de rețea se numește ENet și a fost proiectată de Adam Paszke. Am folosit-o deja pentru marcaj pe un singur pixel și rezoluția scenelor.

Pentru mai multe informații despre ENet, vezi articolul ENet: A Deep Neural Network Architecture for Real-Time Semantic Segmentation. ENet este o rețea de codificare, adunare și decodare. Encoderul este un design CNN obișnuit pentru clasificare. Decodorul este o rețea de upsampling care propagă clasificarea înapoi către imaginea originală pentru segmentare. Aceasta folosește doar rețele neuronale și niciun alt algoritm pentru segmentarea imaginilor.

ENet este conceput să folosească cât mai puține resurse posibile la început. De aceea are un script atât de mic, cu o rețea combinată de codificatoare și decode care ocupă 0,7 MB cu o precizie de 16 fp. Chiar și cu un model atât de mic, ENet este similar sau superior altor soluții de rețele neuronale în ceea ce privește acuratețea segmentării.

Analiza modulelor
Analiza modulului CNN, care a fost realizată în lucrarea (Evaluarea sistematică a avansurilor CNN pe ImageNet), este foarte utilă:

Folosește neliniaritatea ELU fără batchnorm sau ReLU cu batchnorm.
Folosește o transformare a spațiului de culoare RGB învățată.
Folosește o strategie liniară de scădere a ratei de învățare.
Folosește suma straturilor comune medii și mai mari.
Folosește un mini-lot de aproximativ 128 până la 256. Dacă este prea mare pentru GPU-ul tău, reduce rata de învățare la această dimensiune.
Folosește stratul complet conectat ca convoluție și mediază toate predicțiile pentru a face predicția finală.
Când studiul crește dimensiunea setului de antrenament, detectează dacă există un platou care nu este atins
Curățenia datelor este mai importantă decât dimensiunea acestora.
Dacă nu poți mări dimensiunea imaginii de intrare, reduce pasul pe straturile următoare, astfel încât să faci asta are același efect.
Dacă rețeaua ta are o arhitectură complexă și foarte optimizată, cum ar fi GoogLeNet, trebuie să fii atent la modificarea ei.

Alte arhitecturi demne de urmărit
FractalNet (vezi lucrarea: FractalNet: Ultra-Deep Neural Networks without Residuals) folosește o arhitectură recursivă, care nu este testată pe ImageNet. Această arhitectură este derivată din ResNet sau, mai general, din ResNet.

viitor
Credem că crearea unei arhitecturi de rețea neuronală este o prioritate de top pentru dezvoltarea învățării profunde. Echipa noastră recomandă cu tărie să citiți cu atenție și să înțelegeți lucrările menționate în articol.

Dar te-ai putea întreba de ce petrecem atât de mult timp creând arhitecturi? De ce să nu ne spui ce să folosim cu datele? Cum combini modulele? Aceste întrebări sunt bune, dar încă în curs de cercetare, și există un articol la care poți face referire: Rețele neuronale cu structură diferențiabilă.

Rețineți că majoritatea arhitecturilor despre care am vorbit în acest articol sunt despre viziunea computerizată. Arhitecturi similare de rețele neuronale au fost dezvoltate în alte domenii și este foarte interesant să afli despre schimbările arhitecturale în toate celelalte sarcini.

Dacă sunteți interesat să comparați arhitectura rețelelor neuronale și performanța computațională, consultați lucrarea: An Analysis of Deep Neural Network Models for Practical Applications.







Precedent:Mai multe metode de calcul a timpului de execuție în Python
Următor:Antminer B3 îți spune ce să sapi!
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com