Käytän neuroverkkoon Python Keras package
. Tämä on linkki . Onko batch_size
yhtä suuri kuin testinäytteiden määrä? Wikipediasta meillä on tämä tiedot:
Muissa tapauksissa summa-gradientin arviointi voi kuitenkin edellyttää kallista arviointia kaikkien gradienttien funktioiden kaltevuuksista. Kun harjoitusjoukko on valtava eikä yksinkertaisia kaavoja ole olemassa, kaltevuussummien arviointi tulee hyvin kalliiksi, koska gradientin arviointi edellyttää kaikkien summandifunktioiden ”kaltevuuksien” arviointia. Laskentakustannusten säästämiseksi jokaisella iteraatiolla stokastinen gradientin laskeutuminen ottaa joukon summandifunktioita jokaisessa vaiheessa. Tämä on erittäin tehokasta laajamittaisten koneoppimisongelmien yhteydessä.
Yllä olevat tiedot kuvaavatko testitietoja? Onko tämä sama kuin batch_size
kerassa (näytteiden määrä kaltevuuspäivitystä kohden)?
Kommentit
- ’ on hyvä nähdä kurssi class.coursera.org/ml-005/lecture/preview , etenkin viikko 4-6 + 10. Wikipedia ei ehkä ole niin arvokas resurssi hermoverkkojen oppimisessa.
Vastaa
-eräkoko määrittää verkon kautta levitettävien näytteiden määrän.
Esimerkiksi , sanotaan, että sinulla on 1050 harjoitusnäytettä ja haluat asettaa batch_size
, joka on 100. Algoritmi ottaa ensimmäiset 100 näytettä (1. – 100.) harjoittelutietojoukosta ja kouluttaa verkkoa. Seuraavaksi se ottaa toiset 100 näytettä (101. – 200.) ja kouluttaa verkon uudelleen. Voimme jatkaa tätä menettelyä, kunnes olemme levittäneet kaikki näytteet verkon läpi. P roblem saattaa tapahtua viimeisen näytesarjan kanssa. Esimerkissämme olemme käyttäneet 1050: tä, joka ei ole jaollinen 100: lla ilman loppuosaa. Yksinkertaisin ratkaisu on saada viimeiset 50 näytettä ja kouluttaa verkkoa.
Eräkoon < kaikkien näytteiden määrä:
-
Se vaatii vähemmän muistia. Koska harjoittelet verkkoa käyttämällä vähemmän näytteitä, koko harjoittelu vaatii vähemmän muistia. ”ovat erityisen tärkeitä, jos et pysty sovittamaan koko tietojoukkoa koneesi muistiin.
-
Tyypillisesti verkot harjoittavat nopeammin minierillä. Se johtuu siitä, että päivitämme painot jokaisen etenemisen jälkeen. Esimerkissämme olemme levittäneet 11 erää (10: ssä oli 100 näytettä ja 1: ssä 50 näytettä), ja jokaisen jälkeen olemme päivittäneet verkkomme parametrit. Jos käytämme kaikkia näytteitä etenemisen aikana, teemme vain yhden päivityksen verkon parametrille.
Haitat kaikkien näytteiden eräkoon < numerosta:
- Mitä pienempi erä, sitä epätarkempi arvio gradientista on. Alla olevasta kuvasta näet, että minierägradientin suunta (vihreä väri) vaihtelee paljon enemmän kuin koko erägradientin suunta (sininen väri).
Stokastinen on vain mini-erä batch_size
yhtä kuin 1. Tällöin kaltevuus muuttaa suuntaa jopa useammin kuin mini-erägradientti.
Kommentit
- Ei, en ’ t. Tämä on suosittu tekniikka hermoverkoissa ja tämä terminologia näkyy eri kirjastoissa, kirjoissa ja artikkeleissa. Haluatko tarkistaa testidatavirheen jokaisessa aikakaudessa vai vain tarkistaa mallin harjoituksen jälkeen?
- Myös verkko lähentyy nopeammin, koska päivitysten määrä on huomattavasti suurempi. Pienikokoisen koon asettaminen on eräänlainen taide, liian pieni, ja saatat tehdä oppimisestasi liian stokastisen, nopeamman, mutta muuttuu epäluotettaviksi malleiksi, liian suuriksi, ja se ei sovi muistiin ja vie silti ikää. > Tarkoittaako tämä sitä, että
batch_size=<size of dataset>
pidetään verkko-oppimisena vai pikemminkinbatch_size=1
? Ja pysyykö tämä kaikki totta myös RNN: n kohdalla? Kun käytetäänbatch_size
RNN: ssä, pidetäänkö erää eräänlaisena virtuaalisena aikavaiheena siinä, että kaikki erän esiintymät lasketaan ikään kuin ne tapahtuisivat kerralla ? - Kun ihmiset sanovat verkkokoulutuksen, he tarkoittavat yleensä
batch_size=1
. Verkko-oppimisen idea on, että päivität mallisi heti, kun näet esimerkin. Suuremman eräkoon ansiosta se on ensin läpi useita näytteitä ennen päivitystä. RNN: ssä erän koolla voi olla eri merkitykset.Yleensä ’ on yleistä jakaa harjoitussarja kiinteän kokoiseksi ikkunaksi (kuten 10 sanaa). Tässä tapauksessa 100 tämän ikkunan sisällyttäminen harjoituksen aikana tarkoittaa, että sinulla onbatch_size=100
. - @Oleg Melnikov, jos viimeisen erän koko on huomattavasti pienempi (anna ’ s sanovat, että se olisi 1 50: n sijasta), sitten kaltevuusarvio olisi vähemmän tarkka ja se voi ruuvata hieman painojasi. Kuvittele yllä olevassa kuvassa, että teet 10 päivitystä mini-erällä 100 (vihreät viivat) ja yhdellä mini-erällä 1 (punainen viiva). Mikä tarkoittaa, että seuraavalla aikakaudella muutama ensimmäinen iterointi voi alkaa ratkaista ongelmaa edellisen aikakauden viimeisen mini-erän 1 päivityksellä.
Vastaa
Hermoverkkoterminologiassa:
- yksi aikakausi = yksi eteenpäin ja yksi taaksepäin kaikki harjoitusesimerkit
- eräkoko = harjoitteluesimerkkien määrä yhdellä eteen- / taaksepäin-syötöllä. Mitä suurempi eräkoko, sitä enemmän muistitilaa tarvitset.
- iteraatioiden määrä = läpikertojen lukumäärä, jokainen kulku käyttämällä [erän koko] esimerkkien lukumäärää. Selkeyden vuoksi yksi syöttö = yksi eteenpäin ja yksi taaksepäin (eteenpäin ja taaksepäin ei lasketa kahta eroa).
Esimerkki: jos sinulla on 1000 harjoitusesimerkkiä ja eräsi on 500, yhden aikakauden loppuun saattaminen kestää kaksi iteraatiota.
FYI: Kompromissierän koko verrattuna iteraatioiden määrään hermoverkon kouluttamiseksi
Kommentit
- Mutta mikä ero on käyttämällä [eräkoko] esimerkkien lukumäärää ja kouluttamalla verkkoa jokaisessa esimerkissä ja jatka seuraavien [eräkoko] numeroiden esimerkkien kanssa. Koska välität yhden esimerkin verkon läpi ja käytät SGD: tä ja otat seuraavan esimerkin ja niin edelleen, se ei tee ero, jos erän koko on 10 tai 1000 tai 100000. Kun [batc h size] esimerkkien lukumäärä on tehty, seuraava seuraava erä seuraa. Sillä on merkitystä vain, jos [erän koko] esimerkkien numerot läpäisevät [iteraatioiden lukumäärä] kertaa verkon ja jatkavat sitten seuraavia [erän koko] esimerkkejä.
- Tärkeä ero on, että oppimisvaihe (yksi vaihe) käytetään kerran jokaisessa erässä, kun sinun täytyy selata kaikkia eriä yhden aikakauden tekemiseksi. Ero on siis myös algoritminen paitsi muistissa: isommat erät tarkoittavat, että keskiarvo gradientti useammalle näytteelle.
- Mikä ’ s ero aikakauden ja iteraatioiden välillä ?
- @Goldname 1 -kausi sisältää kaikki harjoitusesimerkit, kun taas yksi iterointi sisältää vain [erän koko] lukumäärän harjoitusesimerkkejä.
- Joten: Jos aikakausien määrä on vakio, ja me ’ piirretään konvergenssikaavio uudelleen siten, että kukin piste edustaa tulosta jokaisen aikakauden jälkeen, voimme odottaa tuloksena olevan kaavion olevan ’ tasaisempi ’ (ja harjoittelu hitaammaksi), kun laskemme
batch_size
?
Vastaus
Kun ratkaiset optimointiongelman prosessorilla tai grafiikkasuoritimella, käytät iteratiivisesti algoritmia joillekin syötetiedoille. Jokaisessa näistä iteraatioista päivität yleensä ongelman mittarin tekemällä joitain laskelmia tietoihin. Nyt kun tietojesi koko on suuri, se saattaa tarvita huomattavan paljon aikaa jokaisen iteraation suorittamiseen, ja se voi kuluttaa paljon resursseja. Joten joskus päätät käyttää näitä iteratiivisia laskutoimituksia tietyssä osassa ajan ja laskennallisten resurssien säästämiseksi. Tämä osa on batch_size ja prosessia kutsutaan (Neural Network Lingo) erätietojen prosessoinniksi. Kun sovellat laskelmia kaikkiin tietoihin, teet online-tietojenkäsittelyä. Luulen, että terminologia tulee 60-luvulta ja jopa ennen. Muistaako kukaan .bat DOS -tiedostot? Mutta tietysti käsite inkarnoitui tarkoittamaan ketjua tai osaa käytettävästä datasta.
vastaus
Eräkoosta Keras
-dokumentaatio löytyy kohdasta fit
-funktio -mallit (toiminnallinen sovellusliittymä) -sivulla
batch_size
: Kokonaisluku tai Ei mitään. Näytteiden lukumäärä gradienttipäivitystä kohden. Jos määrittelemätön, batch_size on oletusarvoisesti 32.
Jos sinulla on pieni tietojoukko, olisi parasta tehdä eräkoko yhtä suuri kuin harjoittelutiedot. Yritä ensin pienellä erällä ja lisää sitten ajan säästämiseksi. Kuten itdxer mainitsi, tarkkuuden ja nopeuden välillä on kompromissi.
Vastaus
Eräkoko on hyperparametri, joka määrittää käytetyn näytteen määrän ennen sisäisten malliparametrien päivittämistä.