Cum se configurează smartphone-uri și PC-uri. Portal informativ
  • Acasă
  • In contact cu
  • Limitările învățării profunde și viitor. Cum arată rețelele neuronale profunde și de ce necesită atât de multă memorie

Limitările învățării profunde și viitor. Cum arată rețelele neuronale profunde și de ce necesită atât de multă memorie

Mi-a spus cât de artificial rețele neuronale cum diferă de cele tradiționale programe de calculatorși de ce această tendință va rămâne cu noi mult timp.

Ce este învățarea profundă?

Succesul învățării profunde s-a auzit pentru prima dată în 2012, iar trei ani mai târziu toată lumea vorbește despre asta. Același lucru s-a întâmplat cu internetul în epoca bulei investiționale. Și din moment ce acum se fac investiții considerabile în rețelele neuronale, putem vorbi în siguranță despre o nouă bulă.

Internetul a fost ușor de demonstrat: la început a fost rapid (în comparație cu hârtie) E-mail, apoi site-uri web colorate accesibile pe orice computer conectat la internet. În învățarea profundă, totul este diferit: se acordă atenție, dar este imposibil să demonstrezi ceva specific. Într-adevăr, ceea ce leagă programele și programele de recunoaștere a vorbirii traducere automată, programe de identificare a defecțiunilor în echipamentele de petrol și gaze și programe de sintetizare a textului care descrie fotografii?



Această diversitate nu este întâmplătoare: dacă Internetul este doar un tip de comunicare, atunci rețelele neuronale profunde (DNN) sunt în esență tip nou programe care sunt la fel de versatile ca programele tradiționale de calculator. Această universalitate a fost dovedită teoretic: o rețea neuronală în teorie poate aproxima cu o precizie infinită orice funcție a mai multor variabile - și, de asemenea, poate efectua calcule echivalente cu calculele unei mașini Turing.

Rețele pe care trebuie să le înveți

Informațiile pot fi transmise prin Internet într-un mod foarte monoton, în pachete unificate, și este construită pe această idee. Dar puteți genera informații și le puteți consuma în moduri diferite. Programele de calculator care fac acest lucru sunt foarte diferite. Rețelele neuronale sunt aceleași, oferă aceeași varietate de procesare.

A descrie astăzi ce sunt rețelele neuronale înseamnă a descrie la sfârșitul anilor cincizeci ce sunt programele tradiționale de calculator (și limbajul FORTRAN a fost lansat în 1957) - dacă ai începe să spui că computerele vor controla aprinderea în fiecare mașină și, de asemenea, arătați filme porno. pe ecranele telefonului te-ar face să râzi.

Dacă îți spun acum că vei vorbi cu un neuronal rețea de calculatoareîn tableta ta, iar rețeaua neuronală va controla o mașină fără șofer, nici tu nu o vei crede - dar în zadar.

Apropo, „fotografii porno” în în rețelele sociale Nu mai este descoperit de oameni, ci de rețelele în sine. Dar 100 de mii de oameni din lume făceau asta, urmărind terabytes și terabytes de fotografii și videoclipuri. Odată cu apariția învățării profunde, lumea procesării datelor a început brusc să se schimbe și rapid.

Spre deosebire de programele de calculator tradiționale, rețelele neuronale nu trebuie să fie „scrise”, ele trebuie să fie „învățate”. Și pot fi învățați ceea ce este infinit de dificil (dacă nu imposibil) de implementat cu ingineria software tradițională. De exemplu, rețelele neuronale au învățat deja să recunoască audio și video la nivelul oamenilor – și chiar mai bine decât ei. Sau invers, creați audio și video - dacă aveți o înțelegere a imaginilor unor obiecte întruchipate într-o rețea neuronală profundă antrenată, aceeași înțelegere poate fi folosită pentru a crea imagini ale acestor obiecte. Sinteza vocii, textului și imaginilor nu a ajuns încă pe piață, dar experimentele arată deja succese de neatins în acest domeniu. Mai mult, rețelele neuronale pot nu numai să analizeze date, ci și să emită comenzi. Deci, au învățat să joace jocuri Atari 2600, chiar multe mai bun decât omul, și nu trebuiau să fie programate special pentru asta.

Cum a devenit posibil acest lucru doar astăzi? De ce nu au fost obținute astfel de rezultate cu mult timp în urmă, chiar înainte de apariția internetului? La urma urmei, discuțiile despre capacitățile rețelelor neuronale au loc încă din anii 50 ai secolului trecut!

În primul rând, a devenit clar cum să predați rețelele neuronale profunde - ce fel de matematică funcționează acolo. O rețea neuronală profundă înseamnă una cu o adâncime mai mare de două straturi. Dacă există mai puține straturi, atunci vorbim de învățare superficială. Dacă numărul de straturi este mai mare de zece, atunci se vorbește despre învățarea foarte profundă, dar până acum acest lucru este rar. Anterior, ei au încercat să învețe rețelele neuronale prin încercare și eroare (denumită în continuare metoda „științifică”) și astfel au putut doar să se antreneze rețele mici. De-a lungul timpului, a apărut o înțelegere a matematicii rețelelor neuronale multistrat, a devenit posibilă proiectarea acestora și a apărut o înțelegere a modului de a crea noi tipuri de rețele și de a le asigura capacitatea de învățare.

În al doilea rând, rețeaua neuronală funcționează rapid, dar învață foarte lent, iar acest lucru necesită cantități uriașe de date - Date mare . Și cu cât există mai multe straturi într-o rețea neuronală, cu atât o astfel de rețea are mai multe solicitări pentru putere de calcul în timpul antrenamentului. De fapt, până de curând, rețelele neuronale nu puteau fi învățate decât pe un supercomputer.



Astăzi, situația s-a schimbat, deoarece plăcile video au fost conectate la lucrul cu rețele neuronale - iar acest lucru le-a accelerat antrenamentul de zece ori. Dar chiar și o astfel de învățare accelerată înseamnă adesea multe ore și chiar zile, și uneori săptămâni, de calcule. Singura consolare este că, în cazul programării tradiționale, rezolvarea acelorași probleme ar necesita nu doar săptămâni, ci și ani de muncă din partea programatorilor.

Dar odată ce o rețea neuronală profundă este antrenată, este de obicei de sute până la mii de ori mai rapidă decât algoritmii tradiționali. Programul durează de sute de ori mai puțin memorie cu acces aleator la cea mai buna calitate rezultate.

« Maeștrii rețelelor neuronale"

Proprietățile neobișnuite ale acestor rețele au dus la faptul că aproape toate competițiile internaționale în analiza datelor sunt câștigate de rețele neuronale profunde. Și dacă aveți un fel de sarcină de analiză a datelor și există o mulțime de date, atunci există șanse mari ca în acest caz și rețelele neuronale profunde să beneficieze.

Profesia celor implicați în rețelele neuronale nu are încă un nume. Dacă în zorii internetului a apărut conceptul de „webmaster” (și a durat cinci sau șase ani), atunci nu există încă o profesie similară de „maestru al rețelei neuronale”. În domeniul datelor mari, astfel de specialiști se autointitulează „scientists în date”, dar totuși munca lor este de aceeași natură inginerească ca și munca programatorilor. Inginerii măsoară, analizează, proiectează, construiesc și țintesc sisteme și instrumente de inginerie. Ingineria software este diferită de informatică(informatică). La fel este și cu rețelele neuronale: nu există încă un nume pentru profesie, dar există deja ingineri care te vor ajuta să le creezi, să le antrenezi și să le folosești. Din fericire, pentru Anul trecut infrastructura dezvoltată pentru noua profesie: universitate cursuri de pregatire, zeci de tutoriale, cărți, terenuri de competiție și antrenament, o cantitate mare software gratuit. Numai în comunitatea de învățare profundă vorbitoare de limbă rusă VKontakte astăzi

Astăzi, un grafic este una dintre cele mai acceptabile modalități de a descrie modelele create în sistem învățare automată. Aceste grafice de calcul sunt compuse din vârfuri de neuroni conectate prin margini de sinapsă care descriu conexiunile dintre vârfuri.

Spre deosebire de un procesor scalar central sau de grafică vectorială, un IPU, un nou tip de procesor conceput pentru învățarea automată, permite construirea unor astfel de grafice. Un computer care este conceput pentru a gestiona grafice - masina perfecta pentru modele de grafice computaționale generate de învățarea automată.

Una dintre cele mai moduri simple Modul de a descrie procesul de inteligență mașină este de a-l vizualiza. Echipa de dezvoltare Graphcore a creat o colecție de astfel de imagini care sunt afișate pe IPU. S-a bazat pe software Plopul, care vizualizează munca inteligenţă artificială. Cercetătorii acestei companii au aflat și de ce rețele profunde necesită atât de multă memorie și ce soluții există la problemă.

Poplar include un compilator grafic care a fost construit de la zero pentru a traduce operațiunile standard de învățare automată în cod de aplicație IPU foarte optimizat. Vă permite să colectați aceste grafice împreună folosind același principiu în care sunt colectate POPNN-urile. Biblioteca conține un set tipuri variate vârfuri pentru primitive generalizate.

Graficele sunt paradigma pe care se bazează toate programele. În Poplar, graficele vă permit să definiți un proces de calcul, în care vârfurile efectuează operații și muchiile descriu relația dintre ele. De exemplu, dacă doriți să adăugați două numere împreună, puteți defini un vârf cu două intrări (numerele pe care doriți să le adăugați), câteva calcule (o funcție pentru a adăuga două numere) și o ieșire (rezultatul).

De obicei, operațiile cu vârfuri sunt mult mai complexe decât în ​​exemplul descris mai sus. Ele sunt adesea determinate programe mici, numite codeleturi (nume de cod). Abstracția grafică este atractivă deoarece nu face ipoteze cu privire la structura calculului și descompune calculul în componente pe care IPU le poate folosi pentru a opera.

Plopul folosește această abstractizare simplă pentru a construi grafice foarte mari care sunt reprezentate ca imagini. Generarea software-ului a graficului înseamnă că îl putem adapta la calculele specifice necesare pentru a asigura cel mai mult utilizare eficientă resursele UIP.

Compilatorul traduce operațiuni standard, utilizat în sistemele de învățare automată, în codul aplicației IPU foarte optimizat. Compilatorul de grafice creează o imagine intermediară a graficului de calcul, care este implementată pe unul sau mai multe dispozitive IPU. Compilatorul poate afișa acest grafic de calcul, astfel încât o aplicație scrisă la nivelul cadrului rețelei neuronale afișează o imagine a graficului de calcul care rulează pe IPU.


Graficul întregului ciclu de antrenament AlexNet în direcții înainte și înapoi

Compilatorul de grafică Poplar a transformat descrierea AlexNet într-un grafic de calcul de 18,7 milioane de vârfuri și 115,8 milioane de muchii. Gruparea clar vizibilă este rezultatul unei comunicări puternice între procesele din fiecare strat al rețelei, cu o comunicare mai ușoară între straturi.

Un alt exemplu este o rețea simplă complet conectată, instruită pe MNIST - apelare simplă date pentru viziune computerizată, un fel de „Bună, lume” în învățarea automată. Rețea simplă explorarea acestui set de date ajută la înțelegerea graficelor care sunt conduse de aplicațiile Poplar. Prin integrarea bibliotecilor de grafice cu cadre precum TensorFlow, compania oferă unul dintre moduri simple pentru utilizarea IPU-urilor în aplicații de învățare automată.

După ce graficul a fost construit folosind compilatorul, acesta trebuie să fie executat. Acest lucru este posibil folosind Graph Engine. Exemplul ResNet-50 demonstrează funcționarea acestuia.


Graficul ResNet-50

Arhitectura ResNet-50 permite crearea de rețele profunde din partiții repetate. Procesorul trebuie să definească aceste secțiuni doar o dată și să le apeleze din nou. De exemplu, clusterul de nivel conv4 este executat de șase ori, dar mapat o singură dată pe grafic. Imaginea demonstrează, de asemenea, varietatea de forme ale straturilor convoluționale, deoarece fiecare are un grafic construit conform unei forme naturale de calcul.

Motorul creează și gestionează execuția unui model de învățare automată folosind un grafic generat de compilator. Odată implementat, Graph Engine monitorizează și răspunde la IPU-urile sau dispozitivele utilizate de aplicații.

Imaginea ResNet-50 arată întregul model. La acest nivel este dificil să identifici conexiunile între vârfurile individuale, așa că merită să te uiți la imaginile mărite. Mai jos sunt câteva exemple de secțiuni din straturile rețelei neuronale.

De ce rețelele profunde au nevoie de atât de multă memorie?

Cantitățile mari de memorie ocupată sunt una dintre cele mai multe probleme mari rețele neuronale profunde. Cercetătorii încearcă să combată limita debitului Dispozitivele DRAM care ar trebui utilizate sisteme moderne pentru a stoca un număr mare de greutăți și activări într-o rețea neuronală profundă.

Arhitecturile au fost proiectate folosind cipuri de procesor concepute pentru procesare secvențială și optimizare DRAM pentru memorie de înaltă densitate. Interfața dintre aceste două dispozitive este un blocaj care introduce limitări ale lățimii de bandă și adaugă o suprasarcină semnificativă în consumul de energie.

Deși nu avem încă o înțelegere completă a creierului uman și a modului în care funcționează, se înțelege în general că nu există un mare depozit de memorie separat. Se crede că funcția memoriei pe termen lung și pe termen scurt din creierul uman este încorporată în structura neuronilor + sinapselor. Chiar și organisme simple precum viermii, cu o structură cerebrală neuronală de puțin peste 300 de neuroni, au o anumită funcție de memorie.

Construirea memoriei în procesoarele convenționale este o modalitate de a ocoli problema blocajele memorie, deblocând o lățime de bandă enormă la un consum mult mai mic de energie. Cu toate acestea, memoria pe cip este costisitoare și nu este concepută pentru cantitățile cu adevărat mari de memorie care sunt atașate la procesoarele și GPU-urile utilizate în prezent pentru antrenarea și implementarea rețelelor neuronale profunde.

Așadar, este util să ne uităm la modul în care memoria este utilizată astăzi în procesoare și sisteme de deep learning bazate pe GPU și să vă întrebați de ce au nevoie de o astfel de memorie. dispozitive mari stocarea memoriei când creierul uman funcționează bine fără ele?

Rețelele neuronale au nevoie de memorie pentru a stoca datele de intrare, greutățile și funcțiile de activare pe măsură ce intrarea se propagă prin rețea. În învățare, activarea pe intrare trebuie menținută până când poate fi utilizată pentru a calcula erorile în gradienții de ieșire.

De exemplu, o rețea ResNet cu 50 de straturi are aproximativ 26 de milioane de parametri de greutate și calculează 16 milioane de activări înainte. Dacă utilizați un float pe 32 de biți pentru a stoca fiecare greutate și activare, va necesita aproximativ 168 MB de spațiu. Folosind mai mult valoare mica precizie de a stoca aceste greutăți și activări, am putea înjumătăți sau chiar de patru ori această cerință de stocare.

O problemă majoră de memorie apare din faptul că GPU-urile se bazează pe date reprezentate ca vectori denși. Prin urmare, ei pot folosi un singur fir de instrucțiuni (SIMD) pentru a obține o densitate mare de calcul. CPU folosește unități vectoriale similare pentru calcul de înaltă performanță.

GPU-urile au o lățime de sinapsă de 1024 de biți, așa că folosesc date în virgulă mobilă pe 32 de biți, așa că adesea le împart în mini-lot paralel de 32 de eșantioane pentru a crea vectori de date pe 1024 de biți. Această abordare a organizării paralelismului vectorial crește numărul de activări de 32 de ori și necesitatea de depozitare locală cu o capacitate de peste 2 GB.

GPU-urile și alte mașini proiectate pentru algebra matriceală sunt, de asemenea, supuse încărcării de memorie din cauza greutăților sau activărilor rețelei neuronale. GPU-urile nu pot efectua eficient micile convoluții utilizate în rețelele neuronale profunde. Prin urmare, o transformare numită „reducere” este utilizată pentru a converti aceste convoluții în înmulțiri matrice-matrice (GEMM), cu care acceleratoare grafice poate face față eficient.

De asemenea, este necesară o memorie suplimentară pentru a stoca datele de intrare, valorile temporare și instrucțiunile programului. Măsurarea utilizării memoriei la antrenamentul ResNet-50 pe HPC GPU a arătat că necesită mai mult de 7,5 GB de DRAM local.

Unii ar putea crede că o precizie de calcul mai mică ar putea reduce cantitatea de memorie necesară, dar nu este cazul. Prin comutarea valorilor datelor la jumătate de precizie pentru greutăți și activări, veți umple doar jumătate din lățimea vectorului SIMD, irosind jumătate din resursele de calcul disponibile. Pentru a compensa acest lucru, atunci când treceți de la precizie completă la precizie jumătate pe GPU, va trebui apoi să dubleți dimensiunea mini-lotului pentru a forța suficient paralelism de date pentru a utiliza toate calculele disponibile. Astfel, trecerea la greutăți de precizie mai mică și activări pe GPU necesită încă mai mult de 7,5 GB de memorie dinamică cu acces liber.

Cu asa o cantitate mare date care trebuie stocate, este pur și simplu imposibil să le potriviți pe toate în GPU. Fiecare strat de rețea neuronală convoluțională trebuie să stocheze starea DRAM-ului extern, să încarce următorul strat de rețea și apoi să încarce datele în sistem. Drept urmare, interfața este deja limitată de lățimea de bandă și latența memoriei. memorie externa suferă de o povară suplimentară repornire constantă greutăți și stocarea și preluarea funcțiilor de activare. Acest lucru încetinește semnificativ timpul de antrenament și crește semnificativ consumul de energie.

Există mai multe modalități de a rezolva această problemă. În primul rând, operațiuni precum funcțiile de activare pot fi efectuate „in loc”, permițând ca datele de intrare să fie rescrise direct la ieșire. Prin urmare, memorie existenta poate fi refolosit. În al doilea rând, oportunitatea pentru reutilizare memoria poate fi obținută prin analiza dependenței de date dintre operațiunile din rețea și alocarea aceleiași memorie operațiunilor care nu o folosesc în acel moment.

A doua abordare este deosebit de eficientă atunci când întreaga rețea neuronală poate fi analizată în timpul compilării pentru a crea o memorie fixă ​​alocată, deoarece supraîncărcarea de gestionare a memoriei este redusă la aproape zero. S-a dovedit că combinația acestor metode poate reduce utilizarea memoriei unei rețele neuronale de două până la trei ori.
O a treia abordare semnificativă a fost descoperită recent de echipa Baidu Deep Speech. Au aplicat diverse metode economisirea memoriei pentru a obține o reducere de 16 ori a consumului de memorie al funcțiilor de activare, ceea ce le-a permis să antreneze rețele cu 100 de straturi. Anterior, cu aceeași cantitate de memorie, puteau antrena rețele cu nouă straturi.

Combinarea memoriei și a resurselor de procesare într-un singur dispozitiv are un potențial semnificativ de a îmbunătăți performanța și eficiența rețelelor neuronale convoluționale, precum și a altor forme de învățare automată. Pot fi făcute compromisuri între resursele de memorie și de calcul pentru a obține un echilibru între caracteristici și performanță în sistem.

Rețelele neuronale și modelele de cunoștințe din alte metode de învățare automată pot fi considerate grafice matematice. Există o cantitate imensă de paralelism concentrat în aceste grafice. Un procesor paralel conceput pentru a exploata paralelismul în grafice nu se bazează pe mini-loturi și poate reduce semnificativ cantitatea de stocare locală necesară.

Rezultatele cercetărilor actuale au arătat că toate aceste metode pot îmbunătăți semnificativ performanța rețelelor neuronale. GPU-urile și procesoarele moderne au o memorie la bord foarte limitată, doar câțiva megaocteți în total. Noile arhitecturi de procesor concepute special pentru învățarea automată echilibrează memoria și calculul pe cip, oferind îmbunătățiri semnificative de performanță și eficiență față de tehnologiile actuale. procesoare centraleși acceleratoare grafice.

Astăzi, un grafic este una dintre cele mai acceptabile modalități de a descrie modelele create într-un sistem de învățare automată. Aceste grafice de calcul sunt compuse din vârfuri de neuroni conectate prin margini de sinapsă care descriu conexiunile dintre vârfuri.

Spre deosebire de un procesor scalar central sau de grafică vectorială, un IPU, un nou tip de procesor conceput pentru învățarea automată, permite construirea unor astfel de grafice. Un computer conceput pentru a manipula grafice este o mașină ideală pentru calcularea modelelor de grafice create prin învățarea automată.

Una dintre cele mai ușoare moduri de a descrie procesul de inteligență a mașinii este vizualizarea acestuia. Echipa de dezvoltare Graphcore a creat o colecție de astfel de imagini care sunt afișate pe IPU. Se bazează pe software-ul Poplar, care vizualizează munca inteligenței artificiale. Cercetătorii acestei companii au descoperit și de ce rețelele profunde necesită atât de multă memorie și ce soluții există pentru a rezolva problema.

Poplar include un compilator grafic care a fost construit de la zero pentru a traduce operațiunile standard de învățare automată în cod de aplicație IPU foarte optimizat. Vă permite să colectați aceste grafice împreună folosind același principiu în care sunt colectate POPNN-urile. Biblioteca conține un set de tipuri diferite de vârfuri pentru primitive generalizate.

Graficele sunt paradigma pe care se bazează toate programele. În Poplar, graficele vă permit să definiți un proces de calcul, în care vârfurile efectuează operații și muchiile descriu relația dintre ele. De exemplu, dacă doriți să adăugați două numere împreună, puteți defini un vârf cu două intrări (numerele pe care doriți să le adăugați), câteva calcule (o funcție pentru a adăuga două numere) și o ieșire (rezultatul).

De obicei, operațiile cu vârfuri sunt mult mai complexe decât în ​​exemplul descris mai sus. Ele sunt adesea definite de mici programe numite codeleturi (nume de cod). Abstracția grafică este atractivă deoarece nu face ipoteze cu privire la structura calculului și descompune calculul în componente pe care IPU le poate folosi pentru a opera.

Plopul folosește această abstractizare simplă pentru a construi grafice foarte mari care sunt reprezentate ca imagini. Generarea software-ului a graficului înseamnă că îl putem adapta la calculele specifice necesare pentru a asigura cea mai eficientă utilizare a resurselor IPU.

Compilatorul traduce operațiunile standard utilizate în sistemele de învățare automată în cod de aplicație extrem de optimizat pentru IPU. Compilatorul de grafice creează o imagine intermediară a graficului de calcul, care este implementată pe unul sau mai multe dispozitive IPU. Compilatorul poate afișa acest grafic de calcul, astfel încât o aplicație scrisă la nivelul cadrului rețelei neuronale afișează o imagine a graficului de calcul care rulează pe IPU.


Graficul întregului ciclu de antrenament AlexNet în direcții înainte și înapoi

Compilatorul de grafică Poplar a transformat descrierea AlexNet într-un grafic de calcul de 18,7 milioane de vârfuri și 115,8 milioane de muchii. Gruparea clar vizibilă este rezultatul unei comunicări puternice între procesele din fiecare strat al rețelei, cu o comunicare mai ușoară între straturi.

Un alt exemplu este o rețea simplă complet conectată, instruită pe MNIST, un set de date simplu de viziune computerizată, un fel de „Bună ziua, lume” în învățarea automată. O rețea simplă pentru a explora acest set de date ajută la înțelegerea graficelor conduse de aplicațiile Poplar. Prin integrarea bibliotecilor de grafice cu cadre precum TensorFlow, compania oferă una dintre cele mai simple moduri de a utiliza IPU-urile în aplicațiile de învățare automată.

După ce graficul a fost construit folosind compilatorul, acesta trebuie să fie executat. Acest lucru este posibil folosind Graph Engine. Exemplul ResNet-50 demonstrează funcționarea acestuia.


Graficul ResNet-50

Arhitectura ResNet-50 permite crearea de rețele profunde din partiții repetate. Procesorul trebuie să definească aceste secțiuni doar o dată și să le apeleze din nou. De exemplu, clusterul de nivel conv4 este executat de șase ori, dar mapat o singură dată pe grafic. Imaginea demonstrează, de asemenea, varietatea de forme ale straturilor convoluționale, deoarece fiecare are un grafic construit conform unei forme naturale de calcul.

