Cum arată rețelele neuronale profunde și de ce necesită atât de multă memorie. Cum funcționează rețelele neuronale

Ș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 obține un computer pentru a face asta a fost 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. Așa că haideți să o facem - scrieți un program care recunoaște păsările!

Să începem simplu

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

Se vorbește și se scrie mult despre rețelele neuronale artificiale astăzi – atât în ​​contextul datelor mari, cât și învățare automată, și în afara ei. În acest articol, vom aminti semnificația acestui concept, vom sublinia din nou domeniul de aplicare al acestuia și, de asemenea, vom vorbi despre o abordare importantă care este asociată cu rețelele neuronale - învățarea profundă, vom descrie conceptul său, precum și avantajele. și dezavantaje în cazuri specifice de utilizare.

Ce este o rețea neuronală?

După cum știți, conceptul de rețea neuronală (NN) vine din biologie și este un model oarecum simplificat al structurii creierului uman. Dar să nu ne adâncim în sălbăticia științelor naturale - cel mai simplu mod este să ne imaginăm un neuron (inclusiv unul artificial) ca un fel de cutie neagră cu multe găuri de intrare și o singură ieșire.

Din punct de vedere matematic, neuronul artificial realizează transformarea vectorială semnale de intrare(impactează) X în vectorul de ieșire Y folosind o funcție numită funcție de activare. În cadrul conexiunii (rețea neuronală artificială - ANN), funcționează trei tipuri de neuroni: intrare (primirea informațiilor de la lumea de afara- valorile variabilelor care ne interesează), de ieșire (returnarea variabilelor dorite - de exemplu, predicții sau semnale de control), precum și intermediari - neuroni care îndeplinesc anumite funcții interne („ascunse”). O ANN clasică constă astfel din trei sau mai multe straturi de neuroni, iar în al doilea și în straturile ulterioare („ascunse” și ieșire) fiecare dintre elemente este conectat la toate elementele stratului anterior.

Este important să ne amintim conceptul părere, care determină tipul structurii ANN: transmisie directă a semnalului (semnalele merg secvenţial din stratul de intrare prin stratul ascuns şi intră în stratul de ieşire) şi structură recurentă, când reţeaua conţine conexiuni care merg înapoi, de la neuronii mai îndepărtaţi spre cei mai apropiaţi). Toate aceste concepte constituie informația minimă necesară pentru trecerea la Nivelul următorînțelegerea ANN - antrenarea unei rețele neuronale, clasificarea metodelor acesteia și înțelegerea principiilor de funcționare ale fiecăreia dintre ele.

Antrenamentul rețelei neuronale

Nu trebuie să uităm de ce se folosesc astfel de categorii în general - altfel există riscul de a ne bloca în matematica abstractă. De fapt, rețelele neuronale artificiale sunt înțelese ca o clasă de metode de rezolvare a anumitor probleme practice, printre care principalele se numără problemele de recunoaștere a modelelor, luarea deciziilor, aproximarea și compresia datelor, precum și cele mai interesante pentru noi probleme de cluster. analiză și prognoză.

Fără a merge la cealaltă extremă și fără a intra în detalii despre funcționarea metodelor ANN în fiecare caz specific, să ne reamintim că în orice circumstanțe este capacitatea unei rețele neuronale de a învăța (cu un profesor sau „pe cont propriu” ) acesta este punct-cheie folosindu-l pentru a rezolva probleme practice.

ÎN caz general, instruirea ANN este după cum urmează:

  1. neuronii de intrare primesc variabile („stimuli”) din mediul extern;
  2. în conformitate cu informațiile primite, parametrii liberi ai rețelei neuronale se modifică (straturile intermediare ale neuronilor funcționează);
  3. Ca urmare a modificărilor în structura rețelei neuronale, rețeaua „reacționează” la informații într-un mod diferit.

Acesta este algoritmul general pentru antrenarea unei rețele neuronale (să ne amintim de câinele lui Pavlov - da, acesta este exact mecanismul intern pentru formarea unui reflex condiționat - și să uităm imediat: la urma urmei, contextul nostru implică operarea cu concepte și exemple tehnice).

Este clar că un algoritm de învățare universal nu există și, cel mai probabil, nu poate exista; Din punct de vedere conceptual, abordările învățării sunt împărțite în învățare supravegheată și învățare nesupravegheată. Primul algoritm presupune că pentru fiecare vector de intrare („învățare”) există o valoare necesară a vectorului de ieșire („țintă”) - astfel, aceste două valori formează o pereche de antrenament, iar întregul set de astfel de perechi este set de antrenament. În cazul învățării nesupravegheate, setul de antrenament este format doar din vectori de intrare – iar această situație este mai plauzibilă din punct de vedere al vieții reale.

Invatare profunda

Conceptul de învățare profundă se referă la o clasificare diferită și denotă o abordare a formării așa-numitelor structuri profunde, care includ rețele neuronale pe mai multe niveluri. Un exemplu simplu din domeniul recunoașterii imaginilor: este necesar să se învețe o mașină să identifice trăsături din ce în ce mai abstracte în ceea ce privește alte trăsături abstracte, adică să determine relația dintre expresia întregii fețe, a ochilor și a gurii și, în cele din urmă, grupuri de pixeli colorați din punct de vedere matematic. Astfel, într-o rețea neuronală profundă, fiecare nivel de caracteristici are propriul său strat; este clar că pentru a instrui un astfel de „colos”, experiența adecvată a cercetătorilor și nivelul de hardware. Condițiile s-au dezvoltat în favoarea învățării neuronale profunde abia în 2006 – iar opt ani mai târziu putem vorbi despre revoluția pe care această abordare a produs-o în învățarea automată.

Deci, în primul rând, în contextul articolului nostru, merită remarcat următoarele: învățarea profundă în majoritatea cazurilor nu este supravegheată de o persoană. Adică, această abordare implică antrenarea unei rețele neuronale fără profesor. Acesta este principalul avantaj al abordării „profunde”: învățarea automată supravegheată, în special în cazul structurilor profunde, necesită costuri enorme de timp – și forță de muncă. Învățarea profundă, pe de altă parte, este o abordare care modelează (sau cel puțin încearcă să aproximeze) gândirea abstractă umană, mai degrabă decât să o folosească.

Ideea, ca de obicei, este minunată, dar în calea abordării apar probleme destul de naturale - în primul rând, înrădăcinate în pretențiile sale de universalitate. De fapt, în timp ce abordările de învățare profundă au obținut un succes semnificativ în domeniul recunoașterii imaginilor, aceeași procesare a limbajului natural ridică încă mult mai multe întrebări decât răspunsuri. Este evident că în următorii n ani este puțin probabil să fie posibil să se creeze un „Leonardo Da Vinci artificial” sau chiar - cel puțin! - „homo sapiens artificial”.

Cu toate acestea, înaintea cercetătorilor inteligenţă artificială problema eticii se pune deja: temerile exprimate în fiecare film științifico-fantastic care se respectă, începând cu „Terminator” și terminând cu „Transformers”, nu mai par amuzante (rețelele neuronale moderne sofisticate pot fi deja considerate un model plauzibil al modului în care creierul insectei funcționează!), dar deocamdată evident inutil.

Viitorul tehnologic ideal ne apare ca o epocă în care o persoană va putea să-și delege majoritatea puterilor unei mașini – sau cel puțin să îi permită să-i faciliteze o parte semnificativă a muncii sale intelectuale. Conceptul de învățare profundă este un pas către acest vis. Drumul de urmat este lung, dar este deja clar că rețelele neuronale și abordările în continuă evoluție asociate cu acestea sunt capabile să realizeze aspirațiile scriitorilor de science fiction de-a lungul timpului.

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, Apple și-a prezentat propriul sistem de plată mobilă - Apple Pay.

Prin utilizarea sistem de plata Utilizatori și proprietari Apple Pay iPhone 6 și iPhone 6+ ultimele versiuni Apple Watch poate cumpăra online, utiliza beneficii aditionale Apple Pay pentru aplicații 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, ești î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 o varietate de sarcini, de la securitate la sondaje privind satisfacția 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.

„(Publicațiile Manning).

Articolul este destinat persoanelor care au deja o experiență semnificativă în domeniul învățării profunde (de exemplu, celor care au citit deja capitolele 1-8 din această carte). Presupune disponibilitate cantitate mare cunoştinţe.

Învățare profundă: Vedere geometrică

Cel mai uimitor lucru despre învățarea profundă este cât de simplu este. În urmă cu zece ani, nimeni nu și-ar fi putut imagina rezultatele uimitoare pe care le-am obține în problemele de percepție a mașinilor folosind modele parametrice simple antrenate cu coborâre în gradient. Acum se dovedește că tot ce ne trebuie este suficient de mare modele parametrice instruite pe suficient de mare numărul de mostre. După cum a spus odată Feynman despre Univers: „ Nu este complicat, sunt doar multe».

În învățarea profundă, totul este un vector, adică punct V spațiu geometric. Datele de intrare ale modelului (acestea pot fi text, imagini etc.) și țintele sale sunt mai întâi „vectorizate”, adică traduse într-un spațiu vectorial inițial ca intrare și un spațiu vectorial țintă ca ieșire. Fiecare strat din model invatare profunda efectuează o transformare geometrică simplă asupra datelor care trec prin ea. Împreună, lanțul de straturi model creează o transformare geometrică foarte complexă, împărțită în câteva simple. Această transformare complexă încearcă să transforme spațiul de date de intrare în spațiul țintă, pentru fiecare punct. Parametrii de transformare sunt determinați de greutățile stratului, care sunt actualizate constant în funcție de cât de bine funcționează modelul în acest moment. Caracteristica cheie transformare geometrică - ce ar trebui să fie diferentiabil, adică ar trebui să putem afla parametrii săi prin coborâre în gradient. În mod intuitiv, aceasta înseamnă că transformarea geometrică trebuie să fie netedă și continuă - o constrângere importantă.

