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

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

Kodi i produkteve të programimit për të mësuar automatikisht shpesh është i ndërlikuar dhe mjaft konfuz. Identifikimi dhe eliminimi i defekteve në të është një detyrë që kërkon shumë resurse. Edhe rrjetet më të thjeshta neurore me lidhje të drejtpërdrejta kërkojnë një qasje serioze ndaj arkitekturës rrjetore, inicializimit të peshave, optimizimit të rrjetit. Një gabim i vogël mund të çojë në probleme të pakëndshme.

Ky artikull është përkushtuar algoritmit për debuggimin e rrjeteve tuaja neurale.

Skillbox rekomandon: Kurs praktik Programues Python nga fillimi.

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

Algoritmi përbëhet nga pesë faza:

  • start i thjeshtĂ«;
  • konfirmimi i humbjeve;
  • kontrollimi i rezultateve ndĂ«rmjet dhe lidhjeve;
  • diagnostikimi i parametrave;
  • kontrollimi i funksionimit.

Nëse diçka duket më interesante se pjesa tjetër, mund të kaloni menjëherë në këto seksione.

Start i thjeshtë

Debugging një rrjet neurali me arkitekturë të ndërlikuar, rregullimin dhe planifikuesin e shpejtësisë së mësimit është më i vështirë se sa një i zakonshëm. Po luajmë pak me këtë, pasi pika e debuggimit ka një lidhje indirekte me këtë, por është gjithsesi një rekomandim i rëndësishëm.

Starti i thjeshtë përfshin krijimin e një modeli të thjeshtuar dhe mësimin e tij në një set të vetëm (pikë) të dhënash.

Së pari krijojmë një model të thjeshtuar

Për një start të shpejtë krijojmë një rrjet të vogël me një shtresë të vetme të fshehur dhe kontrollojmë që gjithçka të funksionojë siç duhet. Pastaj e komplikohemi gradualisht modelin, duke kontrolluar çdo aspekt të ri të strukturës së saj (shtresë shtesë, parametrash etj.), dhe lëvizim përpara.

Mësojmë modelin në një set të vetëm (pikë) të dhënash

Si një kontroll i shpejtë për funksionimin e projektit tuaj mund të përdorni një ose dy pika të dhënash për t'u siguruar se sistemi funksionon si duhet. Rrjeti neural duhet të tregojë 100% saktësi në të mësuar dhe verifikim. Nëse kështu nuk është, modeli është shumë i vogël ose keni një defekt.

Edhe nëse gjithçka është në rregull, përgatitni modelin për një ose disa epoka para se të vazhdoni më tutje.

Vlerësimi i humbjeve

Vlerësimi i humbjeve është mënyra kryesore për të përmirësuar performancën e modelit. Duhet të siguroheni se humbja korrespondon me detyrën dhe funksionet e humbjeve janë vlerësuar në një shkallë të saktë. Nëse përdorni më shumë se një tip humbjeje, kontrolloni që të gjitha të jenë të një rendi dhe të skalitura siç duhet.

ËshtĂ« e rĂ«ndĂ«sishme tĂ« jeni tĂ« kujdesshĂ«m ndaj humbjeve fillestare. Kontrolloni sa afĂ«r Ă«shtĂ« rezultati real me atĂ« qĂ« pritej, nĂ«se modeli ka nisur nga njĂ« supozim tĂ« rastĂ«sishĂ«m. NĂ« punimin e Andreit Karpatit propozohet si vijon: "Sigurohuni qĂ« po merrni rezultatin qĂ« pritet kur filloni punĂ«n me njĂ« numĂ«r tĂ« vogĂ«l parametrash. MĂ« mirĂ« tĂ« kontrolloni menjĂ«herĂ« humbjen e tĂ« dhĂ«nave (duke vendosur shkallĂ«n e 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 parashikuar Ă«shtĂ« 0,1 pĂ«r çdo klasĂ« (pasi ekzistojnĂ« 10 klasĂ«), dhe humbja Softmax Ă«shtĂ« probabiliteti negativ logarithmik i klasĂ«s sĂ« saktĂ« si -ln (0.1) = 2.302".

PĂ«r njĂ« shembull binar bĂ«het njĂ« llogaritje e ngjashme pĂ«r secilĂ«n nga klasat. Ja, pĂ«r shembull, tĂ« dhĂ«nat: 20% 0’s dhe 80% 1’s. Humba fillestare e pritur do tĂ« ishte 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 peshat e rrjetit neural nuk janĂ« balancuar siç duhet ose tĂ« dhĂ«nat nuk janĂ« normalizuar.

Kontrollojmë rezultatet ndërmjet dhe lidhjet

Për të debuggur rrjetin neural, është e nevojshme të kuptoni dinamikën e proceseve brenda rrjetit dhe rolin e shtresave të veçanta ndërmjet, pasi ato janë të lidhura. Këtu janë disa gabime tipike me të cilat mund të përballeni:

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

Nëse vlerat e gradientit janë zero, kjo tregon se shpejtësia e mësimit në optimizues është shumë e ulët, ose se po hasni një shprehje të gabuar për përditësimin e gradientit.

Përveç kësaj, është e nevojshme të monitoroni vlerat e funksioneve të aktivizimit, peshave dhe përditësimeve të çdo shtrese. Për shembull, sasia e përditësimeve të parametrave (peshave dhe dispensiveve) duhet të jetë 1-e3.

Ekziston njĂ« fenomen qĂ« quhet “Dying ReLU” ose "problemi i gradientit qĂ« zhduket", kur neuronĂ«t ReLU do tĂ« japin zero pas mĂ«simit tĂ« njĂ« vlera tĂ« madhe negative (bias) pĂ«r peshat e tij. KĂ«ta neurone nuk aktivizohen mĂ« kurrĂ« nĂ« asnjĂ« nga tĂ« dhĂ«nat.

Ju 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 mbrapsht është realizuar si duhet. Për të krijuar një verifikim të gradientit, shikoni këto burime të shkëlqyera nga CS231 këtu dhe këtu, si dhe mësimin e Andrew Ng për këtë temë.

Faizan Sheikh tregon tre mënyrat kryesore të vizualizimit të rrjeteve neurale:

  • ParaprakĂ«t — metoda tĂ« thjeshta qĂ« na tregojnĂ« strukturĂ«n e pĂ«rgjithshme tĂ« modelit tĂ« trajnuar. Ato pĂ«rfshijnĂ« nxjerrjen e formave ose filtrave tĂ« shtresave individuale tĂ« rrjetit neural dhe parametrave nĂ« secilĂ«n shtresĂ«.
  • TĂ« bazuara nĂ« aktivizim. Ato dekodojnĂ« 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Ă« krijohen 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 individuale, siç janë ConX dhe Tensorboard.

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

Diagnostikimi i parametrave

Rrjetet neurale kanë shumë parametra që ndërveprojnë me njëri-tjetrin, gjë që e komplikon optimizimin. Në thelb, ky seksion është një temë e kërkimeve aktive nga specialistët, prandaj rekomandimet më poshtë duhet të merren vetëm si këshilla, pika fillestare nga të cilat mund të niseni.

MadhĂ«sia e paketĂ«s (batch size) — nĂ«se Ă«shtĂ« e nevojshme qĂ« madhĂ«sia e paketĂ«s tĂ« jetĂ« mjaft e madhe pĂ«r tĂ« marrĂ« vlerĂ«sime tĂ« sakta tĂ« gradienteve tĂ« gabimeve, por mjaft e vogĂ«l qĂ« shkalla e gradientit stokastik (SGD) tĂ« mund tĂ« rregullojĂ« rrjetin tuaj. MadhĂ«sitĂ« e vogla tĂ« paketave do tĂ« çojnĂ« nĂ« konvergjencĂ« tĂ« shpejtĂ« pĂ«r shkak tĂ« zhurmĂ«s nĂ« procesin e trajnimit dhe mĂ« vonĂ« — nĂ« vĂ«shtirĂ«si nĂ« optimizim. MĂ« shumĂ« nĂ« lidhje me kĂ«tĂ« Ă«shtĂ« e pĂ«rshkruar kĂ«tu.

ShpejtĂ«sia e tĂ« mĂ«suarit — shumĂ« e ulĂ«t do tĂ« çojĂ« nĂ« konvergjencĂ« tĂ« ngadalshme ose rrezikun pĂ«r t'u mbetur nĂ« minimumet lokale. NĂ« tĂ« njĂ«jtĂ«n kohĂ«, njĂ« shpejtĂ«si e lartĂ« e tĂ« mĂ«suarit do tĂ« shkaktojĂ« shpĂ«rthim tĂ« optimizimit, pasi rrezikoni "tĂ« hidheni" 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 gjatĂ« procesit tĂ« trajnimit tĂ« rrjetit neural. NĂ« kursin CS231n ekziston njĂ« seksion i madh qĂ« merret me kĂ«tĂ« problem.

Prerja e gradientĂ«ve  — prerja e gradientĂ«ve tĂ« parametrave gjatĂ« pĂ«rhapjes mbrapsht nĂ« vlerĂ«n maksimale ose normĂ«n kufitare. E dobishme pĂ«r tĂ« zgjidhur problemet me çdo gradiente qĂ« shpĂ«rthejnĂ«, me tĂ« cilat mund tĂ« pĂ«rballeni nĂ« pikĂ«n e tretĂ«.

Normalizimi i grupit — pĂ«rdoret pĂ«r normalizimin e tĂ« dhĂ«nave hyrĂ«se tĂ« secilĂ«s shtresĂ«, duke ndihmuar nĂ« zgjidhjen e problemit tĂ« zhvendosjes sĂ« brendshme tĂ« kovariateve. NĂ«se pĂ«rdorni Dropout dhe Batch Normalization sĂ« bashku, shikoni kĂ«tĂ« artikull.

Shkalla e gradientit stokastik (SGD) — ekzistojnĂ« disa variante tĂ« SGD qĂ« pĂ«rdorin impuls, shpejtĂ«si tĂ« adapTuar tĂ« tĂ« mĂ«suarit dhe metodĂ«n e Nesterovit. MegjithatĂ«, asnjĂ«ra prej tyre nuk ka njĂ« avantazh tĂ« qartĂ« as nĂ« efikasitetin e trajnimit dhe as nĂ« pĂ«rgjithshmĂ«rinĂ« (detaje kĂ«tu).

Regjistrimi — Ă«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 vlerat ekstreme tĂ« parametrave. Ky Ă«shtĂ« njĂ« mĂ«nyrĂ« pĂ«r tĂ« ulur variancĂ«n e modelit pa rritur ndjeshĂ«m parametra tĂ« tij. MĂ« shumĂ« informacione kĂ«tu.

Për të vlerësuar vetë gjithçka, është e nevojshme të çaktivizoni regularizimin dhe të kontrolloni gradientin e humbjes të dhënave vetë.

Dropout — njĂ« tjetĂ«r metodĂ« pĂ«r rregullimin e rrjetit tuaj pĂ«r tĂ« parandaluar mbingarkesĂ«n. GjatĂ« trajnimit, dropout kryhet vetĂ«m duke mbajtur aktiv njĂ« neuron me njĂ« probabilitet tĂ« caktuar p (hiperparametĂ«r) ose duke e vendosur ato 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Ă«sues, duke reduktuar variacionet e parametrave tĂ« caktuar qĂ« bĂ«hen dominues.

ËshtĂ« e rĂ«ndĂ«sishme: nĂ«se pĂ«rdorni si dropout ashtu edhe normalizimin e grupit, bĂ«ni kujdes me rendin e kĂ«tyre operacioneve ose madje me pĂ«rdorimin e tyre tĂ« pĂ«rbashkĂ«t. TĂ« gjitha kĂ«to ende diskutohen dhe plotĂ«sohen. Ja dy diskutime tĂ« rĂ«ndĂ«sishme nĂ« lidhje me kĂ«tĂ« nĂ« Stackoverflow dhe Arxiv.

Kontrolli i punës

Këtu bëhet fjalë për dokumentimin e proceseve të punës dhe eksperimenteve. Nëse nuk dokumentoni asgjë, mund të harroni, për shembull, cila është shpejtësia e të mësuarit ose pesha e klasave. Falë kontrollit, mund të shikoni dhe riprodhoni eksperimente të mëparshme pa probleme. Kjo ndihmon në reduktimin e eksperimenteve të përsëritura.

E vërtetë, dokumentimi manual mund të bëhet një detyrë e komplikuar në rast se ka një volum të madh pune. Këtu ndihmojnë mjete si Comet.ml, të cilat ndihmojnë në regjistrimin automatik të grupeve të të dhënave, ndryshimeve në kod, historisë së eksperimenteve dhe modeleve prodhuese, duke përfshirë informacione kyçe rreth modelit tuaj (hiperparametrat, treguesit e performancës së modelit dhe informacionin mbi ambientin).

Rrjeti nervor mund të jetë tepër i ndjeshëm ndaj ndryshimeve të vogla, dhe kjo do të çojë në rënie të performancës së modelit. Ndjekja dhe dokumentimi i punës janë hapat e parë që duhen ndërmarrë për të standardizuar ambientin dhe modelimin.

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

Shpresoj që ky post të jetë një pikënisje nga e cila do të filloni debugimin e rrjetit tuaj nervor.

Skillbox rekomandon:

Burimi: habr.com

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