Wurkje mei neurale netwurken: checklist foar debuggen

Wurkje mei neurale netwurken: checklist foar debuggen

De koade fan softwareprodukten foar masine-learen is faak kompleks en frij betiizjend. It opspoaren en eliminearjen fan bugs dêryn is in boarne-yntinsive taak. Sels de ienfâldichste feedforward neurale netwurken fereaskje in serieuze oanpak fan netwurk arsjitektuer, inisjalisaasje fan gewichten, en netwurk optimalisaasje. In lytse flater kin liede ta onaangename problemen.

Dit artikel giet oer in algoritme foar it debuggen fan jo neurale netwurken.

Skillbox advisearret: Praktyske kursus Python-ûntwikkelder fanôf it begjin.

Wy herinnerje: foar alle lêzers fan "Habr" - in koarting fan 10 roebel by it ynskriuwen fan in Skillbox-kursus mei de promoasjekoade "Habr".

It algoritme bestiet út fiif stadia:

  • maklike start;
  • befêstiging fan ferliezen;
  • kontrolearje tusken resultaten en ferbinings;
  • parameter diagnoaze;
  • kontrôle fan wurk.

As jo ​​wat ynteressanter liket as de rest, kinne jo fuortendaliks nei dizze seksjes oerslaan.

Maklik begjin

In neuraal netwurk mei in komplekse arsjitektuer, regularisaasje en in planner foar learraten is dreger te debuggen dan in gewoane. Wy binne hjir in bytsje lestich, om't it punt sels yndirekt relatearre is oan debuggen, mar dit is noch altyd in wichtige oanbefelling.

In ienfâldige start is om in ferienfâldige model te meitsjen en it op ien set (punt) fan gegevens te trenen.

Earst meitsje wy in ferienfâldige model

Om fluch te begjinnen, meitsje wy in lyts netwurk mei ien ferburgen laach en kontrolearje dat alles goed wurket. Dan komplisearje wy it model stadichoan, kontrolearje elk nij aspekt fan syn struktuer (ekstra laach, parameter, ensfh.), En gean fierder.

Wy traine it model op ien set (punt) fan gegevens

As in flugge sûnenskontrôle foar jo projekt kinne jo ien of twa trainingsgegevenspunten brûke om te befestigjen oft it systeem goed wurket. It neurale netwurk moat 100% krektens sjen litte yn training en testen. As dit net it gefal is, dan is it model te lyts of jo hawwe al in brek.

Sels as alles goed is, meitsje it model foar ien of mear epoken foar foardat jo trochgean.

Ferlies beoardieling

Skatting fan ferlies is de wichtichste manier om de prestaasjes fan it model te ferfine. Jo moatte soargje dat it ferlies passend is foar it probleem en dat de ferliesfunksjes wurde beoardiele op 'e juste skaal. As jo ​​​​mear as ien ferliestype brûke, soargje derfoar dat se allegear fan deselde folchoarder binne en korrekt skale.

It is wichtich om omtinken te jaan oan earste ferlies. Kontrolearje hoe ticht it eigentlike resultaat is by it ferwachte resultaat as it model begon mei in willekeurige ried. YN Andrey Karpathy's wurk suggerearret it folgjende:: "Soargje derfoar dat jo it resultaat krije dat jo ferwachtsje as jo begjinne mei in lyts oantal parameters. It is better om daliks it gegevensferlies te kontrolearjen (mei de graad fan regularisaasje ynsteld op nul). Bygelyks, foar CIFAR-10 mei in Softmax-klassifikaasje, ferwachtsje wy dat it earste ferlies 2.302 is, om't de ferwachte diffuse kâns 0,1 is foar elke klasse (om't d'r 10 klassen binne) en it Softmax-ferlies is de negative log-wierskynlikheid fan 'e juste klasse as − ln (0.1) = 2.302.”

Foar it binêre foarbyld wurdt in ferlykbere berekkening gewoan makke foar elk fan 'e klassen. Hjir binne bygelyks de gegevens: 20% 0's en 80% 1's. It ferwachte initial ferlies sil oant -0,2ln (0,5) -0,8ln (0,5) = 0,693147 wêze. As it resultaat grutter is as 1, kin it oanjaan dat de gewichten fan it neuronale netwurk net goed balansearre binne of de gegevens net normalisearre binne.

Kontrolearje tusken resultaten en ferbiningen

Om in neural netwurk te debuggen, is it nedich om de dynamyk fan prosessen binnen it netwurk te begripen en de rol fan yndividuele tuskenlagen as se ferbûn binne. Hjir binne de mienskiplike flaters dy't jo kinne tsjinkomme:

  • ferkearde útdrukkingen foar gradle updates;
  • gewicht updates wurde net tapast;
  • eksplodearjende hellingen.

As de gradientwearden nul binne, betsjut dit dat de learsnelheid yn 'e optimizer te stadich is, of dat jo in ferkearde útdrukking tsjinkomme foar it bywurkjen fan de gradient.

Derneist is it nedich om de wearden fan 'e aktivearringsfunksjes, gewichten en updates fan elk fan' e lagen te kontrolearjen. Bygelyks, de omfang fan parameterupdates (gewichten en foaroardielen) moat 1-e3.

Der is in fenomeen neamd "Dying ReLU" of "probleem mei ferdwining gradient", as ReLU neuroanen nul sille útfiere nei it learen fan in grutte negative biaswearde foar har gewichten. Dizze neuroanen wurde nea wer ûntslein op elk punt yn 'e gegevens.

Jo kinne gradientkontrôle brûke om dizze flaters te identifisearjen troch de gradient te benaderjen mei in numerike oanpak. As it tichtby de berekkene gradiënten is, dan waard backpropagation korrekt útfierd. Om in gradientkontrôle te meitsjen, besjoch dizze geweldige boarnen fan CS231 hjir и hjiren ek mei les Andrew Nga oer dit ûnderwerp.

Faizan Sheikh jout trije haadmetoaden oan foar it visualisearjen fan in neural netwurk:

  • Foarrieden binne ienfâldige metoaden dy't ús de algemiene struktuer fan it oplaat model sjen litte. Dizze omfetsje de útfier fan foarmen as filters fan 'e yndividuele lagen fan it neurale netwurk en de parameters binnen elke laach.
  • Aktivearring basearre. Yn har ûntsiferje wy de aktivaasjes fan yndividuele neuroanen as groepen neuroanen om har funksjes te begripen.
  • Op grûn fan gradiënten. Dizze metoaden hawwe de neiging om gradiënten te manipulearjen dy't wurde foarme út 'e foarút en efterút passes fan modeltraining (ynklusyf saliency-kaarten en klasse-aktivearringskaarten).

D'r binne ferskate nuttige ark foar it fisualisearjen fan de aktivearrings en ferbiningen fan yndividuele lagen, bgl. ConX и Tensorboard.

Wurkje mei neurale netwurken: checklist foar debuggen

Parameter diagnostyk

Neurale netwurken hawwe in protte parameters dy't mei-inoar ynteraksje, wat optimisaasje komplisearret. Eins is dizze seksje it ûnderwerp fan aktyf ûndersyk troch spesjalisten, dus de suggestjes hjirûnder moatte allinich beskôge wurde as advys, útgongspunten wêrfan te bouwen.

Pakket grutte (batchgrutte) - As jo ​​​​wolle dat de batchgrutte grut genôch is om krekte flatergradientskattingen te krijen, mar lyts genôch foar stochastic gradient descent (SGD) om jo netwurk te regulearjen. Lytse batchgrutte sil liede ta rappe konverginsje troch lûd tidens it trainingsproses en dêrnei ta optimisaasjeproblemen. Dit wurdt yn mear detail beskreaun hjir.

Learning rate - te leech sil liede ta trage konverginsje of it risiko om fêst te sitten yn lokale minima. Tagelyk, in hege learen taryf sil feroarsaakje optimalisaasje divergence omdat jo it risiko springe troch de djippe, mar smelle diel fan it ferlies funksje. Besykje snelheidsplanning te brûken om it te ferminderjen by it trainen fan it neurale netwurk. Bywurke mei CS231n der is in grutte seksje wijd oan dit probleem.

Gradient knipsel  - trimmen fan parametergradiënten by efterpropagaasje op 'e maksimale wearde as marginale noarm. Nuttich foar it oplossen fan alle eksplodearjende hellingen dy't jo kinne tsjinkomme yn punt trije.

Batch normalisearring - brûkt om de ynfiergegevens fan elke laach te normalisearjen, wêrtroch wy it probleem kinne oplosse fan ynterne kovariateferskowing. As jo ​​​​Dropout en Batch Norma tegearre brûke, besjoch dit artikel.

Stochastic gradient descent (SGD) - d'r binne ferskate farianten fan SGD dy't momentum, adaptive learraten en de Nesterov-metoade brûke. Net ien fan har hat lykwols in dúdlik foardiel yn termen fan sawol leareffisjinsje as generalisaasje (details hjir).

Regularisaasje - is krúsjaal foar it bouwen fan in generalisearber model, om't it in straf foeget foar modelkompleksiteit of ekstreme parameterwearden. Dit is in manier om modelfariânsje te ferminderjen sûnder har foaroardielen signifikant te fergrutsjen. Mear detaillearre ynformaasje - hjir.

Om alles sels te evaluearjen, moatte jo regularisaasje útskeakelje en de gradient fan gegevensferlies sels kontrolearje.

Útfalle is in oare metoade om jo netwurk te streamlynjen om oerlêst te foarkommen. Tidens training wurdt drop-out allinich útfierd troch it behâld fan 'e aktiviteit fan' e neuron mei in bepaalde kâns p (hyperparameter) of set it op nul yn it tsjinoerstelde gefal. As resultaat moat it netwurk in oare subset fan parameters brûke foar elke trainingsbatch, wat feroaringen yn bepaalde parameters ferminderet dy't dominant wurde.

Wichtich: As jo ​​sawol dropout as batchnormalisaasje brûke, wês dan foarsichtich oer de folchoarder fan dizze operaasjes of brûke se sels tegearre. Dit alles wurdt noch aktyf besprutsen en oanfolle. Hjir binne twa wichtige diskusjes oer dit ûnderwerp op Stackoverflow и argyf.

Kontrôle fan wurk

It giet oer it dokumintearjen fan workflows en eksperiminten. As jo ​​neat dokumintearje, kinne jo bygelyks ferjitte hokker learsnelheid of klassegewichten wurde brûkt. Mei tank oan kontrôle kinne jo eardere eksperiminten maklik besjen en reprodusearje. Hjirmei kinne jo it oantal dûbele eksperiminten ferminderje.

Hânlieding dokumintaasje kin lykwols in drege taak wurde yn it gefal fan in grut folume fan wurk. Dit is wêr't ark lykas Comet.ml ynkomt om jo te helpen automatysk gegevenssets, koadewizigingen, eksperimintele skiednis en produksjemodellen te loggen, ynklusyf wichtige ynformaasje oer jo model (hyperparameters, modelprestaasjesmetriken en miljeu-ynformaasje).

In neural netwurk kin wêze hiel gefoelich foar lytse feroarings, en dit sil liede ta in drop yn model prestaasjes. It folgjen en dokumintearjen fan jo wurk is de earste stap dy't jo kinne nimme om jo omjouwing en modellering te standardisearjen.

Wurkje mei neurale netwurken: checklist foar debuggen

Ik hoopje dat dizze post in útgongspunt kin wêze foar jo om te begjinnen mei debuggen fan jo neuronale netwurk.

Skillbox advisearret:

Boarne: www.habr.com

Add a comment