Werk met neurale netwerke: kontrolelys vir ontfouting

Werk met neurale netwerke: kontrolelys vir ontfouting

Die kode van masjienleer-sagtewareprodukte is dikwels kompleks en redelik verwarrend. Die opsporing en uitskakeling van foute daarin is 'n hulpbron-intensiewe taak. Selfs die eenvoudigste voorwaartse neurale netwerke vereis 'n ernstige benadering tot netwerkargitektuur, inisialisering van gewigte en netwerkoptimalisering. ’n Klein foutjie kan tot onaangename probleme lei.

Hierdie artikel handel oor 'n algoritme om jou neurale netwerke te ontfout.

Skillbox beveel aan: Praktiese kursus Python-ontwikkelaar van nuuts af.

Ons herinner: vir alle lesers van "Habr" - 'n afslag van 10 000 roebels wanneer u inskryf vir enige Skillbox-kursus met behulp van die "Habr"-promosiekode.

Die algoritme bestaan ​​uit vyf fases:

  • maklike begin;
  • bevestiging van verliese;
  • kontrolering van tussenresultate en verbindings;
  • parameter diagnostiek;
  • beheer van werk.

As iets vir jou interessanter lyk as die res, kan jy dadelik na hierdie afdelings oorslaan.

Maklike begin

'n Neurale netwerk met 'n komplekse argitektuur, regularisering en 'n leertempo-skeduleerder is moeiliker om te ontfout as 'n gewone een. Ons is 'n bietjie lastig hier, aangesien die punt self indirek verband hou met ontfouting, maar dit is steeds 'n belangrike aanbeveling.

'n Eenvoudige begin is om 'n vereenvoudigde model te skep en dit op een stel (punt) data op te lei.

Eerstens skep ons 'n vereenvoudigde model

Om vinnig te begin, skep ons 'n klein netwerk met 'n enkele versteekte laag en kyk of alles reg werk. Dan kompliseer ons die model geleidelik, kontroleer elke nuwe aspek van sy struktuur (bykomende laag, parameter, ens.), En gaan aan.

Ons lei die model op 'n enkele stel (punt) data

As 'n vinnige gesonde verstandkontrole vir jou projek, kan jy een of twee opleidingsdatapunte gebruik om te bevestig of die stelsel reg werk. Die neurale netwerk moet 100% akkuraatheid toon in opleiding en toetsing. As dit nie die geval is nie, dan is óf die model te klein óf jy het reeds 'n fout.

Selfs al is alles goed, berei die model voor vir een of meer tydperke voordat jy verder gaan.

Verlies assessering

Verliesskatting is die belangrikste manier om die model se prestasie te verfyn. U moet verseker dat die verlies gepas is vir die probleem en dat die verliesfunksies op die korrekte skaal gegradeer word. As jy meer as een verliestipe gebruik, maak seker dat hulle almal van dieselfde orde is en korrek geskaal is.

Dit is belangrik om aandag te gee aan aanvanklike verliese. Kyk hoe naby die werklike resultaat aan die verwagte resultaat is as die model met 'n ewekansige raaiskoot begin het. IN Andrey Karpathy se werk stel die volgende voor:: “Maak seker jy kry die resultaat wat jy verwag wanneer jy met 'n klein aantal parameters begin. Dit is beter om die dataverlies onmiddellik na te gaan (met die mate van regularisering op nul gestel). Byvoorbeeld, vir CIFAR-10 met 'n Softmax-klassifiseerder, verwag ons dat die aanvanklike verlies 2.302 sal wees omdat die verwagte diffuse waarskynlikheid 0,1 vir elke klas is (aangesien daar 10 klasse is) en die Softmax-verlies die negatiewe log-waarskynlikheid van die korrekte klas is as − ln (0.1) = 2.302.”

Vir die binêre voorbeeld word 'n soortgelyke berekening eenvoudig vir elk van die klasse gemaak. Hier is byvoorbeeld die data: 20% 0'e en 80% 1'e. Die verwagte aanvanklike verlies sal tot -0,2ln (0,5) -0,8ln (0,5) = 0,693147 wees. As die resultaat groter as 1 is, kan dit aandui dat die neurale netwerkgewigte nie behoorlik gebalanseer is nie of dat die data nie genormaliseer is nie.

Kontroleer tussenresultate en verbindings

Om 'n neurale netwerk te ontfout, is dit nodig om die dinamika van prosesse binne die netwerk te verstaan ​​en die rol van individuele intermediêre lae soos hulle verbind is. Hier is die algemene foute wat u kan teëkom:

  • verkeerde uitdrukkings vir graadopdaterings;
  • gewigopdaterings word nie toegepas nie;
  • ontplofende gradiënte.

As die gradiëntwaardes nul is, beteken dit dat die leertempo in die optimeerder te stadig is, of dat u 'n verkeerde uitdrukking teëkom vir die opdatering van die gradiënt.

Daarbenewens is dit nodig om die waardes van die aktiveringsfunksies, gewigte en opdaterings van elk van die lae te monitor. Byvoorbeeld, die omvang van parameteropdaterings (gewigte en vooroordele) moet 1-e3 wees.

Daar is 'n verskynsel genaamd "Dying ReLU" of "verdwynende gradiënt probleem", wanneer ReLU neurone nul sal uitvoer nadat hulle 'n groot negatiewe vooroordeelwaarde vir sy gewigte geleer het. Hierdie neurone word nooit weer op enige punt in die data afgevuur nie.

Jy kan gradiëntkontrolering gebruik om hierdie foute te identifiseer deur die gradiënt te benader deur 'n numeriese benadering te gebruik. As dit naby die berekende gradiënte is, is terugpropagasie korrek geïmplementeer. Om 'n gradiëntkontrole te skep, kyk na hierdie wonderlike hulpbronne van CS231 hier и hierSowel as les Andrew Nga oor hierdie onderwerp.

Faizan Sheikh dui drie hoofmetodes aan om 'n neurale netwerk te visualiseer:

  • Voorlopige is eenvoudige metodes wat ons die algemene struktuur van die opgeleide model wys. Dit sluit in die uitset van vorms of filters van die individuele lae van die neurale netwerk en die parameters binne elke laag.
  • Aktivering gebaseer. Daarin ontsyfer ons die aktiverings van individuele neurone of groepe neurone om hul funksies te verstaan.
  • Gebaseer op gradiënte. Hierdie metodes is geneig om gradiënte te manipuleer wat gevorm word uit die voorwaartse en agterwaartse pas van modelopleiding (insluitend opvallende kaarte en klasaktiveringskaarte).

Daar is verskeie nuttige hulpmiddels om die aktiverings en verbindings van individuele lae te visualiseer, bv. ConX и Tensorbord.

Werk met neurale netwerke: kontrolelys vir ontfouting

Parameter diagnostiek

Neurale netwerke het baie parameters wat met mekaar in wisselwerking is, wat optimalisering bemoeilik. Eintlik is hierdie afdeling die onderwerp van aktiewe navorsing deur spesialiste, so die voorstelle hieronder moet slegs beskou word as advies, beginpunte waaruit voortgebou kan word.

Pakkie grootte (joernaalgrootte) - As jy wil hê dat die bondelgrootte groot genoeg moet wees om akkurate foutgradiëntskattings te kry, maar klein genoeg vir stogastiese gradiëntafkoms (SGD) om jou netwerk te reguleer. Klein bondelgroottes sal lei tot vinnige konvergensie as gevolg van geraas tydens die opleidingsproses en gevolglik tot optimaliseringsprobleme. Dit word in meer besonderhede beskryf hier.

Leertempo - te laag sal lei tot stadige konvergensie of die risiko om in plaaslike minima vas te sit. Terselfdertyd sal 'n hoë leertempo optimaliseringsverskil veroorsaak omdat jy die risiko loop om deur die diep maar nou deel van die verliesfunksie te spring. Probeer spoedskedulering gebruik om dit te verminder terwyl jy die neurale netwerk oefen. Op datum met CS231n daar is 'n groot afdeling wat aan hierdie probleem gewy is.

Gradiëntknipsel  — sny parametergradiënte tydens terugpropagasie teen die maksimum waarde of marginale norm. Nuttig om enige ontploffende gradiënte wat jy in punt drie mag teëkom, op te los.

Batch normalisering - gebruik om die insetdata van elke laag te normaliseer, wat ons in staat stel om die probleem van interne kovariaatverskuiwing op te los. As jy Dropout en Batch Norma saam gebruik, kyk na hierdie artikel.

Stogastiese gradiënt afkoms (SGD) - daar is verskeie variëteite van SGD wat momentum, aanpasbare leertempo en die Nesterov-metode gebruik. Nie een van hulle het egter 'n duidelike voordeel in terme van beide leerdoeltreffendheid en veralgemening nie (besonderhede hier).

Regulering - is van kardinale belang vir die bou van 'n veralgemeenbare model, aangesien dit 'n boete byvoeg vir modelkompleksiteit of uiterste parameterwaardes. Dit is 'n manier om modelvariansie te verminder sonder om sy vooroordeel aansienlik te verhoog. Meer gedetailleerde inligting - hier.

Om alles self te evalueer, moet jy regulasie deaktiveer en self die dataverliesgradiënt nagaan.

Op skop is nog 'n metode om jou netwerk te stroomlyn om opeenhoping te voorkom. Tydens opleiding word uitval slegs uitgevoer deur die aktiwiteit van die neuron met 'n sekere waarskynlikheid p (hiperparameter) te handhaaf of in die teenoorgestelde geval op nul te stel. As gevolg hiervan moet die netwerk 'n ander subset van parameters vir elke opleidingsgroep gebruik, wat veranderinge in sekere parameters wat dominant word, verminder.

Belangrik: As jy beide uitval- en bondelnormalisering gebruik, wees versigtig oor die volgorde van hierdie bewerkings of selfs om hulle saam te gebruik. Dit alles word nog aktief bespreek en aangevul. Hier is twee belangrike besprekings oor hierdie onderwerp op Stackoverflow и arXiv.

Beheer van werk

Dit gaan oor die dokumentasie van werkstrome en eksperimente. As jy niks dokumenteer nie, kan jy byvoorbeeld vergeet watter leertempo of klasgewigte gebruik word. Danksy beheer kan u vorige eksperimente maklik bekyk en reproduseer. Dit laat jou toe om die aantal duplikaat-eksperimente te verminder.

Handdokumentasie kan egter 'n moeilike taak word in die geval van 'n groot volume werk. Dit is waar nutsmiddels soos Comet.ml inkom om jou te help om datastelle, kodeveranderings, eksperimentele geskiedenis en produksiemodelle outomaties aan te teken, insluitend sleutelinligting oor jou model (hiperparameters, modelprestasiemaatstawwe en omgewingsinligting).

'n Neurale netwerk kan baie sensitief wees vir klein veranderinge, en dit sal lei tot 'n daling in modelprestasie. Om jou werk na te spoor en te dokumenteer is die eerste stap wat jy kan neem om jou omgewing en modellering te standaardiseer.

Werk met neurale netwerke: kontrolelys vir ontfouting

Ek hoop hierdie pos kan 'n beginpunt wees vir jou om jou neurale netwerk te begin ontfout.

Skillbox beveel aan:

Bron: will.com

Voeg 'n opmerking