Vad är skillnaden mellan Gradient Descent och Stochastic Gradient Descent?
Jag är inte särskilt bekant med dessa, kan du beskriva skillnaden med ett kort exempel?
Svar
För en snabb enkel förklaring:
I både gradientnedstigning (GD) och stokastisk gradientnedstigning (SGD) uppdaterar du en uppsättning parametrar på ett iterativt sätt för att minimera en felfunktion.
Medan du är i GD måste du köra igenom ALLA proverna i din träningssats för att göra en enda uppdatering för en parameter i en viss iteration, i SGD, å andra sidan, använder du ENDAST EN eller SUBSET för träningsprov från din träningsuppsättning för att göra uppdateringen för en parameter i en viss iteration. Om du använder SUBSET kallas det Minibatch Stochastic gradient Descent.
Således, om antalet träningsprover är stora, i själva verket mycket stora, kan det ta för lång tid att använda gradientnedstigning för i varje iteration när du uppdaterar parametervärdena, går du igenom hela träningsuppsättningen. Å andra sidan kommer att använda SGD snabbare eftersom du bara använder ett träningsprov och det börjar förbättra sig direkt från det första provet.
SGD konvergerar ofta mycket snabbare jämfört med GD men felfunktionen är inte lika minimerad som i fallet med GD. I de flesta fall räcker det med att den närmaste approximationen som du får i SGD för parametervärdena för att de når de optimala värdena och fortsätter att svänga där.
Om du behöver ett exempel på detta med ett praktiskt fall, kontrollera Andrew NG ”noterar här där han tydligt visar dig stegen i båda fallen. cs229-notes
Källa: Quora-tråd
Kommentarer
- tack, kort så här? Det finns tre varianter av Gradient Descent: Batch, Stochastic och Minibatch: Batch uppdaterar vikterna efter att alla träningsprover har utvärderats. Stokastiska, vikter uppdateras efter varje träningsprov. Minibatch kombinerar det bästa från två världar. Vi använder inte hela datamängden, men vi använder inte den enda datapunkten. Vi använder en slumpmässigt vald uppsättning data från vår datamängd. På detta sätt minskar vi beräkningskostnaden och uppnår en lägre varians än den stokastiska versionen.
- Observera att länken ovan till cs229-noter är nere. Wayback Machine, anpassad till inläggets datum, levererar dock – ja! web.archive.org/web/20180618211933/http://cs229.stanford.edu/…
Svar
Inkluderingen av ordet stokastiskt betyder helt enkelt att slumpmässiga prover från träningsdata väljs i varje körning för att uppdatera parametern under optimering, inom ramen för gradientnedstigning .
Om du inte bara beräknar fel och uppdaterar vikter i snabbare iterationer (eftersom vi bara bearbetar ett litet urval av prover på en gång), hjälper det också ofta att gå mot en optimalt snabbare. Ta en titta på svaren här , för mer information om varför användning av stokastiska minibatcher för träning erbjuder fördelar.
En kanske nackdel är att att vägen till det optimala (förutsatt att det alltid skulle vara samma optimala) kan vara mycket bullrigare. Så istället för en fin jämn förlustkurva, som visar hur felet minskar i varje iteration av gradientnedstigning, kanske du ser något så här:
Vi ser tydligt att förlusten minskar över tiden, men det finns stora variationer från epok till epok (träningsparti till träningsparti), så kurvan är bullrig.
Detta beror helt enkelt på att vi beräknar medelfelet över vår stokastiskt / slumpmässigt valda delmängd, från hela datasetet, i varje iteration. Vissa prover ger höga fel, andra låga. Så genomsnittet kan variera beroende på vilka prover vi slumpmässigt använde för en iteration av gradientnedstigning.
Kommentarer
- tack, kort så här? Det finns tre varianter av Gradient Descent: Batch, Stochastic och Minibatch: Batch uppdaterar vikterna efter att alla träningsprover har utvärderats. Stokastiska vikter uppdateras efter varje träningsprov. Minibatch kombinerar det bästa från två världar. Vi använder inte hela datamängden, men vi använder inte den enda datapunkten. Vi använder en slumpmässigt vald uppsättning data från vår datamängd. På detta sätt minskar vi beräkningskostnaden och uppnår en lägre avvikelse än den stokastiska versionen.
- Jag ' Jag säger att det finns batch, där ett parti är hela träningsuppsättningen (så i grund och botten en epok), så finns det mini-batch, där delmängd används (så valfritt antal mindre än hela uppsättningen $ N $) – denna delmängd väljs slumpmässigt, så det är stokastiskt. Att använda ett enda prov skulle kallas online-lärande , och är en delmängd av minibatch … Eller helt enkelt minibatch med
n=1
. - tks, detta är klart!
Svar
I Gradient Descent eller Batch Gradient Descent , använder vi hela träningsdata per epok medan vi i Stokastisk Gradient Descent endast använder ett träningsexempel per epok och Mini-batch Gradient Descent ligger mellan dessa två ytterligheter, där vi kan använda en mini-batch (liten del ) av träningsdata per epok, tumregeln för att välja storlek på minibatch är på 2 som 32, 64, 128 etc.
För mer information: cs231n föreläsningsanteckningar
Kommentarer
- tack, kort så här? Det finns tre varianter av Gradient Descent: Batch, Stochastic och Minibatch: Batch uppdaterar vikterna efter att alla träningsprover har utvärderats. Stokastiska vikter uppdateras efter varje träningsprov. Minibatch kombinerar det bästa från två världar. Vi använder inte hela datamängden, men vi använder inte den enda datapunkten. Vi använder en slumpmässigt vald uppsättning data från vår datamängd. På detta sätt minskar vi beräkningskostnaden och uppnår en lägre varians än den stokastiska versionen.
Svar
Gradient Descent är en algoritm för att minimera $ J (\ Theta) $ !
Idé: För nuvärdet av theta, beräkna $ J (\ Theta) $ , ta sedan ett litet steg i riktning mot negativ lutning. Upprepa.
Algoritm:
while True: theta_grad = evaluate_gradient(J,corpus,theta) theta = theta - alpha * theta_grad
Men problemet är $ J (\ Theta) $ är funktionen för alla corpus i windows, så mycket dyrt att beräkna.
Stochastic Gradient Descent prova upprepade gånger på fönstret och uppdatera efter var och en
Stochastic Gradient Descent Algorithm:
while True: window = sample_window(corpus) theta_grad = evaluate_gradient(J,window,theta) theta = theta - alpha * theta_grad
Vanligtvis är provfönstrets storlek kraften på 2 säg 32, 64 som minibatch.
Svar
Båda algoritmerna är ganska lika. Den enda skillnaden kommer under iterering. I Gradient Descent beaktar vi alla poäng vid beräkning av förlust och derivat, medan vi i Stokastisk gradientnedstigning använder en enda punkt i förlustfunktionen och dess derivat slumpmässigt. Kolla in dessa två artiklar, båda är inbördes relaterade och väl förklarade. Jag hoppas att det hjälper.