Mitä eroa on kaltevuuslaskun ja stokastisen kaltevuuslaskun välillä?

Mitä eroa on kaltevuuslaskun ja stokastisen kaltevuuslaskun välillä?

En ole kovin perehtynyt näihin, voitko kuvata eron lyhyellä esimerkillä?

Vastaa

Saat nopean ja yksinkertaisen selityksen:

Sekä kaltevuuslaskussa (GD) että stokastisessa kaltevuuslaskussa (SGD) päivität parametrisarjan iteratiivisella tavalla minimoidaksesi virhetoiminnon.

Kun olet GD: ssä, sinun on suoritettava KAIKKI harjoitusjoukkosi näytteet, jotta voit tehdä yhden päivityksen parametrille tietyssä iteraatiossa, ja toisaalta SGD: ssä käytät vain YKSIä tai ALAJOUKKOA harjoitusjoukkosi suorittaa päivityksen parametrille tietyssä iteraatiossa. Jos käytät SUBSETia, sitä kutsutaan Minibatch Stochastic gradient Descent.

Jos siis harjoittelunäytteiden määrä on suuri, itse asiassa hyvin suuri, gradientin laskeutumisen käyttö voi viedä liian kauan, koska jokaisessa iteraatiossa kun päivität parametrien arvoja, suoritat koko harjoitusjoukon läpi. Toisaalta SGD: n käyttö on nopeampaa, koska käytät vain yhtä harjoitusnäytettä ja se alkaa parantua heti ensimmäisestä näytteestä.

SGD lähentyy usein paljon nopeammin kuin GD, mutta virhetoiminto ei ole sekä minimoidaan kuin GD: n tapauksessa. Usein useimmissa tapauksissa SGD: ssä saatu läheinen likiarvio parametriarvoille riittää, koska ne saavuttavat optimaaliset arvot ja heilahtelevat siellä.

Jos tarvitset tästä esimerkin käytännön tapaukseen, tarkista Andrew NG huomauttaa täältä, jossa hän näyttää selvästi molempien tapausten vaiheet. cs229-muistiinpanot

Lähde: Quora-ketju

Kommentit

  • kiitos, pidätkö tästä lyhyesti? Liukuvärjäys: erä, stokastinen ja minibatch: erä päivittää painot sen jälkeen, kun kaikki harjoitusnäytteet on arvioitu. Stokastinen, painot päivitetään jokaisen harjoitusnäytteen jälkeen. Minibatch yhdistää molempien maailmojen parhaat puolet. Emme käytä koko tietojoukkoa, mutta emme käytä yhtä datapistettä. Käytämme satunnaisesti valittua joukkoa tietojoukostamme. Tällä tavoin pienennämme laskentakustannuksia ja saavutamme pienemmän varianssin kuin stokastinen versio.
  • Huomaa, että yllä oleva linkki cs229-muistiinpanoihin on poissa. Wayback Machine, joka on kohdistettu postituspäivämäärään, tuottaa kuitenkin – yay! web.archive.org/web/20180618211933/http://cs229.stanford.edu/…

vastaus

Sana stokastinen tarkoittaa yksinkertaisesti sitä, että satunnaiset näytteet harjoitustiedoista valitaan jokaisessa ajassa parametrin päivittämiseksi optimoinnin aikana kaltevuuslaskun .

Näin tekemällä paitsi lasketut virheet ja päivittämällä painot nopeammissa iteraatioissa (koska käsittelemme vain pienen osan näytteistä kerralla), se auttaa myös usein siirtymään kohti optimaalisesti nopeammin. katso vastauksia täältä saadaksesi lisätietoja siitä, miksi stokastisten pikkupalojen käyttö koulutukseen tarjoaa etuja.

Yksi ehkä haittapuoli on että polku optimaaliin (olettaen, että se olisi aina sama optimi) voi olla paljon meluisampi. Joten hienon tasaisen häviökäyrän sijasta, joka näyttää kuinka virhe laskee jokaisessa kaltevuuslaskun iteroinnissa, saatat nähdä jotain tällaista:

meluisa häviökäyrä

Häviöt näkyvät selvästi ajan myötä, mutta aikakausittain vaihtelut ovat suuria (harjoituserä harjoitteluerään), joten käyrä on meluisa.

Tämä johtuu yksinkertaisesti siitä, että laskemme jokaisessa iteraatiossa keskimääräisen virheen stokastisesti / satunnaisesti valitun osajoukon koko tietojoukosta. Jotkut näytteet tuottavat suuren virheen, toiset pienet. Joten keskiarvo voi vaihdella riippuen siitä, mitä näytteitä satunnaisesti käytimme yhdelle gradientin laskeutumisen iteraatiolle.

Kommentit

  • kiitos, pidätkö tästä lyhyesti? Gradientin laskeutumisesta on kolme muunnosta: Erä, Stokastinen ja Minibatch: Erä päivittää painot sen jälkeen, kun kaikki harjoitusnäytteet on arvioitu. Stokastiset painot päivitetään jokaisen harjoitusnäytteen jälkeen. Minikokoelma yhdistää molempien maailmojen parhaat puolet. Emme käytä koko tietojoukkoa, mutta emme käytä yhtä datapistettä. Käytämme satunnaisesti valittua tietojoukkoamme. Tällä tavoin pienennämme laskentakustannuksia ja saavutamme pienemmän varianssin kuin stokastinen versio.
  • I ' sanon, että on erä, jossa erä on koko harjoitusjoukko (eli periaatteessa yksi aikakausi), sitten on minierä, jossa käytetään alijoukkoa (mikä tahansa luku, joka on pienempi kuin koko joukko $ N $) – tämä osajoukko valitaan satunnaisesti, joten se on stokastinen. Yhden näytteen käyttämistä kutsutaan verkkokoulutukseksi , ja se on mini-erän osajoukko … Tai yksinkertaisesti mini-erä n=1.
  • tks, tämä on selvää!

Vastaa

Liukuväreissä tai eräverhousissa , käytämme koko harjoitteludataa aikakaudelta, kun taas stokastisessa liukuvärilaskussa käytämme vain yhtä harjoitusesimerkkiä aikakautta kohden ja näiden kahden ääripään välissä on Mini-erän kaltevuuslasku, jossa voimme käyttää minierää (pieni osa ) harjoitteludataa aikakaudelta, peukalon sääntö minierän koon valinnassa on 2, kuten 32, 64, 128 jne.
Lisätietoja: cs231n-luentomuistiinpanot

Kommentit

  • kiitos, pidätkö tästä lyhyesti? Gradientin laskeutumisesta on kolme muunnosta: Erä, Stokastinen ja Minibatch: Erä päivittää painot sen jälkeen, kun kaikki harjoitusnäytteet on arvioitu. Stokastiset painot päivitetään jokaisen harjoitusnäytteen jälkeen. Minikokoelma yhdistää molempien maailmojen parhaat puolet. Emme käytä koko tietojoukkoa, mutta emme käytä yhtä datapistettä. Käytämme satunnaisesti valittua tietojoukkoamme. Tällä tavoin pienennämme laskentakustannuksia ja saavutamme pienemmän varianssin kuin stokastinen versio.

Vastaa

Liukuvärjäys on algoritmi $ J (\ Theta) $ !

Idea: Laske teetan nykyiselle arvolle $ J (\ Theta) $ , ota sitten pieni askel negatiivisen kaltevuuden suuntaan. Toista.

Liukuvärin_lasku

Päivitä yhtälö = UpdateEqn

Algoritmi:

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

Mutta ongelma on, että $ J (\ Theta) $ on Windowsin kaikkien korpusten toiminto, joten sen laskeminen on erittäin kallista.

Stokastinen liukuvärjäys näytä ikkuna toistuvasti ja päivitä jokaisen jälkeen

Stokastinen kaltevuuslaskun algoritmi:

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

Yleensä näyteikkunan koko on kahden sanan 32, 64 teho mini-eränä.

Vastaa

Molemmat algoritmit ovat melko samanlaisia. Ainoa ero syntyy iteroimalla. Gradientin laskeutumisessa otamme huomioon kaikki pisteet häviön ja johdannaisen laskennassa, kun taas stokastisessa gradientin laskeutumisessa käytämme yksittäistä pistettä häviöfunktiossa ja sen johdannaista satunnaisesti. Katso nämä kaksi artikkelia, molemmat liittyvät toisiinsa ja hyvin selitetty. Toivon, että siitä on apua.

  1. Liukuvärjäysalgoritmi

  2. Stokastinen kaltevuuslasku .

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *