Hvad er forskellen mellem Gradient Descent og Stochastic Gradient Descent?
Jeg er ikke særlig fortrolig med disse, kan du beskrive forskellen med et kort eksempel?
Svar
For en hurtig enkel forklaring:
I både gradientnedstigning (GD) og stokastisk gradientnedstigning (SGD) opdaterer du et sæt parametre på en iterativ måde for at minimere en fejlfunktion.
Mens du er i GD, skal du køre igennem ALLE prøverne i dit træningssæt for at udføre en enkelt opdatering til en parameter i en bestemt iteration, i SGD bruger du på den anden side KUN EN eller SUBSET af træningseksempel fra dit træningssæt til at udføre opdateringen til en parameter i en bestemt iteration. Hvis du bruger SUBSET, kaldes det Minibatch Stochastic gradient Descent.
Således, hvis antallet af træningseksempler er stort, faktisk meget stort, kan brugen af gradientnedstigning tage for lang tid, fordi i hver iteration, når du opdaterer parametrernes værdier, løber du gennem det komplette træningssæt. På den anden side vil brugen af SGD være hurtigere, fordi du kun bruger en træningsprøve, og den begynder at forbedre sig selv med det samme fra den første prøve.
SGD konvergerer ofte meget hurtigere sammenlignet med GD, men fejlfunktionen er ikke så godt minimeret som i tilfælde af GD. Ofte er den tætte tilnærmelse, du får i SGD for parameterværdierne i de fleste tilfælde nok, fordi de når de optimale værdier og fortsætter med at svinge der.
Hvis du har brug for et eksempel på dette med en praktisk sag, skal du kontrollere Andrew NG “noterer her, hvor han tydeligt viser dig de trin, der er involveret i begge sager. cs229-notes
Kilde: Quora-tråd
Kommentarer
- tak, kort som dette? Der er tre varianter af Gradient Descent: Batch, Stochastic og Minibatch: Batch opdaterer vægten, efter at alle træningseksempler er blevet evalueret. Stokastiske, vægte opdateres efter hver træningsprøve. Minibatch kombinerer det bedste fra begge verdener. Vi bruger ikke det fulde datasæt, men vi bruger ikke det enkelte datapunkt. Vi bruger et tilfældigt valgt datasæt fra vores datasæt. På denne måde reducerer vi beregningsomkostningerne og opnår en lavere varians end den stokastiske version.
- Bemærk, at ovenstående link til cs229-noter er nede. Imidlertid leverer Wayback Machine, tilpasset datoen for posten – yay! web.archive.org/web/20180618211933/http://cs229.stanford.edu/…
Svar
Inkluderingen af ordet stokastisk betyder ganske enkelt, at tilfældige prøverne fra træningsdataene vælges i hver kørsel til opdatering af parameter under optimering inden for rammerne af gradientnedstigning .
Gør det ikke kun beregnede fejl og opdaterer vægte i hurtigere iterationer (fordi vi kun behandler et lille udvalg af prøver på én gang), det hjælper også ofte med at bevæge sig mod en optimalt hurtigere. Få et se på svarene her for at få flere oplysninger om, hvorfor brug af stokastiske minibatcher til træning giver fordele.
En måske ulempe er, at at stien til det optimale (forudsat at det altid ville være det samme optimale) kan være meget mere støjende. Så i stedet for en flot glat tabskurve, der viser, hvordan fejlen falder i hver iteration af gradientnedstigning, kan du muligvis se noget som dette:
Vi ser tydeligt tabet falde over tid, men der er store variationer fra epoke til epoke (træningsbatch til træningsbatch), så kurven er støjende.
Dette er simpelthen fordi vi beregner den gennemsnitlige fejl over vores stokastisk / tilfældigt valgte delmængde fra hele datasættet i hver iteration. Nogle prøver giver høj fejl, andre lave. Så gennemsnittet kan variere, afhængigt af hvilke prøver, vi tilfældigt brugte til en iteration af gradientafstamning.
Kommentarer
- tak, kort her? Der er tre varianter af Gradient Descent: Batch, Stochastic og Minibatch: Batch opdaterer vægtene, efter at alle træningsprøver er blevet evalueret. Stokastiske vægte opdateres efter hver træningsprøve. Minibatch kombinerer det bedste fra begge verdener. Vi bruger ikke det fulde datasæt, men vi bruger ikke det eneste datapunkt. Vi bruger et tilfældigt valgt datasæt fra vores datasæt. På denne måde reducerer vi beregningsomkostningerne og opnår en lavere varians end den stokastiske version.
- Jeg ' siger, at der er batch, hvor en batch er hele træningssættet (så dybest set en periode), så er der mini-batch, hvor en delmængde bruges (så ethvert tal mindre end hele sættet $ N $) – denne delmængde vælges tilfældigt, så det er stokastisk. Brug af en enkelt prøve ville blive henvist til som online læring og er en delmængde af mini-batch … Eller bare mini-batch med
n=1
. - tks, dette er klart!
Svar
I gradientnedstigning eller batchgradientnedstigning , bruger vi hele træningsdataene per epoke, mens vi i Stokastisk Gradient Descent kun bruger et enkelt træningseksempel pr. epoke, og Mini-batch Gradient Descent ligger mellem disse to ekstremer, hvor vi kan bruge en mini-batch (lille del ) af træningsdata pr. periode, tommelfingerregel til valg af mini-batchstørrelse er på magten 2 som 32, 64, 128 osv.
For flere detaljer: cs231n forelæsningsnotater
Kommentarer
- tak, kort som dette? Der er tre varianter af Gradient Descent: Batch, Stochastic og Minibatch: Batch opdaterer vægtene, efter at alle træningsprøver er blevet evalueret. Stokastiske vægte opdateres efter hver træningsprøve. Minibatch kombinerer det bedste fra begge verdener. Vi bruger ikke det fulde datasæt, men vi bruger ikke det eneste datapunkt. Vi bruger et tilfældigt valgt datasæt fra vores datasæt. På denne måde reducerer vi beregningsomkostningerne og opnår en lavere varians end den stokastiske version.
Svar
Gradientnedstigning er en algoritme, der minimerer $ J (\ Theta) $ !
Idé: For den aktuelle værdi af theta skal du beregne $ J (\ Theta) $ , tag derefter et lille skridt i retning af negativ gradient. Gentag.
Algoritme:
while True: theta_grad = evaluate_gradient(J,corpus,theta) theta = theta - alpha * theta_grad
Men problemet er $ J (\ Theta) $ er funktionen af alle corpus i windows, så meget dyrt at beregne.
Stokastisk gradientnedstigning prøver flere gange på vinduet og opdateres efter hver enkelt
Stokastisk gradientafstamningsalgoritme:
while True: window = sample_window(corpus) theta_grad = evaluate_gradient(J,window,theta) theta = theta - alpha * theta_grad
Eksempelvis er vinduesstørrelsen på 2, siger 32, 64 som mini-batch.
Svar
Begge algoritmer er ret ens. Den eneste forskel kommer under iterering. I Gradient Descent overvejer vi alle punkterne i beregning af tab og derivat, mens vi i Stokastisk gradientnedstigning bruger et enkelt punkt i tabsfunktion og dens derivat tilfældigt. Tjek disse to artikler, begge er indbyrdes relaterede og godt forklaret. Jeg håber, det hjælper.