Will, funcțiile sale. Funcții de activare a rețelei neuronale: sigmoid, liniar, pas, ReLu, tahn

Funcția de activare

Semnalul primit de la sumator este trecut la funcția de activare. Rezultatul obținut prin calcularea acestei funcție este rezultatul neuronului Y.

Astfel, dacă notăm funcția de activare ca F, ieșirea Y a neuronului depinde de vectorul valorilor de intrare și de vectorul de greutăți, după cum urmează:

Y = F(X1*W1 + X2*W2 + … + Xn*Wn)

În practică, diferite funcții de activare sunt folosite pentru a schimba comportamentul unui neuron, de exemplu, liniar, prag, sigmoid etc. Să luăm pe scurt câteva dintre aceste funcții ca exemplu. Veți găsi o descriere mai completă, de exemplu, în

Funcție de activare liniară

Graficul funcției de activare liniară este prezentat în Fig. 4-3. După cum puteți vedea, acest grafic este o linie dreaptă, al cărei unghi de înclinare depinde de constanta k, iar cantitatea de deplasare de-a lungul axei de coordonate orizontale depinde de constanta t.

4.

5.

6. Pentru ca rețeaua neuronală să poată îndeplini sarcina, aceasta trebuie antrenată (vezi Fig. 1). Există algoritmi de învățare supravegheat și nesupravegheat.
Procesul de învățare supravegheată este prezentarea în rețea a unui eșantion de exemple de instruire. Fiecare probă este alimentată la intrările rețelei, apoi procesată în cadrul structurii NN, se calculează semnalul de ieșire al rețelei, care este comparat cu valoarea corespunzătoare a vectorului țintă, care reprezintă ieșirea rețelei necesară. Apoi, conform unei anumite reguli, eroarea este calculată, iar coeficienții de ponderare a conexiunilor din rețea se modifică în funcție de algoritmul selectat. Vectorii setului de antrenament sunt prezentați secvențial, erorile sunt calculate și greutățile sunt ajustate pentru fiecare vector până când eroarea în întregul set de antrenament atinge un nivel acceptabil scăzut.

În învățarea nesupravegheată, setul de antrenament constă numai din vectori de intrare. Algoritmul de învățare ajustează greutățile rețelei astfel încât să se obțină vectori de ieșire consecvenți, de ex. astfel încât prezentarea vectorilor de intrare suficient de apropiați să dea rezultate identice. Prin urmare, procesul de învățare extrage proprietățile statistice ale setului de antrenament și grupează vectori similari în clase. Prezentarea unui vector dintr-o clasă dată ca intrare va produce un anumit vector de ieșire, dar înainte de antrenament este imposibil să se prezică ce ieșire va fi produsă de o anumită clasă de vectori de intrare. În consecință, rezultatele unei astfel de rețele trebuie transformate într-o formă ușor de înțeles, determinată de procesul de învățare. Aceasta nu este o problemă serioasă. De obicei, nu este dificil să identifici legătura dintre intrare și ieșire stabilită de rețea.
Pentru a antrena rețelele neuronale fără un profesor, sunt utilizate metodele de învățare a semnalelor Hebb și Oya.



Din punct de vedere matematic, procesul de învățare poate fi descris după cum urmează. În timpul funcționării, rețeaua neuronală generează un semnal de ieșire Y, implementând o anumită funcție Y = G(X). Dacă este dată arhitectura rețelei, atunci forma funcției G este determinată de valorile greutăților sinaptice și ale rețelei părtinitoare.

Fie ca soluția unei probleme să fie funcția Y = F(X), specificată de parametrii datelor de intrare-ieșire (X 1, Y 1), (X 2, Y 2), ..., (X N, Y N ), pentru care Y k = F( X k) (k = 1, 2, …, N).

Antrenamentul constă în căutarea (sintetizarea) unei funcţii G care este apropiată de F în sensul unei anumite funcţii de eroare E. (vezi Fig. 1.8).

Dacă se alege un set de exemple de antrenament - perechi (X N, Y N) (unde k = 1, 2, ..., N) și o metodă de calcul al funcției de eroare E, atunci antrenarea unei rețele neuronale se transformă într-o problemă de optimizare multidimensională cu o dimensiune foarte mare, iar funcția E poate avea o formă arbitrară în cazul general este o problemă de optimizare multiextremală neconvexă;

Pentru a rezolva această problemă, pot fi utilizați următorii algoritmi (iterativi):

1. algoritmi de optimizare locală cu calculul derivatelor parțiale de ordinul întâi:

algoritm de gradient (metoda cea mai abruptă de coborâre),

· metode cu optimizare unidimensională și bidimensională a funcției obiectiv în direcția antigradient,

· metoda gradientului conjugat,

· metode care țin cont de direcția antigradientului la mai mulți pași ai algoritmului;

2. algoritmi de optimizare locală cu calculul derivatelor parțiale de ordinul I și II:

metoda lui Newton

· metode de optimizare cu matrici hessiene rare,

· metode cvasi-Newton,

· metoda Gauss-Newton,

· Metoda Levenberg-Marquardt și altele;

3. algoritmi de optimizare stocastică:

· căutare într-o direcție aleatorie,

· recoacere simulată,

· Metoda Monte Carlo (metoda de testare statistică numerică);

4. algoritmi de optimizare globală (problemele de optimizare globală se rezolvă prin enumerarea valorilor variabilelor de care depinde funcția obiectiv).

7. Retea neurala sau sistemul nervos uman este o rețea complexă de structuri umane care asigură comportamentul interconectat al tuturor sistemelor corpului.

Un neuron biologic este o celulă specială care constă structural dintr-un nucleu, un corp celular și procese. Una dintre sarcinile cheie ale unui neuron este de a transmite un impuls electrochimic în întreaga rețea neuronală prin conexiuni accesibile cu alți neuroni. Mai mult, fiecare conexiune este caracterizată de o anumită valoare numită puterea conexiunii sinaptice. Această valoare determină ce se va întâmpla cu impulsul electrochimic atunci când este transmis unui alt neuron: fie se va întări, fie se va slăbi, fie rămâne neschimbat.

O rețea neuronală biologică are un grad ridicat de conectivitate: un neuron poate avea câteva mii de conexiuni cu alți neuroni. Dar aceasta este o valoare aproximativă și în fiecare caz specific este diferită. Transmiterea impulsurilor de la un neuron la altul generează o anumită excitație a întregii rețele neuronale. Mărimea acestei excitații determină răspunsul rețelei neuronale la unele semnale de intrare. De exemplu, întâlnirea unei persoane cu o veche cunoștință poate duce la o stimulare puternică a rețelei neuronale dacă unele amintiri vii și plăcute de viață sunt asociate cu această cunoștință. La rândul său, stimularea puternică a rețelei neuronale poate duce la creșterea ritmului cardiac, la clipirea mai frecventă a ochilor și la alte reacții. O întâlnire cu un străin va trece aproape neobservată pentru rețeaua neuronală și, prin urmare, nu va provoca reacții puternice.

Următorul model foarte simplificat al unei rețele neuronale biologice poate fi dat:

Fiecare neuron este format dintr-un corp celular, care conține un nucleu. Multe fibre scurte numite dendrite se ramifică din corpul celular. Dendritele lungi se numesc axoni. Axonii se extind pe distanțe lungi, mult peste ceea ce este arătat în scara acestei figuri. De obicei, axonii au 1 cm lungime (care este de 100 de ori diametrul corpului celular), dar pot ajunge la 1 metru.

În anii 60-80 ai secolului XX, direcția prioritară a cercetării în domeniul inteligenței artificiale era sistem expert. Sistemele experte s-au dovedit bine, dar numai în domenii foarte specializate. A fost necesară o abordare diferită pentru a crea sisteme inteligente mai universale. Este posibil ca acest lucru să fi determinat cercetătorii în inteligența artificială să își îndrepte atenția către rețelele neuronale biologice care stau la baza creierului uman.

Rețelele neuronale din inteligența artificială sunt modele simplificate ale rețelelor neuronale biologice.

Aici se termină asemănările. Structura creierului uman este mult mai complexă decât cea descrisă mai sus și, prin urmare, nu este posibil să o reproducem chiar mai mult sau mai puțin exact.

Rețelele neuronale au multe proprietăți importante, dar cea mai importantă este capacitatea de a învăța. Antrenarea unei rețele neuronale implică în primul rând schimbarea „puterii” conexiunilor sinaptice dintre neuroni. Următorul exemplu demonstrează clar acest lucru. În experimentul clasic al lui Pavlov, un clopoțel suna de fiecare dată chiar înainte ca câinele să fie hrănit. Câinele a învățat rapid să asocieze sunetul clopoțelului cu mâncatul. Aceasta a fost o consecință a faptului că conexiunile sinaptice dintre zonele creierului responsabile de auz și glandele salivare au fost întărite. Și ulterior, stimularea rețelei neuronale prin sunetul clopotului a început să ducă la o salivare mai puternică la câine.

Astăzi, rețelele neuronale sunt unul dintre domeniile prioritare de cercetare în domeniul inteligenței artificiale.

8. Perceptroni multistrat numite rețele neuronale feedforward. Semnalul de intrare în astfel de rețele se propagă în direcția înainte, de la strat la strat. Un perceptron multistrat în reprezentarea sa generală constă din următoarele elemente:

· seturi de noduri de intrare care formează stratul de intrare;

unul sau mai multe straturi ascunse de neuroni computaționali;

· un strat de ieșire de neuroni.

Perceptronul multistrat este o generalizare a perceptronului cu un singur strat Rosenblatt. Un exemplu de perceptron multistrat este următorul model de rețea neuronală:

Numărul de elemente de intrare și de ieșire dintr-un perceptron multistrat este determinat de condițiile problemei. Pot apărea îndoieli cu privire la valorile de intrare care să fie utilizate și care nu. Întrebarea cu privire la câte straturi și elemente intermediare să folosiți în ele este încă complet neclară. Ca o aproximare inițială, putem lua un strat intermediar și putem seta numărul de elemente din el egal cu jumătate din suma numărului de elemente de intrare și de ieșire.

Perceptronii multistrat sunt utilizați cu succes pentru a rezolva o varietate de probleme complexe și au următoarele trei caracteristici distinctive.

) 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

  • determina problema care trebuie rezolvata printr-o retea neuronala (clasificare, predictie, modificare);
  • determina intrarea (tip: imagine, sunet, dimensiune: 100x100, 30x30, format: RGB, tonuri de gri) și datele 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ă prin 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:

  • determina problema care trebuie rezolvata printr-o retea neuronala (clasificare, predictie, modificare);
  • determina limitările problemei care se rezolvă (viteza, acuratețea răspunsului);
  • determinați intrarea (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ă)


Operarea 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 lipsa de activare (0) până la activarea 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 semn si magnitudine diferite, 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 instruire 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 feței este destinat doar recunoașterii în interior, atunci nu are rost să folosiți 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

Retea neurala- o încercare, folosind modele matematice, de a reproduce activitatea creierului uman de a crea mașini cu...

Retele neuronale artificiale de obicei învață cu un profesor. Aceasta înseamnă să aveți un set de antrenament (set de date) care conține exemple cu valori adevărate: etichete, clase, indicatori.

Seturile neetichetate sunt, de asemenea, folosite pentru a antrena rețele neuronale, dar nu vom acoperi asta aici.

De exemplu, dacă doriți să creați o rețea neuronală pentru a estima sentimentul textului, set de date va exista o listă de propuneri cu aprecieri emoționale corespunzătoare fiecăreia. Tonul textului este determinat semne(cuvinte, fraze, structură de propoziție) care dau o conotație negativă sau pozitivă. Greutăți caracteristicile în evaluarea finală a sentimentului textului (pozitiv, negativ, neutru) depind de o funcție matematică care se calculează în timpul antrenamentului rețelei neuronale.

Anterior, oamenii generau funcții manual. Cu cât mai multe caracteristici și ponderi selectate mai precis, cu atât răspunsul este mai precis. Rețeaua neuronală a automatizat acest proces.

O rețea neuronală artificială este formată din trei componente:

  • Stratul de intrare;
  • Straturi ascunse (computaționale);
  • Stratul de ieșire.

Are loc în două etape:

  • erori.

În timpul propagării erorii înainte, se face o predicție a răspunsului. Cu propagarea inversă, eroarea dintre răspunsul real și cel prezis este minimizată.


Distributie directa

Să setăm aleatoriu greutățile inițiale:

Să înmulțim datele de intrare cu greutăți pentru a forma un strat ascuns:

  • h1 = (x1 * w1) + (x2 * w1)
  • h2 = (x1 * w2) + (x2 * w2)
  • h3 = (x1 * w3) + (x2 * w3)

Ieșirea din stratul ascuns este trecută printr-o funcție neliniară () pentru a obține rezultatul rețelei:

  • y_ = fn(h1, h2, h3)

Propagarea inversă

  • Eroarea totală (total_error) se calculează ca diferență între valoarea așteptată „y” (din setul de antrenament) și valoarea obținută „y_” (calculată în stadiul de propagare a erorii directe), trecând prin funcția de cost.
  • Derivata parțială a erorii este calculată pentru fiecare pondere (aceste diferențe parțiale reflectă contribuția fiecărei ponderi la eroarea totală (total_loss)).
  • Aceste diferențe sunt apoi înmulțite cu un număr numit rata de învățare (η).

Rezultatul obținut este apoi scăzut din ponderile corespunzătoare.

Rezultatul va fi următoarele ponderi actualizate:

  • w1 = w1 — (η * ∂(err) / ∂(w1))
  • w2 = w2 — (η * ∂(err) / ∂(w2))
  • w3 = w3 — (η * ∂(err) / ∂(w3))

Ideea că vom ghici și vom inițializa ponderile aleatoriu și că vor da răspunsuri precise nu sună în întregime rezonabil, dar funcționează bine.


Meme populară despre modul în care Carlson a devenit dezvoltator de Data Science

Dacă sunteți familiarizat cu seria Taylor, propagarea inversă are același rezultat final. Doar în loc de o serie infinită, încercăm să-i optimizăm doar primul termen.

Prejudecățile sunt greutăți adăugate straturilor ascunse. Ele sunt, de asemenea, inițializate aleatoriu și actualizate în același mod ca și stratul ascuns. Rolul stratului ascuns este de a determina forma funcției de bază în date, în timp ce rolul părtinirii este de a schimba funcția găsită astfel încât să se potrivească parțial cu funcția inițială.

Derivate parțiale

Derivatele parțiale pot fi calculate, așa că știm care a fost contribuția la eroare pentru fiecare pondere. Necesitatea derivatelor este evidentă. Imaginați-vă o rețea neuronală care încearcă să găsească viteza optimă pentru o mașină care se conduce singur. Dacă mașina detectează că rulează mai repede sau mai încet decât viteza necesară, rețeaua neuronală va modifica viteza, accelerând sau încetinind mașina. Ce accelerează/încetinește? Vitezele derivate.

Să ne uităm la necesitatea derivatelor parțiale folosind un exemplu.

Să presupunem că copiilor li s-a cerut să arunce o săgetă într-o țintă, țintând spre centru. Iată rezultatele:

Acum, dacă găsim eroarea totală și pur și simplu o scădem din toate ponderile, vom totaliza erorile făcute de toată lumea. Deci, să presupunem că un copil lovește prea jos, dar le cerem tuturor copiilor să se străduiască să atingă ținta, atunci acest lucru va duce la următoarea imagine:

Eroarea câtorva copii poate scădea, dar eroarea generală tot crește.

După ce au găsit derivatele parțiale, aflăm erorile corespunzătoare fiecărei ponderi separat. Dacă corectați selectiv greutățile, obțineți următoarele:

Hiperparametri

O rețea neuronală este utilizată pentru a automatiza selecția caracteristicilor, dar unii parametri sunt configurați manual.

rata de învățare

Rata de învățare este un hiperparametru foarte important. Dacă rata de învățare este prea lentă, atunci chiar și după antrenarea rețelei neuronale pentru o lungă perioadă de timp, va fi departe de a fi rezultate optime. Rezultatele vor arăta cam așa:

Pe de altă parte, dacă rata de învățare este prea mare, rețeaua va produce răspunsuri foarte rapid. Veți obține următoarele:

functia de activare

Funcția de activare este unul dintre cele mai puternice instrumente care influențează puterea atribuită rețelelor neuronale. În parte, determină ce neuroni vor fi activați, cu alte cuvinte, și ce informații vor fi transmise straturilor ulterioare.

Fără funcții de activare, rețelele profunde își pierd o mare parte din capacitatea lor de învățare. Neliniaritatea acestor funcții este responsabilă pentru creșterea gradului de libertate, ceea ce permite ca problemele de dimensiuni mari să fie generalizate la dimensiuni mai mici. Următoarele sunt exemple de funcții de activare comune:

Funcția de pierdere

Funcția de pierdere este în centrul rețelei neuronale. Este folosit pentru a calcula eroarea dintre răspunsurile reale și cele primite. Scopul nostru global este de a minimiza această eroare. Astfel, funcția de pierdere aduce efectiv antrenamentul rețelei neuronale mai aproape de acest obiectiv.

Funcția de pierdere măsoară „cât de bună” este rețeaua neuronală, având în vedere setul de antrenament și răspunsurile așteptate. Poate depinde și de variabile, cum ar fi ponderi și decalaje.

Funcția de pierdere este unidimensională și nu este un vector, deoarece evaluează cât de bine funcționează rețeaua neuronală în ansamblu.

Câteva funcții de pierdere celebre:

  • Cuadratic (abatere standard);
  • Entropia încrucișată;
  • Exponențial (AdaBoost);
  • Distanța Kullback-Leibler sau câștig de informații.

Abaterea standard este cea mai simplă funcție de pierdere și cea mai des utilizată. Se precizează după cum urmează:

Funcția de pierdere într-o rețea neuronală trebuie să îndeplinească două condiții:

  • Funcția de pierdere trebuie scrisă ca o medie;
  • Funcția de pierdere nu ar trebui să depindă de alte valori de activare a rețelei neuronale, altele decât valorile produse la ieșire.

Rețele neuronale profunde

(deep learning) este o clasă de algoritmi care învață să înțeleagă datele mai profund (mai abstract). Algoritmii populari de rețele neuronale de învățare profundă sunt prezentați în diagrama de mai jos.

Algoritmi populari de rețele neuronale (http://www.asimovinstitute.org/neural-network-zoo)

Mai formal în învățarea profundă:

  • O cascadă (conductă, ca flux transmis secvențial) de mai multe straturi de procesare (neliniare) este utilizată pentru extragerea și transformarea caracteristicilor;
  • Pe baza caracteristicilor de învățare (reprezentarea informațiilor) în date fără învățare supravegheată. Funcțiile de nivel superior (care sunt în ultimele straturi) sunt obținute din funcțiile de nivel inferior (care sunt în straturile inițiale);
  • Învață reprezentări pe mai multe niveluri care corespund diferitelor niveluri de abstractizare; nivelurile formează o ierarhie de prezentare.

Exemplu

Luați în considerare o rețea neuronală cu un singur strat:

Aici, primul strat (neuroni verzi) este antrenat, este pur și simplu transmis la ieșire.

În timp ce în cazul unei rețele neuronale cu două straturi, indiferent de modul în care este antrenat stratul ascuns verde, acesta este apoi transmis stratului ascuns albastru, unde continuă să se antreneze:

Prin urmare, cu cât numărul de straturi ascunse este mai mare, cu atât capacitățile de învățare ale rețelei sunt mai mari.

A nu se confunda cu rețeaua neuronală largă.

În acest caz, un număr mare de neuroni într-un singur strat nu duce la o înțelegere profundă a datelor. Dar acest lucru duce la studiul mai multor caracteristici.

Exemplu:

Când studiezi gramatica engleză, trebuie să cunoști un număr mare de concepte. În acest caz, o rețea neuronală largă cu un singur strat funcționează mult mai bine decât o rețea neuronală profundă, care este semnificativ mai mică.

În cazul învățării transformării Fourier, elevul (rețeaua neuronală) trebuie să fie profund pentru că nu sunt multe concepte de cunoscut, dar fiecare este destul de complex și necesită o înțelegere profundă.

Principalul lucru este echilibrul

Este foarte tentant să folosești rețele neuronale profunde și largi pentru fiecare sarcină. Dar aceasta ar putea fi o idee proastă pentru că:

  • Ambele necesită mult mai multe date de antrenament pentru a obține precizia minimă dorită;
  • Ambele au o complexitate exponențială;
  • O rețea neuronală prea adâncă va încerca să spargă ipotezele fundamentale, dar va face și presupuneri false și va încerca să găsească pseudodependențe care nu există;
  • O rețea neuronală prea largă va încerca să găsească mai multe caracteristici decât există. Deci, ca și precedentul, va începe să facă presupuneri incorecte despre date.

Blestemul dimensionalității

Blestemul dimensionalității se referă la diverse fenomene care apar la analizarea și organizarea datelor în spații de dimensiuni înalte (adesea cu sute sau mii de dimensiuni) și nu se întâmplă în situații de dimensiuni joase.

Gramatica engleză are un număr mare de atribute care o influențează. În învățarea automată, trebuie să le reprezentăm cu caracteristici sub forma unui tablou/matrice de lungime finită și semnificativ mai mică (decât numărul de caracteristici existente). Pentru a face acest lucru, rețelele generalizează aceste caracteristici. Acest lucru creează două probleme:

  • Ipotezele incorecte introduc părtinire. Prejudecățile ridicate pot face ca algoritmul să rateze relații semnificative dintre caracteristici și variabilele țintă. Acest fenomen se numește subînvățare.
  • De la mici abateri din setul de antrenament din cauza învățării insuficiente a caracteristicilor, varianța crește. Varianta mare duce la supraadaptare; erorile sunt percepute ca informații fiabile.

Compromite

În stadiul incipient al învățării, părtinirea este mare, deoarece producția din rețea este departe de cea dorită. Și dispersia este foarte mică, deoarece datele au încă puțină influență.

La sfârșitul antrenamentului, părtinirea este mică, deoarece rețeaua a identificat caracteristica de bază în date. Cu toate acestea, dacă antrenamentul este prea lung, rețeaua va învăța și zgomotul specific acelui set de date. Acest lucru are ca rezultat o gamă largă de rezultate la testarea pe diferite seturi, deoarece zgomotul variază de la un set de date la altul.

Într-adevăr,

Algoritmii cu părtinire mare se bazează, de obicei, pe modele mai simple, care nu sunt predispuse la supraadaptare, dar pot să nu se potrivească și să nu identifice modele importante sau proprietăți ale caracteristicilor. Modelele cu părtinire scăzută și varianță mare sunt de obicei mai complexe în ceea ce privește structura lor, permițându-le să reprezinte mai precis setul de antrenament. Cu toate acestea, ei pot afișa mult zgomot de la setul de antrenament, făcând predicțiile lor mai puțin precise, în ciuda complexității lor suplimentare.

Prin urmare, este, în general, imposibil să existe o prejudecată mică și o variație mică în același timp.

Acum există multe instrumente care pot crea cu ușurință modele complexe de învățare automată, iar recalificarea este în centrul atenției. Deoarece părtinirea apare atunci când rețeaua nu primește suficiente informații. Dar cu cât sunt mai multe exemple, cu atât mai multe variante de dependențe și variabilitate apar în aceste corelații.

În a doua parte a articolului, continuăm discuția despre complexitățile învățării profunde.

5. Selectarea funcțiilor de activare

Unul dintre cele mai importante aspecte ale unei rețele neuronale profunde este functia de activare(funcția de activare), care aduce în rețea neliniaritate. În continuare, ne vom uita la funcțiile obișnuite de activare și vom oferi recomandări despre cum să le alegem.

Sigmoid

Sigmoidul este exprimat prin următoarea formulă: σ(x) = 1 / (1 + e -x). Această funcție ia ca intrare un număr real arbitrar, iar la ieșire oferă un număr real în intervalul de la 0 la 1. În special, numerele negative mari (modulo) se transformă în zero, iar numerele mari pozitive într-unul. 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 lipsa de activare (0) până la activarea complet saturată (1).

În prezent, sigmoidul și-a pierdut popularitatea anterioară și este folosit foarte rar. Această funcție are două dezavantaje serioase:

  1. Saturația sigmoidului duce la atenuarea gradienților. 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.
  2. Ieșirea sigmoidală nu este centrată în jurul zero. Această proprietate este nedorită deoarece neuronii din straturile ulterioare vor primi valori care nu sunt centrate în jurul zero, ceea ce afectează dinamica coborârii gradientului. Dacă valorile care intră în neuron sunt întotdeauna pozitive (de exemplu, x > 0 element cu element în f = ω T x + b), apoi în procesul de retropropagare toți gradienții greutăților ω va fi fie pozitiv, fie negativ (în funcție de gradientul întregii expresii f). Acest lucru poate duce la o dinamică în zig-zag nedorită a actualizărilor de greutate. Cu toate acestea, trebuie remarcat faptul că atunci când acești gradienți sunt însumați peste un pachet, actualizarea finală a greutăților poate avea semne diferite, ceea ce atenuează parțial dezavantajul descris. Astfel, lipsa de centrare este un inconvenient, dar are consecințe mai puțin grave decât problema saturației.

Tangenta hiperbolica

Tangenta hiperbolică (tanh) ia un număr real arbitrar ca intrare și produce un număr real în intervalul de la –1 la 1 ca ieșire. Cu toate acestea, spre deosebire de sigmoid, ieșirea acestei funcții este centrată în jurul zero. Prin urmare, în practică este întotdeauna preferabil să se folosească tangenta hiperbolică mai degrabă decât sigmoidul.

ReLU

În ultimii ani, o funcție de activare numită redresor, similară redresorului cu jumătate de undă din inginerie electrică, a devenit foarte populară. Neuronii cu această funcție de activare se numesc ReLU (unitate liniară rectificată). ReLU are următoarea formulă f(x) = max(0, x)și implementează o tranziție simplă de prag la zero.

Să ne uităm la aspectele pozitive și negative ale ReLU.

Părți pozitive:

  1. 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. În plus, ReLU nu este supus saturației.
  2. Utilizarea ReLU crește semnificativ viteza de convergență a coborârii gradientului stocastic (în unele cazuri de până la 6 ori) în comparație cu tangenta sigmoidă și hiperbolică. Se crede că acest lucru se datorează naturii liniare și lipsei de saturație a acestei funcții.

Laturile negative:

  1. Din păcate, ReLU-urile nu sunt întotdeauna suficient de fiabile și pot 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.

În prezent, există o întreagă familie de modificări diferite ale ReLU. În continuare ne vom uita la caracteristicile lor.

Pentru LReLU αi are o valoare fixă, pentru PReLU αi se determină pe baza datelor, pentru RReLU αji este generat aleatoriu dintr-un interval dat în timpul antrenamentului și rămâne constant în timpul testării.

Leaky ReLU

Leaky ReLU (LReLU) este o încercare de a rezolva problema eșecului ReLU-urilor convenționale descrisă mai sus. ReLU obișnuit pe un interval X< 0 dă o ieșire zero, în timp ce LReLU are o mică valoare negativă în acest interval (pantă aproximativ 0,01). Adică, funcția pentru LReLU are forma f(x) = αx la X< 0 Și f(x) = x la x ≥ 0, unde α este o constantă mică. Unii cercetători au raportat succes folosind această funcție de activare, dar rezultatele nu sunt întotdeauna consistente.

Parametric ReLU

Pentru ReLU parametric (ReLU parametric, PReLU), panta pe intervalul negativ nu este prestabilită, dar este determinată pe baza datelor. Autorii publicației susțin că utilizarea acestei funcții de activare este un factor cheie în depășirea nivelului uman în sarcina de recunoaștere a imaginii ImageNet. Procesul de backpropagare și actualizare pentru PReLU (pagina 43 diapozitive) este destul de simplu și similar cu procesul corespunzător pentru ReLU tradiționale.

ReLU randomizat

Pentru ReLU randomizat (ReLU randomizat, RReLU), panta pe intervalul negativ este generată aleatoriu dintr-un interval dat în timpul antrenamentului și rămâne constantă în timpul testării. Ca parte a competiției Kaggle National Data Science Bowl (NDSB), RReLU-urile au reușit să reducă supraadaptarea datorită elementului lor inerent de aleatorie. Potrivit câștigătorului acestei competiții, în timpul antrenamentului valoarea α i a fost generat aleatoriu din distribuție 1/U(3, 8), iar în timpul testării valoarea a fost constantă și egală cu așteptarea matematică: 2 / (l + u) = 2 / 11.

Regularizarea L1 are proprietatea interesantă că face ca vectorii de greutate să devină rari (adică, foarte aproape de zero). Cu alte cuvinte, neuronii regulați cu L1 ajung să folosească doar un mic subset al celor mai importante intrări și, prin urmare, nu sunt afectați în mare măsură de intrările zgomotoase.

În practică, dacă nu este nevoie de selecția directă a caracteristicilor, regularizarea L2 va oferi rezultate mai bune în comparație cu regularizarea L1.

Limitarea normei vectorului greutăților

O altă metodă de regularizare este metoda de limitare a normei vectorului greutate (constrângere de normă max). În această metodă, am stabilit o limită superioară absolută pentru norma vectorului de greutate al fiecărui neuron. Constrângerea este impusă utilizând coborârea de gradient proiectată. În practică, acest lucru este implementat după cum urmează: actualizați ponderile ca de obicei, apoi vectorizați ponderile ω fiecare neuron este limitat astfel încât condiția să fie satisfăcută ||ω|| 2< c . De obicei sensul c este de ordinul 3 sau 4. Unii cercetători au raportat efecte pozitive la utilizarea acestei metode de regularizare. Una dintre proprietățile utile ale acestei metode este că împiedică explozia greutăților chiar dacă rata de învățare este prea mare, deoarece actualizările de greutate sunt întotdeauna limitate.

Renunța

Abandonul este o metodă simplă și foarte eficientă de regularizare care completează metodele de mai sus. A fost propus recent în lucrare. Esența metodei este că, în timpul procesului de antrenament, o subrețea este selectată aleatoriu din rețeaua generală de multe ori, iar ponderile sunt actualizate numai în cadrul acestei subrețele. Neuronii cad într-o subrețea cu o probabilitate p, care se numește coeficient de abandon. În timpul testării, nu se aplică în schimb, ponderile sunt înmulțite cu factorul de abandon, rezultând un scor mediu pentru ansamblul tuturor subrețelelor. În practică, rata abandonului p este de obicei ales să fie 0,5, dar poate fi ajustat folosind un set de date de validare.

Abandonul este una dintre cele mai populare metode de regularizare. Google a depus o cerere de brevet pentru această metodă în 2014.

7. Vizualizarea

În timpul procesului de învățare, este util să se efectueze vizualizarea pentru a monitoriza eficacitatea învățării.

După cum se știe, rata de învățare este un parametru foarte sensibil. În figura 1 de mai jos vedem că la o rată de învățare foarte mare, curba erorii va avea o formă inacceptabilă. Cu o rată de învățare scăzută, eroarea va scădea foarte lent chiar și după un număr mare de epoci. Cu o rată de învățare ridicată, eroarea scade rapid la început, dar apoi scade într-un minim local, în urma căruia rețeaua poate să nu obțină rezultate bune. În cazul în care rata de învățare este selectată corect (bună) (linia roșie), eroarea scade fără probleme și în cele din urmă atinge o valoare minimă.

Acum să ne uităm la curba de eroare la o scară mai mare. O epocă corespunde unei singure treceri prin setul de date de antrenament, în consecință, fiecare epocă include multe mini-loturi. Dacă vizualizăm eroarea pentru fiecare mini-lot, curba de eroare va arăta ca în Figura 2. După cum se menționează în Figura 1, dacă curba de eroare are o formă apropiată de liniară, aceasta indică o rată scăzută de învățare. Dacă eroarea scade lent, rata de învățare este probabil prea rapidă. „Lățimea” curbei corespunde mărimii mini-lotului. Dacă „lățimea” este prea mare, adică răspândirea între mini-pachete este prea mare, atunci este necesar să creșteți dimensiunea mini-lot.

O altă concluzie poate fi trasă folosind curbele de precizie. În Figura 3, curba roșie reprezintă acuratețea setului de date de antrenament, iar curba verde a setului de date de validare. Distanța dintre curbe arată cât de eficient este modelul. O distanță mare indică faptul că rețeaua este bună la clasificarea datelor de antrenament și slabă la clasificarea datelor de validare. Prin urmare, în acest caz există supraantrenament. Pentru a rezolva această problemă, regularizarea trebuie consolidată. Dacă nu există distanță între curbe și ambele curbe corespund unui nivel scăzut de precizie, atunci modelul nostru are o capacitate de învățare insuficientă. În acest caz, pentru a îmbunătăți rezultatul, este necesară creșterea capacității modelului.

8. Ansambluri de rețele profunde

Diferite etape ale antrenării unui model

În cazul în care procesul de învățare este foarte solicitant de resurse, puteți combina diferite etape de formare a unui model (punct de control) într-un ansamblu, de exemplu, după fiecare epocă. Această abordare nu oferă multă varietate, dar în practică poate da rezultate destul de bune.

Exemplu practic:

În problemele din viața reală, datele sunt de obicei distribuite inegal între clase, adică unele clase au un număr mare de imagini de antrenament, iar unele au un număr semnificativ mai mic. După cum sa raportat într-un raport recent, datele de antrenament dezechilibrate pot avea un impact negativ grav asupra performanței generale a rețelelor convoluționale profunde. Cea mai simplă soluție la această problemă este duplicarea imaginilor în clase cu un număr mic de imagini sau excluderea imaginilor din clasele cu un număr mare de imagini. O altă soluție la această problemă, pe care am aplicat-o în contextul competiției descrise mai sus, este încadrarea. Deoarece imaginile originale ale evenimentelor culturale nu au fost distribuite uniform între clase, am extras patch-uri de imagini pentru clase cu un număr mic de instanțe de instruire. Pe de o parte, această abordare a oferit o varietate de date de antrenament și, pe de altă parte, ne-a permis să rezolvăm problema dezechilibrului.

Pentru a rezolva problema descrisă, puteți aplica și strategia de reglare fină a modelelor pre-antrenate. În special, setul de date de antrenament original poate fi împărțit în două părți, astfel încât o parte conține clase reprezentate de un număr mare de imagini, iar cealaltă conține clase reprezentate de un număr mic de imagini. Fiecare parte va fi relativ echilibrată. După aceasta, mai întâi trebuie să antrenați modelul pe clase cu un număr mare de imagini și apoi pe clase cu un număr mic de imagini.

Traducere de Stanislav Petrenko

) 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

  • determina problema care trebuie rezolvata printr-o retea neuronala (clasificare, predictie, modificare);
  • determina intrarea (tip: imagine, sunet, dimensiune: 100x100, 30x30, format: RGB, tonuri de gri) și datele 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ă prin 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:

  • determina problema care trebuie rezolvata printr-o retea neuronala (clasificare, predictie, modificare);
  • determina limitările problemei care se rezolvă (viteza, acuratețea răspunsului);
  • determinați intrarea (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ă)


Operarea 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 lipsa de activare (0) până la activarea 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 semn si magnitudine diferite, 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 instruire 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 feței este destinat doar recunoașterii în interior, atunci nu are rost să folosiți 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