Motorul creează și gestionează execuția unui model de învățare automată folosind un grafic generat de compilator. Odată implementat, Graph Engine monitorizează și răspunde la IPU-urile sau dispozitivele utilizate de aplicații.

Imaginea ResNet-50 arată întregul model. La acest nivel este dificil să identifici conexiunile între vârfurile individuale, așa că merită să te uiți la imaginile mărite. Mai jos sunt câteva exemple de secțiuni din straturile rețelei neuronale.

De ce rețelele profunde au nevoie de atât de multă memorie?

Amprentele mari de memorie sunt una dintre cele mai mari provocări ale rețelelor neuronale profunde. Cercetătorii încearcă să combată lățimea de bandă limitată a dispozitivelor DRAM, pe care sistemele moderne trebuie să o folosească pentru a stoca un număr mare de greutăți și activări într-o rețea neuronală profundă.

Arhitecturile au fost proiectate folosind cipuri de procesor concepute pentru procesare secvențială și optimizare DRAM pentru memorie de înaltă densitate. Interfața dintre aceste două dispozitive este un blocaj care introduce limitări ale lățimii de bandă și adaugă o suprasarcină semnificativă în consumul de energie.

Deși nu avem încă o înțelegere completă a creierului uman și a modului în care funcționează, se înțelege în general că nu există un mare depozit de memorie separat. Se crede că funcția memoriei pe termen lung și pe termen scurt din creierul uman este încorporată în structura neuronilor + sinapselor. Chiar și organisme simple precum viermii, cu o structură cerebrală neuronală de puțin peste 300 de neuroni, au un anumit grad de funcție de memorie.

Construirea memoriei în procesoarele convenționale este o modalitate de a evita problema blocajului memoriei, deblocând o lățime de bandă enormă și consumând mult mai puțină energie. Cu toate acestea, memoria pe cip este costisitoare și nu este concepută pentru cantitățile cu adevărat mari de memorie care sunt atașate la procesoarele și GPU-urile utilizate în prezent pentru antrenarea și implementarea rețelelor neuronale profunde.

Așadar, este util să ne uităm la modul în care memoria este folosită astăzi în procesoare și sisteme de deep learning bazate pe GPU și să vă întrebați: de ce au nevoie de dispozitive de stocare a memoriei atât de mari când creierul uman funcționează bine fără ele?

Rețelele neuronale au nevoie de memorie pentru a stoca datele de intrare, greutățile și funcțiile de activare pe măsură ce intrarea se propagă prin rețea. În învățare, activarea pe intrare trebuie menținută până când poate fi utilizată pentru a calcula erorile în gradienții de ieșire.

De exemplu, o rețea ResNet cu 50 de straturi are aproximativ 26 de milioane de parametri de greutate și calculează 16 milioane de activări înainte. Dacă utilizați un float pe 32 de biți pentru a stoca fiecare greutate și activare, va necesita aproximativ 168 MB de spațiu. Folosind o valoare mai mică de precizie pentru a stoca aceste greutăți și activări, am putea înjumătăți sau chiar de patru ori această cerință de stocare.

O problemă majoră de memorie apare din faptul că GPU-urile se bazează pe date reprezentate ca vectori denși. Prin urmare, ei pot folosi un singur fir de instrucțiuni (SIMD) pentru a obține o densitate mare de calcul. CPU folosește unități vectoriale similare pentru calcul de înaltă performanță.

GPU-urile au o lățime de sinapsă de 1024 de biți, așa că folosesc date în virgulă mobilă pe 32 de biți, așa că adesea le împart în mini-lot paralel de 32 de eșantioane pentru a crea vectori de date pe 1024 de biți. Această abordare a paralelismului vectorial crește numărul de activări de 32 de ori și nevoia de stocare locală cu o capacitate de peste 2 GB.

GPU-urile și alte mașini proiectate pentru algebra matriceală sunt, de asemenea, supuse încărcării de memorie din cauza greutăților sau activărilor rețelei neuronale. GPU-urile nu pot efectua eficient micile convoluții utilizate în rețelele neuronale profunde. Prin urmare, o transformare numită „reducere” este utilizată pentru a converti aceste convoluții în multiplicari matrice-matrice (GEMM), pe care GPU-urile le pot gestiona eficient.

De asemenea, este necesară o memorie suplimentară pentru a stoca datele de intrare, valorile temporare și instrucțiunile programului. Măsurarea utilizării memoriei la antrenamentul ResNet-50 pe un GPU high-end a arătat că necesită mai mult de 7,5 GB de DRAM local.

Unii ar putea crede că o precizie de calcul mai mică ar putea reduce cantitatea de memorie necesară, dar nu este cazul. Prin comutarea valorilor datelor la jumătate de precizie pentru greutăți și activări, veți umple doar jumătate din lățimea vectorului SIMD, irosind jumătate din resursele de calcul disponibile. Pentru a compensa acest lucru, atunci când treceți de la precizie completă la precizie jumătate pe GPU, va trebui apoi să dubleți dimensiunea mini-lotului pentru a forța suficient paralelism de date pentru a utiliza toate calculele disponibile. Astfel, trecerea la greutăți de precizie mai mică și activări pe GPU necesită încă mai mult de 7,5 GB de memorie dinamică cu acces liber.

Cu atât de multe date de stocat, este pur și simplu imposibil să le potriviți pe toate într-un GPU. Fiecare strat de rețea neuronală convoluțională trebuie să stocheze starea DRAM-ului extern, să încarce următorul strat de rețea și apoi să încarce datele în sistem. Drept urmare, interfața de memorie externă deja limitată la lățime de bandă suferă de sarcina suplimentară de a reîncărca constant cântarul și de a stoca și prelua funcțiile de activare. Acest lucru încetinește semnificativ timpul de antrenament și crește semnificativ consumul de energie.

Există mai multe modalități de a rezolva această problemă. În primul rând, operațiuni precum funcțiile de activare pot fi efectuate „in loc”, permițând ca datele de intrare să fie rescrise direct la ieșire. În acest fel, memoria existentă poate fi reutilizată. În al doilea rând, posibilitatea de reutilizare a memoriei poate fi obținută prin analiza dependenței de date dintre operațiunile din rețea și alocarea aceleiași memorie operațiunilor care nu o folosesc în prezent.

A doua abordare este deosebit de eficientă atunci când întreaga rețea neuronală poate fi analizată în timpul compilării pentru a crea o memorie fixă ​​alocată, deoarece supraîncărcarea de gestionare a memoriei este redusă la aproape zero. S-a dovedit că combinația acestor metode poate reduce utilizarea memoriei unei rețele neuronale de două până la trei ori.
O a treia abordare semnificativă a fost descoperită recent de echipa Baidu Deep Speech. Ei au aplicat diverse tehnici de economisire a memoriei pentru a obține o reducere de 16 ori a consumului de memorie al funcțiilor de activare, permițându-le să antreneze rețele cu 100 de straturi. Anterior, cu aceeași cantitate de memorie, puteau antrena rețele cu nouă straturi.

Combinarea memoriei și a resurselor de procesare într-un singur dispozitiv are un potențial semnificativ de a îmbunătăți performanța și eficiența rețelelor neuronale convoluționale, precum și a altor forme de învățare automată. Pot fi făcute compromisuri între resursele de memorie și de calcul pentru a obține un echilibru între caracteristici și performanță în sistem.

Rețelele neuronale și modelele de cunoștințe din alte metode de învățare automată pot fi considerate grafice matematice. Există o cantitate imensă de paralelism concentrat în aceste grafice. Un procesor paralel conceput pentru a exploata paralelismul în grafice nu se bazează pe mini-loturi și poate reduce semnificativ cantitatea de stocare locală necesară.

Rezultatele cercetărilor actuale au arătat că toate aceste metode pot îmbunătăți semnificativ performanța rețelelor neuronale. GPU-urile și procesoarele moderne au o memorie la bord foarte limitată, doar câțiva megaocteți în total. Noile arhitecturi de procesor concepute special pentru învățarea automată echilibrează memoria și calculul pe cip, oferind îmbunătățiri semnificative de performanță și eficiență față de procesoarele și GPU-urile actuale.

Ce este învățarea profundă? 3 martie 2016

În zilele noastre se vorbește despre tehnologiile de deep learning la modă ca și cum ar fi mana din rai. Dar înțeleg vorbitorii ce este cu adevărat? Dar asta nu are concept definiție formalăși combină o mulțime de tehnologii. În această postare vreau să explic cât mai popular și în esență ce se află în spatele acestui termen, de ce este atât de popular și ce ne oferă aceste tehnologii.


Pe scurt, asta termen nou(învățare profundă) despre cum să asamblați o abstracție (reprezentare) mai complexă și mai profundă din unele abstracțiuni simple în ciuda faptului că și cele mai simple abstracții trebuie asamblate de computerul însuși, și nu de o persoană. Acestea. Nu mai este vorba doar despre învățare, ci despre meta-învățare. Figurat vorbind, computerul însuși trebuie să învețe cum să învețe cel mai bine. Și, de fapt, asta este exact ceea ce implică termenul „adânc”. Aproape întotdeauna, acest termen este aplicat rețelelor neuronale artificiale care folosesc mai mult de un strat ascuns, așa că în mod formal „adânc” înseamnă și o arhitectură de rețea neuronală mai profundă.

Aici, în slide-ul de dezvoltare, puteți vedea clar cât de diferită învățarea profundă de învățarea obișnuită. Repet, Ceea ce este unic la deep learning este că mașina găsește caracteristicile în sine(trăsăturile cheie ale ceva prin care este cel mai ușor să separați o clasă de obiecte de alta) și structurează aceste semne ierarhic: cele mai simple sunt combinate în altele mai complexe. Mai jos ne vom uita la asta cu un exemplu.

Să ne uităm la un exemplu de sarcină de recunoaștere a imaginii: înainte, au introdus una uriașă într-o rețea neuronală obișnuită cu un singur strat (1024×768 - aproximativ 800.000). valori numerice) a fotografiat și a văzut computerul murind încet, sufocându-se din cauza lipsei de memorie și a incapacității de a înțelege ce pixeli sunt importanți pentru recunoaștere și care nu. Ca să nu mai vorbim de eficacitatea acestei metode. Iată arhitectura unei astfel de rețele neuronale obișnuite (de mică adâncime).

Apoi au ascultat modul în care creierul distinge trăsăturile și face acest lucru într-o manieră strict ierarhică și au decis, de asemenea, să extragă o structură ierarhică din imagini. Pentru a face acest lucru, a fost necesar să adăugați mai multe straturi ascunse (straturi care se află între intrare și ieșire; aproximativ vorbind, etapele de transformare a informațiilor) la rețeaua neuronală. Deși au decis să facă acest lucru aproape imediat când au fost inventați neuronii, atunci rețelele cu un singur strat ascuns au fost antrenate cu succes. Acestea. În principiu, rețelele profunde există de aproximativ la fel de mult timp ca cele obișnuite, pur și simplu nu le-am putut antrena. Ce s-a schimbat?

În 2006, mai mulți cercetători independenți au rezolvat această problemă deodată (în plus, capabilitățile hardware se dezvoltaseră deja suficient, au apărut plăcile video destul de puternice). Acești cercetători sunt: ​​Geoffrey Hinton (și colegul său Ruslan Salakhutidinov) cu tehnica de pre-antrenare a fiecărui strat al unei rețele neuronale cu o mașină Boltzmann constrânsă (iertați-mă pentru acești termeni...), Yann LeCun cu rețele neuronale convoluționale și Yoshuay Bengio cu autoencodere în cascadă. Primii doi au fost recrutați imediat de Google și, respectiv, de Facebook. Iată două prelegeri: una - Hinton, celălalt - Lyakuna, în care ei spun ce este învățarea profundă. Nimeni nu vă poate spune despre asta mai bine decât ei. Inca una misto lectura Schmidhuber despre dezvoltarea învățării profunde, de asemenea, unul dintre pilonii acestei științe. Și Hinton are și un curs excelent despre neuroni.

Ce pot face acum rețelele neuronale profunde? Ei sunt capabili să recunoască și să descrie obiecte; s-ar putea spune că „înțeleg” ce este. Este despre despre recunoașterea semnificațiilor.

Vizionați acest videoclip de recunoaștere în timp real a ceea ce vede camera.

După cum am spus deja, tehnologiile de învățare profundă sunt un întreg grup de tehnologii și soluții. Am enumerat deja câteva dintre ele în paragraful de mai sus, un alt exemplu sunt rețelele recurente, care sunt folosite în videoclipul de mai sus pentru a descrie ceea ce vede rețeaua. Dar cel mai popular reprezentant al tehnologiei din această clasă- acestea sunt încă rețele neuronale convoluționale LyaKun. Ele sunt construite prin analogie cu principiile de funcționare a cortexului vizual al creierului pisicii, în care au fost descoperite așa-numitele celule simple care răspund la linii drepte în unghiuri diferite și celule complexe - a căror reacție este asociată cu activarea. a unui anumit set de celule simple. Deși, să fiu sincer, LaCun însuși nu era concentrat pe biologie, a decis el sarcina specifica(vizionați-i prelegerile), și apoi a coincis.

Pentru a spune simplu, rețelele convoluționale sunt rețele în care principalul element structuralînvățarea este un grup (combinație) de neuroni (de obicei un pătrat de 3x3, 10x10 etc.), și nu unul. Și la fiecare nivel al rețelei sunt instruite zeci de astfel de grupuri. Rețeaua găsește combinații de neuroni care maximizează informațiile despre imagine. La primul nivel, rețeaua extrage cele mai elementare, structural simple elemente ale imaginii - s-ar putea spune, unități de construcție: limite, linii, segmente, contraste. Mai sus sunt deja combinații stabile de elemente ale primului nivel și așa mai departe în lanț. Aș dori să subliniez încă o dată caracteristica principalăînvățarea profundă: rețelele înseși formează aceste elemente și decid care dintre ele sunt mai importante și care nu. Acest lucru este important deoarece în domeniul învățării automate, crearea de caracteristici este esențială și acum trecem la etapa în care computerul însuși învață să creeze și să selecteze caracteristici. Aparatul în sine identifică o ierarhie de caracteristici informative.

Deci, în timpul procesului de învățare (vizionarea a sute de imagini), rețeaua convoluțională formează o ierarhie de caracteristici de diferite niveluri de adâncime. La primul nivel, ele pot evidenția, de exemplu, astfel de elemente (reflectare contrast, unghi, chenar etc.).


La al doilea nivel, acesta va fi deja un element din elementele primului nivel. Pe a treia - din a doua. Trebuie să înțelegem asta această imagine- doar o demonstrație. Acum, în uz industrial, astfel de rețele au de la 10 la 30 de straturi (nivele).

După ce o astfel de rețea s-a antrenat, o putem folosi pentru clasificare. După ce au dat o imagine ca intrare, grupuri de neuroni din primul strat parcurg imaginea, activând în acele locuri în care există un element al imaginii corespunzător unui anumit element. Acestea. această rețea analizează imaginea în părți - mai întâi în linii, linii, unghiuri de înclinare, apoi părți mai complexe și în final se ajunge la concluzia că imaginea este din acest tip de combinație elemente de baza- acest chip.

Mai multe despre rețelele convoluționale -

Inteligența artificială, rețelele neuronale, învățarea automată - ce înseamnă de fapt toate aceste concepte populare în prezent? Pentru majoritatea oamenilor neinițiați, care sunt și eu, au părut întotdeauna ceva fantastic, dar de fapt esența lor se află la suprafață. Am de multă vreme ideea să scriu într-un limbaj simplu despre rețelele neuronale artificiale. Aflați singuri și spuneți-le altora ce este această tehnologie, cum funcționează, luați în considerare istoria și perspectivele ei. În acest articol, am încercat să nu intru în buruieni, ci să vorbesc simplu și popular despre această direcție promițătoare în lumea înaltei tehnologii.

Inteligența artificială, rețelele neuronale, învățarea automată - ce înseamnă de fapt toate aceste concepte populare în prezent? Pentru majoritatea oamenilor neinițiați, care sunt și eu, au părut întotdeauna ceva fantastic, dar de fapt esența lor se află la suprafață. De mult am avut ideea de a scrie într-un limbaj simplu despre rețelele neuronale artificiale. Aflați singuri și spuneți-le altora ce este această tehnologie, cum funcționează, luați în considerare istoria și perspectivele ei. În acest articol, am încercat să nu intru în buruieni, ci să vorbesc simplu și popular despre această direcție promițătoare în lumea înaltei tehnologii.

Puțină istorie

Pentru prima dată, conceptul de rețele neuronale artificiale (ANN) a apărut în încercarea de a simula procesele creierului. Prima descoperire majoră în acest domeniu poate fi considerată crearea modelului rețelei neuronale McCulloch-Pitts în 1943. Oamenii de știință au dezvoltat pentru prima dată un model de neuron artificial. Ei au propus, de asemenea, proiectarea unei rețele din aceste elemente de realizat operatii logice. Dar, cel mai important, oamenii de știință au demonstrat asta rețea similară capabil să învețe.

Următorul pas important a fost dezvoltarea de către Donald Hebb a primului algoritm pentru calcularea unui ANN în 1949, care a devenit fundamental pentru câteva decenii ulterioare. În 1958, Frank Rosenblatt a dezvoltat parceptronul, un sistem care imită procesele creierului. La un moment dat, tehnologia nu avea analogi și este încă fundamentală în rețelele neuronale. În 1986, aproape simultan, independent unul de celălalt, oamenii de știință americani și sovietici au îmbunătățit semnificativ metoda fundamentală de formare a unui perceptron multistrat. În 2007, rețelele neuronale au cunoscut o renaștere. Informaticianul britanic Geoffrey Hinton a dezvoltat pentru prima dată un algoritm de învățare profundă pentru rețelele neuronale cu mai multe straturi, care acum este, de exemplu, folosit pentru a conduce mașinile autonome.

Pe scurt despre principalul lucru

ÎN în sens general cuvinte, rețelele neuronale sunt modele matematice, lucrând pe principiul rețelelor de celule nervoase dintr-un corp animal. ANN-urile pot fi implementate atât în ​​soluții programabile, cât și în soluții hardware. Pentru a face lucrurile mai ușor de înțeles, un neuron poate fi considerat ca o celulă care are multe găuri de intrare și o găuri de ieșire. Modul în care semnalele multiple de intrare sunt formate într-un semnal de ieșire este determinat de algoritmul de calcul. Valorile eficiente sunt furnizate fiecărui neuron de intrare, care sunt apoi distribuite de-a lungul conexiunilor interneuronice (sinopse). Sinapsele au un parametru - greutatea, datorită căruia informațiile de intrare se modifică atunci când se deplasează de la un neuron la altul. Cel mai simplu mod de a imagina principiul de funcționare al rețelelor neuronale este amestecarea culorilor. Neuronul albastru, verde și roșu au greutăți diferite. Informația neuronului a cărui greutate este mai mare va fi dominantă în următorul neuron.

Rețeaua neuronală în sine este un sistem de mulți astfel de neuroni (procesoare). Individual, aceste procesoare sunt destul de simple (mult mai simple decât un calculator personal), dar fiind conectat în sistem mare neuronii sunt capabili să îndeplinească sarcini foarte complexe.

În funcție de domeniul de aplicare, o rețea neuronală poate fi interpretată în moduri diferite. De exemplu, din punctul de vedere al învățării automate, o ANN este o metodă de recunoaștere a modelelor. Din punct de vedere matematic, aceasta este o problemă cu mai mulți parametri. Din punctul de vedere al ciberneticii - un model de control adaptiv al roboticii. Pentru inteligența artificială, ANN este o componentă fundamentală pentru modelarea inteligenței naturale folosind algoritmi de calcul.

Principalul avantaj al rețelelor neuronale față de algoritmii de calcul convenționali este capacitatea lor de a învăța. În sensul general al cuvântului, învățarea înseamnă găsirea coeficienților de cuplare corecti între neuroni, precum și rezumarea datelor și identificarea dependențelor complexe între semnalele de intrare și de ieșire. De fapt, antrenamentul cu succes al unei rețele neuronale înseamnă că sistemul va fi capabil să identifice rezultatul corect pe baza datelor care nu se află în setul de antrenament.

Situatia actuala

Și oricât de promițătoare ar fi această tehnologie, ANN-urile sunt încă foarte departe de a fi posibile creier umanși gândire. Cu toate acestea, rețelele neuronale sunt deja utilizate în multe domenii ale activității umane. Până acum, ei nu sunt capabili să ia decizii extrem de inteligente, dar sunt capabili să înlocuiască o persoană acolo unde era nevoie de el anterior. Dintre numeroasele domenii de aplicare ale ANN putem remarca: crearea de sisteme de autoînvățare Procese de producție, fără echipaj vehicule, sisteme de recunoaștere a imaginilor, sisteme inteligente de securitate, robotică, sisteme de monitorizare a calității, interfețe de interacțiune vocală, sisteme de analiză și multe altele. Această utilizare pe scară largă a rețelelor neuronale se datorează, printre altele, apariției în diverse moduri accelerarea antrenamentului ANN.

Astăzi, piața rețelelor neuronale este uriașă - miliarde și miliarde de dolari. După cum arată practica, majoritatea tehnologiilor de rețele neuronale din întreaga lume diferă puțin unele de altele. Cu toate acestea, utilizarea rețelelor neuronale este o activitate foarte costisitoare, care în majoritatea cazurilor poate fi permisă doar de companii mari. Dezvoltarea, antrenamentul și testarea rețelelor neuronale necesită o putere mare de calcul și este evident că aceasta este disponibilă din abundență. jucători majori pe piata IT. Printre principalele companii care conduc dezvoltări în acest domeniu se numără divizia Google DeepMind, divizia Microsoft Research, IBM, Facebook și Baidu.

Desigur, toate acestea sunt bune: rețelele neuronale se dezvoltă, piața crește, dar până acum sarcina principală inca nerezolvata. Omenirea nu a reușit să creeze o tehnologie care să se apropie nici măcar de capacitățile creierului uman. Să ne uităm la principalele diferențe dintre creierul uman și rețelele neuronale artificiale.

De ce rețelele neuronale sunt încă departe de creierul uman?

Cea mai importantă diferență, care schimbă radical principiul și eficiența sistemului, este unelte diferite semnale în rețelele neuronale artificiale și într-o rețea biologică de neuroni. Cert este că într-un ANN neuronii transmit valori care sunt valori reale, adică numere. În creierul uman, impulsurile sunt transmise cu o amplitudine fixă, iar aceste impulsuri sunt aproape instantanee. Acest lucru duce la o serie de avantaje ale rețelei umane de neuroni.

În primul rând, liniile de comunicare din creier sunt mult mai eficiente și mai economice decât cele din ANN. În al doilea rând, circuit de impulsuri asigură simplitatea implementării tehnologiei: este suficient să folosiți circuite analogice în locul mecanismelor de calcul complexe. În cele din urmă, rețelele cu impulsuri sunt imune la interferențe audio. Numerele reale sunt supuse zgomotului, ceea ce crește probabilitatea erorilor.

Concluzie

Desigur, în ultimul deceniu a avut loc un adevărat boom în dezvoltarea rețelelor neuronale. Acest lucru se datorează în primul rând faptului că procesul de instruire ANN a devenit mult mai rapid și mai ușor. Așa-numitele rețele neuronale „pre-antrenate” au început, de asemenea, să fie dezvoltate în mod activ, ceea ce poate accelera semnificativ procesul de introducere a tehnologiei. Și dacă este prea devreme să spunem dacă rețelele neuronale vor putea într-o zi să reproducă pe deplin capacitățile creierului uman, probabilitatea ca în următorul deceniu ANN-urile să poată înlocui oamenii într-un sfert din profesiile existente devine din ce în ce mai adevărată. .

Pentru cei care vor să afle mai multe

  • Marele Război Neural: Ce face cu adevărat Google
  • Cum ne-ar putea schimba viitorul computerele cognitive

Cele mai bune articole pe această temă