Vad är batchstorlek i neurala nätverk?

Jag använder Python Keras package för neuralt nätverk. Detta är länk . Är batch_size lika med antalet testprover? Från Wikipedia har vi detta information:

I andra fall kan det dock krävas dyra utvärderingar av lutningarna från alla sommarfunktioner för att utvärdera summeringsgradienten. När träningsuppsättningen är enorm och inga enkla formler finns, att utvärdera lutningssummorna blir mycket dyra, för att utvärdera lutningen kräver utvärdering av alla summerfunktionernas ”lutningar. För att spara på beräkningskostnaden vid varje iteration samplar stokastisk gradientnedgång en delmängd av summerfunktioner i varje steg. Detta är mycket effektivt när det gäller storskaliga maskininlärningsproblem.

Ovanstående information beskriver testdata? Är det samma som batch_size i keras (Antal prover per gradientuppdatering)?

Kommentarer

Svar

batchstorlek definierar antalet prover som ska förökas via nätverket.

Till exempel , låt oss säga att du har 1050 träningsprover och att du vill ställa in en batch_size lika med 100. Algoritmen tar de första 100 exemplen (från 1: a till 100: e) från träningsdatasetet och tränar nätverket. Därefter tar det de andra 100 proverna (från 101. till 200: e) och tränar nätverket igen. Vi kan fortsätta göra den här proceduren tills vi har spridit alla prover genom nätverket. roblem kan hända med den sista uppsättningen prover. I vårt exempel har vi använt 1050 som inte är delbart med 100 utan resten. Den enklaste lösningen är bara att få de slutliga 50 proverna och träna nätverket.

Fördelar med att använda en batchstorlek < antal alla prover:

  • Det kräver mindre minne. Eftersom du tränar nätverket med färre prover kräver den övergripande träningsproceduren mindre minne. ”s särskilt viktigt om du inte kan passa hela datasetet i maskinens minne.

  • Normalt tränar nätverk snabbare med minibatcher. Det beror på att vi uppdaterar vikterna efter varje förökning. I vårt exempel har vi förökat 11 satser (10 av dem hade 100 prover och 1 hade 50 prover) och efter var och en av dem har vi uppdaterat våra nätverksparametrar. Om vi använde alla prover under förökning skulle vi bara göra en uppdatering för nätverksparametern.

Nackdelar med att använda en batchstorlek < antal av alla prover:

  • Ju mindre partiet desto mindre exakt blir uppskattningen av lutningen. I figuren nedan kan du se att riktningen för mini-batch-gradienten (grön färg) fluktuerar mycket mer jämfört med riktningen för hela batch-gradienten (blå färg).

Gradientanvisningar för olika batchuppsättningar

Stochastic är bara en minibatch med batch_size lika med 1. I så fall ändrar gradienten riktningen ännu oftare än en mini-batchgradient.

Kommentarer

  • Nej, jag har inte ’ t. Detta är populär teknik i neurala nätverk och denna terminologi kan du se i olika bibliotek, böcker och artiklar. Vill du kontrollera testdatafel i varje epok eller bara verifiera modell efter träning?
  • Nätverket konvergerar också snabbare eftersom antalet uppdateringar är betydligt högre. Att ställa in mini-batchstorleken är typ av konst, för liten och du riskerar att göra ditt lärande för stokastiskt, snabbare men kommer att konvergera till opålitliga modeller, för stort och det passar inte in i minnet och tar fortfarande åldrar. > Betyder detta att batch_size=<size of dataset> betraktas som online-lärande, eller snarare batch_size=1? Och förblir allt detta också för RNN? När batch_size används i RNNs, betraktas batchen som ett slags virtuell tidssteg genom att alla instanser i den batchen beräknas som om de inträffade på en gång ?
  • Vanligtvis när människor säger online-lärande menar de batch_size=1. Tanken bakom online-lärande är att du uppdaterar din modell så snart du ser exemplet. Med större satsstorlek betyder det att du först tittar igenom flera prover innan du gör uppdatering. I RNN kan satsens storlek ha olika betydelser.Vanligtvis är det ’ vanligt att dela träningssekvensen i fönster med fast storlek (som tio ord). I det här fallet kommer 100 av dessa fönster under träningen att innebära att du har batch_size=100.
  • @Oleg Melnikov, om din sista sats har betydligt mindre storlek (låt ’ säger att det skulle vara 1 istället för 50), då skulle uppskattningen för lutningen vara mindre exakt och det kan skruva upp dina vikter. På bilden ovan kan du föreställa dig att du gör 10 uppdateringar med en minibatch 100 (gröna linjer) och en med minibatch 1 (röd linje). Vilket innebär att i nästa epok kan några första iteration börja lösa problem med senaste mini batch 1-uppdatering från föregående epok.

