Puna me rrjetet nervore: lista kontrolluese për korrigjimin e gabimeve

Puna me rrjetet nervore: lista kontrolluese për korrigjimin e gabimeve

Kodi i produkteve softuerike të mësimit të makinerive është shpesh kompleks dhe mjaft konfuz. Zbulimi dhe eliminimi i defekteve në të është një detyrë intensive e burimeve. Edhe më e thjeshta rrjetet neurale të shtytjes kërkojnë një qasje serioze për arkitekturën e rrjetit, inicializimin e peshave dhe optimizimin e rrjetit. Një gabim i vogël mund të çojë në probleme të pakëndshme.

Ky artikull ka të bëjë me një algoritëm për korrigjimin e rrjeteve tuaja nervore.

Skillbox rekomandon: Kurse praktike Zhvilluesi i Python nga e para.

Kujtojmë: për të gjithë lexuesit e "Habr" - një zbritje prej 10 rubla kur regjistroheni në çdo kurs Skillbox duke përdorur kodin promovues "Habr".

Algoritmi përbëhet nga pesë faza:

  • fillim i lehtë;
  • konfirmimi i humbjeve;
  • kontrollimi i rezultateve dhe lidhjeve të ndërmjetme;
  • diagnostifikimi i parametrave;
  • kontrollin e punës.

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

Fillim i lehtë

Një rrjet nervor me një arkitekturë komplekse, rregullim dhe një programues të shkallës së të mësuarit është më i vështirë për tu korrigjuar sesa një i rregullt. Ne jemi pak të ndërlikuar këtu, pasi vetë pika lidhet indirekt me korrigjimin, por ky është ende një rekomandim i rëndësishëm.

Një fillim i thjeshtë është krijimi i një modeli të thjeshtuar dhe trajnimi i tij në një grup (pikë) të dhënash.

Së pari ne krijojmë një model të thjeshtuar

Për të filluar shpejt, ne krijojmë një rrjet të vogël me një shtresë të vetme të fshehur dhe kontrollojmë që gjithçka funksionon siç duhet. Më pas ne e ndërlikojmë gradualisht modelin, duke kontrolluar çdo aspekt të ri të strukturës së tij (shtresë shtesë, parametër, etj.) dhe vazhdojmë.

Ne trajnojmë modelin në një grup (pikë) të vetme të dhënash

Si një kontroll i shpejtë i shëndetit për projektin tuaj, mund të përdorni një ose dy pika të të dhënave të trajnimit për të konfirmuar nëse sistemi po funksionon siç duhet. Rrjeti nervor duhet të tregojë saktësi 100% në trajnim dhe testim. Nëse nuk është kështu, atëherë ose modeli është shumë i vogël ose tashmë keni një defekt.

Edhe nëse gjithçka është mirë, përgatitni modelin për një ose më shumë epoka përpara se të vazhdoni.

Vlerësimi i humbjes

Vlerësimi i humbjes është mënyra kryesore për të përmirësuar performancën e modelit. Duhet të siguroheni që humbja të jetë e përshtatshme për problemin dhe që funksionet e humbjes të vlerësohen në shkallën e duhur. Nëse përdorni më shumë se një lloj humbjeje, sigurohuni që të jenë të të njëjtit renditje dhe të shkallëzuara saktë.

Është e rëndësishme të jeni të vëmendshëm ndaj humbjeve fillestare. Kontrolloni sa afër është rezultati aktual me rezultatin e pritur nëse modeli filloi me një supozim të rastësishëm. NË Puna e Andrey Karpathy sugjeron si vijon:: “Sigurohuni që të merrni rezultatin që prisni kur filloni me një numër të vogël parametrash. Është më mirë të kontrolloni menjëherë humbjen e të dhënave (me shkallën e rregullimit të vendosur në zero). Për shembull, për CIFAR-10 me një klasifikues Softmax, ne presim që humbja fillestare të jetë 2.302 sepse probabiliteti i pritshëm i difuzionit është 0,1 për secilën klasë (pasi ka 10 klasa) dhe humbja e Softmax është probabiliteti log negativ i klasës së saktë. si − ln (0.1) = 2.302."

Për shembullin binar, thjesht bëhet një llogaritje e ngjashme për secilën nga klasat. Këtu, për shembull, janë të dhënat: 20% 0 dhe 80% 1. Humbja fillestare e pritshme do të jetë deri në –0,2ln (0,5) –0,8ln (0,5) = 0,693147. Nëse rezultati është më i madh se 1, mund të tregojë se peshat e rrjetit nervor nuk janë të balancuara siç duhet ose të dhënat nuk janë normalizuar.

Kontrollimi i rezultateve dhe lidhjeve të ndërmjetme

Për të korrigjuar një rrjet nervor, është e nevojshme të kuptohet dinamika e proceseve brenda rrjetit dhe roli i shtresave individuale të ndërmjetme ndërsa ato lidhen. Këtu janë gabimet e zakonshme që mund të hasni:

  • shprehje të pasakta për përditësimet e shkallës;
  • përditësimet e peshës nuk zbatohen;
  • gradientët shpërthyes.

Nëse vlerat e gradientit janë zero, kjo do të thotë që shkalla e të mësuarit në optimizues është shumë e ngadaltë, ose se po hasni një shprehje të gabuar për përditësimin e gradientit.

Përveç kësaj, është e nevojshme të monitorohen vlerat e funksioneve të aktivizimit, peshat dhe përditësimet e secilës prej shtresave. Për shembull, madhësia e përditësimeve të parametrave (peshat dhe paragjykimet) duhet të jetë 1-e3.

Ekziston një fenomen i quajtur "Dying ReLU" ose "problemi i gradientit në zhdukje", kur neuronet ReLU do të nxjerrin zero pasi të mësojnë një vlerë të madhe të paragjykimit negativ për peshat e tij. Këto neurone nuk janë ndezur më kurrë në asnjë pikë të të dhënave.

Ju mund të përdorni kontrollin e gradientit për të identifikuar këto gabime duke përafruar gradientin duke përdorur një qasje numerike. Nëse është afër gradientëve të llogaritur, atëherë përhapja e pasme është zbatuar saktë. Për të krijuar një kontroll gradient, shikoni këto burime të shkëlqyera nga CS231 këtu и këtuSi edhe mësim Andrew Nga në këtë temë.

Faizan Sheikh tregon tre metoda kryesore për vizualizimin e një rrjeti nervor:

  • Paraprakisht janë metoda të thjeshta që na tregojnë strukturën e përgjithshme të modelit të trajnuar. Këto përfshijnë daljen e formave ose filtrave të shtresave individuale të rrjetit nervor dhe parametrave brenda çdo shtrese.
  • Bazuar në aktivizim. Në to, ne deshifrojmë aktivizimet e neuroneve individuale ose grupeve të neuroneve për të kuptuar funksionet e tyre.
  • Në bazë të gradientëve. Këto metoda tentojnë të manipulojnë gradientët që formohen nga kalimet përpara dhe prapa të trajnimit të modelit (duke përfshirë hartat e spikaturave dhe hartat e aktivizimit të klasave).

Ka disa mjete të dobishme për vizualizimin e aktivizimeve dhe lidhjeve të shtresave individuale, p.sh. KonX и Tensorboard.

Puna me rrjetet nervore: lista kontrolluese për korrigjimin e gabimeve

Diagnostifikimi i parametrave

Rrjetet nervore kanë shumë parametra që ndërveprojnë me njëri-tjetrin, gjë që e ndërlikon optimizimin. Në fakt, ky seksion është objekt i një kërkimi aktiv nga specialistë, ndaj sugjerimet e mëposhtme duhet të konsiderohen vetëm si këshilla, pikënisje nga të cilat mund të ndërtohet.

Madhësia e paketës (madhësia e grupit) - Nëse dëshironi që madhësia e grupit të jetë mjaft e madhe për të marrë vlerësime të sakta të gradientit të gabimeve, por mjaft e vogël që zbritja e gradientit stokastik (SGD) të rregullojë rrjetin tuaj. Përmasat e vogla të grupeve do të çojnë në konvergjencë të shpejtë për shkak të zhurmës gjatë procesit të trajnimit dhe më pas në vështirësitë e optimizimit. Kjo përshkruhet më në detaje këtu.

Shkalla e të mësuarit - shumë i ulët do të çojë në një konvergjencë të ngadaltë ose në rrezikun e ngecjes në minimumet lokale. Në të njëjtën kohë, një shkallë e lartë e të mësuarit do të shkaktojë divergjencë optimizimi sepse rrezikoni të kaloni nëpër pjesën e thellë por të ngushtë të funksionit të humbjes. Provoni të përdorni planifikimin e shpejtësisë për ta zvogëluar atë gjatë trajnimit të rrjetit nervor. I përditësuar me CS231n ka një seksion të madh kushtuar këtij problemi.

Prerje gradient  — zvogëlimi i gradientëve të parametrave gjatë përhapjes së prapme në vlerën maksimale ose normën margjinale. E dobishme për zgjidhjen e problemeve të çdo gradienti shpërthyes që mund të hasni në pikën tre.

Normalizimi i grupit - përdoret për të normalizuar të dhënat hyrëse të çdo shtrese, gjë që na lejon të zgjidhim problemin e zhvendosjes së brendshme të kovariateve. Nëse po përdorni Dropout dhe Batch Norma së bashku, shikoni këtë artikull.

Zbritja stokastike e gradientit (SGD) - ka disa lloje të SGD që përdorin vrullin, normat e të mësuarit adaptues dhe metodën Nesterov. Megjithatë, asnjëri prej tyre nuk ka një avantazh të qartë si për sa i përket efikasitetit të të nxënit ashtu edhe përgjithësimit (detaje këtu).

Rregullimi - është thelbësore për ndërtimin e një modeli të përgjithësueshëm, pasi shton një dënim për kompleksitetin e modelit ose vlerat ekstreme të parametrave. Kjo është një mënyrë për të reduktuar variancën e modelit pa rritur ndjeshëm paragjykimet e tij. Më shumë informacione të hollësishme - këtu.

Për të vlerësuar gjithçka vetë, duhet të çaktivizoni rregullimin dhe të kontrolloni vetë gradientin e humbjes së të dhënave.

Braktisja e shkollës është një metodë tjetër për të thjeshtuar rrjetin tuaj për të parandaluar bllokimin. Gjatë stërvitjes, braktisja kryhet vetëm duke ruajtur aktivitetin e neuronit me një probabilitet të caktuar p (hiperparametër) ose duke e vendosur atë në zero në rastin e kundërt. Si rezultat, rrjeti duhet të përdorë një nëngrup të ndryshëm parametrash për çdo grup trajnimi, gjë që redukton ndryshimet në disa parametra që bëhen dominues.

E rëndësishme: Nëse përdorni normalizimin e braktisjes dhe të grupit, jini të kujdesshëm për rendin e këtyre operacioneve apo edhe përdorimin e tyre së bashku. E gjithë kjo është ende duke u diskutuar dhe plotësuar në mënyrë aktive. Këtu janë dy diskutime të rëndësishme për këtë temë në Stackoverflow и Arkivi.

Kontrolli i punës

Bëhet fjalë për dokumentimin e rrjedhave të punës dhe eksperimenteve. Nëse nuk dokumentoni asgjë, mund të harroni, për shembull, çfarë norme mësimi ose peshat e klasës janë përdorur. Falë kontrollit, mund të shikoni dhe riprodhoni lehtësisht eksperimentet e mëparshme. Kjo ju lejon të zvogëloni numrin e eksperimenteve të dyfishta.

Sidoqoftë, dokumentacioni manual mund të bëhet një detyrë e vështirë në rastin e një vëllimi të madh pune. Këtu hyjnë mjete si Comet.ml për t'ju ndihmuar të regjistroni automatikisht grupet e të dhënave, ndryshimet e kodit, historinë eksperimentale dhe modelet e prodhimit, duke përfshirë informacionin kryesor rreth modelit tuaj (hiperparametrat, matjet e performancës së modelit dhe informacionin mjedisor).

Një rrjet nervor mund të jetë shumë i ndjeshëm ndaj ndryshimeve të vogla dhe kjo do të çojë në një rënie të performancës së modelit. Ndjekja dhe dokumentimi i punës suaj është hapi i parë që mund të ndërmerrni për të standardizuar mjedisin dhe modelimin tuaj.

Puna me rrjetet nervore: lista kontrolluese për korrigjimin e gabimeve

Shpresoj se ky postim mund të jetë një pikënisje për ju që të filloni të korrigjoni rrjetin tuaj nervor.

Skillbox rekomandon:

Burimi: www.habr.com

Shto një koment