Wat is Dropout? Verminder overfitting in uw neurale netwerken

Laatst bijgewerkt op 17 december 2019

Bij het trainen van neurale netwerken is het uw doel om een model te produceren dat echt goed presteert.

Dit is volkomen logisch, want het heeft geen zin om een model te gebruiken dat niet presteert.

Echter, er is een relatief smalle balans die u zult moeten handhaven wanneer u probeert een perfect goed presterend model te vinden.

Het is de balans tussen underfitting en overfitting.

Om underfitting (het hebben van slechter dan mogelijke voorspellende prestaties) te voorkomen, kunt u blijven trainen, totdat u het andere probleem ervaart – overfitting, a.k.a. te gevoelig zijn voor uw trainingsgegevens. Beide hinderen de prestaties van het model.

Soms is het bereik waarin uw model noch underfit noch overfit is erg klein. Gelukkig kan het worden uitgebreid door een zogenaamde regularizer toe te passen – een techniek die het gedrag van uw model tijdens de training regulariseert, zodat overfitting enige tijd wordt uitgesteld.

Dropout is zo’n regularisatietechniek. In deze blogpost behandelen we het, door een aantal zaken onder de loep te nemen. Ten eerste duiken we in meer detail in het verschil tussen underfitting en overfitting, zodat we een dieper begrip van de twee krijgen. Ten tweede introduceren we Dropout op basis van academisch werk en vertellen we hoe het werkt. Ten derde bekijken we of het echt werkt, door de verschillende experimenten te beschrijven die met deze techniek zijn gedaan. Tenslotte zullen we traditionele Dropout vergelijken met Gaussian Dropout – en hoe het trainen van je model verandert.

Klaar? We gaan ervoor! 😎

Hoe goed doet uw model het? Underfitting en overfitting

Laten we eerst eens kijken wat underfitting en overfitting zijn.

Bij het begin van het trainingsproces worden de gewichten van uw neuronen waarschijnlijk willekeurig of met een andere initialisatiestrategie geïnitialiseerd. Dit betekent dat het foutenpercentage, of de verlieswaarde, gedurende de eerste paar tijdperken zeer hoog zal zijn. Kijk maar eens naar dit diagram, waarin het verlies de eerste tijd zeer snel afneemt:

Wanneer zowel het trainingsverlies als de validatie afnemen, is er sprake van een underfit: het model kan nog worden getraind om betere voorspellingen te doen, d.w.z. om aan voorspellend vermogen te winnen.

De te ondernemen actie is dan om te blijven trainen.

Dit kan echter niet eeuwig zo doorgaan. Bij het optimaliseren van een model genereer je validatievoorspellingen met je validatiegegevens, wat resulteert in verlieswaarden en gradiënten voor de optimalisatie, die dan wordt uitgevoerd. Helaas betekent dit dat sommige ideosyncrasieën van de gegevens in de modelgewichten worden gelekt. Dat wil zeggen, aangezien de gegevens een steekproef zijn in plaats van een volledige populatie, verschillen zij altijd lichtjes van de volledige populatie die zij vertegenwoordigen. Wanneer u het model gedurende honderden tijdperken met deze gegevens optimaliseert, krijgt u altijd een afwijking ten opzichte van deze ware populatie.

Als u doorgaat met trainen, past uw model zich steeds meer aan die ideosyncrasieën aan, waardoor het minder geschikt wordt voor gegevens die het nog nooit eerder heeft gezien – dat wil zeggen, andere steekproeven uit de populatie. Men zegt dan dat het model overgefit is: het is te goed aangepast aan de trainings- en validatiegegevens.

Laten we even pauzeren! 👩💻

Blogs bij MachineCurve onderwijzen Machine Learning voor Ontwikkelaars. Meld u vandaag nog aan voor de gratis Machine Learning-update van MachineCurve! U zult nieuwe dingen leren en concepten die u al kent beter begrijpen.
We sturen ten minste elke vrijdag een e-mail. Welkom!

Door u aan te melden, stemt u ermee in dat alle informatie die u ontvangt, diensten en speciale aanbiedingen per e-mail kan bevatten.

Overfitting kan worden gedetecteerd op plots zoals die hierboven door het validatieverlies te inspecteren: wanneer het weer stijgt, terwijl het trainingsverlies constant blijft of daalt, weet je dat je model aan het overfitten is. Zoals u kunt zien, is het ELU powered netwerk in de bovenstaande plot begonnen met een zeer lichte overfitting.

Zowel underfitting als overfitting moeten worden vermeden, want uw model zal slechter presteren dan het theoretisch zou kunnen. Gelukkig kunnen bepaalde technieken – regularizers genoemd – worden gebruikt om de gevolgen van overfitting te beperken. Dropout is er daar een van – en we zullen die in deze blog behandelen. Laten we beginnen met te analyseren wat Dropout is, wat het doet en hoe het werkt.

Wat is Dropout en hoe werkt het?

In hun paper “Dropout: A Simple Way to Prevent Neural Networks from Overfitting”, beschrijven Srivastava et al. (2014) de Dropout-techniek, die een stochastische regularisatietechniek is en overfitting zou moeten verminderen door (theoretisch) veel verschillende neurale netwerkarchitecturen te combineren.

Met Dropout laat het trainingsproces in wezen neuronen in een neuraal netwerk vallen. Ze worden tijdelijk uit het netwerk verwijderd, wat als volgt kan worden gevisualiseerd:

Merk op dat de verbindingen of synapsen ook worden verwijderd, en dat er dus geen gegevens meer door deze neuronen stromen.

…maar slechts heel kort! Dit proces herhaalt zich elke epoch (of zelfs elke minibatch! – Srivastava et al. 2014) en dus gebeurt het bemonsteren van uitgedunde netwerken heel vaak. Dit zou moeten leiden tot aanzienlijk lagere generalisatiefoutpercentages (d.w.z. overfitting), aangezien “de aanwezigheid van neuronen onbetrouwbaar wordt gemaakt” (Srivastava et al., 2014).

Deze verwijdering van neuronen en synapsen tijdens de training wordt willekeurig uitgevoerd, met een parameter die afstembaar is (of, gezien empirische tests, het best kan worden ingesteld op 0,5 voor verborgen lagen en dicht bij 1,0 voor de inputlaag). Dit betekent effectief dat, volgens de auteurs, het “verdunde” netwerk wordt bemonsterd uit de globale architectuur, en wordt gebruikt voor training.

Tijdens het testen, “is het niet haalbaar om expliciet het gemiddelde te nemen van de voorspellingen van exponentieel veel verdunde modellen” (Srivastava et al., 2014). Dat is waar: het zou een computationele last worden wanneer honderdduizenden epochs/minibatches moeten worden gemiddeld, vooral wanneer netwerken echt groot worden.

Gelukkig is er een oplossing – die eenvoudig is, maar hetzelfde resultaat oplevert. Door gebruik te maken van één neuraal netwerk, waarbij de gewichtoutputs naar beneden worden geschaald volgens de waarde waarmee een eenheid tijdens de training werd behouden. Dit betekent dat de verwachte output op de trainingstijd hetzelfde is als de ware output op de testtijd, waardoor het rekenkundige probleem is opgelost en Dropout in de praktijk bruikbaar is.

Bernoulli variabelen

Laten we nu eens kijken hoe Dropout wiskundig werkt. Maak je geen zorgen, we begraven je niet met wiskunde, maar in plaats daarvan zullen we proberen een zeer intuïtief standpunt in te nemen.

Zeer simplistisch is dit hoe een neuron zijn input ontvangt: bijv. drie stroomopwaartse neuronen in een drie-neuron Dense laag sturen hun output naar de volgende laag, waar het als input wordt ontvangen. Merk op dat we omwille van de eenvoud de biaswaarden hier weglaten.

Normaal neuron (aangenomen zonder bias)

Het is heel eenvoudig om van hieruit naar een Dropout neuron te gaan, dat er als volgt uitziet:

Dropout neuron (aangenomen zonder bias)

Mathematisch gaat het hier om zogenaamde Bernoulli toevalsvariabelen:

In de waarschijnlijkheidsrekening en de statistiek is de Bernoulli verdeling, genoemd naar de Zwitserse wiskundige Jacob Bernoulli, de discrete kansverdeling van een willekeurige variabele die de waarde 1 aanneemt met waarschijnlijkheid \(p).

Wikipedia over de Bernoulli verdeling

Om Dropout te creëren, bevestigden Srivastava et al. (2014) Bernoulli variabelen aan de neuronen van het netwerk (door ze te vermenigvuldigen met neurale outputs), “elk van die waarschijnlijkheid \(p\) om 1″ te zijn. De waarde wordt hier gekozen door de machine learning engineer, meestal op basis van een validatieset, of naïef ingesteld op 0,5.

Nooit meer nieuwe Machine Learning artikelen missen ✅

Blogs bij MachineCurve leren Machine Learning voor Developers. Meld u vandaag nog aan voor de gratis Machine Learning-update van MachineCurve! U zult nieuwe dingen leren en concepten die u al kent beter begrijpen.
We sturen ten minste elke vrijdag een e-mail. Welkom!

Door u aan te melden, stemt u ermee in dat alle informatie die u ontvangt, diensten en speciale aanbiedingen per e-mail kan bevatten.

In het netwerk bepaalt de Bernoulli variabele en zijn waarde van 1 of 0 of een neuron tijdens deze epoch of minibatch feedforward operatie wordt “afgezet”. Dit leidt in feite tot het ‘verdunde netwerk’ waar Srivastava et al. (2014) het over hebben.

Waarom zou Dropout overfitting kunnen verminderen?

Je vraagt je nu misschien af: waarom vermindert overfitting door Bernoulli variabelen die aan reguliere neurale netwerken zijn gekoppeld, waardoor het netwerk dunner wordt?

Voor het antwoord op deze vraag zullen we moeten kijken naar hoe neurale netwerken worden getraind.

In de regel wordt hiervoor backpropagation en gradient descent of een soortgelijke optimizer gebruikt. Gegeven een verlieswaarde worden zogenaamde “gradiënten” berekend die de optimizer vervolgens verwerkt in de gewichten van het netwerk. Door deze gradiënten (ten opzichte van de foutwaarde) te gebruiken om de gewichten te veranderen, presteert het netwerk waarschijnlijk iets beter tijdens de volgende iteratie van het trainingsproces.

Het berekenen van de gradiënt wordt gedaan ten opzichte van de foutwaarde, maar ook ten opzichte van wat alle andere eenheden doen (Srivastava et al., 2014). Dit betekent dat bepaalde neuronen, door veranderingen in hun gewichten, de fouten van andere neuronen kunnen herstellen. Deze, zo betogen Srivastava et al. (2014), leiden tot complexe co-adaptaties die mogelijk niet generaliseren naar ongeziene data, resulterend in overfitting.

Dropout, dan, voorkomt deze co-adaptaties door – zoals we eerder schreven – de aanwezigheid van andere verborgen onbetrouwbaar te maken. Neuronen kunnen eenvoudigweg niet vertrouwen op andere eenheden om hun fouten te corrigeren, waardoor het aantal co-adaptaties dat niet generaliseert naar ongeziene gegevens afneemt, en dus vermoedelijk ook overfitting vermindert.

Het trainen van neurale netwerken met Dropout

Het trainen van neurale netwerken waaraan Dropout is gekoppeld, is vrijwel gelijk aan het trainen van neurale netwerken zonder Dropout. Stochastische gradiëntafdaling of soortgelijke optimizers kunnen worden gebruikt. Het enige verschil, zoals gerapporteerd door Srivastava et al. (2014), is te vinden bij het gebruik van een mini-batch aanpak: in plaats van per epoch, worden uitgedunde netwerken bemonsterd per minibatch.

Daarnaast kunnen ook methoden worden gebruikt die klassieke SGD verbeteren – zoals momentum – en laten vergelijkbare verbeteringen zien als met reguliere neurale netwerken (Srivastava et al., 2014).

Wat de auteurs ook nuttig vonden tijdens de training is het toepassen van max-norm regularisatie, wat betekent dat de norm van het inkomende gewicht wordt beperkt tot een of andere maximumwaarde. Deze waarde moet vooraf door de ingenieur worden vastgesteld, en worden bepaald met behulp van een validatieset (Srivastava et al, 2014).

Combinatie van Dropout met max-norm regularisatie verbetert de prestaties in vergelijking met het gebruik van Dropout alleen, maar de auteurs rapporteerden nog betere resultaten wanneer Dropout en max-norm regularisatie worden gecombineerd met twee andere dingen:

  • Grote, afnemende leersnelheden.
  • Hoog momentum.

Volgens Srivastava et al. (2014) kan dit mogelijk worden gerechtvaardigd met de volgende argumenten:

  1. Constraining van gewichtsvectoren maakt het mogelijk om grote leersnelheden te gebruiken zonder exploderende gewichten.
  2. Dropout-ruis plus grote leersnelheden helpen optimizers dan “om verschillende regio’s van de gewichtsruimte te verkennen die anders moeilijk te bereiken zouden zijn”.
  3. Daling van de leersnelheid vertraagt dan de sprongsnelheid van het exploratieproces, waardoor het zich uiteindelijk “in een minimum nestelt”.
  4. Een hoog momentum stelt het netwerk in staat om lokale minima te overwinnen, waardoor de kans toeneemt dat het globale minimum wordt gevonden.

Werkt dropout eigenlijk wel? Experimentele resultaten

Met elke verbetering in machine learning, is het leuk om een theoretische verbetering te hebben – maar het is ook belangrijk om te testen of het echt werkt. Srivastava et al. (2014) voerden meerdere tests uit om erachter te komen of Dropout werkt. Ten eerste gebruikten ze verschillende standaard datasets (zoals de MNIST dataset) om te testen of Dropout de prestaties van het model verbetert over een breed scala aan classificatieproblemen.

Ten tweede controleerden ze hoe het presteerde met een verscheidenheid aan andere regularizers (wat het inzicht opleverde dat max-norm regularisatie samen met Dropout het beste werkt – maar laten we deze resultaten later in meer detail bekijken), en ten derde onderzochten Srivastava et al. (2014) welke uitvalpercentages (d.w.z, welke parameter het beste werkt en hoe de datagrootte de uitvalprestaties beïnvloedt. Laten we eens kijken!

Samples uit de MNIST-dataset

Dropout vs geen dropout op standaard datasets

De auteurs testten Dropout vs geen dropout op deze standaard datasets (Srivastava et al., 2014):

  • De MNIST-dataset, die duizenden handgeschreven cijfers bevat;
  • De TIMIT-spraakbenchmarkdataset voor schone spraakherkenning.
  • De CIFAR-10- en CIFAR-100-datasets, die minuscule natuurlijke afbeeldingen in 10 en 100 klassen bevatten.
  • De Street View House Numbers (SVHN) dataset, met afbeeldingen van huisnummers verzameld van Google Street View.
  • De ImageNet dataset, die veel natuurlijke afbeeldingen bevat.
  • De Reuters RCV1 newswire articles dataset. Dit is eerder een tekstdataset dan een beelddataset.
Stalen uit de CIFAR10-dataset

Voor alle datasets verbeterde Dropout de generalisatiekracht van het model. Op MNIST konden drastisch verschillende testfouten worden gerapporteerd, met aanzienlijke verbeteringen voor alle verschillende architecturen die werden getest.

Sluit u aan bij honderden andere leerders! 😎

Blogs bij MachineCurve onderwijzen Machine Learning voor Ontwikkelaars. Meld u vandaag nog aan voor de gratis Machine Learning-update van MachineCurve! U zult nieuwe dingen leren en concepten die u al kent beter begrijpen.
We sturen ten minste elke vrijdag een e-mail. Welkom!

Door u aan te melden, stemt u ermee in dat alle informatie die u ontvangt, diensten en speciale aanbiedingen per e-mail kan bevatten.

Dropout presteert ook beter dan reguliere neurale netwerken op de ConvNets die zijn getraind op CIFAR-100, CIFAR-100 en de ImageNet-datasets.

Voor de SVHN-dataset kan nog een interessante observatie worden gemeld: wanneer Dropout wordt toegepast op de convolutionele laag, nemen de prestaties ook toe. Volgens de auteurs is dit interessant, omdat eerder werd aangenomen dat deze lagen niet gevoelig zijn voor overfitting omdat ze niet veel parameters hebben (Srivastava et al., 2014). Er wordt betoogd dat het toevoegen van Dropout aan de Conv-lagen ruisrijke ingangen oplevert voor de Dense-lagen die erop volgen, waardoor ze verder niet overfitten.

Finitief werkt Dropout op de TIMIT-spraakbenchmarkdatasets en de Reuters RCV1-dataset, maar hier was de verbetering veel kleiner in vergelijking met de vision- en spraakdatasets.

Dropout vs geen dropout met andere regularizers

Nu de auteurs wisten dat Dropout goed schaalt over een verscheidenheid aan machine learning problemen, onderzochten ze het verder: hoe presteert het ten opzichte van andere regularizers?

Verschillende regularizermethoden werden getest om overfitting te voorkomen:

  • L2-gewichtsverval;
  • Lasso;
  • KL-sparsity;
  • Max-norm regularisatie.

Srivastava et al. (2014) ontdekten dat wanneer het wordt gecombineerd met max-norm regularisatie, Dropout nog lagere generalisatiefouten geeft. In feite leverde het de laagste gerapporteerde fout op, gevolgd – op enige afstand – door Dropout + L2-regularisatie, en ten slotte de anderen.

Hence, when applying Dropout, it might also be a good idea to perform max-norm regularization at the same time.

When does Dropout work best? Over Dropout rate en Dataset size

Een andere vraag die men probeerde te beantwoorden: heeft de dropout rate (d.w.z. de parameter \(p\)) en/of de dataset size invloed op de prestaties van Dropout en de neurale netwerken waaraan het is gekoppeld?

De vraag moet met ja worden beantwoord.

Wat is de beste waarde voor \(p\)?

Eerst de parameter \(p\). We kunnen ons nu herinneren dat deze afstelbaar is, en in feite van te voren moet worden ingesteld door de ingenieur van het machinaal leren. Het feit dat hij instelbaar is leidt tot dezelfde fouten als waarom vaste leersnelheden geen goed idee zijn: je weet gewoon niet welke parameter het beste bij de gegevens past.

Daarom, zo stellen de auteurs, moet de keuze van een waarde voor de parameter p worden gemaakt door een aantal eerste tests met een validatieset.

Dat hebben zij ook gedaan – om te zien of er interessante patronen konden worden gevonden.

En ze hebben zo’n patroon gevonden: over meerdere scenario’s lijkt een waarde van \(p ca. 0,5) voor de verborgen lagen te resulteren in de beste prestaties bij toepassing van Dropout (Srivastava et al, 2014). Dit geldt voor alle lagen behalve de ingangslaag, waar de waarde voor p ongeveer 1,0 moet zijn. Dit laatste is vermoedelijk het geval omdat de invoerlaag de invoergegevens neemt, en het is moeilijk om patronen te vinden wanneer gegevens willekeurig worden weggelaten.

Hoe presteert Dropout met betrekking tot datasetgrootte?

Volgens de auteurs maakt een “goede regularizer het mogelijk om een goede generalisatiefout te krijgen van modellen met een groot aantal parameters die zijn getraind op kleine datasets”. Dat wil zeggen, het presteert echt goed op gegevens die het nog niet eerder heeft gezien – zelfs als het is getraind met kleine gegevens.

Om te achterhalen of Dropout goed regulariseert over verschillende datasetgrootten, voerden Srivastava et al. (2014) tests uit met verschillende grootten op de MNIST-dataset. De groottes waren als volgt: “100, 500, 1K, 5K, 10K en 50K willekeurig gekozen uit de MNIST trainingsset” (Srivastava et al., 2014).

Wij helpen u met Machine Learning! 🧠

Blogs bij MachineCurve onderwijzen Machine Learning voor ontwikkelaars. Meld u vandaag nog aan voor MachineCurve’s gratis Machine Learning update! U zult nieuwe dingen leren en concepten die u al kent beter begrijpen.
We sturen ten minste elke vrijdag een e-mail. Welkom!

Door u aan te melden, stemt u ermee in dat alle informatie die u ontvangt, diensten en speciale aanbiedingen per e-mail kan bevatten.

De auteurs vonden dat er een afweging is tussen wanneer Dropout nodig is, en wanneer het niet meer nuttig is. Ten eerste het geval waarin de dataset extreem klein is: zelfs Dropout verbetert de prestaties in dat geval niet, simpelweg omdat de dataset te klein is. Hetzelfde geldt voor datasets die groot genoeg zijn: Dropout verbetert het model dan niet meer, maar de prestaties van het model worden juist slechter.

Hence, there exists a sweet spot, when Dropout is necessary and when it’s smart not to use it (or to increase dataset size). Volgens Srivastava et al. (2014) zijn er geen heuristieken om deze grootte te bepalen; in plaats daarvan moet deze worden bepaald met een validatieset.

Gaussian Uitval: Gaussian in plaats van Bernoulli variabelen

We herinneren ons van hierboven dat Dropout werkt met Bernoulli variabelen die 1 nemen met kans \(p\) en 0 met de rest, zijnde \(1 – p\).

Dit idee kan worden gegeneraliseerd naar het vermenigvuldigen van de activeringen met willekeurige variabelen uit andere verdelingen (Srivastava et al., 2014). In hun werk vonden Srivastava et al. dat de Gaussische verdeling en dus Gaussische variabelen net zo goed werken – en misschien zelfs beter.

Het toepassen van Gaussische variabelen kan op een vergelijkbare manier worden gedaan: netwerken verdunnen in de trainingstijd, en gewogen activeringen gebruiken in de test- en productietijd (zoals bij reguliere Dropout). De auteurs kiezen er echter voor om Gaussian Dropout anders te gebruiken – dat wil zeggen, vermenigvuldigend. In plaats van verdunning en weging wordt Gaussian Dropout gewogen op het moment van training, wanneer geactiveerde waarden die niet worden gedropt worden vermenigvuldigd met \(1/p\) in plaats van \(1) (met reguliere Bernoulli Dropout). Ze worden niet gewijzigd in de testtijd. Dit is gelijk aan het vorige scenario.

Gaussian Dropout moet worden geconfigureerd met een \(\sigma), die in de experimenten van Srivastava et al. werd ingesteld op \(\sqrt{(1-p)/p}\), waar \(p\) de configuratie is van de Bernoulli variant (d.w.z, in naïeve gevallen \(p)/p} voor verborgen lagen en \(p)/p} voor de inputlaag).

Samenvatting

In deze blogpost hebben we gekeken naar overfitting – en hoe je het kunt vermijden, met Dropout. Door te kijken naar wat het is, hoe het werkt, en dat het werkt, ontdekten we dat het een interessante techniek is om toe te passen in je deep learning-modellen.

Ik hoop dat je vandaag iets hebt geleerd – iets nuttigs voor je ML-modellen 😀 Als dat zo is, of wanneer je vragen hebt, aarzel dan niet om hieronder een reactie achter te laten ⬇! Wanneer mogelijk, zal ik je vragen beantwoorden 😊

Bedankt voor het lezen van MachineCurve vandaag en happy engineering! 😎

Srivastava, N., Hinton, G., Krizhevsky, A., Sutskever, I., & Salakhutdinov, R. (2014, June 15). Dropout: A Simple Way to Prevent Neural Networks from Overfitting. Opgehaald van http://jmlr.org/papers/v15/srivastava14a.html

Wikipedia. (2003, 20 maart). Bernoulli verdeling. Opgehaald van https://en.wikipedia.org/wiki/Bernoulli_distribution

💡 Krijg je ML onder de knie – bekijk ook deze berichten:

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.