O viziune inginerească asupra lucrurilor. Introducere în Deep Learning

Am aflat despre tendințele în afaceri la o conferință la scară largă la Kiev. Sâmbăta a fost plină de perspective, în care am dobândit noi cunoștințe și cunoștințe, dobândite pe parcursul orelor petrecute. La conferință au existat 4 fluxuri de informații pentru liderii de afaceri, top manageri, marketeri, vânzări, HR și alți specialiști. Unul dintre vorbitori a fost ministrul Infrastructurii Volodymyr Omelyan, care a vorbit despre dezvoltarea Galuziei, renovarea drumurilor și aeroporturilor.

O zi bună tuturor, dragi colegi utilizatori iOS, probabil că fiecare dintre voi a lucrat cu rețeaua și a analizat date din JSON. Pentru acest proces există o grămadă de biblioteci, tot felul de instrumente pe care le puteți folosi. Unele dintre ele sunt complexe, iar altele sunt simple. Sincer să fiu, eu însumi am analizat manual JSON pentru o perioadă foarte lungă de timp, nefiind încrederea acestui proces unor biblioteci terțe, iar acest lucru avea avantajele sale.

Pe 9 septembrie 2014, în cadrul următoarei prezentări, Compania Appleși-a prezentat propriul sistem plăți mobile— Apple Pay.

Folosind plata Sistemele Apple A plati utilizatorii de iPhone 6 și iPhone 6+, precum și proprietarii ultimele versiuni Apple Watch pot face cumpărături online, utilizați beneficii aditionale Apple Pay Pentru aplicatii mobileși efectuați plăți folosind Tehnologia NFC(Near Field Communication). Folosit pentru a autoriza plăți Tehnologia tactilă ID sau Face ID.

Tehnologiile nu stau pe loc, iar procesele de dezvoltare se deplasează odată cu ele. Dacă anterior companiile lucrau după modelul „Waterfall”, acum, de exemplu, toată lumea se străduiește să implementeze „Scrum”. Evoluție are loc și în furnizarea de servicii de dezvoltare software. Anterior, companiile ofereau clienților o dezvoltare de înaltă calitate în limita bugetului, oprindu-se aici, dar acum se străduiesc să ofere beneficii maxime clientului și afacerii sale, oferind expertiza lor.

În ultimii ani, au apărut atât de multe fonturi bune, inclusiv gratuite, încât am decis să scriem o continuare a noastră pentru designeri.

Fiecare designer are un set de fonturi preferate cu care să lucreze, cu care este obișnuit să lucreze și care le reflectă. stil grafic. Designerii spun „ Fonturi bune nu pot fi niciodată prea multe”, dar acum ne putem imagina cu siguranță o situație în care acest set constă numai din fonturi gratuite.

Cât de des se află managerii de proiect între o piatră și un loc greu atunci când încearcă să găsească un echilibru între toate cerințele și termenele limită ale clientului și sănătatea mintală a întregii echipe? Câte nuanțe trebuie luate în considerare pentru a exista pace și ordine de ambele părți ale răspunderii? De unde știi dacă ești un manager bun sau dacă trebuie urgent să te perfecționezi pe toate fronturile? Cum să stabilești în ce aspecte exact tu, ca PM, rămâi în urmă și unde ești bun și inteligent? Despre asta a fost exact următoarea conferință Code’n’Coffee.

Tehnologia de recunoaștere a modelelor devine din ce în ce mai mult parte din viața noastră de zi cu zi. Companiile și instituțiile îl folosesc pentru a rezolva cel mai mult sarcini diferite: de la securitate la cercetarea satisfacției clienților. Investiţii în produse bazate pe această funcție, promit să crească la 39 de miliarde de dolari până în 2021. Iată doar câteva exemple despre cum este utilizată recunoașterea modelelor în diferite domenii.

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ă?

Pentru prima dată despre succes invatare profunda (invatare profunda) s-a făcut auzit î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 (comparativ 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 petroliere ș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, „imagini 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ățare 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 a fost posibil să se antreneze doar 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 mai multe straturi într-o rețea neuronală, cu atât mai multe solicitări trebuie să facă o astfel de rețea 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 programare traditionala 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ă multe, multe din aceste 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 zone mari date, astfel de specialiști se numesc pe ei înșiși „oameni de știință a datelor”, dar totuși munca lor este de aceeași natură inginerească ca și munca programatorilor. Inginerii măsoară, analizează, proiectează, construiesc și sisteme țintă, și instrumente pentru inginerie. Inginerie software(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

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 mană din rai. Dar vorbitorii înțeleg ce este cu adevărat? Dar acest concept nu are o definiție formală și combină un întreg teanc 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, acest termen nou (învățare profundă) este 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”. Acest termen este aproape întotdeauna 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 diapozitivul 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 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 acestei clase de tehnologii sunt încă rețelele neuronale convoluționale ale 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, reacționând la linii drepte în unghiuri diferite și celule complexe - a căror reacție este asociată cu activarea. un anumit set 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 foarte simplu, rețelele convoluționale sunt rețele în care principalul element structural al învățării este un grup (combinație) de neuroni (de obicei un pătrat de 3x3, 10x10 etc.), și nu doar 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, structurale elemente simple imaginile sunt, 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 pentru că în zonă învățare automată, crearea de caracteristici este cheia ș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 diferite niveluri adâncimi. 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 -

Și, în parte, acest ghid este destinat oricărei persoane care este interesată de învățarea automată, dar nu știe de unde să înceapă. Conținutul articolelor este destinat unui public larg și va fi destul de superficial. Dar îi pasă cuiva cu adevărat? Cu cât mai mulți oameni devin interesați de învățarea automată, cu atât mai bine.

Recunoașterea obiectelor folosind deep learning

Poate că ați văzut deja acest celebru comic xkcd. Gluma este că orice copil de 3 ani poate recunoaște o fotografie a unei păsări, dar pentru a face acest lucru un computer a avut nevoie de cei mai buni informaticieni de peste 50 de ani. În ultimii câțiva ani, am găsit în sfârșit o abordare bună a obiectului recunoașterea folosind rețele neuronale convoluționale profunde. Sună ca o grămadă de cuvinte inventate dintr-un roman științifico-fantastic William Gibson, dar va avea sens odată ce le vom lua unul câte unul.

Să începem simplu

Înainte de a învăța cum să recunoaștem imaginile păsărilor, să învățăm cum să recunoaștem ceva mult mai simplu - număr scris de mână„8”.

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 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, de asemenea, 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ă asamblați aceste grafice împreună folosind același principiu în care sunt asamblate POPNN-urile. Biblioteca conține un set tipuri variate vârfuri pentru primitive generalizate.

Graficele sunt paradigma pe care se bazează tot software-ul. Î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, folosit in sisteme de mașini instruire în codul de aplicație 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 conexiuni puternice între procesele din fiecare strat al rețelei cu mai multe comunicare ușoarăîntre niveluri.

Un alt exemplu este o rețea simplă complet conectată instruită pe MNIST, un set de date simplu 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 mari probleme 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 creier umanși cum funcționează, este în general clar că nu există un depozit mare 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 procesoare convenționale este o modalitate de a evita problema blocajului memoriei, deblocând o lățime de bandă enormă la un consum de energie mult mai mic. 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 gradienților 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 fluxul de instrucțiuni unice (SIMD) pentru a realiza densitate mare calcule. 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-loturi paralele 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 în timpul antrenamentului 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. Deci, pentru a reduce greutățile de precizie și activările pe GPU, încă necesită mai mult de 7,5 GB 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 moduri 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 suprasarcina 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 de 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.