Sidst opdateret den 17. december 2019
Når du træner neurale netværk, er dit mål at producere en model, der performer rigtig godt.
Det giver god mening, da der ikke er nogen mening med at bruge en model, der ikke performer.
Der er dog en forholdsvis snæver balance, som du skal opretholde, når du forsøger at finde en perfekt velfungerende model.
Det er balancen mellem underfitting og overfitting.
For at undgå underfitting (at have dårligere forudsigelsespræstationer end muligt) kan du fortsætte med at træne, indtil du oplever det andet problem – overfitting, a.k.a. at være for følsom over for dine træningsdata. Begge dele hæmmer modellens ydeevne.
I nogle tilfælde er det område, inden for hvilket din model hverken er under- eller overtilpasset, virkelig lille. Heldigvis kan det udvides ved at anvende en såkaldt regularizer – en teknik, der regulerer, hvordan din model opfører sig under træningen, for at udskyde overtilpasning i et stykke tid.
Dropout er en sådan regulariseringsteknik. I dette blogindlæg dækker vi den, ved at tage et kig på et par ting. For det første dykker vi mere detaljeret ned i forskellen mellem underfitting og overfitting, så vi får en dybere forståelse af de to. For det andet introducerer vi Dropout baseret på akademiske arbejder og fortæller, hvordan det fungerer. For det tredje tager vi et kig på, om det virkelig virker, ved at beskrive de forskellige eksperimenter, der er udført med denne teknik. Til sidst vil vi sammenligne traditionel Dropout med Gaussian Dropout – og hvordan det ændrer træningen af din model.
Er du klar? Let’s go! 😎
- Hvor godt klarer din model sig? Underfitting og overfitting
- Lad os holde en pause i et øjeblik! 👩💻
- Hvad er Dropout, og hvordan virker det?
- Bernoulli-variabler
- Mis aldrig nye artikler om maskinlæring ✅
- Hvorfor kan Dropout reducere overfitting?
- Træning af neurale net med Dropout
- Funktionerer dropout faktisk? Eksperimentelle resultater
- Dropout vs. no dropout på standard-datasæt
- Slut dig til hundredvis af andre lærere! 😎
- Dropout vs. ingen dropout med andre regularizers
- Hvornår virker Dropout bedst? Om Dropout rate og datasætstørrelse
- Hvad er den bedste værdi for \(p\)?
- Hvordan klarer Dropout sig med hensyn til datasætstørrelse?
- Vi hjælper dig med maskinlæring! 🧠
- Gaussian Dropout: Vi husker fra ovenfor, at Dropout fungerer med Bernoulli-variabler, som tager 1 med sandsynligheden \(p\) og 0 med resten, hvilket er \(1 – p\).
- Summary
- 💡 Behersk din ML – tjek også disse indlæg:
Hvor godt klarer din model sig? Underfitting og overfitting
Lad os først tage et kig på, hvad underfitting og overfitting er.
Når du starter træningsprocessen, initialiseres vægtene for dine neuroner sandsynligvis tilfældigt eller med en anden initialiseringsstrategi. Det betyder, at fejlprocenten, eller tabsværdien, vil være meget høj i løbet af de første par epokeringer. Tag et kig på dette diagram, hvor tabet falder meget hurtigt i løbet af de første par epoker:
Når både træningstabet og valideringen falder, siges modellen at være underfit: den kan stadig trænes til at lave bedre forudsigelser, dvs. til at vinde i sin forudsigelseskraft.
Den handling, der skal iværksættes, er så at fortsætte træningen.
Dette kan dog ikke fortsætte for evigt. Optimering af en model indebærer generering af valideringsprædiktioner med dine valideringsdata, hvilket resulterer i tabsværdier og gradienter til optimering, som derefter udføres. Desværre betyder dette, at nogle af ideosynkratierne i dataene lækker ind i modelvægtene. Det vil sige, at da dataene er en stikprøve i stedet for en fuld population, er de altid lidt anderledes end den fulde population, de repræsenterer. Når du optimerer modellen i hundreder af epoker med disse data, vil du altid få en forskydning i forhold til denne sande population.
Hvis du ville fortsætte træningen, ville din model tilpasse sig mere og mere til disse ideosynkrasier, hvilket gør den mindre egnet til data, som den aldrig har set før – dvs. andre prøver fra populationen. Man siger så, at modellen er overfit: den er for veltilpasset til trænings- og valideringsdataene.
Lad os holde en pause i et øjeblik! 👩💻
Vi sender e-mails mindst hver fredag. Velkommen!
Ved at tilmelde dig giver du dit samtykke til, at alle oplysninger, du modtager, kan omfatte tjenester og særlige tilbud via e-mail.
Overfitting kan påvises på diagrammer som det ovenstående ved at inspicere valideringstabet: Når det stiger igen, mens træningstabet forbliver konstant eller falder, ved du, at din model er ved at overfitte. Som du kan se, er det ELU-drevne netværk i ovenstående plot begyndt at overfitte meget lidt.
Både underfitting og overfitting skal undgås, da din model vil præstere dårligere, end den teoretisk set kunne præstere. Heldigvis kan visse teknikker – kaldet regularizers – bruges til at reducere virkningen af overfitting. Dropout er en af dem – og vi vil dække den i denne blog. Lad os begynde med at analysere, hvad Dropout er, hvad det gør, og hvordan det virker.
Hvad er Dropout, og hvordan virker det?
I deres artikel “Dropout: A Simple Way to Prevent Neural Networks from Overfitting” beskriver Srivastava et al. (2014) Dropout-teknikken, som er en stokastisk reguleringsteknik og skulle reducere overfitting ved (teoretisk set) at kombinere mange forskellige neurale netværksarkitekturer.
Med Dropout dropper træningsprocessen i det væsentlige neuroner i et neuralt netværk ud. De fjernes midlertidigt fra netværket, hvilket kan visualiseres på følgende måde:
Bemærk, at forbindelserne eller synapserne også fjernes, og at der derfor ikke længere strømmer data gennem disse neuroner.
….men kun meget kortvarigt! Denne proces gentages hver epoke (eller endda hver minibatch! – Srivastava et al. 2014), og prøvetagning af udtyndede netværk sker derfor meget ofte. Dette skulle føre til betydeligt lavere generaliseringsfejlrater (dvs. overfitting), da “tilstedeværelsen af neuroner gøres upålidelig” (Srivastava et al., 2014).
Denne fjernelse af neuroner og synapser under træningen udføres tilfældigt med en parameter \(p\), der kan indstilles (eller, i betragtning af empiriske tests, bedst indstilles til 0,5 for skjulte lag og tæt på 1,0 for indgangslaget). Dette betyder i praksis, at det “udtyndede” netværk ifølge forfatterne udtages fra den globale arkitektur og anvendes til træning.
På testtidspunktet “er det ikke muligt at foretage en eksplicit gennemsnitlig beregning af forudsigelserne fra eksponentielt mange udtyndede modeller” (Srivastava et al., 2014). Det er sandt: Det ville blive en beregningsmæssig byrde, når hundredtusindvis af epochs/minibatches skal gennemsnitliggøres, især når netværkene bliver rigtig store.
Der er heldigvis en løsning – som er enkel, men som giver det samme resultat. Ved at bruge ét neuralt netværk, hvor vægtudgangene skaleres ned i forhold til den \(p\), som en enhed blev bevaret med under træningen. Dette betyder, at det forventede output på træningstidspunktet er det samme som det sande output på testtidspunktet, hvilket løser det beregningsmæssige problem og gør Dropout anvendelig i praksis.
Bernoulli-variabler
Lad os nu se på, hvordan Dropout fungerer matematisk. Bare rolig, vi begraver dig ikke med matematik, men i stedet vil vi forsøge at tage et meget intuitivt synspunkt.
Svært forenklet sagt er det sådan, at en neuron modtager sit input: f.eks. sender tre opstrøms neuroner i et tæt lag med tre neuroner deres output til det næste lag, hvor det modtages som input. Bemærk, at vi for enkelhedens skyld udelader bias-værdierne her.
Det er meget enkelt at gå herfra til et Dropout-neuron, som ser således ud:
Matematisk set drejer det sig om såkaldte Bernoulli-tilfældsvariable:
I sandsynlighedsregning og statistik er Bernoulli-fordelingen, opkaldt efter den schweiziske matematiker Jacob Bernoulli, den diskrete sandsynlighedsfordeling af en tilfældig variabel, der antager værdien 1 med sandsynligheden \(p\).
Wikipedia om Bernoulli-fordelingen
For at skabe Dropout knyttede Srivastava et al. (2014) Bernoulli-variabler til netværkets neuroner (ved at multiplicere dem med neurale output), “som hver især har sandsynlighed \(p\) for at være 1″. \(p\)-værdien er her valgt af maskinlæringsingeniøren, normalt baseret på et eller andet valideringssæt eller naivt sat til 0,5.
Mis aldrig nye artikler om maskinlæring ✅
Vi sender e-mails mindst hver fredag. Velkommen!
Ved at tilmelde dig giver du dit samtykke til, at alle oplysninger, du modtager, kan omfatte tjenester og særlige tilbud via e-mail.
Inden for netværket bestemmer Bernoulli-variablen og dens værdi 1 eller 0, om en neuron “droppes ud” i løbet af denne epok eller minibatch feedforward-operation. Dette fører i realiteten til det “udtyndede netværk”, som Srivastava et al. (2014) taler om.
Hvorfor kan Dropout reducere overfitting?
Du undrer dig måske nu: Hvorfor reducerer Bernoulli-variabler, der er knyttet til almindelige neurale netværk, hvilket gør netværket tyndere, overfitting?
For at få svar på dette spørgsmål skal vi se på, hvordan neurale netværk trænes.
Overordnet anvendes backpropagation og gradient descent eller en lignende optimizer til dette formål. På baggrund af en tabsværdi beregnes såkaldte “gradienter”, som optimereren derefter bearbejder i netværkets vægte. Ved at bruge disse gradienter (i forhold til fejlprocenten) til at ændre vægtene, præsterer netværket sandsynligvis lidt bedre i den næste iteration af træningsprocessen.
Beregningen af gradienten sker i forhold til fejlen, men også i forhold til, hvad alle andre enheder gør (Srivastava et al., 2014). Det betyder, at visse neuroner gennem ændringer i deres vægte kan rette op på andre neuroners fejltagelser. Disse, hævder Srivastava et al. (2014), fører til komplekse co-adaptationer, der måske ikke kan generaliseres til usete data, hvilket resulterer i overfitting.
Dropout forhindrer altså disse co-adaptationer ved – som vi skrev før – at gøre tilstedeværelsen af andre skjulte upålidelige. Neuroner kan simpelthen ikke regne med, at andre enheder retter deres fejl, hvilket reducerer antallet af co-adaptationer, der ikke generaliseres til usete data, og dermed formodentlig også reducerer overfitting.
Træning af neurale net med Dropout
Træning af neurale net, hvor Dropout er blevet knyttet til, er stort set lig med træning af neurale net uden Dropout. Stokastisk gradientafstigning eller lignende optimeringsværktøjer kan anvendes. Den eneste forskel, som rapporteret af Srivastava et al. (2014), kan findes ved brug af en minibatch-tilgang: i stedet for pr. epok samples udtyndede netværk pr. minibatch.
Dertil kommer, at metoder, der forbedrer klassisk SGD – som momentum – også kan anvendes, og viser lignende forbedringer som med almindelige neurale netværk (Srivastava et al, 2014).
Det, som forfatterne også fandt nyttigt under træningen, er at anvende max-norm regulering, hvilket betyder, at normen for den indgående vægt begrænses til at være begrænset af en vis maksimal værdi \(c\). Denne værdi skal fastsættes af ingeniøren på forhånd og bestemmes ved hjælp af et valideringssæt (Srivastava et al, 2014).
Kombination af Dropout med max-norm regularisering forbedrer ydeevnen i forhold til at bruge Dropout alene, men forfatterne rapporterede endnu bedre resultater, når Dropout og max-norm regularisering kombineres med to andre ting:
- Store, aftagende indlæringshastigheder.
- Højt momentum.
I henhold til Srivastava et al. (2014) kan dette muligvis begrundes med følgende argumenter:
- Tilbageholdende vægtvektorer gør det muligt at bruge store indlæringsrater uden at eksplodere vægte.
- Dropout-støj plus store indlæringshastigheder hjælper derefter optimisatorer “til at udforske forskellige regioner af vægtrummet, som ellers ville have været vanskelige at nå”.
- Den faldende indlæringshastighed bremser derefter udforskningsprocessens springende karakter og “sætter sig til sidst fast i et minimum”.
- Højt momentum gør det muligt for netværket at overvinde lokale minima, hvilket øger sandsynligheden for, at det globale minimum findes.
Funktionerer dropout faktisk? Eksperimentelle resultater
Med enhver forbedring inden for maskinlæring er det rart at have en teoretisk forbedring – men det er også vigtigt at teste, om det virkelig virker. Srivastava et al. (2014) udførte flere tests for at finde ud af, om Dropout virker. For det første brugte de forskellige standarddatasæt (f.eks. MNIST-datasættet) til at teste, om Dropout forbedrer modellens ydeevne på tværs af en lang række klassifikationsproblemer.
For det andet undersøgte de, hvordan det fungerede med en række andre regulatorer (hvilket gav den indsigt, at max-norm regularisering sammen med Dropout fungerer bedst – men lad os se nærmere på disse resultater senere), og for det tredje undersøgte Srivastava et al. (2014), hvilke dropout-rater (dvs, hvilken parameter \(p\)) fungerer bedst, og hvordan datastørrelse påvirker Dropout-præstationen. Lad os tage et kig!
Dropout vs. no dropout på standard-datasæt
Forfatterne testede Dropout vs. No Dropout på disse standard-datasæt (Srivastava et al, 2014):
- Datasættet MNIST, som indeholder tusindvis af håndskrevne tal;
- Datasættet TIMIT speech benchmark datasæt til ren talegenkendelse.
- Datasættene CIFAR-10 og CIFAR-100, som indeholder små naturlige billeder i 10 og 100 klasser.
- Datasættet Street View House Numbers (SVHN), med billeder af husnumre indsamlet fra Google Street View.
- Datasættet ImageNet, som indeholder mange naturlige billeder.
- Datasættet Reuters RCV1 newswire articles. Dette er et tekstdatasæt snarere end et billeddatasæt.
For alle datasæt forbedrede Dropout modellens generaliseringsevne. På MNIST kunne der rapporteres drastisk forskellige testfejl, med væsentlige forbedringer for alle de forskellige arkitekturer, der blev testet.
Slut dig til hundredvis af andre lærere! 😎
Vi sender e-mails mindst hver fredag. Velkommen!
Ved at tilmelde dig giver du dit samtykke til, at alle oplysninger, du modtager, kan omfatte tjenester og særlige tilbud via e-mail.
Dropout overgår også almindelige neurale netværk på ConvNets trænet på CIFAR-100, CIFAR-100 og ImageNet-datasættene.
For SVHN-datasættet kunne der rapporteres en anden interessant observation: Når Dropout anvendes på det konvolutionelle lag, øges ydelsen også. Ifølge forfatterne er dette interessant, fordi disse lag tidligere blev antaget ikke at være følsomme over for overpasning, fordi de ikke har mange parametre (Srivastava et al., 2014). Der argumenteres for, at tilføjelse af Dropout til Conv-lagene giver støjende input til de Dense-lag, der følger efter dem, hvilket forhindrer dem yderligere i at overfitte.
Endeligt virker Dropout på TIMIT-talebenchmark-datasættene og Reuters RCV1-datasættet, men her var forbedringen meget mindre sammenlignet med vision- og taledatasættene.
Dropout vs. ingen dropout med andre regularizers
Nu da forfatterne vidste, at Dropout skalerer godt på tværs af en række maskinlæringsproblemer, undersøgte de det yderligere: Hvordan klarer det sig i forhold til andre regularizers?
Flere regularizermetoder blev testet for at forhindre overfitting:
- L2 vægtforfald;
- Lasso;
- KL sparsity;
- Max-norm regularization.
Srivastava et al. (2014) fandt, at når Dropout kombineres med max-norm regularization, giver det endnu lavere generaliseringsfejl. Faktisk gav det den laveste fejl, der blev rapporteret, efterfulgt – med en vis afstand – af Dropout + L2-regularisering og til sidst de andre.
Derfor kan det, når Dropout anvendes, også være en god idé at udføre max-norm regularisering samtidig.
Hvornår virker Dropout bedst? Om Dropout rate og datasætstørrelse
Et andet spørgsmål, som man forsøgte at besvare: Har Dropout rate (dvs. parameteren \(p\)) og/eller datasætstørrelse indflydelse på Dropouts ydeevne og de neurale netværk, som det er knyttet til?
Spørgsmålet må besvares med ja.
Hvad er den bedste værdi for \(p\)?
Først parameteren \(p\). Vi kan nu huske, at den kan indstilles, og at den faktisk skal indstilles på forhånd af maskinlæringsingeniøren. Det faktum, at den er indstillelig, fører til de samme fejl, som grunden til, at faste indlæringsrater ikke er en god idé: man ved simpelthen ikke, hvilken \(p\) der passer bedst til dataene.
Derfor, hævder forfatterne, skal valget af en værdi for \(p\) ske ved nogle indledende tests med et valideringssæt.
Det gjorde de også – for at se, om der kunne findes interessante mønstre.
Og de fandt et sådant mønster: På tværs af flere scenarier synes en værdi af \(p \(p \ ca. 0,5\) for de skjulte lag at resultere i den bedste ydeevne, når man anvender Dropout (Srivastava et al, 2014). Dette gælder for alle lag undtagen inputlaget, hvor \(p\) skal være \(\(\ ca. 1,0\). Sidstnævnte er formentlig tilfældet, fordi inputlaget tager inputdata, og det er svært at finde mønstre, når data droppes tilfældigt.
Hvordan klarer Dropout sig med hensyn til datasætstørrelse?
Ifølge forfatterne gør en “god regularizer det muligt at få en god generaliseringsfejl fra modeller med et stort antal parametre trænet på små datasæt”. Det vil sige, at den klarer sig rigtig godt på data, den ikke har set før – selv når den er trænet med små data.
For at finde ud af, om Dropout regulerer godt på tværs af forskellige datasætstørrelser, udførte Srivastava et al. (2014) tests med forskellige størrelser på MNIST-datasættet. Størrelserne var som følger: “100, 500, 1K, 5K, 10K og 50K udvalgt tilfældigt fra MNIST-træningssættet” (Srivastava et al., 2014).
Vi hjælper dig med maskinlæring! 🧠
Vi sender e-mails mindst hver fredag. Velkommen!
Ved at tilmelde dig giver du dit samtykke til, at alle oplysninger, du modtager, kan omfatte tjenester og særlige tilbud via e-mail.
Forfatterne fandt ud af, at der er en afvejning mellem, hvornår Dropout er nødvendigt, og hvornår det ikke længere er nyttigt. For det første for at dække det tilfælde, hvor datasættet er ekstremt lille: Selv Dropout forbedrer ikke ydeevnen i det tilfælde, simpelthen fordi datasættets størrelse er for lille. Det samme gælder for datasæt, der er store nok: Dropout forbedrer da ikke længere modellen, men modelpræstationen bliver snarere dårligere.
Der findes således et sweet spot, hvor Dropout er nødvendigt, og hvor det er smart ikke at bruge det (eller at øge datasætstørrelsen). Ifølge Srivastava et al. (2014) findes der ingen heuristik til at bestemme denne størrelse; den skal snarere bestemmes med et valideringssæt.
Gaussian Dropout: Vi husker fra ovenfor, at Dropout fungerer med Bernoulli-variabler, som tager 1 med sandsynligheden \(p\) og 0 med resten, hvilket er \(1 – p\).
Denne idé kan generaliseres til at multiplicere aktiveringerne med tilfældige variabler fra andre fordelinger (Srivastava et al., 2014). I deres arbejde fandt Srivastava et al. at den Gaussiske fordeling og dermed Gaussiske variabler fungerer lige så godt – og måske endda bedre.
Anvendelse af Gaussiske variabler kan gøres på en lignende måde: udtynding af netværk på træningstidspunktet og anvendelse af vægtede aktiveringer på test- og produktionstidspunktet (som med almindelig Dropout). Forfatterne vælger dog at anvende Gaussian Dropout anderledes – dvs. multiplikativt. I stedet for udtynding og vægtning vægtes Gaussian Dropout på træningstidspunktet, hvor aktiverede værdier, der ikke er droppet, multipliceres med \(1/p\) i stedet for \(1\) (med almindelig Bernoulli Dropout). De ændres ikke på testtidspunktet. Dette svarer til det tidligere scenarie.
Gaussian Dropout skal konfigureres med nogle \(\sigma\), som i Srivastava et al.’s eksperimenter blev sat til \(\(\sqrt{(1-p)/p}\), hvor \(p\) er konfigurationen af Bernoulli-varianten (dvs, i naive tilfælde \(p \ ca. 0,5\) for skjulte lag og \(\ ca. 1,0\) for indgangslaget).
Summary
I dette blogindlæg så vi på overfitting – og hvordan man undgår det, med Dropout. Ved at se på, hvad det er, hvordan det virker, og at det virker, fandt vi ud af, at det er en interessant teknik til anvendelse i dine deep learning-modeller.
Jeg håber, at du har lært noget i dag – noget nyttigt til dine ML-modeller 😀 Hvis du gjorde, eller når du har spørgsmål, så tøv ikke med at efterlade en kommentar nedenfor ⬇! Når det er muligt, vil jeg besvare dine spørgsmål 😊
Tak for at du læste MachineCurve i dag og god teknik! 😎
Srivastava, N., Hinton, G., Krizhevsky, A., Sutskever, I., & Salakhutdinov, R. (2014, June 15). Dropout: A Simple Way to Prevent Neural Networks from Overfitting. Hentet fra http://jmlr.org/papers/v15/srivastava14a.html
Wikipedia. (2003, 20. marts). Bernoulli-fordeling. Hentet fra https://en.wikipedia.org/wiki/Bernoulli_distribution