Hva er batchstørrelse i nevrale nettverk?

Jeg bruker Python Keras package for nevrale nettverk. Dette er link . Er batch_size lik antall testprøver? Fra Wikipedia har vi dette informasjon:

I andre tilfeller kan evaluering av sumgradienten imidlertid kreve dyre evalueringer av gradientene fra alle summand-funksjoner. Når treningssettet er enormt og ingen enkle formler eksisterer. Det blir veldig dyrt å evaluere summen av graderinger, fordi det å evaluere gradienten krever evaluering av alle gradientfunksjonene. For å spare på beregningskostnadene ved hver iterasjon, prøver stokastisk gradientnedstigning en delmengde av summand-funksjoner i hvert trinn. Dette er veldig effektivt når det gjelder store maskinlæringsproblemer.

Ovenfor informasjonen beskriver testdata? Er dette det samme som batch_size i keras (Antall prøver per gradientoppdatering)?

Kommentarer

Svar

batchstørrelse definerer antall prøver som skal forplantes gjennom nettverket.

For eksempel , la oss si at du har 1050 treningseksempler og at du vil sette opp en batch_size lik 100. Algoritmen tar de første 100 prøvene (fra 1. til 100.) fra treningsdatasettet og trener nettverket. Deretter tar det de andre 100 prøvene (fra 101. til 200.) og trener nettverket igjen. Vi kan fortsette å gjøre denne prosedyren til vi har spredt alle prøvene gjennom nettverket. roblem kan skje med det siste settet med prøver. I vårt eksempel har vi brukt 1050 som ikke kan deles med 100 uten resten. Den enkleste løsningen er bare å få de siste 50 prøvene og trene nettverket.

Fordeler med å bruke en batchstørrelse < antall prøver:

  • Det krever mindre minne. Siden du trener nettverket med færre prøver, krever den generelle opplæringsprosedyren mindre minne. «er spesielt viktig hvis du ikke klarer å passe hele datasettet i maskinens minne.

  • Nettverk trener vanligvis raskere med minibatcher. Det er fordi vi oppdaterer vektene etter hver forplantning. I vårt eksempel har vi propagert 11 grupper (10 av dem hadde 100 prøver og 1 hadde 50 prøver), og etter hver av dem har vi oppdatert nettverkets parametere. Hvis vi brukte alle prøvene under forplantning, ville vi bare gjøre en oppdatering for nettverksparameteren.

Ulemper ved å bruke en batchstørrelse < antall alle prøver:

  • Jo mindre batchen er, desto mindre nøyaktig blir estimatet for gradienten. I figuren nedenfor kan du se at retningen til minibatchgradienten (grønn farge) svinger mye mer i forhold til retningen til full batchgradienten (blå farge).

Gradientanvisninger for forskjellige batchoppsett

Stochastic er bare en minibatch med batch_size lik 1. I så fall endrer gradienten retning enda oftere enn en mini-batchgradient.

Kommentarer

  • Nei, jeg ‘ t. Dette er populær teknikk i nevrale nettverk og denne terminologien kan du se i forskjellige biblioteker, bøker og artikler. Vil du sjekke testdatafeil i hver epoke eller bare bekrefte modellen etter trening?
  • Nettverket konvergerer også raskere ettersom antall oppdateringer er betydelig høyere. Å sette opp mini-batchstørrelsen er litt av en kunst, for liten, og du risikerer å gjøre læringen for stokastisk, raskere, men vil konvergere til upålitelige modeller, for stor, og den vil ikke passe inn i minnet og fortsatt ta aldre.
  • Betyr dette at batch_size=<size of dataset> betraktes som læring på nettet, eller rettere sagt batch_size=1? Og forblir alt dette også for RNN-er? Når du bruker batch_size i RNNs, betraktes batchen som en slags virtuell tidssteg ved at alle forekomster i den batchen vil bli beregnet som om de skjedde samtidig ?
  • Vanligvis når folk sier online læring, betyr de batch_size=1. Tanken bak online læring er at du oppdaterer modellen din så snart du ser eksemplet. Med større batchstørrelse betyr det at du først ser gjennom flere eksempler før du gjør oppdateringen. I RNN kan størrelsen på batchen ha forskjellige betydninger.Vanligvis er det ‘ vanlig å dele treningssekvensen i vindu med fast størrelse (som 10 ord). I dette tilfellet vil 100 av disse vinduene under opplæringen bety at du har batch_size=100.
  • @Oleg Melnikov, hvis den siste batchen din har betydelig mindre størrelse (la ‘ sier at det ville være 1 i stedet for 50), så vil estimatet for gradienten være mindre nøyaktig, og det kan skru opp vektene dine. På bildet over kan du forestille deg at du gjør 10 oppdateringer med en mini batch 100 (grønne linjer) og en med mini batch 1 (rød linje). Noe som betyr at i løpet av neste epoke kan noen første iterasjon begynne å løse problemet med siste mini batch 1-oppdatering fra forrige epoke.

Svar

I nevronnettverkets terminologi:

  • en epoke = en fremoverpass og en bakoverpasning av alle opplæringseksemplene
  • batchstørrelse = antall treningseksempler i en frem / bakover-pasning. Jo høyere batchstørrelse, jo mer minneplass trenger du.
  • antall iterasjoner = antall pasninger, hver passering bruker [batchstørrelse] antall eksempler. For å være klar, ett pass = ett pass frem + ett bakoverpass (vi teller ikke fremover og bakoverpass som to forskjellige pasninger).

Eksempel: Hvis du har 1000 treningseksempler, og batchstørrelsen din er 500, vil det ta to iterasjoner å fullføre en epoke.

FYI: Avvei batchstørrelse kontra antall iterasjoner for å trene et nevralt nettverk

Kommentarer

  • Men hva er forskjellen mellom ved hjelp av [batchstørrelse] antall eksempler og trener nettverket på hvert eksempel og fortsetter med de neste [batchstørrelse] talleksemplene. Siden du sender ett eksempel gjennom nettverket og bruker SGD og tar det neste eksemplet og så videre, vil det ikke gjøre noe forskjell hvis batchstørrelsen er 10 eller 1000 eller 100000. Etter [batc antall eksempler er ferdig neste eksempel på neste batch vil følge. Det gjør bare en forskjell om [batchstørrelse] antall eksempler vil passere [antall iterasjoner] ganger nettverket og deretter fortsette med de neste [batchstørrelses] eksemplene.
  • Et viktig skille er at læringstrinnet (ett trinn) brukes en gang for hver batch, mens du må bla gjennom alle batchene for å lage en epoke. Så forskjellen er også algoritmisk, ikke bare i minnet: større grupper betyr at du gjennomsnittlig gradienten over flere eksempler.
  • Hva ‘ er forskjellen mellom epoke og iterasjoner ?
  • @Goldname 1 epoke inkluderer alle treningseksemplene mens 1 iterasjon bare inneholder [batchstørrelse] antall treningseksempler.
  • Så: Hvis antall epoker er konstant, og vi ‘ Når vi plotter konvergensplottet med hvert punkt som representerer resultatet etter hver epoke, kan vi forvente at det resulterende plottet blir ‘ glattere ‘ (og treningen for å være tregere) når vi reduserer batch_size?

Svar

Når du løser et optimaliseringsproblem med en CPU eller en GPU, bruker du iterativt en algoritme over noen inngangsdata. I hver av disse gjentakelsene oppdaterer du vanligvis en beregning av problemet ditt ved å gjøre noen beregninger på dataene. Nå når størrelsen på dataene dine er store, kan det trenge mye tid å fullføre hver iterasjon, og kan bruke mye ressurser. Så noen ganger velger du å bruke disse iterative beregningene på en del av dataene for å spare tid og beregningsressurser. Denne delen er batch_size og prosessen kalles (i Neural Network Lingo) batch databehandling. Når du bruker beregningene dine på alle dataene dine, gjør du online databehandling. Jeg antar at terminologien kommer fra 60-tallet, og til og med før. Husker noen .bat DOS-filene? Men selvfølgelig begrepet inkarnert til å bety en tråd eller del av dataene som skal brukes.

Svar

Dokumentasjonen for Keras om batchstørrelse finner du under fit -funksjon i Modeller (funksjonell API) -side

batch_size: Heltall eller Ingen. Antall prøver per gradientoppdatering. Hvis ikke spesifisert, vil batch_size som standard være 32.

Hvis du har et lite datasett, ville det være best å gjøre batchstørrelsen lik størrelsen på treningsdata. Forsøk først med et lite parti, og øk deretter for å spare tid. Som itdxer nevnte, er det en avveining mellom nøyaktighet og hastighet.

Svar

Batchstørrelse er et hyperparameter som definerer antall eksempler som skal bearbeides før du oppdaterer interne modellparametere.

Legg igjen en kommentar

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