Lucrul cu rețele neuronale: listă de verificare pentru depanare

Lucrul cu rețele neuronale: listă de verificare pentru depanare

Codul produselor software de învățare automată este adesea complex și destul de confuz. Detectarea și eliminarea erorilor din acesta este o sarcină care necesită mult resurse. Chiar și cel mai simplu rețele neuronale feedforward necesită o abordare serioasă a arhitecturii de rețea, inițializarea ponderilor și optimizarea rețelei. O mică greșeală poate duce la probleme neplăcute.

Acest articol este despre un algoritm pentru depanarea rețelelor neuronale.

Skillbox recomandă: Curs practic Dezvoltator Python de la zero.

Amintim: pentru toți cititorii „Habr” - o reducere de 10 de ruble la înscrierea la orice curs Skillbox folosind codul promoțional „Habr”.

Algoritmul constă din cinci etape:

  • pornire usoara;
  • confirmarea pierderilor;
  • verificarea rezultatelor intermediare și a conexiunilor;
  • diagnosticarea parametrilor;
  • controlul muncii.

Dacă ceva vi se pare mai interesant decât restul, puteți sări imediat la aceste secțiuni.

Început ușor

O rețea neuronală cu o arhitectură complexă, regularizare și un planificator al ratei de învățare este mai dificil de depanat decât una obișnuită. Suntem puțin complicati aici, deoarece punctul în sine este indirect legat de depanare, dar aceasta este totuși o recomandare importantă.

Un început simplu este de a crea un model simplificat și de a-l antrena pe un set (punct) de date.

Mai întâi creăm un model simplificat

Pentru a începe rapid, creăm o rețea mică cu un singur strat ascuns și verificăm dacă totul funcționează corect. Apoi complicăm treptat modelul, verificând fiecare aspect nou al structurii sale (strat suplimentar, parametru etc.) și mergem mai departe.

Antrenăm modelul pe un singur set (punct) de date

Ca o verificare rapidă pentru proiectul dvs., puteți utiliza unul sau două puncte de date de antrenament pentru a confirma dacă sistemul funcționează corect. Rețeaua neuronală trebuie să prezinte o acuratețe de 100% în antrenament și testare. Dacă nu este cazul, atunci fie modelul este prea mic, fie aveți deja un bug.

Chiar dacă totul este bine, pregătiți modelul pentru una sau mai multe epoci înainte de a trece mai departe.

Evaluarea pierderilor

Estimarea pierderilor este principala modalitate de a rafina performanța modelului. Trebuie să vă asigurați că pierderea este adecvată problemei și că funcțiile de pierdere sunt evaluate la scara corectă. Dacă utilizați mai multe tipuri de pierderi, asigurați-vă că toate sunt de aceeași ordine și scalate corect.

Este important să fii atent la pierderile inițiale. Verificați cât de aproape este rezultatul real de rezultatul așteptat dacă modelul a început cu o presupunere aleatorie. ÎN Lucrarea lui Andrey Karpathy sugerează următoarele:: „Asigurați-vă că obțineți rezultatul așteptat atunci când începeți cu un număr mic de parametri. Este mai bine să verificați imediat pierderea de date (cu gradul de regularizare setat la zero). De exemplu, pentru CIFAR-10 cu un clasificator Softmax, ne așteptăm ca pierderea inițială să fie 2.302, deoarece probabilitatea difuză așteptată este 0,1 pentru fiecare clasă (deoarece există 10 clase) și pierderea Softmax este probabilitatea log negativă a clasei corecte. ca − ln (0.1) = 2.302.”

Pentru exemplul binar, un calcul similar se face pur și simplu pentru fiecare dintre clase. Iată, de exemplu, datele: 20% 0 și 80% 1. Pierderea inițială așteptată va fi de până la –0,2ln (0,5) –0,8ln (0,5) = 0,693147. Dacă rezultatul este mai mare de 1, poate indica faptul că greutățile rețelei neuronale nu sunt echilibrate corespunzător sau că datele nu sunt normalizate.

Verificarea rezultatelor intermediare și a conexiunilor

Pentru a depana o rețea neuronală, este necesar să înțelegem dinamica proceselor din cadrul rețelei și rolul straturilor intermediare individuale pe măsură ce sunt conectate. Iată erorile frecvente pe care le puteți întâlni:

  • expresii incorecte pentru actualizări gradle;
  • actualizările de greutate nu sunt aplicate;
  • gradiente care explodează.

Dacă valorile gradientului sunt zero, aceasta înseamnă că rata de învățare în optimizator este prea lentă sau că întâlnești o expresie incorectă pentru actualizarea gradientului.

În plus, este necesar să se monitorizeze valorile funcțiilor de activare, greutățile și actualizările fiecăruia dintre straturi. De exemplu, amploarea actualizărilor parametrilor (ponderi și părtiniri) ar trebui să fie 1-e3.

Există un fenomen numit „Dying ReLU” sau "problema gradientului care dispare", când neuronii ReLU vor scoate zero după ce a învățat o valoare de părtinire negativă mare pentru ponderile sale. Acești neuroni nu mai sunt declanșați niciodată în niciun moment al datelor.

Puteți utiliza verificarea gradientului pentru a identifica aceste erori prin aproximarea gradientului folosind o abordare numerică. Dacă este aproape de gradienții calculați, atunci retropropagarea a fost implementată corect. Pentru a crea o verificare a gradientului, consultați aceste resurse grozave din CS231 aici и aiciPrecum și lecţie Andrew Nga pe acest subiect.

Faizan Sheikh indică trei metode principale de vizualizare a unei rețele neuronale:

  • Preliminarii sunt metode simple care ne arată structura generală a modelului antrenat. Acestea includ ieșirea de forme sau filtre ale straturilor individuale ale rețelei neuronale și parametrii din fiecare strat.
  • Bazat pe activare. În ele, descifrăm activările neuronilor individuali sau ale grupurilor de neuroni pentru a le înțelege funcțiile.
  • Bazat pe gradienți. Aceste metode tind să manipuleze gradienții care se formează din trecerile înainte și înapoi ale antrenamentului modelului (inclusiv hărți de proeminentă și hărți de activare a clasei).

Există mai multe instrumente utile pentru vizualizarea activărilor și conexiunilor straturilor individuale, de ex. ConX и Placa de tensor.

Lucrul cu rețele neuronale: listă de verificare pentru depanare

Diagnosticarea parametrilor

Rețelele neuronale au o mulțime de parametri care interacționează între ei, ceea ce complică optimizarea. De fapt, această secțiune face obiectul cercetării active de către specialiști, așa că sugestiile de mai jos ar trebui considerate doar ca sfaturi, puncte de plecare de la care să construim.

Mărimea Pachetului (dimensiunea lotului) - Dacă doriți ca dimensiunea lotului să fie suficient de mare pentru a obține estimări precise ale gradientului de eroare, dar suficient de mică pentru coborârea gradientului stocastic (SGD) pentru a vă regulariza rețeaua. Dimensiunile mici ale loturilor vor duce la o convergență rapidă din cauza zgomotului în timpul procesului de antrenament și, ulterior, la dificultăți de optimizare. Acest lucru este descris mai detaliat aici.

Rata de învățare - prea scăzut va duce la o convergență lentă sau riscul de a rămâne blocat în minime locale. În același timp, o rată mare de învățare va provoca divergențe de optimizare, deoarece riscați să treceți prin partea profundă, dar îngustă, a funcției de pierdere. Încercați să utilizați programarea vitezei pentru a o reduce în timp ce antrenați rețeaua neuronală. Actual cu CS231n există o secțiune mare dedicată acestei probleme.

Tăiere în gradient  — tăierea gradienților parametrilor în timpul retropropagarii la valoarea maximă sau la norma marginală. Util pentru depanarea oricăror gradienți care explodează pe care îl puteți întâlni la punctul trei.

Normalizare lot - folosit pentru a normaliza datele de intrare ale fiecărui strat, ceea ce ne permite să rezolvăm problema deplasării covariatelor interne. Dacă utilizați Dropout și Batch Norma împreună, consultați acest articol.

Coborâre a gradientului stocastic (SGD) — există mai multe varietăți de SGD care folosesc impulsul, ratele de învățare adaptive și metoda Nesterov. Cu toate acestea, niciuna dintre ele nu are un avantaj clar atât în ​​ceea ce privește eficiența învățării, cât și generalizarea (detalii aici).

Regularizare - este crucial pentru construirea unui model generalizabil, deoarece adaugă o penalizare pentru complexitatea modelului sau valorile extreme ale parametrilor. Aceasta este o modalitate de a reduce varianța modelului fără a crește semnificativ părtinirea acestuia. Mai mult informatii detaliate - aici.

Pentru a evalua totul singur, trebuie să dezactivați regularizarea și să verificați singur gradientul de pierdere de date.

A renunta este o altă metodă de eficientizare a rețelei pentru a preveni aglomerația. În timpul antrenamentului, abandonul se realizează numai prin menținerea activității neuronului cu o anumită probabilitate p (hiperparametru) sau setarea lui la zero în cazul opus. Ca urmare, rețeaua trebuie să utilizeze un subset diferit de parametri pentru fiecare lot de antrenament, ceea ce reduce modificările anumitor parametri care devin dominanti.

Important: Dacă utilizați atât normalizarea abandonului, cât și normalizarea loturilor, aveți grijă la ordinea acestor operațiuni sau chiar folosiți-le împreună. Toate acestea sunt încă discutate și completate activ. Iată două discuții importante pe această temă pe Stackoverflow и ArXiv.

Controlul muncii

Este vorba despre documentarea fluxurilor de lucru și a experimentelor. Dacă nu documentezi nimic, s-ar putea să uiți, de exemplu, ce rată de învățare sau ponderea clasei sunt folosite. Datorită controlului, puteți vizualiza și reproduce cu ușurință experimentele anterioare. Acest lucru vă permite să reduceți numărul de experimente duplicate.

Cu toate acestea, documentarea manuală poate deveni o sarcină dificilă în cazul unui volum mare de muncă. Aici intervin instrumente precum Comet.ml pentru a vă ajuta să înregistrați automat seturi de date, modificări de cod, istoric experimental și modele de producție, inclusiv informații cheie despre modelul dvs. (hiperparametri, valori de performanță a modelului și informații de mediu).

O rețea neuronală poate fi foarte sensibilă la mici modificări, iar acest lucru va duce la o scădere a performanței modelului. Urmărirea și documentarea muncii dvs. este primul pas pe care îl puteți face pentru a vă standardiza mediul și modelarea.

Lucrul cu rețele neuronale: listă de verificare pentru depanare

Sper că această postare poate fi un punct de plecare pentru a începe să vă depanați rețeaua neuronală.

Skillbox recomandă:

Sursa: www.habr.com

Adauga un comentariu