Hva er forskjellen mellom Gradient Descent og Stochastic Gradient Descent?

Hva er forskjellen mellom Gradient Descent og Stochastic Gradient Descent?

Jeg er ikke veldig kjent med disse, kan du beskrive forskjellen med et kort eksempel?

Svar

For en rask enkel forklaring:

I både gradientnedstigning (GD) og stokastisk gradientnedstigning (SGD) oppdaterer du et sett med parametere på en iterativ måte for å minimere en feilfunksjon.

Mens du er i GD, må du gå gjennom ALLE prøvene i treningssettet ditt for å gjøre en enkelt oppdatering for en parameter i en bestemt iterasjon, i SGD, derimot, bruker du KUN EN eller SUBSET av treningsprøve fra treningssettet ditt for å gjøre oppdateringen for en parameter i en bestemt iterasjon. Hvis du bruker SUBSET, kalles det Minibatch Stochastic gradient Descent.

Hvis antallet treningsprøver er stort, faktisk veldig stort, kan det ta for lang tid å bruke gradientnedstigning fordi i hver iterasjon når du oppdaterer verdiene til parametrene, går du gjennom hele treningssettet. På den annen side vil bruk av SGD være raskere fordi du bare bruker en treningsprøve, og den begynner å forbedre seg med en gang fra den første prøven.

SGD konvergerer ofte mye raskere sammenlignet med GD, men feilfunksjonen er ikke så minimert som i tilfelle av GD. Ofte er i de fleste tilfeller nær tilnærming som du får i SGD for parameterverdiene nok fordi de når de optimale verdiene og fortsetter å svinge der.

Hvis du trenger et eksempel på dette med en praktisk sak, sjekk Andrew NG «notater her hvor han tydelig viser deg trinnene som er involvert i begge sakene. cs229-notes

Kilde: Quora-tråd

Kommentarer

  • takk, kort som dette? Det er tre varianter av Gradient Descent: Batch, Stochastic and Minibatch: Batch oppdaterer vektene etter at alle treningsprøver er evaluert. Stokastiske, vekter oppdateres etter hvert treningsprøve. Minibatch kombinerer det beste fra begge verdener. Vi bruker ikke hele datasettet, men vi bruker ikke det eneste datapunktet. Vi bruker et tilfeldig valgt datasett fra datasettet vårt. På denne måten reduserer vi beregningskostnaden og oppnår en lavere varians enn den stokastiske versjonen.
  • Merk at lenken ovenfor til cs229-notater er nede. Imidlertid leverer Wayback Machine, på linje med datoen for innlegget – yay! web.archive.org/web/20180618211933/http://cs229.stanford.edu/…

Svar

Inkluderingen av ordet stokastisk betyr ganske enkelt at tilfeldige prøvene fra treningsdataene blir valgt i hvert løp for å oppdatere parameteren under optimalisering, innenfor rammen av gradientnedstigning .

Gjør ikke bare beregnede feil og oppdaterer vekter i raskere iterasjoner (fordi vi bare behandler et lite utvalg av prøver på en gang), hjelper det også ofte å bevege seg mot en optimal raskere. Ta en se på svarene her , for mer informasjon om hvorfor bruk av stokastiske minibatcher for trening gir fordeler.

En kanskje ulempe, er at veien til det optimale (forutsatt at det alltid vil være det samme optimale) kan være mye mer støyende. Så i stedet for en fin glatt tapskurve som viser hvordan feilen synker i hver iterasjon av gradientnedstigning, kan du se noe sånt som dette:

støyende tapskurve

Vi ser tydeligvis tapet avta over tid, men det er store variasjoner fra epoke til epoke (treningsbatch til treningsbatch), så kurven er støyende.

Dette er ganske enkelt fordi vi beregner gjennomsnittsfeilen over vårt stokastisk / tilfeldig utvalgte delmengde, fra hele datasettet, i hver iterasjon. Noen prøver vil gi høy feil, andre lave. Så gjennomsnittet kan variere, avhengig av hvilke prøver vi tilfeldig brukte for en iterasjon av gradientnedstigning.

Kommentarer

  • takk, Kort fortalt dette? Det er tre varianter av Gradient Descent: Batch, Stochastic og Minibatch: Batch oppdaterer vektene etter at alle treningsprøver er evaluert. Stokastiske, vekter oppdateres etter hvert treningsprøve. Minibatch kombinerer det beste fra begge verdener. Vi bruker ikke hele datasettet, men vi bruker ikke det eneste datapunktet. Vi bruker et tilfeldig valgt datasett fra datasettet vårt. På denne måten reduserer vi beregningskostnadene og oppnår en lavere varians enn den stokastiske versjonen.
  • Jeg ' Jeg sier at det er batch, hvor en batch er hele treningssettet (så i utgangspunktet en epoke), så er det mini-batch, hvor en delsett brukes (så hvilket som helst tall mindre enn hele settet $ N $) – dette delsettet velges tilfeldig, så det er stokastisk. Å bruke en enkelt prøve vil bli referert til som online læring , og er en delmengde av mini-batch … Eller bare mini-batch med n=1.
  • tks, dette er klart!

Svar

I Gradient Descent eller Batch Gradient Descent bruker vi hele treningsdataene per epoke, mens vi i Stokastisk gradientnedstigning bare bruker et enkelt treningseksempel per periode og Mini-batch Gradient Descent ligger mellom disse to ytterpunktene, der vi kan bruke en mini-batch (liten porsjon ) av treningsdata per epoke, tommelfingerregelen for å velge størrelsen på minibatch er på kraften 2 som 32, 64, 128 osv.
For mer informasjon: cs231n forelesningsnotater

Kommentarer

  • takk, kort fortalt dette? Det er tre varianter av Gradient Descent: Batch, Stochastic og Minibatch: Batch oppdaterer vektene etter at alle treningsprøver er evaluert. Stokastiske, vekter oppdateres etter hvert treningsprøve. Minibatch kombinerer det beste fra begge verdener. Vi bruker ikke hele datasettet, men vi bruker ikke det eneste datapunktet. Vi bruker et tilfeldig valgt datasett fra datasettet vårt. På denne måten reduserer vi beregningskostnadene og oppnår en lavere varians enn den stokastiske versjonen.

Svar

Gradient Descent er en algoritme for å minimere $ J (\ Theta) $ !

Idé: For nåværende verdi av theta, beregne $ J (\ Theta) $ , og ta et lite skritt i retning av negativ gradient. Gjenta.

Gradient_Descent

Oppdater ligning = UpdateEqn

Algoritme:

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

Men problemet er at $ J (\ Theta) $ er funksjonen til alle corpus i windows, så veldig dyrt å beregne.

Stokastisk gradientnedstigning prøver eksemplet på vinduet og oppdateres gjentatte ganger etter hver og en

Stokastisk gradientnedstigningsalgoritme:

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

Vanligvis er eksemplets vindusstørrelse kraften til 2 si 32, 64 som minibatch.

Svar

Begge algoritmene er ganske like. Den eneste forskjellen kommer mens det gjentas. I Gradient Descent vurderer vi alle poengene i beregning av tap og derivat, mens vi i Stochastic gradient nedstigning bruker single point in loss-funksjon og dens derivat tilfeldig. Sjekk ut disse to artiklene, begge er sammenhengende og godt forklart. Jeg håper det hjelper.

  1. Gradient Descent algoritme

  2. Stokastisk gradientnedstigning .

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *