Punojmë me rrjetet nervore: lista kontrolluese për debugging

Punojmë me rrjetet nervore: lista kontrolluese për debugging

Kodi i produkteve software për mësim të makinerive shpesh është kompleks dhe mjaft i ngatërruar. Zbulimi dhe eliminimi i defekteve në të është një detyrë e shtrenjë për burime. Edhe më e thjeshta rrjetet nervore me lidhje të drejtpërdrejta kërkojnë një qasje serioze ndaj arkitekturës rrjetore, inicializimit të peshave dhe optimizimit të rrjetit. Një gabim i vogël mund të sjellë probleme të pakëndshme.

Ky artikull i kushtohet algoritmit për debugging të rrjetave tuaja neuronale.

Skillbox rekomandon: Kurs praktik Zhvillues Python nga e para.

KujtojmĂ«: pĂ«r tĂ« gjithĂ« lexuesit e «Habra» — zbritje prej 10,000 rublesh pĂ«r regjistrimin nĂ« çdo kurs Skillbox me kodin promovues «Habr».

Algoritmi përbëhet nga pesë faza:

  • fillimi i thjeshtĂ«;
  • konfirmimi i humbjeve;
  • kontrollimi i rezultateve ndĂ«rmjetĂ«se dhe lidhjeve;
  • diagnoza e parametrave;
  • kontrollimi i funksionimit.

Nëse diçka ju duket më interesante se sa e tjerash, mund të kaloni menjëherë në këto seksione.

Fillimi i thjeshtë

Debugger një rrjet nervor me arkitekturë të ndërlikuar, regularizim dhe planifikues të shpejtësisë së mësimit është më e vështirë se sa një e zakonshme. Këtu po manipulojmë, pasi pika vetë për debugging ka një lidhje indirekte, por kjo është një rekomandim i rëndësishëm.

Fillimi i thjeshtë përfshin krijimin e një modeli të thjeshtuar dhe mësimin e tij mbi një grup (pikë) të dhënash.

Së pari krijojmë një model të thjeshtuar

Për fillim të shpejtë krijojmë një rrjet të vogël me një shtresë të fshehtë dhe e kontrollojmë që gjithçka të funksionojë në mënyrë korrekte. Pastaj gradualisht e komplikohemi modelin, duke kontrolluar çdo aspekt të ri të strukturës së tij (shtresës shtesë, parametrave etj.), dhe vazhdojmë më tutje.

Mësojmë modelin mbi një grup të vetëm (pikë) të dhënash

Si një kontroll të shpejtë të funksionalitetit të projektit tuaj, mund të përdorni një ose dy pika të dhënash për të mësuar, për të konfirmuar nëse sistemi funksionon siç duhet. Rrjeti nervor duhet të tregojë 100% saktësi në mësim dhe verifikim. Nëse kjo nuk ndodh, atëherë ose modeli është shumë i vogël, ose keni një defekt.

Edhe nëse gjithçka është mirë, përgatitni modelin për të kaluar një ose disa epokë para se të shkoni më tej.

Vlerësimi i humbjeve

Vlerësimi i humbjeve është mënyra kryesore për të saktësuar performancën e modelit. Ju duhet të siguroheni se humbja i përmbahet detyrës, dhe funksionet e humbjes vlerësohen sipas një shkalle korrekt. Nëse përdorni më shumë se një lloj humbjeje, atëherë sigurohuni që të gjitha ato të jenë të një rendi dhe të skaluara siç duhet.

ËshtĂ« e rĂ«ndĂ«sishme tĂ« jeni tĂ« kujdesshĂ«m pĂ«r humbjet fillestare. Kontrolloni sa afĂ«r Ă«shtĂ« rezultati real me atĂ« tĂ« pritur, nĂ«se modeli ka filluar nga njĂ« supozim tĂ« rastĂ«sishĂ«m. NĂ« punĂ«n e Andrej Karpati ofrohet kjo: «Sigurohuni qĂ« po merrni rezultatin qĂ« pritet kur filloni tĂ« punoni me njĂ« numĂ«r tĂ« vogĂ«l parametrash. ËshtĂ« mĂ« mirĂ« tĂ« kontrolloni menjĂ«herĂ« humbjen e tĂ« dhĂ«nave (me vendosjen e gradĂ«s sĂ« rregullimit nĂ« zero). PĂ«r shembull, pĂ«r CIFAR-10 me klasifikuesin Softmax ne presim qĂ« humbjet fillestare tĂ« jenĂ« 2.302, sepse probabiliteti i pĂ«rhapur i pritur Ă«shtĂ« 0,1 pĂ«r çdo klasĂ« (duke pasur parasysh se ekzistojnĂ« 10 klasa), dhe humbja Softmax Ă«shtĂ« probabiliteti negativ logaritmik i klasĂ«s sĂ« saktĂ« si –ln (0.1) = 2.302».

PĂ«r njĂ« shembull binar, thjesht bĂ«het llogaritja e ngjashme pĂ«r secilĂ«n nga klasat. Ja, pĂ«r shembull, tĂ« dhĂ«nat: 20% 0’s dhe 80% 1’s. Humba e pritur fillestare do tĂ« jetĂ« deri nĂ« –0,2ln (0,5) –0,8ln (0,5) = 0,693147. NĂ«se rezultati Ă«shtĂ« mĂ« i madh se 1, kjo mund tĂ« tregojĂ« se pesha e rrjetit nervor nuk Ă«shtĂ« balancuar siç duhet ose tĂ« dhĂ«nat nuk janĂ« normalizuar.

Kontrolloni rezultatet ndërmjetëse dhe lidhjet

Për të debuguar rrjetin nervor është e nevojshme të kuptohet dinamika e proceseve brenda rrjetit dhe roli i shtresave të intermediara, pasi ato janë të lidhura. Ja disa gabime tipike me të cilat mund të përballeni:

  • shprehje tĂ« gabuara pĂ«r pĂ«rditĂ«simet e gradienteve;
  • pĂ«rditĂ«simet e peshave nuk aplikohen;
  • gradiente qĂ« shuhen ose shpĂ«rthejnĂ« (exploding gradients).

Nëse vlerat e gradientit janë zero, kjo do të thotë se shpejtësia e të mësuarit në optimizues është shumë e ulët, ose keni hasur në një shprehje të gabuar për përditësimin e gradientit.

Për më tepër, është e nevojshme të monitoroni vlerat e funksioneve të aktivizimit, peshave dhe përditësimeve të çdo shtrese. Për shembull, madhësia e përditësimeve të parametrave (peshave dhe zhvendosjeve) duhet të jetë 1-e3.

Ekziston njĂ« fenomen qĂ« quhet “Dying ReLU” ose «problemi i gradientit shuhen», kur neuronet ReLU do tĂ« japin zero pas studimit tĂ« njĂ« vlerĂ« tĂ« madhe negative (bias) pĂ«r peshat e tij. KĂ«to neurone nuk aktivizohen mĂ« kurrĂ« nĂ« asnjĂ« vend tĂ« tĂ« dhĂ«nave.

Mund të përdorni kontrollin e gradientit për të zbuluar këto gabime duke aproksimuar gradientin me një qasje numerike. Nëse është afër gradientëve të llogaritur, atëherë përhapja e prapme është realizuar siç duhet. Për të krijuar një kontroll të gradientit, shikoni këto burime të shkëlqyera nga CS231 këtu dhe këtu, si dhe mësimin nga Andrew Ng për këtë temë.

Faizan Sheikh shpjegon tre metoda kryesore të vizualizimit të rrjetit nervor:

  • ParaprirĂ«sit — metoda tĂ« thjeshta qĂ« na tregojnĂ« strukturĂ«n e pĂ«rgjithshme tĂ« modelit tĂ« mĂ«suar. KĂ«to pĂ«rfshijnĂ« daljet e formave apo filtrave tĂ« shtresave individuale tĂ« rrjetit nervor dhe parametrat nĂ« çdo shtresĂ«.
  • TĂ« bazuara nĂ« aktivizim. Ato dekriptojnĂ« aktivizimet e neuronĂ«ve individualĂ« ose grupeve tĂ« neuronĂ«ve pĂ«r tĂ« kuptuar funksionet e tyre.
  • TĂ« bazuara nĂ« gradientĂ«. KĂ«to metoda kanĂ« tendencĂ« tĂ« manipulojnĂ« gradientĂ«t qĂ« formohen nga kalimi pĂ«rpara dhe mbrapa gjatĂ« trajnimit tĂ« modelit (duke pĂ«rfshirĂ« hartat e rĂ«ndĂ«sisĂ« dhe hartat e aktivizimit tĂ« klasĂ«s).

Ekzistojnë disa mjete të dobishme për vizualizimin e aktivizimeve dhe lidhjeve të shtresave të veçanta, siç janë ConX dhe Tensorboard.

Punojmë me rrjetet nervore: lista kontrolluese për debugging

Diagnostika e parametrave

Rrjetet nervore kanë një shumëllojshmëri parametrash që ndërveprojnë me njëra-tjetrën, duke e komplikuar optimizimin. Në thelb, ky seksion është objekt i kërkimeve aktive të specialistëve, prandaj propozimet më poshtë duhet të merren vetëm si këshilla, pika fillestare për t'u nisur.

MadhĂ«sia e grupit (batch size) — nĂ«se Ă«shtĂ« e nevojshme, qĂ« madhĂ«sia e grupit tĂ« jetĂ« e mjaftueshme pĂ«r tĂ« marrĂ« vlerĂ«sime tĂ« sakta tĂ« gradientit tĂ« gabimit, por e vogĂ«l mjaftueshĂ«m qĂ« rĂ«nia stohastike e gradientit (SGD) tĂ« mund tĂ« rendisĂ« rrjetin tuaj. MadhĂ«sitĂ« e vogla tĂ« grupeve do tĂ« çojnĂ« nĂ« njĂ« konvergjencĂ« mĂ« tĂ« shpejtĂ« pĂ«r shkak tĂ« zhurmĂ«s gjatĂ« procesit tĂ« mĂ«simit dhe mĂ« pas — nĂ« vĂ«shtirĂ«si nĂ« optimizim. MĂ« shumĂ« pĂ«r kĂ«tĂ« Ă«shtĂ« pĂ«rshkruar kĂ«tu.

ShpejtĂ«sia e mĂ«simit — shumĂ« e ulĂ«t do tĂ« çojĂ« nĂ« konvergjencĂ« tĂ« ngadalshme ose rrezikun pĂ«r tĂ« ngecur nĂ« minimumet lokale. NĂ« tĂ« njĂ«jtĂ«n kohĂ«, njĂ« shpejtĂ«si e lartĂ« mĂ«simi do tĂ« shkaktojĂ« divergjencĂ« tĂ« optimizimit, pasi rrezikoni tĂ« "kalloni" pĂ«rmes njĂ« pjese tĂ« thellĂ«, por tĂ« ngushtĂ« tĂ« funksionit tĂ« humbjes. Provoni tĂ« pĂ«rdorni planifikimin e shpejtĂ«sisĂ« pĂ«r ta ulur atĂ« gjatĂ« procesit tĂ« mĂ«simit tĂ« rrjetit nervor. ka njĂ« seksion tĂ« madh tĂ« dedikuar kĂ«tij problemi.

Klipimi i gradienteve  — Ă«shtĂ« prerja e gradienteve tĂ« parametrave gjatĂ« pĂ«rhapjes prapa sipas vlerĂ«s maksimale ose normĂ«s kufitare. ËshtĂ« e dobishme pĂ«r tĂ« zgjidhur problemet me çdo gradiant qĂ« mund tĂ« shpĂ«rthejĂ«, me tĂ« cilin mund tĂ« pĂ«rballeni nĂ« pikĂ«n tre.

Normalizimi nĂ« grup — pĂ«rdoret pĂ«r tĂ« normalizuar tĂ« dhĂ«nat hyrĂ«se tĂ« çdo shtrese, duke ndihmuar nĂ« zgjidhjen e problemeve me zhvendosjen e brendshme tĂ« kovariateve. NĂ«se pĂ«rdorni Dropout dhe Batch Normalization sĂ« bashku, shihni kĂ«tĂ« artikull.

NĂ« shkallĂ«n stohastike tĂ« gradienteve (SGD) — ekzistojnĂ« disa variante tĂ« SGD qĂ« pĂ«rdorin impuls, shpejtĂ«si adaptuese tĂ« mĂ«simit dhe metodĂ«n Nesterov. MegjithatĂ«, asnjĂ«ra prej tyre nuk ka njĂ« avantazh tĂ« qartĂ« as pĂ«r sa i pĂ«rket efikasitetit tĂ« mĂ«simit, as pĂ«r sa i pĂ«rket pĂ«rgjithĂ«simit (detaje kĂ«tu).

Rregullimi — Ă«shtĂ« thelbĂ«sore pĂ«r ndĂ«rtimin e njĂ« modeli tĂ« pĂ«rgjithshĂ«m, pasi shton njĂ« ndĂ«shkim pĂ«r kompleksitetin e modelit ose pĂ«r vlerat ekstreme tĂ« parametrave. Ky Ă«shtĂ« njĂ« mĂ«nyrĂ« pĂ«r tĂ« ulur variancĂ«n e modelit pa rritur ndjeshĂ«m ndarjen e tij. MĂ« shumĂ« informacione mĂ« tĂ« detajuara — kĂ«tu.

Për të vlerësuar gjithçka vetë, duhen çaktivizuar rregullimi dhe duhet të kontrollohet gradienti i humbjes së të dhënave vetë.

RĂ«nia — Ă«shtĂ« njĂ« tjetĂ«r metodĂ« pĂ«r tĂ« rregulluar rrjetin tuaj pĂ«r tĂ« parandaluar mbingarkesĂ«n. GjatĂ« mĂ«simit, rĂ«nia realizohet vetĂ«m duke mbajtur aktivitetin e neuronit me njĂ« probabilitet tĂ« caktuar p (hiper-parametri) ose duke e vendosur atĂ« nĂ« zero nĂ« rastin e kundĂ«rt. Si rezultat, rrjeti duhet tĂ« pĂ«rdorĂ« njĂ« nĂ«ngrup tjetĂ«r parametrash pĂ«r çdo grup mĂ«simor, duke reduktuar ndryshimet e parametrave tĂ« caktuar qĂ« bĂ«hen dominuese.

ËshtĂ« e rĂ«ndĂ«sishme: nĂ«se pĂ«rdorni si rĂ«nien, ashtu edhe normalizimin nĂ« grup, jini tĂ« kujdesshĂ«m me rendin e kĂ«tyre operacioneve ose madje edhe me pĂ«rdorimin e tyre tĂ« pĂ«rbashkĂ«t. TĂ« gjitha kĂ«to janĂ« ende duke u diskutuar dhe pĂ«rmirĂ«suar. Ja dy diskutime tĂ« rĂ«ndĂ«sishme mbi kĂ«tĂ« temĂ« nĂ« Stackoverflow dhe Arxiv.

Kontrolli i funksionit

Bëhet fjalë për dokumentimin e proceseve punuese dhe eksperimenteve. Nëse nuk dokumentoni asgjë, mund të harroni, për shembull, cilat janë shpejtësia e nxënies ose pesha e klasave që përdoren. Falë kontrollit, mund të shqyrtoni dhe riprodhoni në mënyrë të lehtë eksperimentet e mëparshme. Kjo ndihmon në reduktimin e numrit të eksperimenteve të dyfishta.

Megjithatë, dokumentimi manual mund të bëhet një detyrë e vështirë në rast të një volumi të madh punësh. Këtu ndihmojnë të tillë si Comet.ml, që ndihmojnë për të loguar automatikisht grumbujt e të dhënave, ndryshimet në kod, historinë e eksperimenteve dhe modelet prodhuese, përfshirë informacionin kyç mbi modelin tuaj (hiperparametrat, treguesit e performancës së modelit dhe informacionin mbi mjedisin).

Një rrjet nervor mund të jetë mjaft i ndjeshëm ndaj ndryshimeve të vogla, dhe kjo do të çojë në rënien e performancës së modelit. Ndjekja dhe dokumentimi i punës është hapi i parë që duhet të ndërmerrni për të standardizuar mjedisin dhe modelimin.

Punojmë me rrjetet nervore: lista kontrolluese për debugging

Shpresoj se ky post mund të jetë pika e nisjes nga e cila do të filloni rregullimin e rrjetit tuaj nervor.

Skillbox rekomandon:

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster