Cu cuvinte simple despre complex: ce sunt rețelele neuronale

„(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 dintr-un model de învățare profundă efectuează o transformare geometrică simplă asupra datelor care trec prin el. Î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 sarcinilor nu există practic o rețea neuronală profundă dimensiune potrivită, care rezolvă problema, sau dacă există, 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 mai rezolva nimic problema fundamentala 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 ale situației actuale, ale ei înșiși și al altor persoane ș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 parametrilor de lansare corespunzători pentru 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 schimb, oamenii pot folosi puterea abstracției pentru a crea modele fizice - știința rachetei - și pot găsi o soluție exactă care va duce o rachetă 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. Bună execuție Această provocare 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 vor aborda 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ă for codificată cu memorie de geometrie încorporată, ci un set mare de 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 while, crearea variabilelor, stocarea pe disc pentru o perioadă lungă de timp -memorie pe termen, 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 software constă în generare automată folosind programe simple 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ă cod sursa, și va extinde semnificativ sfera 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ății î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 doar la această metodă. Trebuie să ne dăm seama cum să antrenăm sistemele nediferențiabile cel mai eficient. Abordările 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țelelor 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 multe, la multe mai multă muncăî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 - 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 unele versiuni de backpropagation mai eficiente.

Î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ă aceasta nu este cea mai bună stare 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 hiperparametrilor este o procedură simplă de căutare, iar î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 reglată. 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 adecvată de la zero, cu un set minim de 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 mai multe nivel inaltîn lanțul valoric. Ei vor începe să depună mult mai mult efort pentru a crea funcții complexe de pierdere care reflectă cu adevărat obiectivele de afaceri și vor dezvolta o înțelegere profundă a modului în care modelele lor influențează ecosistemele digitale în care operează (de exemplu, clienții care folosesc predicții model și generează date pentru pregătirea acestuia) - probleme pe care doar cele mai mari companii își pot permite acum să le 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 sarcină. set nou 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 Limba engleză de fiecare dată când deschideți o carte nouă – asta 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, observația remarcabilă care a fost făcută în mod repetat în ultimii ani este că antrenarea aceluiași model pentru a face mai multe sarcini vag, îi îmbunătățește performanța. î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 modelele care performează funcții generale, cum ar fi extragerea caracteristicilor vizuale. Ați văzut acest lucru în practică în capitolul 5. Mă aștept ca în viitor să fie utilizat mai pe scară largă versiune generală Această tehnică: nu vom aplica 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 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 programare modernă- și adăugat la biblioteca globală. Așa se realizează capacitatea abstracții.
  • O bibliotecă globală și un sistem asociat de creștere a modelelor vor putea realiza o anumită formă de „generalizare finală” asemănătoare omului: atunci când se confruntă cu o nouă sarcină, cu o nouă situație, sistemul va fi capabil să adune un nou model de lucru pentru acea sarcină folosind foarte puține date, datorită: 1) primitivelor bogate de tip program, care generalizează bine și 2) experienței extinse în rezolvarea unor 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 să aibă loc un fel de apocalipsă singulară a roboților: este pură fantezie, născută dintr-o listă lungă de neînțelegeri profunde în înțelegerea inteligenței și tehnologiei. Cu toate acestea, această critică nu are loc aici.

Mi-a spus cât de artificial rețele neuronale, prin ce se deosebesc de programele de calculator tradiționale și de ce această tendință va rămâne cu noi mult timp.

Ce este învățarea profundă?

Pentru prima dată despre succesul învățării profunde ( 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 (î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, ce leagă programele de recunoaștere a vorbirii și programele de traducere automată, programele de identificare a defecțiunilor în echipamentele de petrol și gaze și programele 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ă vă spun acum că veți vorbi cu o rețea neuronală de computere în tabletă, iar rețeaua neuronală va controla o mașină fără șofer, nici nu veți crede - dar în zadar.

Apropo, „imaginile porno” de pe rețelele de socializare nu mai sunt descoperite 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 piking”) ș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 ocupă de sute de ori mai puțină memorie RAM atunci când 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 zone mari date, astfel de specialiști se numesc pe ei înșiși „scientists”, 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, în ultimul an a apărut o infrastructură dezvoltată pentru noua profesie: cursuri de pregătire universitară, zeci de tutoriale, cărți, terenuri de concurs și antrenament, un număr imens de programe gratuite. 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 î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 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. S-a bazat pe software Plopul, care vizualizează munca inteligenţă artificială. 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 cea mai eficientă utilizare a resurselor IPU.

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 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 care trebuie 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 un anumit grad de 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 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. 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 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. 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.

Din articol veți afla ce este învățarea profundă. Articolul conține și multe resurse pe care le puteți folosi pentru a stăpâni acest domeniu.

În lumea modernă, de la asistență medicală la producție, învățarea profundă este folosită peste tot. Companiile apelează la această tehnologie pentru a rezolva probleme complexe, cum ar fi recunoașterea vorbirii și a obiectelor, traducerea automată și așa mai departe.

Una dintre cele mai impresionante realizări din acest an a fost AlphaGo învingându-l pe cel mai bun jucător Go din lume. Pe lângă Go, aparatele au învins oameni în alte jocuri: dame, șah, reversi și Jeopardy.

Posibil victorie în joc de societate pare inaplicabil pentru rezolvarea problemelor reale, dar acest lucru nu este deloc adevărat. Go a fost conceput pentru a fi imbatabil prin inteligența artificială. Pentru a face acest lucru, ar trebui să învețe un lucru important pentru acest joc - intuiția umană. Acum, cu ajutorul acestei dezvoltări, este posibil să rezolvi multe probleme care înainte erau inaccesibile unui computer.

Evident, învățarea profundă este încă departe de a fi perfectă, dar este deja aproape de a fi utilă comercial. De exemplu, aceste mașini autonome. Firme celebre precum Google, Tesla și Uber încearcă deja să introducă mașini autonome pe străzile orașului.

Ford prezice o creștere semnificativă a cotei de auto-conducere Vehicul până în 2021. Guvernul SUA a reușit, de asemenea, să dezvolte un set de reguli de siguranță pentru ei.

Ce este învățarea profundă?

Pentru a răspunde la această întrebare, trebuie să înțelegeți cum interacționează cu învățarea automată, rețelele neuronale și inteligența artificială. Pentru a face acest lucru, folosim metoda de vizualizare folosind cercuri concentrice:

Cercul exterior este inteligența artificială în general (de exemplu, computerele). Puțin mai departe este învățarea automată, iar chiar în centru sunt învățarea profundă și rețelele neuronale artificiale.

În linii mari, învățarea profundă este pur și simplu un nume mai convenabil pentru rețelele neuronale artificiale. „Adanc” în această expresie se referă la gradul de complexitate (adâncime) al rețelei neuronale, care poate fi adesea destul de superficial.

Creatorii primei rețele neuronale s-au inspirat din structura cortexului cerebral. Stratul de bază al rețelei, perceptronul, este în esență analogul matematic al unui neuron biologic. Și, ca și în creier, perceptronii care se intersectează unul cu celălalt pot apărea într-o rețea neuronală.

Primul strat al rețelei neuronale se numește strat de intrare. Fiecare nod din acest strat primește o anumită informație ca intrare și o transmite nodurilor ulterioare din alte straturi. Cel mai adesea, nu există conexiuni între nodurile unui strat, iar ultimul nod al lanțului emite rezultatul rețelei neuronale.

Nodurile din mijloc sunt numite noduri ascunse deoarece nu au conexiuni cu lumea exterioară, cum ar fi nodurile de ieșire și de intrare. Ele sunt apelate numai atunci când straturile anterioare sunt activate.

Învățarea profundă este în esență o tehnică de antrenament a rețelei neuronale care utilizează multe straturi pentru a rezolva probleme complexe (cum ar fi recunoașterea vorbirii) folosind modele. În anii optzeci, majoritatea rețelelor neuronale erau cu un singur strat din cauza costului ridicat și a capacităților limitate de date.

Dacă luăm în considerare învățarea automată ca o ramură sau o variantă a inteligenței artificiale, atunci învățarea profundă este un tip specializat de astfel de ramură.

Învățarea automată folosește inteligența computerizată care nu oferă imediat răspunsul. În schimb, codul va rula pe datele de testare și, pe baza corectitudinii rezultatelor sale, își va ajusta progresul. Pentru succesul acestui proces, se folosesc de obicei o varietate de tehnici, software special și informatică, care descriu metode statice și algebră liniară.

Metode de învățare profundă

Metodele de învățare profundă sunt împărțite în două tipuri principale:

  • Antrenament tutorat
  • Învățare nesupravegheată

Prima metodă folosește date special selectate pentru a obține rezultatul dorit. Necesită destul de multă intervenție umană, deoarece datele trebuie selectate manual. Cu toate acestea, este util pentru clasificare și regresie.

Imaginați-vă că sunteți proprietarul unei companii și doriți să determinați impactul bonusurilor asupra duratei contractelor subordonaților dvs. Cu date precolectate, o metodă de învățare supravegheată ar fi indispensabilă și foarte eficientă.

A doua metodă nu implică răspunsuri pregătite în prealabil și algoritmi de lucru. Acesta își propune să identifice modele ascunse în date. Este folosit de obicei pentru sarcini de grupare și asociere, cum ar fi gruparea clienților după comportament. „Și ei aleg cu asta” pe Amazon este o variantă a sarcinii de asociere.

În timp ce metoda de învățare supravegheată este adesea destul de convenabilă, o versiune mai complexă este totuși mai bună. Învățarea profundă s-a dovedit a fi o rețea neuronală care nu necesită supraveghere umană.

Importanța învățării profunde

Calculatoarele au folosit mult timp tehnologia pentru a recunoaște anumite caracteristici dintr-o imagine. Cu toate acestea, rezultatele au fost departe de a avea succes. Viziune computerizată a avut un impact incredibil asupra învățării profunde. Aceste două tehnici sunt cele care rezolvă în prezent toate problemele de recunoaștere.

În special, Facebook a reușit să recunoască fețele din fotografii folosind învățarea profundă. Aceasta nu este o simplă îmbunătățire a tehnologiei, ci un punct de cotitură care schimbă toate convingerile anterioare: „O persoană poate determina cu o probabilitate de 97,53% dacă aceeași persoană este prezentată în două fotografii diferite. Programul dezvoltat de echipa Facebook poate face acest lucru cu o probabilitate de 97,25%, indiferent de iluminare sau dacă persoana se uită direct la cameră sau este întoarsă lateral spre aceasta.”

Recunoașterea vorbirii a suferit, de asemenea, modificări semnificative. Echipa de la Baidu, unul dintre principalele motoare de căutare din China, a dezvoltat un sistem de recunoaștere a vorbirii care a reușit să depășească oamenii în viteza și acuratețea scrierii textului pe dispozitivele mobile. În engleză și mandarină.

Ceea ce este deosebit de interesant este că scrierea unei rețele neuronale comune pentru două limbi complet diferite nu a necesitat multă muncă: „Din punct de vedere istoric, oamenii vedeau chineza și engleza ca două limbi complet diferite. limbi diferite, așa că fiecare dintre ei a necesitat o abordare diferită”, spune Andrew Ng, șeful centrului de cercetare Baidu. „Algoritmii de învățare sunt acum atât de generalizați încât puteți Doarînvăța."

Google folosește învățarea profundă pentru a gestiona energia în centrele de date ale companiei. Au fost capabili să reducă costurile cu resursele de răcire cu 40%. Aceasta reprezintă o îmbunătățire cu aproximativ 15% a eficienței energetice și economii de milioane de dolari.

Microservicii de învățare profundă

Aici scurtă recenzie servicii legate de deep learning.

Tagger ilustrație. Îmbunătățit de Illustration2Vec, acest serviciu vă permite să marcați imaginile cu un rating de „protejat”, „îndoielnic”, „periculos”, „drept de autor” sau „general” pentru a înțelege în prealabil conținutul imaginii.

  • Suplimentul Theano de la Google
  • Editabil în Python și Numpy
  • Adesea folosit pentru a rezolva o serie specifică de probleme
  • Nu de scop general. Concentrați-vă pe viziunea artificială
  • Editat în C++
  • Există o interfață în Python

Cursuri online de deep learning

Google și Udacity s-au unit pentru a crea un curs gratuit de deep learning, parte a cursului Udacity Machine Learning. Acest program este condus de dezvoltatori experimentați care doresc să dezvolte domeniul învățării automate și, în special, al învățării profunde.

O altă opțiune populară este cursul de învățare automată de la Andrew Ng, susținut de Coursera și Stanford.

  1. Învățare automată - Stanford de Andrew Ng pe Coursera (2010-2014)
  2. Învățare automată - Caltech de Yaser Abu-Mostafa (2012-2014)
  3. Învățare automată - Carnegie Mellon de Tom Mitchell (primăvara 2011)
  4. Rețele neuronale pentru învățarea automată – Geoffrey Hinton despre Coursera (2012)
  5. Clasa rețele neuronale– Hugo Larochelle de la Universitatea din Sherbrooke (2013)

Cărți despre învățarea profundă

În timp ce resursele din secțiunea anterioară se bazează pe o bază de cunoștințe destul de extinsă, Grokking Deep Learning, dimpotrivă, se adresează începătorilor. După cum spun autorii: „Dacă ați terminat clasa a XI-a și aveți o înțelegere aproximativă a modului de a scrie Python, vă vom învăța învățarea profundă.”

O alternativă populară la această carte este o carte cu titlul explicativ Deep Learning Book. Este deosebit de bun pentru că acoperă toată matematica de care veți avea nevoie pentru a intra în acest domeniu.

  1. „Deep Learning” de Yoshua Bengio, Ian Goodfellow și Aaron Courville (2015)
  2. „Rețele neuronale și învățarea profundă” de Michael Nielsen (2014)
  3. „Învățare profundă” de la Microsoft Research (2013)
  4. „Tutoriale de învățare profundă” de la Laboratorul LISA, Universitatea din Montreal (2015)
  5. „neuraltalk” de Andrej Karpathy
  6. „Introducere în algoritmii genetici”
  7. „Abordare modernă a inteligenței artificiale”
  8. „Prezentare generală asupra învățării profunde și a rețelelor neuronale”

Videoclipuri și prelegeri

Deep Learning Simplified este un canal YouTube minunat. Iată primul lor videoclip:

Se vorbește și se scrie mult despre rețelele neuronale artificiale astăzi, atât în ​​contextul big data și al învățării automate, cât și în afara acestuia. Î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 creier 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, neuron 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 straturile ulterioare („ascunse” și ieșire), fiecare element 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 alcătuiesc minim necesar informații pentru a trece la următorul nivel de înțelegere a 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 trece la cealaltă extremă și fără a intra în detalii despre funcționarea metodelor ANN în fiecare caz concret, 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 punctul cheie în utilizarea lui pentru a rezolva probleme practice .

În general, formarea unui 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.

Așa algoritm general antrenarea unei rețele neuronale (să ne amintim de câinele lui Pavlov - da, exact asta este 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”.

Totuși, cercetătorii în inteligența artificială se confruntă deja cu chestiunea eticii: temerile exprimate în fiecare film științifico-fantastic care se respectă, de la „Terminator” la „Transformers”, nu mai par amuzante (rețelele neuronale moderne sofisticate pot fi deja considerate plauzibile). modelează munca creierului insectei!), dar sunt în mod clar inutile pentru moment.

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.