Svar

I neuronätverksterminologin:

  • en epok = ett framåtpass och ett bakåtpass av alla träningsexemplen
  • batchstorlek = antalet träningsexempel i ett framåt / bakåtpass. Ju högre batchstorlek, desto mer minnesutrymme behöver du.
  • antal iterationer = antal pass, varje pass med [batchstorlek] antal exempel. För att vara tydlig, ett pass = ett pass framåt + ett bakåtpass (vi räknar inte framåtpasset och bakåtpasset som två olika passeringar).

Exempel: om du har 1000 träningsexempel och din batchstorlek är 500, tar det två iterationer att slutföra en epok.

FYI: Avvägning mellan batchstorlek och antal iterationer för att träna ett neuralt nätverk

Kommentarer

  • Men vad är skillnaden mellan använder [batchstorlek] antal exempel och tränar nätverket i varje exempel och fortsätter med nästa [batchstorlek] -exempel. Eftersom du skickar ett exempel genom nätverket och tillämpar SGD och tar nästa exempel och så kommer det att göra ingen skillnad om satsstorleken är 10 eller 1000 eller 100000. Efter [batc h storlek] antal exempel görs nästa exempel på nästa sats kommer att följa. Det gör bara skillnad om [batchstorlek] antal exempel passerar [antal iterationer] gånger nätverket och sedan fortsätter med nästa [batchstorlek] exempel.
  • En viktig skillnad är att inlärningssteget (ett steg) appliceras en gång för varje sats, medan du måste gå igenom alla satser för att göra en epok. Så skillnaden är också algoritmisk, inte bara i minnet: större satser betyder att du genomsnittlig lutningen över fler prover.
  • Vad ’ är skillnaden mellan epok och iterationer ?
  • @Goldname 1-epoken innehåller alla träningsexempel medan 1 iteration endast innehåller [batchstorlek] antal träningsexempel.
  • Så: Om antalet epoker är konstant, och vi ’ om vi plottar konvergensdiagrammet med varje punkt som representerar resultatet efter varje epok, kan vi förvänta oss att den resulterande plotten blir ’ mjukare ’ (och träningen blir långsammare) när vi minskar batch_size?

Svar

När du löser ett optimeringsproblem med en CPU eller en GPU använder du iterativt en algoritm över vissa ingångsdata. I var och en av dessa iterationer uppdaterar du vanligtvis ett mätvärde för ditt problem genom att göra några beräkningar på data. Nu när storleken på dina data är stor kan det behöva en avsevärd tid för att slutföra varje iteration och kan ta mycket resurser. Så ibland väljer du att tillämpa dessa iterativa beräkningar på en del av data för att spara tid och beräkningsresurser. Denna del är batch_size och processen kallas (i Neural Network Lingo) batch-databehandling. När du använder dina beräkningar på all din data gör du online databehandling. Jag antar att terminologin kommer från 60-talet och till och med tidigare. Kommer någon ihåg .bat DOS-filerna? Men naturligtvis inkarneras konceptet för att betyda en tråd eller del av den data som ska användas.

Svar

Dokumentationen för Keras om batchstorlek finns under fit -funktion på Modeller (funktionellt API) -sida

batch_size: Heltal eller inget. Antal prover per gradientuppdatering. Om det inte är specificerat kommer batch_size som standard att vara 32.

Om du har en liten dataset är det bäst att göra batchstorleken lika med storleken på utbildningsdata. Försök först med en liten sats och öka sedan för att spara tid. Som itdxer nämnde finns det en avvägning mellan noggrannhet och hastighet.

Svar

Batchstorlek är en hyperparameter som definierar antalet prov att arbeta igenom innan de interna modellparametrarna uppdateras.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *