
Koden för programvaruprodukter inom maskininlĂ€rning Ă€r ofta komplex och ganska förvirrande. Att upptĂ€cka och Ă„tgĂ€rda buggar i den Ă€r en resurskrĂ€vande uppgift. Ăven de enklaste krĂ€ver ett seriöst tillvĂ€gagĂ„ngssĂ€tt för nĂ€tverksarkitektur, viktinitialisering och optimering av nĂ€tverket. Ett litet misstag kan leda till oönskade problem.
Denna artikel Àgnas Ät algoritmen för felsökning av dina neurala nÀtverk.
Skillbox rekommenderar: Praktisk kurs .
PĂ„minnelse: för alla lĂ€sare av "Habr" â 10 000 rubel rabatt vid registrering för vilken kurs som helst pĂ„ Skillbox med rabattkoden "Habr".
Algoritmen bestÄr av fem steg:
- en enkel start;
- bekrÀftelse av förluster;
- kontroll av mellanresultat och kopplingar;
- diagnos av parametrar;
- övervakning av arbetet.
Om nÄgot verkar mer intressant Àn annat kan du gÀrna hoppa direkt till dessa avsnitt.
En enkel start
Att debugga ett neuralt nÀtverk med en komplex arkitektur, regularisering och inlÀrningshastighetsplan Àr svÄrare Àn för ett vanligt. Vi fuskar lite hÀr, eftersom sjÀlva punkten för felsökningsprocessen har ett indirekt samband, men det Àr ÀndÄ en viktig rekommendation.
En enkel start handlar om att skapa en förenklad modell och trÀna den pÄ en uppsÀttning (punkt) data.
Först skapar vi en förenklad modell
För snabb start skapar vi ett litet nÀtverk med ett enda dolt lager och kontrollerar att allt fungerar korrekt. DÀrefter komplicerar vi modellen gradvis, medan vi kontrollerar varje ny aspekt av dess struktur (ytterligare lager, parametrar osv.) och gÄr vidare.
Vi trÀnar modellen pÄ en enda uppsÀttning (punkt) data
Som en snabb kontroll av funktionaliteten i ditt projekt kan du anvÀnda en eller tvÄ datapunkter för att bekrÀfta att systemet fungerar korrekt. Det neurala nÀtverket bör visa 100% noggrannhet för trÀning och validering. Om detta inte Àr fallet, Àr modellen antingen för liten, eller sÄ finns det redan en bugg.
Ăven om allt ser bra ut, förbered modellen för att genomgĂ„ en eller flera epoker innan du gĂ„r vidare.
UtvÀrdering av förluster
UtvÀrdering av förluster Àr det primÀra sÀttet att precisera modellens prestanda. Du mÄste sÀkerstÀlla att förlusten Àr relevant för uppgiften och att förlustfunktionerna utvÀrderas pÄ rÀtt skala. Om du anvÀnder mer Àn en typ av förlust, se till att de alla Àr av samma ordning och korrekt skalade.
Det Ă€r viktigt att vara uppmĂ€rksam pĂ„ de inledande förlusterna. Kontrollera hur nĂ€ra det verkliga resultatet förvĂ€ntningarna ligger om modellen startade med en slumpmĂ€ssig gissning. I : "Se till att du fĂ„r det resultat du förvĂ€ntar dig nĂ€r du börjar arbeta med ett litet antal parametrar. Det Ă€r bĂ€ttre att omedelbart kontrollera dataloss (med en regelbundenhetsgrad pĂ„ noll). Till exempel, för CIFAR-10 med en Softmax-klassificerare förvĂ€ntar vi oss att de inledande förlusterna kommer att vara 2.302, eftersom den förvĂ€ntade diffusa sannolikheten Ă€r 0,1 för varje klass (eftersom det finns 10 klasser), och Softmax-förlusten Ă€r den negativa logaritmiska sannolikheten för den korrekta klassen som âln (0.1) = 2.302."
För det binĂ€ra exemplet görs helt enkelt en liknande berĂ€kning för varje klass. HĂ€r Ă€r till exempel data: 20 % 0:or och 80 % 1:or. Den förvĂ€ntade initiala förlusten skulle bli upp till â0,2ln (0,5) â0,8ln (0,5) = 0,693147. Om resultatet Ă€r större Ă€n 1 kan det indikera att neuronnĂ€tets vikter inte Ă€r ordentligt balanserade eller att data inte Ă€r normaliserade.
Vi kontrollerar mellanresultat och anslutningar
För att felsöka neuronnÀtverket Àr det nödvÀndigt att förstÄ dynamiken i processerna inuti nÀtverket och rollen för de enskilda mellanliggande lagren, eftersom de Àr kopplade. HÀr Àr vanliga fel som du kan stöta pÄ:
- felaktiga uttryck för uppdateringar av gradienterna;
- uppdateringar av vikter tillÀmpas inte;
- försvinnande eller exploderande gradienter (exploding gradients).
Om gradientvÀrdena Àr noll betyder det att inlÀrningshastigheten i optimeraren Àr för lÄg, eller att du har stött pÄ ett felaktigt uttryck för gradientuppdateringen.
Dessutom Àr det viktigt att övervaka vÀrdena för aktiveringsfunktioner, vikter och uppdateringar för varje lager. Till exempel ska storleken pÄ parameteruppdateringarna (vikter och bias) .
Det finns ett fenomen som kallas "Dying ReLU" eller , dÀr ReLU-neuron kommer att returnera noll efter att ha lÀrt sig ett stort negativt vÀrde (bias) för sina vikter. Dessa neuroner aktiveras aldrig igen nÄgonstans i datan.
Du kan anvÀnda gradientkontroll för att identifiera dessa fel genom att approximera gradienten med en numerisk metod. Om den Àr nÀra de berÀknade gradienterna sÄ har bakÄtriktad spridning implementerats korrekt. För att skapa en gradientkontroll, ta en titt pÄ dessa fantastiska resurser frÄn CS231 och , samt av Andrew Ng om detta Àmne.
ange tre huvudsakliga metoder för att visualisera neuronnÀtverken:
- Förhandsgranskningar â enkla metoder som visar oss den allmĂ€nna strukturen av den trĂ€nade modellen. De inkluderar utdataformer eller filter frĂ„n individuella lager av neuronnĂ€tet och parametrarna i varje lager.
- Aktiveringsbaserade. HÀr avkodas aktiveringar av individuella neuroner eller neurongrupper för att förstÄ deras funktioner.
- Gradientbaserade. Dessa metoder tenderar att manipulera de gradienter som bildas under fram- och bakÄtriktad spridning vid trÀning av modellen (inklusive betydelsekartor och aktiveringskartor för klasser).
Det finns flera anvÀndbara verktyg för att visualisera aktiveringar och kopplingar i individuella lager, till exempel och .

Parametrdiagnostik
NeuronnÀt har en mÀngd parametrar som interagerar med varandra, vilket komplicerar optimeringen. Egentligen Àr denna del föremÄl för aktiva forskningar av specialister, sÄ förslagen nedan bör ses som rÄd, utgÄngspunkter att utgÄ ifrÄn.
Batchstorlek (batch size) â det krĂ€vs att batchstorleken Ă€r tillrĂ€ckligt stor för att fĂ„ exakta bedömningar av gradientfelet, men tillrĂ€ckligt liten sĂ„ att stokastisk gradientnedstigning (SGD) kan ordna ditt nĂ€tverk. SmĂ„ batchstorlekar leder till snabb konvergens pĂ„ grund av brus i inlĂ€rningsprocessen och med tiden â svĂ„righeter med optimeringen. Mer om detta beskrivs .
InlĂ€rningshastighet â för lĂ„g kommer att leda till lĂ„ngsam konvergens eller risk för att fastna i lokala minimum. Samtidigt kommer en hög inlĂ€rningshastighet att orsaka divergens i optimeringen eftersom du riskerar att "hoppa över" en djup men smal del av förlustfunktionen. Försök att anvĂ€nda hastighetsplanering för att sĂ€nka den under processen av neuronnĂ€tetrĂ€ningen. I kursen CS231n .
Gradientklippningâ â klippning av gradienterna för parametrarna under bakĂ„tspridning enligt det maximala vĂ€rdet eller den grĂ€nsnorm som Ă€r faststĂ€lld. Detta Ă€r anvĂ€ndbart för att hantera problem med eventuella exploderande gradienter som du kan stöta pĂ„ i den tredje punkten.
Batchnormalisering â anvĂ€nds för att normalisera indata för varje lager, vilket löser problemet med inre kovariatförskjutning. Om du anvĂ€nder Dropout och Batchnorm tillsammans, .
Stokastisk gradientnedstigning (SGD) â det finns flera varianter av SGD som anvĂ€nder momentum, adaptiva inlĂ€rningshastigheter och Nesterovs metod. Ingen av dem har dock nĂ„got uppenbart försprĂ„ng nĂ€r det gĂ€ller inlĂ€rningseffektivitet eller generalisering ().
Regulering â Ă€r avgörande för att bygga en generaliserbar modell, eftersom den lĂ€gger till ett straff för komplexiteten hos modellen eller extrema vĂ€rden av parametrarna. Detta Ă€r ett sĂ€tt att minska modellens varians utan att betydligt öka dess bias. Mer .
För att sjÀlv kunna bedöma allt mÄste du stÀnga av regleringen och kontrollera gradienten av dataförlusten sjÀlv.
Dropout â Ă€r en annan metod för att ordna ditt nĂ€tverk för att förhindra överanpassning. Under trĂ€ningen utförs dropout endast genom att hĂ„lla neuronens aktivitet med en viss sannolikhet p (hyperparameter) eller sĂ€tta den till noll i motsatt fall. Resultatet Ă€r att nĂ€tverket mĂ„ste anvĂ€nda en annan delmĂ€ngd av parametrar för varje trĂ€ningsparti, vilket minskar förĂ€ndringen av vissa parametrar som blir dominerande.
Viktigt: om du anvÀnder bÄde dropout och batchnormalisering, var försiktig med ordningen pÄ dessa operationer eller till och med deras gemensamma anvÀndning. Allt detta diskuteras fortfarande aktivt och utvecklas. HÀr Àr tvÄ viktiga diskussioner om detta Àmne och .
ArbetstillstÄnd
Det handlar om att dokumentera arbetsflöden och experiment. Om man inte dokumenterar nÄgot kan man exempelvis glömma vilken inlÀrningshastighet eller vikter av klasser som anvÀnds. Tack vare kontrollen kan man enkelt översy vista och reproducera tidigare experiment. Detta minskar antalet duplicerade experiment.
Visserligen kan manuell dokumentation bli en svÄr uppgift nÀr det handlar om stora mÀngder arbete. HÀr kommer verktyg som Comet.ml till hjÀlp, som automatiskt loggar dataset, kodÀndringar, experimenthistorik och produktionsmodeller, inklusive nyckelinformation om din modell (hyperparametrar, prestandamÄtt och omgivningsinformation).
Neurala nÀtverk kan vara mycket kÀnsliga för smÄ förÀndringar, vilket kan leda till en försÀmring av modellens prestanda. Att spÄra och dokumentera arbetet Àr det första steget för att standardisera miljön och modelleringen.

Jag hoppas att detta inlÀgg kan bli en utgÄngspunkt för dig att börja felsöka ditt neurala nÀtverk.
Skillbox rekommenderar:
- TvÄÄrig praktisk kurs .
- Onlinekurs .
- Praktisk Ärskurs .
KĂ€lla: habr.com
