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
- Det är ’ bra att se class.coursera.org/ml-005/lecture/preview kurs, särskilt för du vecka 4-6 + 10. Wikipedia kanske inte är så värdefull resurs för att lära sig neurala nätverk.
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).
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 snararebatch_size=1
? Och förblir allt detta också för RNN? Närbatch_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 harbatch_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.