Sunt sigur că mulți oameni vor răspunde cu link-uri pentru a „lăsați-mă să fac google pentru asta”, așa că vreau să spun că „am încercat să dau seama acest lucru, așa că vă rog să-mi iertați lipsa de înțelegere aici, dar nu-mi pot da seama cum funcționează de fapt implementarea practică a unei rețele neuronale.

Înțeleg stratul de intrare și cum să normalizez datele, înțeleg și unitatea de părtinire, dar când vine vorba de stratul ascuns, care este calculul real în acel strat și cum se mapează la ieșirea este doar puțin ceață. Am văzut diagrame cu semne de întrebare în stratul ascuns, funcții booleene cum ar fi AND / OR / XOR, funcții de activare și noduri de intrare care mapează toate unitățile ascunse și noduri de intrare care mapează doar câteva unități ascunse fiecare și așa Am doar câteva întrebări cu privire la aspectul practic. Desigur, o explicație simplă a întregului proces de rețea neuronală așa cum ați explica un copil ar fi minunată.

Ce calcule se fac în stratul ascuns ?

Cum sunt mapate aceste calcule la stratul de ieșire?

Cum funcționează stratul de ieșire? De-normalizarea datelor din stratul ascuns?

De ce unele straturi din stratul de intrare sunt conectate la stratul ascuns și altele nu?

Comentarii

  • Oamenii de aici sunt drăguți, nu am văzut niciodată un răspuns „lăsați-mă să fac google pentru asta”, dar multe răspunsuri surprinzător de amănunțite și perspicace la ceea ce la început păreau a fi întrebări de bază. Din păcate, nu vă pot ajuta ‘ Cu a ta, dar mi se pare destul de relevant, așa că votez cu bucurie.
  • Mulțumesc pentru comentariu și vot Gael, probabil că ‘ sunt puțin cam șters de comunitatea SO așa cum știm cu toții cum pot obține acei oameni 🙂 Mă bucur să văd mai mult un spirit de colaborare aici, spre deosebire de încercarea de a câștiga insigne și puncte prin editarea / închiderea întrebărilor.
  • Nu sunt expert în rețele neuronale în mod specific, deși mă implic în aplicațiile și metodele lor. Răspunsul meu, poate nu atât de util, ar fi că calculele specifice din ascuns depind de ‘ funcția de cost ‘ impunând puterii tale, adică ceea ce încerci să realizezi. De exemplu, dacă doriți să grupați elementele de intrare în seturi grupate, veți calcula distanțele dintre elementele din stratul ascuns. Acest lucru poate trece prin diferite iterații și cicluri de optimizare în acest strat, până când îndepliniți un criteriu de eroare care permite procesului să „părăsească ‘ acest strat.

Răspuns

Versiune în trei propoziții:

  • Fiecare strat poate aplica orice funcție doriți stratului anterior (de obicei o transformare liniară urmată de o neliniaritate de zdrobire).

  • Lucrarea „Straturilor ascunse” este de a transforma intrările în ceva pe care stratul de ieșire îl poate folosi.

  • Stratul de ieșire transformă activările stratului ascuns în orice scară pe care ați dorit ca ieșirea dvs. să fie activată.

Ca tine „re 5:

Dacă doriți ca un computer să vă spună dacă există o autobuz într-o imagine, computerul ar putea avea un timp mai ușor dacă ar avea instrumentele potrivite.

Deci, detectorul dvs. de autobuz ar putea fi făcut dintr-un detector de roți (pentru a vă spune că este un vehicul) și un detector de cutie (deoarece autobuzul are forma unei cutii mari) și un detector de dimensiuni (pentru a vă spune acestea sunt cele trei elemente ale stratului tău ascuns: ele nu fac parte din imaginea brută, sunt instrumente pe care le-ai proiectat pentru a te ajuta să identifici autobuzele.

Dacă toți cei trei detectori pornesc (sau poate dacă sunt „activi în mod special), atunci există șanse mari să aveți un autobuz în fața dvs.

Rețelele neuronale sunt utile pentru că există instrumente bune (cum ar fi propagarea înapoi) pentru a construi o mulțime de detectoare și a le pune împreună.


Ca tine „ești un adult

O rețea neuronală feed-forward aplică o serie de funcții datelor. Funcțiile exacte vor depinde de rețeaua neuronală pe care o utilizați: cel mai frecvent, aceste funcții calculează fiecare o transformare liniară a stratului anterior, urmată de o neliniaritate de zdrobire. Uneori funcțiile vor face altceva (cum ar fi calcularea funcțiilor logice din exemplele dvs. , sau o medie a pixelilor adiacenți dintr-o imagine). Deci, rolurile diferitelor straturi ar putea depinde de funcțiile care sunt calculate, dar voi încerca să fiu foarte general.

Să apelăm intrarea vector $ x $, activările stratului ascuns $ h $ și activarea de ieșire $ y $. Aveți o funcție $ f $ care mapează de la $ x $ la $ h $ și o altă funcție $ g $ care mapează de la $ h $ la $ y $.

Deci activarea stratului ascuns este $ f (x) $ și ieșirea rețelei este $ g (f (x)) $.

De ce să aveți două funcții ($ f $ și $ g $) în loc de una singură?

Dacă nivelul de complexitate pe funcție este limitat, atunci $ g (f (x)) $ poate calcula lucruri pe care $ f $ și $ g $ nu le pot face individual.


Un exemplu cu funcții logice:

De exemplu, dacă permitem doar $ f $ și $ g $ pentru a fi simpli operatori logici precum „ȘI”, „SAU” și „NAND”, atunci nu puteți „calcula alte funcții precum„ XOR ”doar cu una dintre ele. Pe de altă parte, am putea putea calcula „XOR” dacă am fi dispuși să stratificăm aceste funcții una peste alta:

Funcțiile primului strat:

  • Asigurați-vă că cel puțin un element este „ADEVĂRAT” (folosind SAU)
  • Asigurați-vă că „nu sunt toate„ ADEVĂRAT ”(utilizând NAND)

Funcția celui de-al doilea strat:

  • Asigurați-vă că ambele criterii din primul strat sunt îndeplinite (folosind AND)

Ieșirea rețelei este doar rezultatul acestei a doua funcții. Primul strat transformă intrările în ceva pe care al doilea strat îl poate folosi, astfel încât întreaga rețea să poată efectua XOR.


Un exemplu cu imagini:

Slide 61 din această discuție –de asemenea disponibil aici ca o singură imagine – arată (o modalitate de a vizualiza) ceea ce caută diferitele straturi ascunse dintr-o anumită rețea neuronală.

Primul strat caută bucăți scurte de margini în imagine: acestea sunt foarte ușor de găsit din datele brute ale pixelilor, dar nu sunt foarte utile de la sine pentru a vă spune dacă vă uitați la o față sau la un autobuz sau un elefant.

Următorul strat compune marginile: dacă marginile din stratul ascuns inferior se potrivesc într-un anumit mod, atunci unul dintre detectoarele de ochi din mijlocul coloanei din stânga ar putea porni . Ar fi greu să creezi un singur strat care să fie atât de bun la găsirea a ceva atât de specific din pixelii bruti: detectoarele de ochi sunt mult mai ușor de construit din detectoarele de margine decât din pixelii bruti.

Stratul următor sus compune detectoarele de ochi și cele de nas în fețe. Cu alte cuvinte, acestea se vor aprinde când detectoarele de ochi și detectoarele de nas din stratul anterior se vor activa cu modelele potrivite. Acestea sunt foarte bune la căutarea anumitor tipuri de fețe: dacă una sau mai multe dintre ele se aprind, atunci stratul dvs. de ieșire ar trebui să raporteze că este prezentă o față.

Acest lucru este util deoarece detectoarele de față sunt ușor de construit din detectoare de ochi și detectoare de nas, dar foarte greu de construit din intensitățile pixelilor.

Deci fiecare strat te îndepărtează din ce în ce mai mult de pixelii bruti și mai aproape de obiectivul tău final (de exemplu, detectarea feței sau detectarea magistralei).


Răspunsuri la alte întrebări variate

„De ce unele straturi din stratul de intrare sunt conectate la stratul ascuns și altele nu?”

Nodurile deconectate din rețea se numesc noduri „bias”. Există „o explicație foarte frumoasă aici . Răspunsul scurt este că„ le place termenii de interceptare în regresie.

„Unde imaginile „detectorului de ochi” din exemplul de imagine provin? „

Nu am verificat dublu imaginile specifice la care am legat, dar, în general, aceste vizualizări arată setul de pixeli din stratul de intrare care maximizează activitatea neuronului corespunzător. Deci, dacă ne gândim la neuron ca la un detector de ochi, aceasta este imaginea pe care neuronul o consideră a fi cea mai asemănătoare ochiului. Oamenii găsesc de obicei aceste seturi de pixeli cu o optimizare (alpinism) procedură.

În această lucrare a unor oameni Google cu una dintre cele mai mari plase neuronale din lume, arată un neuron „detector de față” și un neuron „detector de pisici” în acest fel, precum și un al doilea mod: arată, de asemenea, imaginile reale care activează cel mai puternic neuronul (figura 3, figura 16). A doua abordare este plăcută, deoarece arată cât de flexibilă și neliniară este rețeaua – acești „detectori” de nivel înalt sunt sensibili la toate aceste imagini, chiar dacă nu arată în mod deosebit la nivelul pixelilor.


Spuneți-mi dacă ceva nu este clar sau dacă mai aveți întrebări.

Comentarii

  • Deci, există doar una definită algoritmul pentru fiecare nod de pe un anumit strat și greutățile fac diferitele ieșiri? Sau puteți programa fiecare nod de pe strat să fie diferit?
  • @GeorgeMcDowd acest lucru se referă la problema cheie: examinarea pixeli și identificarea autobuzelor este dificilă, așa cum ați sugerat. Din fericire, este ușor să priviți pixeli și să găsiți margini – asta face ‘ toate încercările de a face primul strat ascuns. Următorul strat încearcă pentru a face inferențe bazate pe margini, ceea ce este mult mai ușor decât încercarea de a face acest lucru pe baza pixelilor.
  • ASA ar trebui să vă ofere o altă recompensă (decât doar puncte) pentru timpul și efortul pe care l-ați pus în acest răspuns!
  • @ JoshuaEnfield Cred că logica din 1980 s a fost o combinație de a fi asemănător cu modul în care oamenii credeau că funcționează creierul, că este diferențiat peste tot și că valorile erau limitate așa cum ați menționat. De atunci, oamenii au descoperit că f(x) = max(x, 0) (” unitate liniară rectificată „) deseori funcționează mai bine, chiar dacă ‘ nu are multe dintre aceste proprietăți.
  • Exemplul autobuzului și lanțul de funcții tocmai l-au fixat. Nu ‘ nu înțelegeți de ce manualele nu pot ‘ să fie atât de descriptiv.

Răspuns

Voi încerca să adaug la descrierea operațională intuitivă …

O modalitate intuitivă bună de a gândi la o rețea neuronală este de a gândi despre ceea ce încearcă să facă un model de regresie liniară. O regresie liniară va lua unele intrări și va veni cu un model liniar care ia fiecare valoare de intrare ori de unii coeficienți de ponderare optimi ai modelului și încearcă să mapeze suma acestor rezultate la un răspuns de ieșire care îndeaproape se potrivește cu ieșirea adevărată. Coeficienții sunt determinați prin găsirea valorilor care vor reduce la minimum o anumită eroare între valoarea de ieșire dorită și valoarea învățată de model. Un alt mod de a spune este că modelul liniar va încerca să creeze multiplicatori de coeficienți pentru fiecare intrare și suma tuturor pentru a încerca să determine relația dintre intrarea (multiplă) și (de obicei, singură) ieșirea val ues. Același model poate fi considerat aproape ca elementul de bază al unei rețele neuronale; un perceptron cu o singură unitate.

Dar perceptronul cu o singură unitate are încă o piesă care va procesa suma datelor ponderate într-o manieră neliniară. De obicei, folosește o funcție de zdrobire (sigmoid sau tanh) pentru a realiza acest lucru. Deci, aveți unitatea de bază a stratului ascuns, care este un bloc care va însuma un set de intrări ponderate – apoi transmite răspunsul sumat la o funcție neliniară pentru a crea un răspuns al nodului de ieșire (strat ascuns). Unitatea de polarizare este la fel ca în regresie liniară, un offset constant care se adaugă la fiecare nod care urmează să fie procesat. Datorită blocului de procesare neliniar, nu mai sunteți limitat la răspunsuri numai liniare (ca în modelul de regresie liniară).

Ok, dar când aveți multe dintre unitățile perceptron unice care lucrează împreună, fiecare poate avea multiplicatori de greutate de intrare și răspunsuri diferite (chiar dacă TOATE procesează același set de intrări cu același bloc neliniar descris anterior). Ceea ce face ca răspunsurile să fie diferite este că fiecare are greutăți de coeficient diferite care sunt învățate de rețeaua neuronală prin antrenament (unele forme includ descendența în gradient). Rezultatul tuturor perceptronilor este apoi procesat din nou și trecut la un strat de ieșire, la fel cum au fost procesate blocurile individuale. Întrebarea atunci este cum sunt determinate greutățile corecte pentru toate blocurile?

O modalitate obișnuită de a învăța greutățile corecte este începând cu greutăți aleatorii și măsurând răspunsul de eroare între ieșirea reală reală și învățatul ieșire model. Eroarea va fi de obicei transmisă înapoi prin rețea și algoritmul de feedback va crește sau micșora individual aceste greutăți cu o anumită proporție față de eroare. Rețeaua va itera în mod repetat trecând înainte, măsurând răspunsul de ieșire, apoi actualizând (trecând reglajele de greutate înapoi) și corectând greutățile până la atingerea unui nivel satisfăcător de eroare. În acel moment aveți un model de regresie care poate fi mai flexibil decât un model de regresie liniar, este ceea ce se numește în mod obișnuit un aproximator de funcții universale.

Unul dintre modurile care m-au ajutat cu adevărat să învăț cum funcționează cu adevărat o rețea neuronală este să studiez codul unei implementări a rețelei neuronale și să o construiesc. Una dintre cele mai bune explicații de bază a codului poate fi găsită în capitolul rețea neuronală (disponibil gratuit) „Ghidul pentru DSP al omului de știință și inginer” . 26. Este scris în cea mai mare parte într-un limbaj foarte de bază (cred că era fortran) care te ajută cu adevărat să vezi ce se întâmplă.

Răspuns

funcții de activare sigmoidale . Deci, acestea sunt valori cuprinse între 0 și 1 și pentru multe intrări pot fi doar 0 „s și 1” s.

Îmi place să mă gândesc la transformarea dintre rezultatele acestor neuroni ascunși și stratul de ieșire ca doar o traducere (în sens lingvistic, nu în sens geometric). Acest lucru este cu siguranță adevărat dacă transformarea este inversabil și, dacă nu, atunci s-a pierdut ceva în traducere. Dar practic aveți doar „ieșirile ascunse ale neuronilor văzute din altă perspectivă.

Input-to-Hidden

Să spunem că aveți 3 neuroni de intrare (doar pentru a putea ușor scrieți câteva ecuații aici) și niște neuroni ascunși. Fiecare neuron ascuns primește ca intrare o sumă ponderată de intrări, deci poate

hidden_1 = 10 * (input_1) + 0 * (input_2) + 2 * (input_3) 

Aceasta înseamnă că valoarea hidden_1 este foarte sensibilă la valoarea input_1, deloc sensibil la input_2 și ușor sensibil la input_3.

Deci, ați putea spune că hidden_1 captează un anumit aspect al intrării, pe care l-ați putea numi „input_1 este important „aspect.

Ieșirea din hidden_1 este de obicei formată prin trecerea intrării prin unele funcții, deci să spunem că folosiți o funcție sigmoid . Această funcție preia valori cuprinse între 0 și 1; deci gândiți-vă la el ca la un comutator care spune că fie input_1 este important, fie că nu este „t.

Deci așa face stratul ascuns! Extrage aspecte sau caracteristici ale spațiului de intrare.

Acum greutățile pot fi și negative! Ceea ce înseamnă că puteți obține aspecte precum „input_1 este important DAR ȘI input_2 elimină importanța respectivă”:

hidden_2 = 10 * (input_1) - 10 * (input_2 ) + 0 * (input_3) 

sau input_1 și input_3 au importanță „comună”:

hidden_3 = 5 * (input_1) + 0 * (input_2) + 5 * (input_3) 

Mai multe Geometrie

Dacă cunoașteți unele algebră liniară, puteți gândi geometric în termeni de proiectare de-a lungul anumitor direcții. În exemplul de mai sus, am proiectat de-a lungul direcției input_1.

Să privim din nou hidden_1, din mai sus. Odată ce valoarea de la input_1 este suficient de mare, ieșirea funcției de activare sigmoidă va rămâne la 1, nu va fi mai mare . Cu alte cuvinte, din ce în ce mai multe input_1 nu vor avea nicio diferență în rezultat. În mod similar, dacă se deplasează în direcția opusă (adică negativă), atunci după un punct rezultatul nu va fi afectat.

Ok, bine. Dar să presupunem că nu dorim sensibilitate în direcția infinitului într-o anumită direcție și vrem să fie activată numai pentru un anumit interval pe o linie. Adică pentru valori foarte negative nu există niciun efect , iar pentru valori foarte pozitive nu există niciun efect, dar pentru valorile cuprinse între 5 și 16 doriți să se trezească. Aici ați utiliza o funcție de bază radială pentru funcția dvs. de activare.

Rezumat

Stratul ascuns extrage caracteristicile spațiului de intrare, iar stratul de ieșire le traduce în contextul dorit. S-ar putea să fie mult mai mult decât acesta, ce se întâmplă cu rețelele cu mai multe straturi și altele, dar asta este ceea ce înțeleg până acum.

EDIT: Această pagină cu minunatele sale grafice interactive face o treabă mai bună decât ar putea face vreodată răspunsul meu lung și greoi de mai sus : http://neuralnetworksanddeeplearning.com/chap4.html

Comentarii

  • La fel ca OP, ‘ sunt puțin confuz cu privire la stratul ascuns în rețelele neuronale. În exemplul dvs., cum găsește algoritmul NN greutățile pentru neuronii ascunși_1, ascunși_2 și ascunși_3? Și întrucât ascuns_1, ascuns_2 și ascuns_3 sunt derivate din aceleași variabile de intrare, nu ar ‘ ponderile converg către aceeași soluție?

Răspuns

Să luăm cazul clasificării. Ceea ce încearcă să facă stratul de ieșire este să estimați probabilitatea condițională ca eșantionul dvs. să aparțină unei clase date, adică cât de probabil este ca eșantionul să aparțină unei clase date. În termeni geometrici, combinarea straturilor într-un mod neliniar prin intermediul funcțiilor de prag permite rețelelor neuronale să rezolve probleme non-convexe (recunoașterea vorbirii, recunoașterea obiectelor și așa mai departe), care sunt cele mai interesante. Cu alte cuvinte, unitățile de ieșire sunt capabile să genereze funcții de decizie neconvexe precum cele descrise aici .

Se pot vizualiza unitățile în straturi ascunse ca învățând caracteristici complexe din date care permit stratului de ieșire să poată discerne mai bine o clasă de alta, pentru a genera limite de decizie mai precise. De exemplu, în cazul recunoașterii feței, unitățile din primele straturi învață trăsături asemănătoare muchiilor (detectează marginile la orientări și poziții date), iar stratul superior învață să le combine pentru a deveni detectoare pentru trăsături faciale precum nasul, gura sau ochii. Ponderile fiecărei unități ascunse reprezintă acele caracteristici, iar ieșirea sa (presupunând că este un sigmoid) reprezintă probabilitatea ca acea caracteristică să fie prezentă în eșantionul dvs.

În general, semnificația ieșirilor de ieșire și straturile ascunse depind de problema pe care încercați să o rezolvați (regresie, clasificare) și de funcția de pierdere pe care o utilizați (entropie încrucișată, erori cel mai puțin pătrate, …)

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *