Funcții de activare. Modele de neuroni artificiali. Funcții de activare

Lucrare de laborator nr 1

Modele de neuroni artificiali

Scopul lucrării: dobândirea de abilități în studierea funcțiilor de activare și a modelelor de neuroni folosind pachetul de simulare Simulink al sistemului MATLAB.

Cuvinte cheie


■ coeficientul de ponderare a neuronilor;

■ input neuron ponderat;

■ semnal de intrare (intrare) al neuronului;

■ semnal de ieşire (ieşire) al neuronului;

■ neuron;

■ stratul rețelei neuronale;

■ deplasarea neuronilor;


■ funcția de activare (funcție de transfer):

■ singur cu restricţii stricte;

■ liniară;

■ logistică;


neuron simplu

Celula elementară a unei rețele neuronale este neuron . Structura unui neuron cu o intrare scalară este prezentată în Fig. 1.1, A.




Orez. 1.1. Diagrama bloc a unui neuron cu o intrare scalară
A) fără deplasare, b) cu offset

Iată un scalar semnal de intrare (Intrare ) se înmulțește cu un scalar coeficient de greutate , și rezultatul intrare ponderată este argumentul funcției de activare a neuronului, care generează un scalar semnal de ieșire (Ieșire ) .

Neuronul prezentat în fig. 3.1, b, completat de un scalar deplasare . Offset-ul este adăugat la intrarea ponderată și face ca argumentul funcției să se deplaseze cu . Efectul biasului poate fi redus la un circuit de ponderare imaginându-ne că neuronul are o a doua intrare cu o valoare egală cu 1. Intrarea funcției de activare a neuronului este încă scalară și egală cu suma intrării ponderate și a biasului. Această sumă este un argument pentru funcția de activare, care produce un semnal la ieșire.

Semnalul de ieșire al unui neuron poate fi reprezentat ca o combinație liniară de semnale de intrare și 1:

.

Principiul de funcționare rețeaua neuronală constă în ajustarea parametrilor neuronului astfel încât funcționarea rețelei să corespundă unui comportament dorit. Prin ajustarea greutăților sau a parametrilor de părtinire, puteți „antrenați” rețeaua pentru a face o anumită lucrare. De asemenea, este posibil ca rețeaua însăși să își ajusteze parametrii pentru a obține rezultatul dorit.

Funcții de activare

Funcții de activare (funcții de transfer ) neuronii pot avea o varietate de expresii. De obicei, funcția de activare aparține clasei de funcții sigmoide cu un argument și o ieșire.

Să ne uităm la cele trei funcții de activare cele mai frecvent utilizate:

1) funcție de activare unică cu restricții stricte

Graficul unei singure funcții de activare cu restricții stricte și simbolul acesteia sunt prezentate în Fig. 1.2.

funcția de activare hard-limit este implementată ca un fișier M hardlim în pachetul de extensie Neural Network Toolbox al sistemului MATLAB;

2) funcția de activare liniară ; este descris de relaţia

iar graficul și simbolul acestuia sunt prezentate în Fig. 1,3;

în pachetul de extensie Neural Network Toolbox, funcția de activare liniară este implementată ca un fișier M purelin;

3) funcția de activare logistică ; este descris de relaţia

iar graficul și simbolul acestuia sunt prezentate în Fig. 1,4;

această funcție aparține clasei de funcții sigmoide, argumentul său poate lua orice valoare de la până la , iar rezultatul variază în intervalul de la 0 la 1;

în pachetul de extensie Neural Network Toolbox, funcția de activare logistică este implementată sub forma unui logsig M-file; Datorită proprietății sale de diferențiere, această funcție este adesea folosită în rețelele cu învățare de backpropagation.

Simbolurile încadrate într-un pătrat în colțurile din dreapta sus ale graficelor (vezi Fig. 1.2 - 1.4) caracterizează funcțiile de activare. Aceste notații vor fi utilizate atunci când descrieți diagramele structurale ale rețelelor neuronale.

Există și alte funcții de activare în pachetul de expansiune Neural Network Toolbox. În plus, utilizatorul își poate crea propriile funcții folosind limbajul de programare MATLAB.

Neuron cu intrare vectorială

În fig. Figura 1.5 prezintă un circuit al unui neuron cu o intrare vectorială constând din elemente , , ..., . Aici, fiecare element de intrare este înmulțit cu coeficienții de ponderare , , respectiv ..., iar valorile ponderate sunt introduse la intrarea sumatorului. Suma lor este egală cu produsul scalar dintre vectorul coeficienților de ponderare și vectorul de intrare.

Neuronul are o părtinire care se adaugă la suma ponderată a intrărilor. Cantitatea rezultată se determină în funcție de expresie

și este argumentul funcției de activare. În notația limbajului de programare MATLAB, această expresie este scrisă după cum urmează:

Diagrama neuronică prezentată în fig. 1.5 conține o mulțime de detalii inutile. Când luăm în considerare rețelele neuronale formate dintr-un număr mare de neuroni, se va folosi o diagramă bloc mărită a unui neuron (Fig. 1.6).

Intrarea neuronului este reprezentată ca o linie verticală întunecată, sub care este indicat numărul de elemente de intrare. Dimensiunea de intrare este indicată sub săgeata care emană de la intrare (în Fig. 1.6 este indicată). Vectorul de intrare este înmulțit cu un vector rând de dimensiune . Ca și înainte, constanta 1 este tratată ca o intrare care este înmulțită cu decalajul scalar. Intrarea funcției de activare a neuronului este suma produsului punctual și a biasului. Această sumă este transformată de funcția de activare, a cărei ieșire este cantitatea , care în acest caz este scalară.

) fac parte din munca mea științifică de la universitate, care suna astfel: „Complex de software pentru detectarea fețelor într-un flux video folosind o rețea neuronală convoluțională”. Scopul lucrării a fost de a îmbunătăți caracteristicile vitezei în procesul de detectare a fețelor într-un flux video. O cameră pentru smartphone a fost folosită ca flux video, un desktop PS (limbaj Kotlin) a fost scris pentru a crea și antrena o rețea neuronală convoluțională, precum și o aplicație mobilă pentru Android (limba Kotlin), care a folosit rețeaua instruită și a „încercat” pentru a recunoaște fețele din fluxul video al camerei. Rezultatele s-au dovedit așa-așa, folosiți o copie exactă a topologiei pe care am propus-o pe propriul risc și risc (nu aș recomanda-o).

Probleme teoretice

  • determinarea problemei de rezolvat printr-o rețea neuronală (clasificare, predicție, modificare);
  • determinați datele de intrare (tip: imagine, sunet, dimensiune: 100x100, 30x30, format: RGB, tonuri de gri) și date de ieșire (număr de clase);
  • determinați topologia rețelei convoluționale (numărul de straturi convoluționale, subeșantionate, complet conectate; numărul de hărți de caracteristici, dimensiunea nucleului, funcții de activare).

Introducere

Cele mai bune rezultate în domeniul recunoașterii feței au fost arătate de rețeaua neuronală convoluțională sau rețeaua neuronală convoluțională (denumită în continuare CNN), care este o dezvoltare logică a ideilor unor arhitecturi de rețele neuronale precum cognitron și neocognitron. Succesul se datorează capacității de a lua în considerare topologia bidimensională a imaginii, în contrast cu perceptronul multistrat.

Rețelele neuronale convoluționale oferă rezistență parțială la schimbările de scară, deplasări, rotații, modificări de unghi și alte distorsiuni. Rețelele neuronale convoluționale combină trei idei arhitecturale pentru a oferi invarianță la scară, rotație, translație și distorsiune spațială:

  • câmpurile receptorilor locale (oferă conectivitate bidimensională locală a neuronilor);
  • coeficienți sinaptici generali (asigură detectarea anumitor caracteristici oriunde în imagine și reduc numărul total de coeficienți de ponderare);
  • organizare ierarhică cu subeșantioane spațiale.
În acest moment, rețeaua neuronală convoluțională și modificările acesteia sunt considerate cei mai buni algoritmi pentru găsirea obiectelor în scenă din punct de vedere al preciziei și vitezei. Din 2012, rețelele neuronale au ocupat primul loc în celebra competiție internațională de recunoaștere a imaginilor ImageNet.

De aceea, în munca mea am folosit o rețea neuronală convoluțională bazată pe principiile neocognitronului și completată cu antrenament folosind un algoritm de backpropagation.

Structura rețelei neuronale convoluționale

Un CNN este format din diferite tipuri de straturi: straturi convoluționale, straturi de subeșantionare și straturi ale unei rețele neuronale „regulate” - un perceptron, în conformitate cu figura 1.


Figura 1 – topologia rețelei neuronale convoluționale

Primele două tipuri de straturi (convoluționale, subeșantionare), alternând unele cu altele, formează vectorul caracteristică de intrare pentru un perceptron multistrat.

Rețeaua convoluțională și-a primit numele de la numele operației - convoluție, a cărei esență va fi descrisă în continuare.

Rețelele convoluționale sunt o cale de mijloc fericită între rețelele plauzibile din punct de vedere biologic și un perceptron multistrat convențional. Astăzi, cele mai bune rezultate în recunoașterea imaginilor se obțin cu ajutorul lor. În medie, acuratețea recunoașterii unor astfel de rețele depășește ANN-urile convenționale cu 10-15%. CNN este o tehnologie cheie a Deep Learning.

Principalul motiv pentru succesul SNA a fost conceptul de ponderi comune. În ciuda dimensiunilor lor mari, aceste rețele au un număr mic de parametri configurabili în comparație cu strămoșul lor, neocognitronul. Există variante de CNN (Tiled Convolutional Neural Network), similare cu neocognitron în astfel de rețele, există o respingere parțială a ponderilor asociate, dar algoritmul de învățare rămâne același și se bazează pe retropropagarea erorii; CNN-urile pot rula rapid pe o mașină în serie și pot învăța rapid prin paralelizarea pură a procesului de convoluție pe fiecare hartă, precum și deconvoluția atunci când eroarea se propagă prin rețea.

Figura de mai jos demonstrează vizualizarea convoluției și a subeșantionării:

Modelul neuronului


Topologia rețelei neuronale convoluționale

Determinarea topologiei rețelei se bazează pe problema rezolvată, pe datele din articole științifice și pe propria experiență experimentală.

Se pot distinge următoarele etape care influențează alegerea topologiei:

  • determinarea problemei de rezolvat printr-o rețea neuronală (clasificare, predicție, modificare);
  • determina limitările problemei care se rezolvă (viteza, acuratețea răspunsului);
  • determinați datele de intrare (tip: imagine, sunet, dimensiune: 100x100, 30x30, format: RGB, tonuri de gri) și datele de ieșire (numărul de clase).
Sarcina pe care o rezolvă rețeaua mea neuronală este clasificarea imaginilor, în special a fețelor. Restricțiile impuse rețelei sunt viteza de răspuns - nu mai mult de 1 secundă și acuratețea recunoașterii de cel puțin 70%. Topologia generală a rețelei în conformitate cu figura 2.


Figura 2 - Topologia rețelei neuronale convoluționale

Stratul de intrare

Datele de intrare sunt imagini JPEG color, cu dimensiunea de 48x48 pixeli. Dacă dimensiunea este prea mare, atunci complexitatea de calcul va crește și, în consecință, restricțiile privind viteza de răspuns vor fi încălcate, determinarea dimensiunii în această problemă este rezolvată prin metoda de selecție. Dacă alegeți o dimensiune prea mică, rețeaua nu va putea identifica caracteristicile cheie ale fețelor. Fiecare imagine este împărțită în 3 canale: roșu, albastru, verde. Aceasta produce 3 imagini de 48x48 pixeli.

Stratul de intrare ține cont de topologia bidimensională a imaginilor și este format din mai multe hărți (matrici), poate exista o singură hartă dacă imaginea este prezentată în tonuri de gri, în caz contrar sunt 3 dintre ele, unde fiecare hartă corespunde unei imagini cu un anumit canal (roșu, albastru și verde).

Datele de intrare pentru fiecare valoare specifică a pixelului sunt normalizate în intervalul de la 0 la 1, utilizând formula:

Stratul convoluțional

Stratul convoluțional este un set de hărți (un alt nume este hărți de caracteristici, în viața de zi cu zi acestea sunt matrici obișnuite), fiecare hartă are un nucleu sinaptic (în diferite surse se numește diferit: miez de scanare sau filtru).

Numărul de carduri este determinat de cerințele pentru sarcină, dacă luați un număr mare de carduri, calitatea recunoașterii va crește, dar complexitatea de calcul va crește. Pe baza analizei articolelor științifice, în majoritatea cazurilor se propune să se ia un raport de unu la doi, adică fiecare hartă a stratului anterior (de exemplu, în primul strat convoluțional, cel anterior este intrarea) este asociat cu două hărți ale stratului convoluțional, în conformitate cu Figura 3. Număr de carduri - 6.


Figura 3 - Organizarea conexiunilor dintre hărțile stratului convoluțional și cel precedent

Mărimea tuturor hărților straturilor convoluționale este aceeași și se calculează folosind formula 2:

Nucleul este un filtru sau o fereastră care alunecă pe întreaga zonă a hărții anterioare și găsește anumite caracteristici ale obiectelor. De exemplu, dacă rețeaua a fost antrenată pe mai multe fețe, atunci unul dintre nuclee ar putea produce cel mai mare semnal în zona ochiului, gurii, sprâncenelor sau nasului în timpul procesului de antrenament, în timp ce un alt nucleu ar putea detecta alte caracteristici. Dimensiunea miezului este de obicei luată în intervalul de la 3x3 la 7x7. Dacă dimensiunea nucleului este mică, atunci nu va putea evidenția nicio caracteristică dacă este prea mare, atunci numărul de conexiuni între neuroni crește; De asemenea, dimensiunea nucleului este aleasă astfel încât dimensiunea hărților stratului convoluțional să fie uniformă, ceea ce ne permite să nu pierdem informații la reducerea dimensiunii în stratul de subeșantionare descris mai jos.

Nucleul este un sistem de greutăți sau sinapse comune, aceasta este una dintre principalele caracteristici ale unei rețele neuronale convoluționale. Într-o rețea multistrat convențională, există o mulțime de conexiuni între neuroni, adică sinapse, ceea ce încetinește foarte mult procesul de detectare. Într-o rețea convoluțională, dimpotrivă, greutățile partajate reduc numărul de conexiuni și fac posibilă găsirea aceleiași caracteristici în întreaga zonă a imaginii.

Inițial, valorile fiecărei hărți de strat convoluțional sunt egale cu 0. Valorile greutăților nucleului sunt stabilite aleatoriu în intervalul de la -0,5 la 0,5. Nucleul alunecă peste harta anterioară și efectuează o operație de convoluție, care este adesea folosită pentru procesarea imaginilor, formula:

Informal, această operație poate fi descrisă astfel: cu o fereastră de dimensiunea nucleului g, parcurgem întreaga imagine f cu un pas dat (de obicei 1), la fiecare pas înmulțim conținutul ferestrei element cu element cu nucleul g, rezultatul este însumat și scris în matricea rezultatelor, ca în Figura 4.


Figura 4 - Operația de convoluție și obținerea valorilor hărții de convoluție (valid)


Operația de convoluție și obținerea valorilor hărții de convoluție. Nucleul este deplasat, noua hartă are aceeași dimensiune ca cea anterioară (aceeași)

Mai mult, în funcție de metoda de procesare a marginilor matricei originale, rezultatul poate fi mai mic decât imaginea originală (validă), aceeași dimensiune (aceeași) sau dimensiune mai mare (complet), în conformitate cu Figura 5.


Figura 5 - Trei tipuri de convoluție ale matricei originale

Într-o formă simplificată, acest strat poate fi descris prin formula:

În acest caz, din cauza efectelor de margine, dimensiunea matricelor originale scade, formula:

Stratul de subeșantionare

Stratul de subeșantionare, ca și stratul convoluțional, are hărți, dar numărul acestora coincide cu stratul anterior (convoluțional), sunt 6. Scopul stratului este de a reduce dimensiunea hărților stratului anterior. Dacă unele caracteristici au fost deja identificate în timpul operației anterioare de convoluție, atunci o astfel de imagine detaliată nu mai este necesară pentru procesarea ulterioară și este comprimată într-una mai puțin detaliată. În plus, filtrarea detaliilor inutile ajută la evitarea supraantrenamentului.
În timpul procesului de scanare a hărții stratului anterior de către nucleul stratului de subeșantionare (filtru), nucleul de scanare nu se intersectează, spre deosebire de stratul convoluțional. De obicei, fiecare hartă are o dimensiune a nucleului de 2x2, ceea ce permite hărților anterioare ale stratului convoluțional să fie reduse cu un factor de 2. Întreaga hartă a caracteristicilor este împărțită în celule de 2x2 elemente, din care sunt selectate valorile maxime.

De obicei, funcția de activare RelU este aplicată în stratul de subeșantionare. Operațiunea de subeșantionare (sau MaxPooling - selecție maximă) în conformitate cu Figura 6.


Figura 6 - Formarea unei noi hărți a stratului de subeșantion pe baza hărții anterioare a stratului convoluțional. Operațiune de subeșantionare (Max Pooling)

Formal, stratul poate fi descris prin formula:

Strat complet conectat

Ultimul tip de strat este stratul unui perceptron multistrat convențional. Scopul stratului este clasificarea, modelează o funcție complexă neliniară, optimizare care îmbunătățește calitatea recunoașterii.

Neuronii din fiecare hartă a stratului anterior eșantionat sunt conectați la un neuron din stratul ascuns. Astfel, numărul de neuroni din stratul ascuns este egal cu numărul de carduri din stratul de subeșantion, dar conexiunile pot să nu fie neapărat aceleași, de exemplu, doar o parte din neuronii oricăreia dintre cardurile din stratul de subeșantion poate să fie conectați la primul neuron al stratului ascuns, iar partea rămasă la al doilea, sau toți neuronii primelor hărți sunt conectați la neuronii 1 și 2 ai stratului ascuns. Calculul valorilor neuronilor poate fi descris prin formula:

Stratul de ieșire

Stratul de ieșire este conectat la toți neuronii stratului anterior. Numărul de neuroni corespunde numărului de clase recunoscute, adică 2 – față și non-față. Dar pentru a reduce numărul de conexiuni și calcule pentru cazul binar, puteți utiliza un neuron și, atunci când utilizați o tangentă hiperbolică ca funcție de activare, ieșirea unui neuron cu o valoare de -1 înseamnă apartenența la „non-persoană” clasă, dimpotrivă, ieșirea unui neuron cu valoarea 1 înseamnă apartenența clasei persoanelor

Selectarea unei funcții de activare

Una dintre etapele dezvoltării unei rețele neuronale este selectarea funcției de activare a neuronilor. Tipul funcției de activare determină în mare măsură funcționalitatea rețelei neuronale și metoda de antrenare a acestei rețele. Algoritmul clasic de backpropagation funcționează bine pe rețelele neuronale cu două și trei straturi, dar cu o creștere suplimentară a adâncimii începe să întâmpine probleme. Unul dintre motive este așa-numita atenuare a gradienților. Pe măsură ce eroarea se propagă de la stratul de ieșire la stratul de intrare, rezultatul curent este înmulțit cu derivata funcției de activare la fiecare strat. Derivata funcției tradiționale de activare a sigmoidului este mai mică de unu pe întregul domeniu de definiție, astfel încât după mai multe straturi eroarea va deveni aproape de zero. Dacă, pe de altă parte, funcția de activare are o derivată nemărginită (cum ar fi o tangentă hiperbolică), atunci eroarea poate exploda pe măsură ce se propagă, făcând procedura de învățare instabilă.

În această lucrare, tangenta hiperbolică este utilizată ca funcție de activare în straturile ascunse și de ieșire, iar ReLU este utilizat în straturile convoluționale. Să ne uităm la cele mai comune funcții de activare utilizate în rețelele neuronale.

Funcția de activare a sigmoidului

Această funcție aparține clasei de funcții continue și ia un număr real arbitrar la intrare, iar la ieșire dă un număr real în intervalul de la 0 la 1. În special, numerele negative mari (modulo) se transformă în zero și mari numere pozitive într-unul singur. Din punct de vedere istoric, sigmoidul a fost utilizat pe scară largă deoarece ieșirea sa este bine interpretată ca nivelul de activare a neuronului, variind de la fără activare (0) până la activare complet saturată (1). Sigmoid este exprimat prin formula:

Graficul funcției sigmoide după cum se arată mai jos:

O proprietate extrem de nedorită a sigmoidului este că atunci când funcția se saturează pe o parte sau alta (0 sau 1), gradientul în aceste zone devine aproape de zero.

Amintiți-vă că în procesul de retropropagare, un gradient (local) dat este înmulțit cu gradientul total. Prin urmare, dacă gradientul local este foarte mic, anulează efectiv gradientul general. Ca rezultat, aproape niciun semnal nu va trece prin neuron la greutățile sale și recursiv către datele sale. În plus, trebuie să fiți foarte atenți atunci când inițializați greutățile neuronilor sigmoizi pentru a preveni saturația. De exemplu, dacă greutățile inițiale sunt prea mari, majoritatea neuronilor vor intra într-o stare de saturație, determinând rețeaua să învețe prost.

Funcția sigmoidă este:

  • continuu;
  • crescând monoton;
  • diferentiabil.

Funcția de activare tangentă hiperbolică

În această lucrare, tangenta hiperbolică este utilizată ca funcție de activare pentru straturile ascunse și de ieșire. Acest lucru se datorează următoarelor motive:
  • funcțiile de activare simetrice, cum ar fi tangenta hiperbolică, asigură o convergență mai rapidă decât funcția logistică standard;
  • funcția are o primă derivată continuă;
  • o funcție are o derivată simplă care poate fi calculată în funcție de valoarea sa, rezultând economii de calcul.
Graficul funcției tangente hiperbolice este prezentat în figură:

Funcția de activare ReLU

Se știe că rețelele neuronale sunt capabile să aproximeze o funcție arbitrar complexă dacă au suficiente straturi și funcția de activare este neliniară. Funcțiile de activare precum sigmoid sau tangențial sunt neliniare, dar duc la probleme cu amortizarea sau creșterea gradienților. Cu toate acestea, puteți utiliza o opțiune mult mai simplă - o unitate liniară rectificată (ReLU), care este exprimată prin formula:

Graficul funcției ReLU după cum se arată mai jos:

Beneficiile utilizării ReLU:

  • derivata sa este egală fie cu unu, fie cu zero și, prin urmare, gradienții nu pot crește sau descompune, deoarece înmulțind unul cu delta de eroare obținem delta de eroare, dar dacă am folosit o altă funcție, de exemplu, o tangentă hiperbolică, atunci delta de eroare ar putea fie să scadă, fie să crească, fie să rămână aceeași, adică derivata hiperbolicului. tangenta returneaza un numar cu un semn si o magnitudine diferita, care poate influenta foarte mult atenuarea sau extinderea gradientului. Mai mult, utilizarea acestei funcții duce la subțierea greutăților;
  • calcularea tangentei sigmoide și hiperbolice necesită operații intensive din punct de vedere computațional, cum ar fi exponențiarea, în timp ce ReLU poate fi implementat folosind o transformare simplă de prag a matricei de activare la zero;
  • taie părțile inutile din canal cu o ieșire negativă.
Printre dezavantaje, se poate remarca faptul că ReLU nu este întotdeauna suficient de fiabil și poate eșua („moară”) în timpul procesului de instruire. De exemplu, un gradient mare care trece printr-un ReLU poate face ca greutățile să fie actualizate astfel încât neuronul să nu mai fie declanșat niciodată. Dacă se întâmplă acest lucru, atunci, din acest moment, gradientul care trece prin acest neuron va fi întotdeauna zero. În consecință, acest neuron va fi dezactivat ireversibil. De exemplu, dacă rata de învățare este prea mare, se poate dovedi că până la 40% dintre ReLU sunt „moarte” (adică nu sunt niciodată activate). Această problemă este rezolvată prin alegerea unei rate de învățare adecvate.

Eșantioane de antrenament utilizate în experimente

Eșantionul de formare constă din exemple pozitive și negative. În acest caz, de la persoane și „non-persoane”. Raportul dintre exemplele pozitive și negative este de 4 la 1, 8000 pozitive și 2000 negative.

Baza de date LFW3D a fost folosită ca set de antrenament pozitiv. Conține 13.000 de imagini color JPEG ale fețelor frontale, 90x90 pixeli. Baza de date este furnizată prin FTP, accesul se face prin parolă. Pentru a primi o parolă, trebuie să completați un formular simplu pe pagina principală a site-ului, unde vă indicați numele și adresa de e-mail. Un exemplu de persoane din baza de date este prezentat așa cum se arată în figura de mai jos:

Baza de date SUN397 a fost folosită ca exemple de antrenament negativ, conține un număr mare de scene de toate tipurile, care sunt împărțite în categorii. Un total de 130.000 de imagini, 908 scene, 313.000 de obiecte scene. Greutatea totală a acestei baze de date este de 37 GB. Categoriile de imagini sunt foarte diferite și vă permit să selectați un mediu mai specific în care va fi folosit PS-ul final. De exemplu, dacă se știe a priori că detectorul de față este destinat doar recunoașterii în interior, atunci nu are rost să folosim un eșantion de antrenament al naturii, cerului, munților etc. Din acest motiv, autorul lucrării a selectat următoarele categorii de imagini: sufragerie, birou, sală de clasă, sală de calculatoare. Exemple de imagini din setul de antrenament SUN397 sunt afișate după cum se arată mai jos:

rezultate

Propagarea directă a semnalului de la o imagine de intrare care măsoară 90x90 pixeli durează 20 ms (pe un PC), 3000 ms într-o aplicație mobilă. Când detectați o față într-un flux video la o rezoluție de 640x480 pixeli, este posibil să detectați 50 de zone care nu se suprapun cu dimensiunea de 90x90 pixeli. Rezultatele obținute cu topologia de rețea selectată sunt mai proaste în comparație cu algoritmul Viola-Jones.

concluzii

Rețelele neuronale convoluționale oferă rezistență parțială la schimbările de scară, deplasări, rotații, modificări de unghi și alte distorsiuni.

Miez- este un filtru care alunecă peste întreaga imagine și găsește trăsături faciale oriunde în imagine (invarianța deplasării).

Stratul de subeșantionare ofera:

  • creșterea vitezei de calcul (de cel puțin 2 ori), datorită reducerii dimensiunii hărților stratului anterior;
  • filtrarea detaliilor deja inutile;
  • căutați caracteristici de un nivel superior (pentru următorul strat convoluțional).
Ultimele straturi– straturi ale unui perceptron multistrat convențional. Două complet conectate și o ieșire. Acest strat este responsabil de clasificare din punct de vedere matematic, modelează o funcție complexă neliniară, optimizând ceea ce îmbunătățește calitatea recunoașterii. Numărul de neuroni din stratul 6 se bazează pe numărul de hărți de caracteristici ale stratului subeșantionat.

Posibile îmbunătățiri

  • luați în considerare rețelele neuronale Fast-RCNN, YOLO;
  • paralelizarea procesului de învățare pe GPU-uri;
  • folosind Android NDK (C++) pentru a îmbunătăți performanța

Antrenarea unei rețele neuronale convoluționale este descrisă în

Voința este capacitatea unei persoane de a-și controla comportamentul, de a-și mobiliza forța pentru a depăși dificultățile care stau în calea obiectivului său. Nu toate acțiunile umane sunt volitive. Acțiunile care nu sunt asociate cu stabilirea conștientă a obiectivelor și depășirea dificultăților (de exemplu, întoarcerea capului către un sunet ascuțit sau neașteptat) sunt involuntare. Acțiunile voluntare presupun întotdeauna conștientizarea scopului, reprezentarea acelor operațiuni cu ajutorul cărora se poate realiza. Acestea sunt acțiuni conștiente care vizează un scop specific și asociate cu depășirea dificultăților cu care se confruntă o persoană pe drumul către obiectiv.

În activitatea mentală umană, voința îndeplinește două funcții interdependente - activarea și inhibarea. Funcția activatoare se manifestă prin faptul că voința permite unei persoane să-și mobilizeze forțele interne și să le îndrepte către o activitate viguroasă pentru a atinge un scop stabilit în mod conștient. Voința asigură tranziția de la cunoașterea și experiențele umane la activitatea practică în conformitate cu nevoile, intențiile și interesele cuiva. În același timp, cu ajutorul eforturilor voliționale, o persoană își reglează comportamentul, inhibă apariția unor astfel de impulsuri și implementarea unor astfel de acțiuni care nu corespund idealurilor, credințelor și cerințelor sale. Aici își găsește expresia funcția de inhibiție, control și reglare a comportamentului.

Baza fiziologică a voinței este interacțiunea dintre primul și cel de-al doilea sistem de semnalizare ale cortexului cerebral. Cu ajutorul, în principal, al primului sistem de semnalizare, se realizează o reflectare directă a mediului și a condițiilor activității umane. Stabilirea unui scop, gândirea modalităților de a-l atinge, eforturile conștiente, depășirea dificultăților și gestionarea de sine se bazează pe activitatea celui de-al doilea sistem de semnalizare. În unitatea și interacțiunea acestor două sisteme, al doilea sistem de semnalizare joacă un rol principal. „O persoană”, a spus I.P Pavlov, „în primul rând, percepe realitatea prin primul sistem de semnal, apoi devine stăpânul realității prin cel de-al doilea sistem de semnal (cuvânt, vorbire, gândire științifică).

Când se efectuează o acțiune volitivă, în cortexul cerebral apar procese complexe de excitare și inhibiție. Excitația vă permite să activați, inhibiția vă permite să întârzieți cuvintele și mișcările. Forța și echilibrul proceselor nervoase ale cortexului cerebral (primul și al doilea sistem de semnalizare) sunt baza pentru reglarea comportamentului uman.

Procesul volițional este strâns legat de toate celelalte aspecte ale psihicului uman: atenție, gândire, imaginație, memorie, sentimente, temperament, abilități, caracter. „Voința”, a scris I.M. Sechenov, „nu este un fel de agent impersonal care controlează doar mișcarea, este partea activă a rațiunii și a sentimentului moral.”

O persoană depășește un obstacol nu numai datorită voinței sale și sub influența nevoilor, sentimentelor, experienței, cunoștințelor, obiceiurilor sale. Prin urmare, depășirea dificultăților nu poate fi considerată singurul criteriu de voință. Specificul procesului mental volitiv constă în eforturi conștiente care vizează activarea tuturor posibilităților de atingere a unui scop.

Fiecare acțiune volitivă are o anumită structură internă. Într-o acțiune volițională simplă, se disting clar două verigi - stabilirea obiectivelor și execuția. O acțiune care vizează atingerea unui scop este efectuată imediat de îndată ce apare impulsul corespunzător. Nu există link-uri intermediare aici.

Acțiunea volitivă complexă include: conștientizarea scopului și a importanței acestuia; determinarea modalităților de atingere a scopului, a celor mai adecvate cursuri de acțiune; luarea deciziilor; executarea deciziei luate, îndeplinirea sarcinii atribuite; evaluarea a ceea ce s-a realizat.

Orice acțiune volitivă presupune prezența unui scop care apare în fața unei persoane. Cu alte cuvinte, o persoană își dă seama ce vrea să realizeze prin anumite acțiuni – să-și schimbe poziția în echipă, să-și satisfacă unele nevoi etc. Scopul unei persoane apare fie ca urmare a actualizării impulsurilor interne (motivelor), fie ca urmare a conștientizării sarcinii stabilite de lider, comandant. O problemă psihologică importantă aici este conștientizarea profundă a unei persoane cu privire la necesitatea de a îndeplini o anumită sarcină, transformând-o într-un scop acceptat intern și apariția unei dorințe de a o îndeplini.

Următoarea verigă în acțiunea volitivă este să ne gândim la cum să atingem obiectivul, care ar trebui să fie căile pentru atingerea acestuia, ce tipuri de acțiuni conduc la acesta. În timpul acestei deliberări, se cântărește uneori oportunitatea unei căi sau alteia, alegerea acelor mijloace care fac reală atingerea scopului. Toate acestea sunt legate de activitatea intelectuală umană. Sfera motivațională a individului este adesea afectată și apare o luptă de motive, adică. o ciocnire de motive opuse, divergente, între care trebuie făcută o alegere. Și deja aici o persoană trebuie să dea dovadă de un efort de voință puternică pentru a depăși lupta impulsurilor conflictuale.

Un element esențial al acțiunii volitive este decizia de a efectua o acțiune dată, cu ajutorul căreia să se atingă scopul. Luarea unei decizii necesită nu numai conștientizare maximă, ci și determinare și responsabilitate personală. Odată cu adoptarea unei decizii, de regulă, are loc o eliberare și tensiunea care însoțește lupta de motive se slăbește. O persoană experimentează o ușurare completă, un sentiment de satisfacție, toate ezitările și tensiunea internă sunt atenuate dacă decizia luată corespunde dorințelor și gândurilor sale. Dar ușurarea vine și atunci când decizia luată nu este complet în concordanță cu dorințele și aspirațiile persoanei. Tensiunea este redusă chiar de faptul că decizia este luată.

Executarea unei decizii este cea mai importantă parte a acțiunii volitive. Intotdeauna implică depășirea dificultăților externe și interne. Dificultățile externe, obiective, nu depind de persoana însăși. Acestea sunt dificultăți în muncă, complexitatea operațiunilor efectuate care necesită un efort fizic mare, rezistența altor persoane, condițiile meteo și climatice etc. Dificultățile interne, subiective, depind de starea fizică și psihică a unei persoane. Acestea includ lipsa de cunoștințe, experiență, contradicția dintre vechile obiceiuri și noile cerințe etc. În cele mai multe cazuri, dificultățile externe și interne se manifestă în unitate.

Pentru a depăși aceste dificultăți, este necesar un efort volițional, care se caracterizează prin cantitatea de energie cheltuită de o persoană pentru a efectua o acțiune intenționată sau pentru a se abține de la aceasta. Efortul volițional pătrunde în toate verigile actului volitiv - conștientizarea scopului, determinarea modalităților de a-l atinge, luarea deciziilor. Dar se manifestă mai ales în procesul de executare a deciziei luate, în lupta împotriva dificultăților. Prin capacitatea unei persoane de a demonstra eforturile volitive, sunt judecate caracteristicile voinței sale.

Un loc important în structura psihologică a acțiunii volitive îl ocupă evaluarea a ceea ce s-a făcut. Chiar și în procesul de activitate, o persoană își controlează și își corectează acțiunile. În fiecare moment, el compară rezultatul obținut cu imaginea ideală a obiectivului (sau a unei părți a acestuia), care a fost creată în avans. În etapa finală a activității, evaluarea rezultatelor acesteia și analiza procesului de realizare a scopului capătă o semnificație independentă. Acest lucru este necesar pentru a identifica și a lua în considerare în viitor atât aspectele pozitive, cât și deficiențele în acțiunile unei persoane.

O acțiune volitivă deosebit de semnificativă (act eroic, ispravă) se realizează ca impuls într-un timp extrem de scurt cu mobilizarea tuturor forțelor individului. În astfel de condiții, toate verigile acțiunii volitive par să se contopească și să se întrepătrundă unele pe altele. Conștientizarea scopului, luarea deciziilor, programele de acțiune și determinarea modalităților de atingere a scopului sunt aici țesute în acțiunile practice directe ale unei persoane. Cel mai adesea acest lucru se întâmplă în circumstanțe de urgență: într-o situație de luptă, când se salvează vieți, în timpul dezastrelor naturale, accidentelor, dezastrelor etc.

Ce face un neuron artificial? În termeni simpli, calculează suma ponderată a intrărilor sale, adaugă o părtinire și decide dacă această valoare ar trebui să fie exclusă sau utilizată în continuare (da, funcția de activare funcționează așa, dar să mergem în ordine).

Funcția de activare determină valoarea de ieșire a neuronului în funcție de rezultatul sumei ponderate a intrărilor și valoarea pragului.

Luați în considerare un neuron:

Acum sensul Y poate fi orice în intervalul de la -infinit la +infinit. În realitate, neuronul nu cunoaște granița după care urmează activarea. Să răspundem la întrebarea cum decidem dacă un neuron ar trebui să fie activat (ne uităm la modelul de declanșare pentru că putem face o analogie cu biologia. Acesta este modul în care funcționează creierul, iar creierul este un bun indiciu al activității unui complex și sistem inteligent).

În acest scop, am decis să adăugăm o funcție de activare. Verifică valoarea produsă de neuron Y dacă conexiunile externe ar trebui să considere acest neuron ca fiind activat sau dacă poate fi ignorat.

Funcția de activare a pasului

Primul lucru care îmi vine în minte este întrebarea care este considerată limita de activare pentru funcția de activare. Dacă valoarea Y mai mare decât o anumită valoare de prag, considerăm neuronul ca fiind activat. Altfel, spunem că neuronul este inactiv. Această schemă ar trebui să funcționeze, dar mai întâi să o oficializăm.

  • Funcția A = activată dacă Y > limită, în caz contrar nu.
  • Alt mod: A = 1 dacă Y > graniță, în caz contrar A = 0.

Funcția pe care tocmai am creat-o se numește funcție pas. Această funcție este prezentată în figura de mai jos.

Funcția ia valoarea 1 (activat) când Y > 0(limită), iar valoarea este 0 (neactivat) în caz contrar.

Am creat o funcție de activare pentru neuron. Aceasta este o metodă simplă, dar are dezavantaje. Luați în considerare următoarea situație.

Imaginează-ți ce creăm clasificator binar- un model care ar trebui să spună „da” sau „nu” (activat sau nu). Funcția pas va face acest lucru pentru tine - va scoate exact 1 sau 0.

Acum imaginați-vă un caz în care sunt necesari mai mulți neuroni clasificarea multor clase: class1, class2, class3 și așa mai departe. Ce se întâmplă dacă este activat mai mult de 1 neuron? Toți neuroniifuncția de activare va scoate 1. În acest caz, apar întrebări despre ce clasă ar trebui obținută în cele din urmă pentru un obiect dat.

Dorim ca un singur neuron să fie activat, iar funcțiile de activare ale altor neuroni să fie egale cu zero (doar în acest caz putem fi siguri că rețeaua determină corect clasa). O astfel de rețea este mai dificil de antrenat și de convergență. Dacă funcția de activare nu este binară, atunci valorile posibile sunt „activate cu 50%”, „activate cu 20%” și așa mai departe. Dacă sunt activați mai mulți neuroni, puteți găsi neuronul cu cea mai mare valoare a funcției de activare (este mai bine, desigur, ca acesta să fie softmax functie, nu max. Dar să nu ne ocupăm de aceste probleme deocamdată).

Dar în acest caz, ca și înainte, dacă se spune că mai mult de un neuron este „activat 100%”, problema rămâne în continuare. Deoarece există valori intermediare ale ieșirii neuronului, procesul de antrenament este mai ușor și mai rapid, iar probabilitatea de a avea câțiva neuroni complet activați în timpul antrenamentului este redusă în comparație cu o funcție de activare în trepte (deși acest lucru depinde de ceea ce antrenezi). pe și pe ce date).

Am decis că vrem să primim valori intermediare ale funcției de activare (funcție analogică), și nu doar să spunem „activat” sau nu (funcție binară).

Primul lucru care îmi vine în minte este o funcție liniară.

Funcție de activare liniară

A = cx

O funcție liniară este o linie dreaptă și este proporțională cu intrarea (adică suma ponderată pe acel neuron).

Această alegere a funcției de activare ne permite să obținem un spectru de valori, și nu doar un răspuns binar. Mai mulți neuroni pot fi conectați împreună și, dacă sunt activați mai mulți neuroni, se ia o decizie pe baza aplicării operației max (sau softmax). Dar și aici sunt probleme.

Dacă sunteți familiarizat cu metoda de învățare, puteți observa că pentru această funcție derivata este egală cu constanta.

Derivat din A=cx De X egal cu Cu. Aceasta înseamnă că gradientul nu are nimic de-a face cu X. Gradientul este un vector constant, iar coborârea se efectuează de-a lungul unui gradient constant. Dacă se face o predicție eronată, atunci modificările făcute de eroare sunt, de asemenea, constante și independente de modificarea delta(x) de intrare.

Acest lucru nu este bun (nu întotdeauna, dar în majoritatea cazurilor). Dar mai este o problemă. Să ne uităm la straturile conectate. Fiecare strat este activat de o funcție liniară. Valoarea din această funcție merge la stratul următor ca intrare, al doilea strat calculează suma ponderată la intrările sale și, la rândul său, activează neuronii în funcție de o altă funcție de activare liniară.

Nu contează câte straturi avem. Dacă toate sunt de natură liniară, atunci funcția de activare finală din ultimul strat va fi pur și simplu o funcție liniară a intrărilor din primul strat! Oprește-te o clipă și gândește-te la acest gând.

Aceasta înseamnă că două straturi (sau N straturi) pot fi înlocuite cu un singur strat. Am pierdut capacitatea de a face seturi din straturi. Indiferent cum ne stivuim, totul va fi în continuare ca un singur strat cu o funcție de activare liniară ( combinație de funcții liniare într-un mod liniar - o altă funcție liniară).

Sigmoid

Sigmoidul pare neted și este similar cu o funcție de pas. Să luăm în considerare avantajele sale.

În primul rând, sigmoidul este de natură neliniară, iar combinarea unor astfel de funcții produce, de asemenea, o funcție neliniară. Acum putem stivui straturi.

Un alt avantaj al unei astfel de funcții este că nu este binară, ceea ce face ca activarea să fie analogă, spre deosebire de o funcție pas. Sigmoidul este, de asemenea, caracterizat printr-un gradient neted.

Dacă observați în intervalul de valori X de la -2 la 2 Valorile Y se schimbă foarte repede. Aceasta înseamnă că orice modificare mică a valorii Xîn acest domeniu presupune o modificare semnificativă a valorii Y. Acest comportament al funcției indică faptul că Y tinde să îmbrățișeze una dintre marginile curbei.

Sigmoidul pare a fi o funcție potrivită pentru problemele de clasificare. Se străduiește să aducă valori pe una dintre laturile curbei (de exemplu, la cea superioară la x=2 si mai jos la x=-2). Acest comportament face posibilă găsirea unor limite clare atunci când faceți predicții.

Un alt avantaj al sigmoidului față de funcția liniară este următorul. În primul caz, avem un interval fix de valori ale funcției - , în timp ce funcția liniară variază în (-inf, inf). Această proprietate a sigmoidului este foarte utilă, deoarece nu duce la erori în cazul valorilor mari de activare.

Astăzi, sigmoidul este una dintre cele mai comune funcții de activare în rețelele neuronale. Dar are și dezavantaje la care merită să fii atent.

Poate ați observat deja că, pe măsură ce vă apropiați de capetele sigmoidului, valorile Y tind să răspundă slab la modificările X. Aceasta înseamnă că gradientul în astfel de zone capătă valori mici. Acest lucru, la rândul său, duce la probleme cu gradientul de extincție. Să luăm în considerare în detaliu ce se întâmplă pe măsură ce funcția de activare se apropie de partea aproape orizontală a curbei de ambele părți.

Într-un astfel de caz, valoarea gradientului este mică sau dispare (nu se poate face o modificare semnificativă din cauza valorii extrem de mici). Rețeaua neuronală refuză să învețe mai departe sau o face extrem de lent (în funcție de metoda de utilizare sau până când gradientul/calculul începe să sufere de limitări în virgulă mobilă). Există opțiuni pentru a lucra la aceste probleme, iar sigmoidul este încă foarte popular pentru problemele de clasificare.

O altă funcție de activare folosită în mod obișnuit este tangenta hiperbolică.

Tangenta hiperbolică este foarte asemănătoare cu sigmoidul. Și într-adevăr, aceasta este funcția sigmoidă ajustată.

Prin urmare, o astfel de funcție are aceleași caracteristici ca și sigmoidul discutat mai devreme. Natura sa este neliniară, este potrivită pentru combinații de straturi, iar intervalul de valori ale funcției este (-1, 1). Prin urmare, nu are rost să vă faceți griji că funcția de activare va fi supraîncărcată cu valori mari. Cu toate acestea, este de remarcat faptul că gradientul funcției tangențiale este mai mare decât cel al sigmoidului (derivata este mai abruptă). Decizia de a alege sigmoid sau tangentă depinde de cerințele dvs. de amplitudine a gradientului. La fel ca sigmoidul, tangenta hiperbolica are problema disparitiei gradientului.

Tangenta este, de asemenea, o funcție de activare foarte populară și folosită.

ReLu

Următoarea pe lista noastră este funcția de activare ReLu.

A(x) = max(0,x)

Folosind definiția, devine clar că ReLu returnează valoarea X, Dacă X pozitiv, și 0 in caz contrar. Schema de funcționare este prezentată mai jos.

La prima vedere, ReLu pare să aibă toate aceleași probleme ca o funcție liniară, deoarece ReLu este liniară în primul cadran. Dar de fapt, ReLu este de natură neliniară și combinația de ReLu este, de asemenea, neliniară! (De fapt, o astfel de funcție este una bună aproximator, deoarece orice funcție poate fi aproximată printr-o combinație de ReLu). Aceasta înseamnă că putem stivui straturi. Gama de valori acceptabile ReLu - )