Wat is het verschil tussen Gradient Descent en Stochastic Gradient Descent?

Wat is het verschil tussen Gradient Descent en Stochastic Gradient Descent?

Ik ben hier niet erg bekend mee, kun je het verschil omschrijven met een kort voorbeeld?

Antwoord

Voor een snelle, eenvoudige uitleg:

Zowel bij gradiëntafdaling (GD) als stochastische gradiëntdaling (SGD) werkt u een set parameters op een iteratieve manier bij om een foutfunctie te minimaliseren.

Terwijl je in GD bent, moet je ALLE voorbeelden in je trainingsset doorlopen om een enkele update voor een parameter in een bepaalde iteratie uit te voeren, in SGD, aan de andere kant gebruik je SLECHTS ÉÉN of SUBSET van trainingsmonsters van uw training is ingesteld om de update voor een parameter in een bepaalde iteratie uit te voeren. Als je SUBSET gebruikt, wordt dit Minibatch Stochastic Gradient Descent genoemd.

Dus als het aantal trainingsmonsters groot, in feite erg groot is, kan het gebruiken van gradiëntafdaling te lang duren, omdat bij elke iteratie wanneer je de waarden van de parameters bijwerkt, doorloopt u de volledige trainingsset. Aan de andere kant zal het gebruik van SGD sneller zijn omdat u slechts één trainingsvoorbeeld gebruikt en het zichzelf meteen begint te verbeteren vanaf het eerste voorbeeld.

SGD convergeert vaak veel sneller in vergelijking met GD, maar de foutfunctie is dat niet evenals geminimaliseerd als in het geval van GD. Vaak is in de meeste gevallen de dichte benadering die je krijgt in SGD voor de parameterwaarden voldoende omdat ze de optimale waarden bereiken en daar blijven oscilleren.

Als je een voorbeeld hiervan nodig hebt met een praktisch geval, kijk dan na De opmerkingen van Andrew NG hier waar hij u duidelijk de stappen laat zien die in beide gevallen betrokken zijn. cs229-notes

Bron: Quora Thread

Reacties

  • bedankt, zo kort mogelijk? Er zijn drie varianten van de Gradient Descent: Batch, Stochastic en Minibatch: Batch werkt de gewichten bij nadat alle trainingsmonsters zijn geëvalueerd. Stochastisch, gewichten worden bijgewerkt na elk trainingsmonster. De Minibatch combineert het beste van twee werelden. We gebruiken niet de volledige dataset, maar we gebruiken niet het enkele gegevenspunt. We gebruiken een willekeurig geselecteerde set gegevens uit onze gegevensset. Op deze manier verlagen we de rekenkosten en bereiken we een lagere variantie dan de stochastische versie.
  • Merk op dat de bovenstaande link naar cs229-notes niet beschikbaar is. Wayback Machine, afgestemd op de postdatum, levert echter – yay! web.archive.org/web/20180618211933/http://cs229.stanford.edu/…

Antwoord

De opname van het woord stochastisch betekent simpelweg dat de willekeurige steekproeven van de trainingsgegevens in elke run worden gekozen om de parameter bij te werken tijdens de optimalisatie, in het kader van gradiëntafname .

Dit doet niet alleen berekende fouten en werkt gewichten bij in snellere iteraties (omdat we slechts een kleine selectie van voorbeelden in één keer verwerken), het helpt ook vaak om naar een optimaal sneller. Neem een bekijk de antwoorden hier , voor meer informatie over waarom het gebruik van stochastische minibatches voor training voordelen biedt.

Een misschien nadeel is dat het pad naar het optimum (ervan uitgaande dat het altijd hetzelfde optimum zou zijn) veel luidruchtiger kan zijn. Dus in plaats van een mooie gelijkmatige verliescurve, die laat zien hoe de fout afneemt in elke iteratie van gradiëntafname, zou je zoiets als dit kunnen zien:

luidruchtige verliescurve

We zien duidelijk dat het verlies in de loop van de tijd afneemt, maar er zijn grote variaties van tijdperk tot tijdperk (trainingsbatch tot trainingsbatch), dus de curve heeft veel ruis.

Dit komt simpelweg omdat we de gemiddelde fout berekenen over onze stochastisch / willekeurig geselecteerde subset, uit de hele dataset, in elke iteratie. Sommige samples geven een hoge fout, andere een lage. Dus het gemiddelde kan variëren, afhankelijk van welke monsters we willekeurig hebben gebruikt voor een iteratie van gradiëntafdaling.

Opmerkingen

  • bedankt, zo kort mogelijk? Er zijn drie varianten van de Gradient Descent: Batch, Stochastic en Minibatch: Batch werkt de gewichten bij nadat alle trainingsmonsters zijn geëvalueerd. Stochastische gewichten worden na elk trainingsmonster bijgewerkt. De Minibatch combineert het beste van twee werelden. We gebruiken niet de volledige dataset, maar we gebruiken niet het enkele datapunt. We gebruiken een willekeurig geselecteerde set gegevens uit onze dataset. Op deze manier verlagen we de rekenkosten en bereiken we een lagere variantie dan de stochastische versie.
  • Ik ‘ d zeg dat er een batch is, waarbij een batch de volledige trainingsset is (dus eigenlijk één epoch), dan is er een mini-batch, waarbij een subset wordt gebruikt (dus elk getal kleiner dan de hele set $ N $) – deze subset wordt willekeurig gekozen, dus het is stochastisch. Het gebruik van een enkele steekproef wordt online leren genoemd, en is een subset van mini-batch … Of gewoon mini-batch met n=1.
  • tks, dit is duidelijk!

Antwoord

In Gradient Descent of Batch Gradient Descent gebruiken we de volledige trainingsgegevens per tijdperk, terwijl we in Stochastic Gradient Descent slechts één trainingsvoorbeeld per epoch gebruiken en Mini-batch Gradient Descent ligt tussen deze twee uitersten in, waarbij we een mini-batch (kleine portie ) van trainingsgegevens per epoch, is de duimregel voor het selecteren van de grootte van mini-batch 2, zoals 32, 64, 128 etc.
Voor meer details: cs231n dictaten

Reacties

  • bedankt, zo kort mogelijk? Er zijn drie varianten van de Gradient Descent: Batch, Stochastic en Minibatch: Batch werkt de gewichten bij nadat alle trainingsmonsters zijn geëvalueerd. Stochastische gewichten worden na elk trainingsmonster bijgewerkt. De Minibatch combineert het beste van twee werelden. We gebruiken niet de volledige dataset, maar we gebruiken niet het enkele datapunt. We gebruiken een willekeurig geselecteerde set gegevens uit onze dataset. Op deze manier verlagen we de berekeningskosten en bereiken we een lagere variantie dan de stochastische versie.

Answer

Gradient Descent is een algoritme om de $ J (\ Theta) $ !

Idee: Bereken voor de huidige waarde van theta de $ J (\ Theta) $ , en zet dan een kleine stap in de richting van een negatief verloop. Herhaal.

Gradient_Descent

Update Vergelijking = UpdateEqn

Algoritme:

while True: theta_grad = evaluate_gradient(J,corpus,theta) theta = theta - alpha * theta_grad 

Maar het probleem is $ J (\ Theta) $ is de functie van alle corpus in Windows, dus erg duur om te berekenen.

Stochastische gradiëntafname sample herhaaldelijk van het venster en update na elk venster

Stochastisch gradiëntafname-algoritme:

while True: window = sample_window(corpus) theta_grad = evaluate_gradient(J,window,theta) theta = theta - alpha * theta_grad 

Gewoonlijk is de grootte van het voorbeeldvenster de macht van 2, zeg 32, 64 als minibatch.

Antwoord

Beide algoritmen lijken behoorlijk op elkaar. Het enige verschil komt tijdens het itereren. In Gradient Descent beschouwen we alle punten bij het berekenen van verlies en afgeleide, terwijl we in Stochastische gradiëntafdaling een enkel punt in de verliesfunctie en de afgeleide willekeurig gebruiken. Bekijk deze twee artikelen, beide zijn met elkaar verbonden en goed uitgelegd. Ik hoop dat het helpt.

  1. Gradient Descent-algoritme

  2. Stochastische gradiëntafdaling .

Geef een reactie

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