Întregul proces de aplicare a acestei transformări geometrice complexe la datele de intrare poate fi vizualizat în 3D, ilustrând o persoană care încearcă să desfacă o minge de hârtie: bila de hârtie mototolită este varietatea de date de intrare cu care modelul începe să lucreze. Fiecare mișcare a unei persoane cu o minge de hârtie este ca o simplă transformare geometrică efectuată de un singur strat. Secvența completă a gesturilor de desfășurare este o transformare complexă a întregului model. Modelele de învățare profundă sunt mașini matematice pentru a dezlega varietatea complicată de date multidimensionale.

Aceasta este magia învățării profunde: transformarea valorii în vectori, în spații geometrice și apoi învățarea treptat a transformărilor geometrice complexe care transformă un spațiu în altul. Tot ceea ce este necesar este un spațiu de dimensiune suficient de mare pentru a transmite întreaga gamă de relații găsite în datele originale.

Limitările învățării profunde

Gama de probleme care pot fi rezolvate folosind această strategie simplă este aproape nesfârșită. Și totuși, multe dintre ele sunt încă dincolo de atingerea tehnicilor actuale de învățare profundă - chiar și în ciuda disponibilității unor cantități uriașe de date adnotate manual. Să presupunem, de exemplu, că puteți colecta un set de date de sute de mii – chiar milioane – de descrieri în limba engleză ale caracteristicilor software scrise de managerii de produs, precum și anul de referință corespunzător dezvoltat de echipe de ingineri pentru a îndeplini aceste cerințe. Chiar și cu aceste date, nu puteți antrena un model de învățare profundă pentru a citi pur și simplu o descriere a produsului și a genera baza de cod corespunzătoare. Acesta este doar unul dintre multele exemple. În general, orice necesită raționament - cum ar fi programarea sau aplicarea metodei științifice, planificarea pe termen lung, manipularea datelor în stil algoritmic - depășește capacitățile modelelor de învățare profundă, indiferent de câte date le aruncați. Chiar și antrenarea unei rețele neuronale pentru a efectua un algoritm de sortare este o sarcină incredibil de dificilă.

Motivul este că modelul de învățare profundă este „doar” un lanț de transformări geometrice simple, continue, care transformă un spațiu vectorial în altul. Tot ce poate face este să transforme un set de date X într-un alt set Y, cu condiția să existe o posibilă transformare continuă de la X la Y care să poată fi învățată și disponibilitatea set dens de mostre Transformări X:Y ca date de antrenament. Deci, în timp ce un model de învățare profundă poate fi considerat un tip de program, majoritatea programelor nu pot fi exprimate ca modele de deep learning- pentru majoritatea problemelor, fie nu există o rețea neuronală profundă de dimensiune practic adecvată care să rezolve problema, fie dacă există una, poate fi de neînvățat, adică transformarea geometrică corespunzătoare poate fi prea complexă sau nu există date adecvate pentru a o antrena.

Extinderea tehnicilor de învățare profundă existente - adăugarea mai multor straturi și utilizarea mai multor date de antrenament - poate atenua doar superficial unele dintre aceste probleme. Nu va rezolva problema fundamentală că modelele de învățare profundă sunt foarte limitate în ceea ce pot reprezenta și că majoritatea programelor nu pot fi exprimate ca o transformare geometrică continuă a varietăților de date.

Riscul antropomorfizării modelelor de învățare automată

Unul dintre riscurile foarte reale ale inteligenței artificiale moderne este interpretarea greșită a modului în care funcționează modelele de învățare profundă și exagerarea capacităților acestora. O caracteristică fundamentală a minții umane este „modelul psihicului uman”, tendința noastră de a proiecta obiective, credințe și cunoștințe asupra lucrurilor din jurul nostru. Un desen al unei fețe zâmbitoare pe o piatră ne face brusc „fericiți” - mental. Când se aplică învățării profunde, aceasta înseamnă, de exemplu, că dacă putem antrena cu mai mult sau mai puțin succes un model pentru a genera descrieri de text imagini, atunci avem tendința de a crede că modelul „înțelege” conținutul imaginilor, precum și descrierile generate. Suntem apoi foarte surprinși când, din cauza unei mici abateri de la setul de imagini prezentate în datele de antrenament, modelul începe să genereze descrieri absolut absurde.

În special, acest lucru este cel mai evident în „exemplele adversare”, care sunt mostre de date de intrare în rețea de învățare profundă care sunt selectate în mod special pentru a fi clasificate greșit. Știți deja că puteți face ascensiune în gradient pe spațiul de date de intrare pentru a genera mostre care maximizează activarea, de exemplu, a unui anumit filtru de rețea neuronală convoluțională - aceasta este baza tehnicii de vizualizare pe care am tratat-o ​​în capitolul 5 (notă: cărți „Deep Learning with Python”) , la fel ca algoritmul Deep Dream din Capitolul 8. În mod similar, prin ascensiune în gradient, puteți modifica ușor imaginea pentru a maximiza predicția de clasă pentru o anumită clasă. Dacă facem o fotografie a unui panda și adăugăm un gradient „gibon”, putem forța rețeaua neuronală să clasifice acel panda drept gibon. Acest lucru demonstrează atât fragilitatea acestor modele, cât și diferența profundă dintre transformarea input-to-output pe care o ghidează și propriile noastre percepții umane.

În general, modelele de învățare profundă nu înțeleg datele de intrare, cel puțin nu în sens uman. Propria noastră înțelegere a imaginilor, sunetelor, limbajului se bazează pe experiența noastră senzoriomotorie ca oameni - ca ființe materiale pământești. Modelele de învățare automată nu au acces la o astfel de experiență și, prin urmare, nu pot „înțelege” datele noastre de intrare într-un mod asemănător uman. Adnotând un număr mare de exemple pentru modelele noastre pe care să le antrenăm, îi forțăm să învețe o transformare geometrică care reduce datele la concepte umane pentru acel set specific de exemple, dar această transformare este doar o schiță simplificată a modelului original al minții noastre, așa cum dezvoltate din experiența noastră ca agenți corporali sunt ca o reflexie slabă într-o oglindă.

În calitate de practicant în învățarea automată, țineți întotdeauna cont de acest lucru și nu cădeți niciodată în capcana de a crede că rețelele neuronale înțeleg sarcina pe care o îndeplinesc - nu o fac, cel puțin nu într-un mod care să aibă sens pentru noi. Ei au fost instruiți pentru o sarcină diferită, mult mai specifică decât cea pentru care dorim să-i antrenăm: pur și simplu transformarea tiparelor de învățare introduse în modele de învățare țintă, punct la punct. Arată-le orice este diferit de datele de antrenament și se vor sparge în cele mai absurde moduri.

Generalizare locală versus generalizare extremă

Se pare că există diferențe fundamentale între transformarea geometrică directă de la intrare la ieșire pe care o fac modelele de învățare profundă și modul în care oamenii gândesc și învață. Nu este doar faptul că oamenii învață singuri din experiențele lor corporale și nu prin procesarea unui set de mostre de antrenament. Pe lângă diferențele în procesele de învățare, există diferențe fundamentale în natura credințelor subiacente.

Oamenii sunt capabili de mult mai mult decât să traducă un stimul imediat într-un răspuns imediat, cum ar fi o rețea neuronală sau poate o insectă. Oamenii au în minte modele complexe, abstracte situatia actuala, ei înșiși, alți oameni și pot folosi aceste modele pentru a prezice diverse opțiuni posibile viitor și să efectueze o planificare pe termen lung. Ei sunt capabili să combine concepte cunoscute pentru a-și imagina ceva ce nu au mai știut până acum - cum ar fi desenarea unui cal în blugi, de exemplu, sau imaginea ce ar face dacă ar câștiga la loterie. Capacitatea de a gândi ipotetic, de a ne extinde modelul de spațiu mental mult dincolo de ceea ce am experimentat direct, adică capacitatea de a face abstracțiiȘi raţionament, poate caracteristica definitorie a cunoașterii umane. Eu numesc aceasta „generalizare supremă”: capacitatea de a se adapta la situații noi, neexperimentate până acum, folosind date puține sau deloc.

Acest lucru este în contrast puternic cu ceea ce fac rețelele de învățare profundă, pe care l-aș numi „generalizare locală”: transformarea datelor de intrare în date de ieșire încetează rapid să aibă sens dacă noile date de intrare sunt chiar ușor diferite de ceea ce au întâlnit în timpul antrenamentului . Luați în considerare, de exemplu, problema învățării parametrii potriviți lansând o rachetă care ar trebui să aterizeze pe lună. Dacă ar fi să utilizați o rețea neuronală pentru această sarcină, supravegheată sau instruită de întărire, ar trebui să îi oferiți mii sau milioane de traiectorii de zbor, adică ar trebui să produceți set dens de exempleîn spațiul valorii de intrare pentru a învăța cum să se transforme în mod fiabil din spațiul valorii de intrare în spațiul valorii de ieșire. În contrast, oamenii pot folosi puterea abstracției pentru a crea modele fizice- știința rachetei - și obțineți o soluție exactă care va duce racheta pe Lună în doar câteva încercări. În același mod, dacă ați dezvolta o rețea neuronală pentru a controla corpul uman și doriți ca acesta să învețe cum să meargă în siguranță printr-un oraș fără a fi lovit de o mașină, rețeaua ar trebui să moară de multe mii de ori pe fiecare. situație diferită x înainte de a concluziona că mașinile sunt periculoase și de a dezvolta un comportament adecvat pentru a le evita. Dacă ar fi mutat într-un oraș nou, rețeaua ar trebui să învețe din nou cea mai mare parte a ceea ce știa. Pe de altă parte, oamenii sunt capabili să învețe un comportament sigur fără să moară vreodată - din nou, datorită puterii simulării abstracte a situațiilor ipotetice.

Deci, în ciuda progresului nostru în percepția mașinilor, suntem încă foarte departe de IA la nivel uman: modelele noastre pot funcționa doar generalizare locală, adaptându-se la situații noi care trebuie să fie foarte apropiate de datele din trecut, în timp ce mintea umană este capabilă generalizare extremă, adaptându-se rapid la situații complet noi sau planificându-se în viitor.

concluzii

Iată ce trebuie să rețineți: singurul succes real al învățării profunde de până acum este capacitatea de a traduce spațiul X în spațiul Y folosind o transformare geometrică continuă, având în vedere o cantitate mare de date adnotate umane. A face acest lucru bine reprezintă un progres revoluționar pentru o întreagă industrie, dar AI la nivel uman este încă departe.

Pentru a elimina unele dintre aceste limitări și a începe să concuram cu creierul uman, trebuie să ne îndepărtăm de conversia directă de la intrare la ieșire și să trecem la raţionamentȘi abstracții. Programele de calculator pot fi o bază potrivită pentru modelarea abstractă a diferitelor situații și concepte. Am mai spus (notă: în Deep Learning with Python) că modelele de învățare automată pot fi definite ca „programe care învață”; momentan nu putem antrena decât un subset restrâns și specific al tuturor programelor posibile. Dar dacă am putea antrena fiecare program, modular și iterativ? Să vedem cum putem ajunge acolo.

Viitorul învățării profunde

Având în vedere ceea ce știm despre rețelele de învățare profundă, limitările acestora și stadiul actual al cercetării, putem prezice ce se va întâmpla pe termen mediu? Iată câteva dintre gândurile mele personale despre această problemă. Rețineți că nu am un glob de cristal pentru predicții, așa că o mare parte din ceea ce mă aștept s-ar putea să nu se realizeze. Aceasta este o speculație completă. Împărtășesc aceste predicții nu pentru că mă aștept să se realizeze pe deplin în viitor, ci pentru că sunt interesante și aplicabile în prezent.

La un nivel înalt, iată principalele domenii pe care le consider promițătoare:

  • Modelele se vor apropia de programe de calculator de uz general construite pe baza unor primitive mult mai bogate decât straturile noastre diferențiabile actuale - așa că vom obține raţionamentȘi abstracții, a cărui absență este o slăbiciune fundamentală a modelelor actuale.
  • Vor apărea noi forme de învățare care vor face acest lucru posibil - și vor permite modelelor să se îndepărteze de transformările pur și simplu diferențiabile.
  • Modelele vor necesita mai puțină contribuție a dezvoltatorului - nu ar trebui să fie treaba ta să răsuciți constant butoanele.
  • Va exista o reutilizare mai mare și sistematică a caracteristicilor și arhitecturilor învățate; sisteme de meta-învățare bazate pe rutine reutilizabile și modulare.
În plus, rețineți că aceste considerații nu se aplică în mod specific învățării supravegheate, care este încă baza învățării automate – ele se aplică și oricărei forme de învățare automată, inclusiv învățării nesupravegheate, învățării supravegheate și învățării prin consolidare. Nu contează fundamental de unde provin etichetele tale sau cum arată ciclul tău de învățare; aceste ramuri diferite ale învățării automate sunt pur și simplu fațete diferite ale aceluiași construct.

Deci, mergeți înainte.

Modele ca programe

După cum am observat mai devreme, o dezvoltare transformațională necesară la care se poate aștepta în domeniul învățării automate este îndepărtarea de modelele care funcționează pur. recunoasterea formelorși capabil doar de generalizare locală, la modele capabile de abstracțiiȘi raţionament care poate ajunge generalizare finală. Toate programele actuale AI cu raționament de bază sunt codificate de către programatori umani: de exemplu, programele care se bazează pe algoritmi de căutare, manipulare grafică, logică formală. În programul AlphaGo de la DeepMind, de exemplu, o mare parte a „inteligenței” de pe ecran este proiectată și codificată de către programatori experți (de exemplu, căutarea arborelui Monte Carlo); Învățarea din date noi are loc numai în submodule specializate - rețele de valori și rețele de politici. Dar în viitor, astfel de sisteme AI ar putea fi antrenate în întregime fără intervenția umană.

Cum să realizezi acest lucru? Să luăm un tip binecunoscut de rețea: RNN. Important este că RNN-urile au puțin mai puține limitări decât rețelele neuronale feedforward. Acest lucru se datorează faptului că RNN-urile sunt puțin mai mult decât simple transformări geometrice: sunt transformări geometrice care efectuată continuu într-o buclă for. Timpul buclei for este specificat de dezvoltator: este o presupunere încorporată a rețelei. Desigur, RNN-urile sunt încă limitate în ceea ce pot reprezenta, în principal pentru că fiecare pas pe care îl fac este încă o transformare geometrică diferențiabilă și datorită modului în care transmit informații pas cu pas prin puncte dintr-un spațiu geometric continu (vectori de stare). Acum imaginați-vă rețele neuronale care ar fi „extinse” cu primitive de programare în același mod ca pentru bucle- dar nu doar o singură buclă codificată pentru hard cu memorie geometrică cusată, ci set mare primitive de programare pe care modelul le-ar putea accesa liber pentru a-și extinde capacitățile de procesare, cum ar fi dacă ramuri, instrucțiuni în timp ce, crearea de variabile, stocare pe disc pentru memorie pe termen lung, operatori de sortare, structuri avansate de date precum liste, grafice, tabele hash și multe altele . Spațiul de programe pe care o astfel de rețea îl poate reprezenta va fi mult mai larg decât se poate exprima rețelele existenteînvățarea profundă, iar unele dintre aceste programe pot obține o putere superioară de generalizare.

Pe scurt, ne vom îndepărta de faptul că avem, pe de o parte, „inteligență algoritmică hard-coded” (software scris de mână), iar pe de altă parte, „inteligență geometrică antrenată” (deep learning). În schimb, vom ajunge cu un amestec de module algoritmice formale care oferă capabilități raţionamentȘi abstracții, și module geometrice care oferă capabilități intuiția informală și recunoașterea modelelor. Întregul sistem va fi antrenat cu o intervenție umană mică sau deloc.

Un domeniu conex al AI care cred că ar putea face în curând pași mari este sinteza software, în special, sinteza de software neuronal. Sinteza programelor constă în generarea automată a programelor simple folosind algoritm de căutare(poate o căutare genetică, ca în programarea genetică) de studiat spatiu mare programe posibile. Căutarea se oprește atunci când este găsit un program care îndeplinește specificațiile cerute, adesea furnizate ca un set de perechi intrare-ieșire. După cum puteți vedea, acest lucru este foarte asemănător cu învățarea automată: „datele de antrenament” sunt furnizate ca perechi intrare-ieșire, găsim un „program” care corespunde transformării intrărilor în ieșiri și este capabil de generalizări la noi intrări. Diferența este că, în loc să antrenăm valorile parametrilor într-un program hard-coded (rețea neuronală), generăm sursă printr-un proces de căutare discret.

Mă aștept cu siguranță că în următorii câțiva ani va exista din nou mult interes în acest domeniu. În special, mă aștept la penetrarea reciprocă a domeniilor conexe ale învățării profunde și sintezei software, unde nu vom genera doar programe în limbaje de uz general, ci și unde vom genera rețele neuronale (fire de procesare a datelor geometrice), completat un set bogat de primitive algoritmice, cum ar fi buclele for - și multe altele. Acest lucru ar trebui să fie mult mai convenabil și util decât generarea directă a codului sursă și va extinde semnificativ domeniul de aplicare al problemelor care pot fi rezolvate folosind învățarea automată - spațiul de programe pe care le putem genera automat, având în vedere datele de antrenament adecvate. Un amestec de IA simbolică și IA geometrică. RNN-urile moderne pot fi considerate strămoșul istoric al unor astfel de modele hibride algoritmico-geometrice.


Desen: Programul antrenat se bazează simultan pe primitive geometrice (recunoașterea modelelor, intuiție) și primitive algoritmice (argumentare, căutare, memorie).

Dincolo de retropropagare și straturi diferențiabile

Dacă modelele de învățare automată devin mai asemănătoare cu programele, atunci cu greu vor mai fi diferențiabile - cu siguranță acele programe vor folosi în continuare straturi geometrice continue ca subrutine care vor rămâne diferențiabile, dar modelul general nu va fi. În consecință, utilizarea retropropagarii pentru a ajusta valorile greutăților într-o rețea fixă, codificată, poate să nu rămână metoda preferată pentru antrenamentul modelelor în viitor - cel puțin, nu ar trebui să se limiteze numai la această metodă. Trebuie să ne dăm seama cum să antrenăm sistemele nediferențiabile cel mai eficient. Abordări actuale includ algoritmi genetici, „strategii evolutive”, anumite metode de învățare prin întărire, ADMM (metoda de direcție alternativă a multiplicatorilor Lagrange). Desigur, coborârea gradientului este aici pentru a rămâne - informațiile despre gradient vor fi întotdeauna utile pentru optimizarea funcțiilor parametrice diferențiabile. Dar modelele noastre vor deveni cu siguranță mai ambițioase decât funcțiile parametrice diferențiabile, așa că dezvoltarea lor automatizată („antrenament” în „învățare automată”) va necesita mai mult decât propagarea inversă.

În plus, backpropagation are un cadru end-to-end, care este potrivit pentru învățarea transformărilor concatenate bune, dar este destul de ineficientă din punct de vedere computațional deoarece nu exploatează pe deplin modularitatea rețele profunde. Pentru a crește eficiența oricărui lucru, există o singură rețetă universală: introduceți modularitatea și ierarhia. Astfel, putem face backpropagarea în sine mai eficientă prin introducerea unor module de învățare decuplate cu un anumit mecanism de sincronizare între ele, organizate într-o manieră ierarhică. Această strategie este parțial reflectată în lucrarea recentă a DeepMind privind „gradienții sintetici”. Mă aștept la mult, mult mai mult lucru în această direcție în viitorul apropiat.

Ne putem imagina un viitor în care modelele nediferențiabile la nivel global (dar cu părți diferențiabile) vor învăța - vor crește - folosind un proces de căutare eficient care nu aplică gradienți, în timp ce părțile diferențiabile vor învăța și mai repede folosind gradienți folosind ceva mai mult. versiune eficientă retropropagare

Învățare automată automată

În viitorul arhitecturii, modelele vor fi create prin învățare, mai degrabă decât scrise manual de ingineri. Modelele rezultate sunt asociate automat cu un set mai bogat de primitive și modele de învățare automată asemănătoare programelor.

În zilele noastre, de cele mai multe ori, un dezvoltator de sisteme de învățare profundă modifică la nesfârșit datele cu scripturi Python, apoi petrece mult timp regland arhitectura și hiperparametrii rețelei de învățare profundă pentru a obține un model funcțional - sau chiar pentru a obține un model remarcabil dacă dezvoltatorul este atât de ambițios. Inutil să spun că acesta nu este cel mai bun poziție mai bună de lucruri. Dar AI poate ajuta și aici. Din păcate, partea de prelucrare și pregătire a datelor este dificil de automatizat, deoarece necesită adesea cunoștințe de domeniu, precum și o înțelegere clară, la nivel înalt, a ceea ce dorește dezvoltatorul să obțină. Cu toate acestea, reglarea hiperparametrului este o procedură simplă de căutare și în în acest caz,știm deja ce dorește dezvoltatorul să obțină: acest lucru este determinat de funcția de pierdere a rețelei neuronale care trebuie configurată. Acum a devenit o practică obișnuită să instalați sisteme de bază AutoML, care se ocupă de majoritatea modificărilor setărilor modelului. Am instalat eu unul pentru a câștiga competiția Kaggle.

La cel mai elementar nivel, un astfel de sistem ar ajusta pur și simplu numărul de straturi din stivă, ordinea acestora și numărul de elemente sau filtre din fiecare strat. Acest lucru se face de obicei folosind biblioteci precum Hyperopt, despre care am discutat în Capitolul 7 (notă: cărțile „Deep Learning with Python”). Dar poți să mergi mult mai departe și să încerci să înveți arhitectura potrivită de la zero, cu set minim restricții. Acest lucru este posibil utilizând învățarea prin întărire, de exemplu, sau folosind algoritmi genetici.

O altă direcție importantă în dezvoltarea AutoML este antrenarea arhitecturii modelului simultan cu greutățile modelului. Antrenând un model de la zero de fiecare dată când încercăm arhitecturi ușor diferite, ceea ce este extrem de ineficient, deci într-adevăr sistem puternic AutoML va conduce evoluția arhitecturilor, în timp ce proprietățile modelului sunt reglate prin backpropagare la datele de antrenament, eliminând astfel toate sarcinile de calcul. Pe măsură ce scriu aceste rânduri, abordări similare au început deja să fie aplicate.

Când toate acestea vor începe să se întâmple, dezvoltatorii de sisteme de învățare automată nu vor rămâne fără muncă - vor trece la un nivel superior în lanțul valoric. Vor începe să depună mult mai mult efort pentru a crea funcții complexe pierderi care reflectă cu adevărat provocările de afaceri și vor avea o înțelegere profundă a modului în care modelele lor influențează ecosistemele digitale în care operează (de exemplu, clienții care beneficiază de predicțiile modelului și generează date pentru a-l antrena) - probleme care sunt acum doar cele mai mari companii își pot permite să ia în considerare.

Învățare pe tot parcursul vieții și reutilizare a rutinelor modulare

Dacă modelele devin mai complexe și construite pe primitive algoritmice mai bogate, atunci această complexitate crescută va necesita o reutilizare mai intensă între sarcini, mai degrabă decât antrenarea unui model de la zero de fiecare dată când avem o nouă sarcină sau un nou set de date. În cele din urmă, multe seturi de date nu conțin suficiente informații pentru a dezvolta un nou model complex de la zero și va deveni necesară utilizarea informațiilor din seturile de date anterioare. Nu reînveți engleza de fiecare dată când îl deschideți. carte noua- ar fi imposibil. În plus, antrenarea modelelor de la zero pe fiecare problemă nouă este foarte ineficientă din cauza suprapunerii semnificative dintre problemele actuale și cele întâlnite anterior.

În plus, în ultimii ani s-a făcut în mod repetat o observație remarcabilă că antrenarea aceluiași model este oarecum slabă. sarcini aferenteîși îmbunătățește rezultatele în fiecare dintre aceste sarcini. De exemplu, antrenarea aceleiași rețele neuronale pentru a traduce din engleză în germană și din franceză în italiană va avea ca rezultat un model care este mai bun în fiecare dintre aceste perechi de limbi. Antrenarea unui model de clasificare a imaginii simultan cu un model de segmentare a imaginii, cu o singură bază convoluțională, va avea ca rezultat un model care este mai bun la ambele sarcini. Și așa mai departe. Acest lucru este destul de intuitiv: există întotdeauna un fel informații care se suprapun între aceste două sarcini aparent diferite și, prin urmare model general are acces la mai multe informații despre fiecare sarcină individuală decât un model care a fost antrenat doar pentru acea sarcină specifică.

Ceea ce facem de fapt atunci când reutilizam un model pentru diferite sarcini este să folosim greutăți pre-antrenate pentru modele care îndeplinesc funcții comune, cum ar fi extragerea caracteristicilor vizuale. Ați văzut acest lucru în practică în Capitolul 5. Mă aștept ca o versiune mai generală a acestei tehnici să fie folosită în mod obișnuit în viitor: nu vom folosi doar caracteristici învățate anterior (greutăți ale submodelului), ci și arhitecturi de model și proceduri de antrenament. Pe măsură ce modelele devin mai asemănătoare programelor, vom începe să le refolosim subrutine, cum ar fi funcțiile și clasele în limbaje obișnuite de programare.

Gândiți-vă la cum arată procesul de dezvoltare de software astăzi: odată ce un inginer rezolvă o anumită problemă (cereri HTTP în Python, de exemplu), o împachetează ca o bibliotecă abstractă pentru reutilizare. Inginerii care se confruntă cu o problemă similară în viitor caută doar biblioteci existente, le descarcă și le folosesc în propriile proiecte. De asemenea, în viitor, sistemele de meta-învățare vor putea să asambla noi programe, cernind o bibliotecă globală de blocuri reutilizabile de nivel înalt. Dacă sistemul începe să dezvolte rutine similare pentru mai multe sarcini diferite, va lansa o versiune reutilizabilă „abstractă” a rutinei și o va stoca într-o bibliotecă globală. Acest proces va deschide oportunitatea pentru abstracții, componentă necesară pentru a realiza „generalizarea finală”: o rutină care va fi utilă pentru multe sarcini și domenii se poate spune că „abstractează” un anumit aspect al luării deciziilor. Această definiție a „abstracției” nu pare să fie conceptul de abstractizare în dezvoltarea de software. Aceste rutine pot fi fie geometrice (module de învățare profundă cu reprezentări pre-antrenate) fie algoritmice (mai aproape de bibliotecile cu care lucrează programatorii moderni).

Desen: Un sistem de meta-învățare care poate dezvolta rapid modele specifice sarcinii folosind primitive reutilizabile (algoritmice și geometrice), realizând astfel „generalizarea finală”.

Rezultatul: o viziune pe termen lung

Pe scurt, iată viziunea mea pe termen lung pentru învățarea automată:
  • Modelele vor deveni mai mult ca programe și vor avea capabilități care se extind cu mult dincolo de transformările geometrice continue ale datelor sursă cu care lucrăm acum. Poate că aceste programe vor fi mult mai aproape de modelele mentale abstracte pe care oamenii le dețin despre mediul lor și despre ei înșiși și vor fi capabile de o generalizare mai puternică datorită naturii lor algoritmice.
  • În special, modelele se vor amesteca module algoritmice cu abilități de raționament formal, căutare, abstracție - și module geometrice cu intuiție informală și recunoaștere a modelelor. AlphaGo (un sistem care necesita programare manuală intensivă și arhitectură) oferă un exemplu timpuriu al cum ar putea arăta îmbinarea IA simbolică și geometrică.
  • Ei vor crește automat (în loc să fie scrise manual de programatori umani), folosind părți modulare dintr-o bibliotecă globală de rutine reutilizabile - o bibliotecă care a evoluat prin asimilarea modelelor de înaltă performanță din mii de probleme și seturi de date anterioare. Odată ce sistemul metalearning a identificat modele comune de rezolvare a problemelor, acestea sunt convertite în rutine reutilizabile - la fel ca funcțiile și clasele din programarea modernă - și adăugate la o bibliotecă globală. Așa se realizează capacitatea abstracții.
  • Biblioteca globală și sistemul asociat de creștere a modelelor vor fi capabile să realizeze o anumită formă de „generalizare finală” umanoidă: confruntat cu sarcina noua, o situație nouă, sistemul va putea asambla un nou model de lucru pentru această problemă folosind foarte puține date, datorită: 1) primitivelor bogate de tip program care se generalizează bine și 2) experienței extinse cu probleme similare. În același mod în care oamenii pot învăța rapid un nou joc video complex, deoarece au experiență anterioară cu multe alte jocuri și pentru că modelele din experiența anterioară sunt abstracte și asemănătoare unui program, mai degrabă decât pur și simplu transformă stimulul în acțiune.
  • În esență, acest sistem de învățare continuă de creștere a modelelor poate fi interpretat ca Inteligență Artificială Puternică. Dar nu vă așteptați la declanșarea unui fel de robot-apocalipsă singulară: este fantezie pură, care s-a născut din lista mare neînțelegeri profunde în înțelegerea inteligenței și tehnologiei. Cu toate acestea, această critică nu are loc aici.

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

Amprentele mari de memorie sunt una dintre cele mai mari provocări ale rețelelor neuronale profunde. Cercetătorii încearcă să combată limita debitului Dispozitive DRAM pe care sistemele moderne trebuie să le folosească pentru a stoca cantități uriașe 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 procesoare convenționale este o modalitate de a evita problema blocajului memoriei, 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 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 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 realiza densitate mare calculele. 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 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 sarcina suplimentară de a reîncărca constant cântarul și de a stoca și de a prelua funcțiile 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. Î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 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. Aceste grafice conțin o cantitate mare paralelism. 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 memorie foarte limitată la bord, doar câțiva megaocteți în total. Noile arhitecturi de procesoare 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 de astăzi.