Batch-gradiënt-daling versus stochastische gradiënt-daling

Stel dat we een trainingsset hebben $ (x _ {(i)}, y _ {(i)}) $ voor $ i = 1, \ dots, m $ . Stel ook dat we een soort algoritme voor leren onder supervisie uitvoeren op de trainingsset. Hypothesen worden weergegeven als $ h _ {\ theta} (x _ {(i)}) = \ theta_0 + \ theta_ {1} x _ {(i) 1} + \ cdots + \ theta_ { n} x _ {(i) n} $ . We moeten de parameters $ \ mathbf {\ theta} $ vinden die de “afstand” tussen $ y _ {(i )} $ en $ h _ {\ theta} (x _ {(i)}) $ . Laat $$ J (\ theta) = \ frac {1} {2} \ sum_ {i = 1} ^ {m} (y _ {(i)} – h _ {\ theta } (x _ {(i)}) ^ {2} $$

Vervolgens willen we $ \ theta $ vinden dat minimaliseert $ J (\ theta) $ . Bij het dalen van de helling initialiseren we elke parameter en voeren we de volgende update uit: $$ \ theta_j : = \ theta_j- \ alpha \ frac {\ partiële} {\ partiële \ theta_ {j}} J (\ theta) $$

Wat is het belangrijkste verschil tussen batch-gradiëntafdaling en stochastische gradiënt-daling?

Beide gebruiken de bovenstaande updateregel. Maar is de ene beter dan de andere?

Antwoord

De toepasbaarheid van batch- of stochastische gradiëntafdaling hangt echt af van het verwachte foutenverdeelstuk.

De daling van de batchgradiënt berekent de gradiënt met behulp van de hele gegevensset. Dit is geweldig voor convexe of relatief gelijkmatige foutspruitstukken. In dit geval verplaatsen we rechtstreeks naar een optimale oplossing, lokaal of globaal. Bovendien zal batch-gradiënt-afdaling, gegeven een uitgegloeide leersnelheid, uiteindelijk het minimum vinden in zijn aantrekkingskracht.

Stochastische gradiënt-afdaling (SGD) berekent de gradiënt met behulp van een enkele steekproef. De meeste toepassingen van SGD gebruikt eigenlijk een minibatch van verschillende monsters, om redenen die later zullen worden uitgelegd. SGD werkt goed (niet goed, denk ik, maar beter dan batchgradiënt-afdaling) voor foutverdelers die veel lokale maxima / minima hebben. In dat geval heeft de ietwat luidruchtigere gradiënt die wordt berekend met behulp van het verminderde aantal samples de neiging om het model uit lokale minima te trekken naar een gebied dat hopelijk meer optimaal is. Enkele samples zijn erg luidruchtig, terwijl minibatches de neiging hebben om een beetje van de ruis weg te nemen. , de hoeveelheid schok wordt verminderd bij het gebruik van minibatches. Er wordt een goede balans gevonden wanneer de minibatchgrootte klein genoeg is om enkele van de slechte lokale minima te vermijden, maar groot genoeg om de globale minima of beter presterende l ocal minima. (Overigens veronderstelt dit dat de beste minima een groter en dieper aantrekkingsgebied hebben en daarom gemakkelijker te vallen zijn.)

Een voordeel van SGD is dat het rekenkundig een stuk sneller is. Groot datasets kunnen vaak “niet in RAM worden bewaard, wat vectorisatie veel minder efficiënt maakt. In plaats daarvan moet elk monster of elke batch monsters worden geladen, bewerkt, de resultaten worden opgeslagen, enzovoort. Minibatch SGD, aan de andere kant, wordt meestal met opzet klein genoeg gemaakt om rekenkundig traceerbaar te zijn.

Meestal wordt dit rekenvoordeel benut door veel meer iteraties van SGD uit te voeren, waardoor veel meer stappen worden gemaakt dan bij conventionele batchgradiënten . Dit resulteert meestal in een model dat heel dicht in de buurt komt van het model dat gevonden zou worden via batch-gradiëntafdaling, of beter.

De manier waarop ik denk aan hoe SGD werkt, is door me voor te stellen dat ik één punt heb dat vertegenwoordigt mijn input distributie. Mijn model probeert die inputverdeling te leren. Rondom de ingangsdistributie bevindt zich een gearceerd gebied dat de ingangsdistributies vertegenwoordigt van alle mogelijke minibatches die ik zou kunnen samplen. Het is meestal een redelijke veronderstelling dat de minibatch-ingangsverdelingen dicht in de buurt van de werkelijke ingangsverdeling liggen. De afdaling van de batchgradiënt neemt bij alle stappen de steilste route om de werkelijke ingangsverdeling te bereiken. SGD kiest daarentegen een willekeurig punt binnen het gearceerde gebied en neemt de steilste route naar dit punt. Bij elke iteratie kiest het echter een nieuw punt. Het gemiddelde van al deze stappen zal de werkelijke invoerdistributie benaderen, meestal redelijk goed.

Reacties

  • In de praktijk gebruikt niemand Batch Gradient Descent. Het ‘ is gewoon te rekenkundig duur voor niet zo veel van een winst. (De winst is dat u ‘ daadwerkelijk de ” true ” gradient.) Als je een zeer niet-convexe verliesfunctie hebt, hoef je alleen maar in de goede richting te stappen en ‘ zul je uiteindelijk convergeren n een lokaal minimum. Dus minibatch SGD.
  • @Jason_L_Bens heb je een referentie (papers of online teksten) waar ik meer over deze algoritmen kan lezen?
  • @ user110320 Niet uit mijn hoofd, nee, hoewel ze ‘ zijn zeer algemene algoritmen, en dus zou er met een beetje zoeken een ton aan bronnen over het onderwerp beschikbaar moeten zijn. Als je ‘ op zoek bent naar een algemene benadering, raad ik ‘ aan om wat van Yoshua Bengio te lezen ‘ s Learning Deep Architectures voor AI. Het ‘ is waar ik begon.

Antwoord

Zoals een ander antwoord suggereert, is de belangrijkste reden om SGD te gebruiken om de berekeningskosten van de gradiënt te verlagen en toch grotendeels de gradiëntrichting te behouden wanneer het gemiddelde wordt genomen over veel minibatches of monsters – dat helpt je zeker om de lokale minima te bereiken.

  1. Waarom minibatch werkt .

De wiskunde hierachter is dat de ” true ” gradiënt van de kostenfunctie (de gradiënt voor de generalisatiefout of voor oneindig grote sampleset) de verwachting is van het verloop $ g $ over de werkelijke gegevensgenererende verdeling $ p_ {data} $ ; het werkelijke verloop $ \ hat {g} $ berekend over een batch monsters is altijd een benadering van het werkelijke verloop met de empirische gegevensverdeling $ \ hat {p} _ {data} $ . $$ \ hat {g} = E _ {\ hat {p} _ {data}} ({\ partiële J (\ theta) \ over \ partiële \ theta}) $$ Batch-gradiënt-afdaling kan u de mogelijke ” optimale ” -gradiënt opleveren, gegeven al uw gegevensvoorbeelden, het is niet de ” true ” verloop echter. Een kleinere batch (dwz een minibatch) is waarschijnlijk niet zo optimaal als de volledige batch, maar het zijn beide benaderingen – net als de single-sample minibatch (SGD).

Ervan uitgaande dat er geen afhankelijkheid is tussen de $ m $ samples in één minibatch, de berekende $ \ hat {g} (m) $ is een onbevooroordeelde schatting van de ware gradiënt. De (kwadratische) standaardfouten van de schattingen met verschillende minibatchgroottes zijn omgekeerd evenredig met de maten van de minibatch. Dat wil zeggen, $$ {SE ({\ hat {g} (n)}) \ over SE ({\ hat {g} (m)})} = {\ sqrt { m \ over n}} $$ Dat wil zeggen, de vermindering van de standaardfout is de vierkantswortel van de toename van de steekproefomvang. Dit betekent dat als de minibatch-grootte klein is, de leerfrequentie ook klein moet zijn om stabiliteit over de grote variantie te bereiken. Als de monsters niet onafhankelijk zijn, wordt de eigenschap van een zuivere schatting niet langer behouden. Dat vereist dat je de samples door elkaar haalt voordat de training begint, als de sequentie van de samples niet willekeurig genoeg is.

  1. Waarom minibatch beter werken .

Ten eerste maakt minibatch sommige leerproblemen van technisch hardnekkig naar traceerbaar vanwege de verminderde rekenbehoefte met kleinere batchgrootte.

Ten tweede betekent een kleinere batchgrootte niet noodzakelijk een verminderde gradiëntnauwkeurigheid. De trainingsvoorbeelden hebben veel geluiden of uitschieters of vertekeningen. Een willekeurig bemonsterde minibatch kan de werkelijke distributie van gegevens beter (of niet slechter) weergeven dan de originele volledige batch. Als sommige iteraties van de minibatch-gradiëntupdates u een betere schatting geven, kan het gemiddelde resultaat van één epoch over het algemeen beter zijn dan het gradiënt berekend op basis van een volledige batch.

Ten derde helpt minibatch niet alleen om met onaangename datamonsters, maar helpen ook bij het omgaan met onaangename kostenfuncties die veel lokale minima hebben. Zoals Jason_L_Bens vermeldt, zijn de foutspruitstukken soms gemakkelijker om een regelmatig verloop in een lokale minima te vangen, terwijl het moeilijker is om de tijdelijk willekeurige gradiënt die met minibatch wordt berekend, te vangen.

Ten slotte ben je met gradiëntafname niet meer het bereiken van de globale minima in één stap, maar itererend op het foutenverdeelstuk. Verloop geeft je grotendeels alleen de richting om te herhalen. Met minibatch kun je veel sneller itereren. In veel gevallen geldt: hoe meer iteraties, hoe beter u het punt kunt bereiken. Het kan je niet echt schelen in alle weersomstandigheden, het punt is wereldwijd of zelfs lokaal optimaal. U wilt gewoon een redelijk model bereiken dat u een acceptabele generalisatiefout oplevert. Minibatch maakt dat gemakkelijker.

Misschien vindt u het boek ” Deep learning ” door Ian Goodfellow, et al, heeft redelijk goede discussies over dit onderwerp als je het aandachtig leest.

Opmerkingen

  • Voor convexe optimalisatieproblemen is wat je zei prima.Maar om gradiëntmethoden te gebruiken op niet-convexe functies, heb je een zeer kritieke reden gemist dat SGD beter is dan batch GD. Zie mijn antwoord datascience.stackexchange.com/questions/16807/…
  • @horaceT Bedankt voor je reactie. Aangezien het punt dat u noemde door Jason_L_Bens hierboven met details is beschreven, nam ik niet de moeite om het te herhalen, maar verwees ik met respect naar zijn antwoord in de laatste derde alinea. Voor het optimalisatieprobleem van de gradiëntafdaling wordt niet-convex weerspiegeld door de lokale minima inclusief zadelpunt (zie de laatste derde alinea); en ter wille van de beschrijving beschrijft mijn antwoord SGD als minibatch maar met een batchgrootte van 1 (zie de derde alinea).
  • Waarom heb je in * eindelijk in één tijdvak gezegd, je bent virtueel aan het berekenen het gemiddelde van de hellingen op basis van alle gegeven monsters. *? Don ‘ denk je dat deze claim onjuist is omdat de gewichten bij elke stap worden bijgewerkt?
  • @Media Je hebt gelijk. Ik ‘ heb de laatste alinea verwijderd. Bedankt.

Answer

Voor mij lijkt batchverloop op een mager verloop. Bij een magere gradiënt wordt de batchgrootte zo gekozen dat elke parameter die moet worden bijgewerkt, ook onafhankelijk, maar niet noodzakelijk orthogonaal, in de batch wordt gevarieerd. Als de batch bijvoorbeeld 10 experimenten en 10 rijen bevat, is het mogelijk om $ 2 ^ {10-1} = 512 $ onafhankelijke kolommen te vormen. 10 rijen maakt onafhankelijke, maar niet orthogonale, update van 512 parameters mogelijk.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *