Jeg bruger Python Keras package
til neuralt netværk. Dette er link . Er batch_size
lig med antallet af testprøver? Fra Wikipedia har vi dette information:
I andre tilfælde kan evalueringen af sumgradienten dog kræve dyre evalueringer af gradienterne fra alle sommerfunktioner. Når træningssættet er enormt og ingen enkle formler findes, at evaluere summen af gradienter bliver meget dyre, fordi evaluering af gradienten kræver evaluering af alle gradandfunktionernes “gradienter. For at udnytte beregningsomkostningerne ved hver iteration prøver stokastisk gradientnedstigning en delmængde af sommerfunktioner ved hvert trin. Dette er meget effektivt i tilfælde af store maskinindlæringsproblemer.
Ovenstående information beskriver testdata? Er dette det samme som batch_size
i keras (antal prøver pr. Gradientopdatering)?
Kommentarer
- Det ‘ er godt at se class.coursera.org/ml-005/lecture/preview kursus, især til du uge 4-6 + 10. Wikipedia er muligvis ikke så værdifuld ressource til at lære neurale netværk.
Svar
batchstørrelse definerer antallet af prøver, der skal formeres gennem netværket.
For eksempel , lad os sige, at du har 1050 træningseksempler, og du vil oprette en batch_size
svarende til 100. Algoritmen tager de første 100 prøver (fra 1. til 100.) fra træningsdatasættet og træner netværket. Derefter tager det de anden 100 prøver (fra 101. til 200.) og træner netværket igen. Vi kan fortsætte med at gøre denne procedure, indtil vi har udbredt alle prøver gennem netværket. P roblem kan ske med det sidste sæt prøver. I vores eksempel har vi brugt 1050, som ikke kan deles med 100 uden resten. Den enkleste løsning er bare at få de sidste 50 prøver og træne netværket.
Fordele ved at bruge en batchstørrelse < antal af alle prøver:
-
Det kræver mindre hukommelse. Da du træner netværket ved hjælp af færre prøver, kræver den samlede træningsprocedure mindre hukommelse. “er især vigtigt, hvis du ikke er i stand til at passe hele datasættet i din maskins hukommelse.
-
Netværk træner typisk hurtigere med mini-batches. Det skyldes, at vi opdaterer vægtene efter hver formering. I vores eksempel har vi “udbredt 11 batcher (10 af dem havde 100 prøver og 1 havde 50 prøver), og efter hver af dem har vi opdateret vores netværksparametre. Hvis vi brugte alle prøver under formering, foretog vi kun 1 opdatering for netværkets parameter.
Ulemper ved at bruge en batchstørrelse < antal af alle prøver:
- Jo mindre batch, desto mindre nøjagtigt bliver estimatet af gradienten. I figuren nedenfor kan du se, at retningen af mini-batch-gradienten (grøn farve) svinger meget mere i forhold til retningen af den fulde batchgradient (blå farve).
Stokastisk er bare en mini-batch med batch_size
lig med 1. I så fald ændrer gradienten sin retning endnu oftere end en mini-batch-gradient.
Kommentarer
- Nej, det gjorde jeg ikke ‘ t. Dette er populær teknik i neurale netværk, og denne terminologi kan du se i forskellige biblioteker, bøger og artikler. Vil du kontrollere testdata-fejl i hver epoke eller bare kontrollere model efter træning?
- Netværket konvergerer også hurtigere, da antallet af opdateringer er betydeligt højere. Opsætning af mini-batchstørrelse er en slags kunst, for lille, og du risikerer at gøre din læring for stokastisk, hurtigere, men konvergerer til upålidelige modeller, for stor, og den passer ikke ind i hukommelsen og tager stadig aldre.
- Betyder dette, at
batch_size=<size of dataset>
betragtes som online-læring, eller retterebatch_size=1
? Og forbliver alt dette også for RNNer? Når du brugerbatch_size
i RNNer, betragtes batchet som en slags virtuel tidsfrist ved at alle forekomster i denne batch beregnes som om de opstod på én gang ? - Normalt når folk siger online-læring, betyder de
batch_size=1
. Ideen bag online læring er, at du opdaterer din model, så snart du ser eksemplet. Med større batchstørrelse betyder det, at du først kigger gennem de mange prøver, inden du foretager opdatering. I RNN kan batchstørrelsen have forskellige betydninger.Normalt er det ‘ almindeligt at opdele træningssekvensen i et vindue med fast størrelse (som 10 ord). I dette tilfælde inkluderer 100 af disse vinduer under træningen, at du harbatch_size=100
. - @Oleg Melnikov, hvis din sidste batch har betydeligt mindre størrelse (lad ‘ siger, at det ville være 1 i stedet for 50), så vil estimatet for gradienten være mindre nøjagtigt, og det kan skrue lidt op til dine vægte. På billedet ovenfor kan du forestille dig, at du foretager 10 opdateringer med en mini-batch 100 (grønne linjer) og en med mini-batch 1 (rød linje). Hvilket betyder, at i den næste periode kan nogle få første iteration begynde at løse problemer med den sidste mini batch 1 opdatering fra den forrige periode.
Svar
I det neurale netværksterminologi:
- en epoke = en fremadgående aflevering og en bagudgående aflevering af alle træningseksemplerne
- batchstørrelse = antallet af træningseksempler i en fremad / bagudpasning. Jo højere batchstørrelse, jo mere hukommelsesplads har du brug for.
- antal iterationer = antal pasninger, hvor hvert pas bruger [batchstørrelse] antal eksempler. For at være klar, et gennemløb = et fremadgående + et baglæns pas (vi tæller ikke det fremadgående og det bagudgående pass som to forskellige pass).
Eksempel: Hvis du har 1000 træningseksempler, og din batchstørrelse er 500, tager det to iterationer at gennemføre 1 epoke.
FYI: Kompromis mellem batchstørrelse og antal iterationer for at træne et neuralt netværk
Kommentarer
- Men hvad er forskellen mellem ved hjælp af [batchstørrelse] antal eksempler og træner netværket i hvert eksempel og fortsætter med de næste eksempler på [batchstørrelse] numre. Da du sender et eksempel gennem netværket og anvender SGD og tager det næste eksempel osv., vil det ikke gøre noget forskel, hvis batchstørrelsen er 10 eller 1000 eller 100000. Efter [batc antal af eksempler udføres, det næste eksempel på den næste batch følger. Det gør kun en forskel, hvis [batchstørrelse] antallet af eksempler passerer [antal iterationer] gange netværket og derefter fortsætter med de næste [batchstørrelse] eksempler.
- En vigtig forskel er, at indlæringstrinnet (et trin) anvendes én gang for hver batch, mens du skal gennemgå alle batcher for at lave en epoke. Så forskellen er også algoritmisk, ikke kun i hukommelsen: større batcher betyder, at du gennemsnitlig gradienten over flere prøver.
- Hvad ‘ er forskellen mellem epoke og iterationer ?
- @Goldname 1 epoke inkluderer alle træningseksemplerne, mens 1 iteration kun inkluderer [batchstørrelse] antal træningseksempler.
- Så: Hvis antallet af epoker er konstant, og vi ‘ når vi tegner konvergensdiagrammet med hvert punkt, der repræsenterer resultatet efter hver epoke, kan vi forvente, at det resulterende plot bliver ‘ glattere ‘ (og træningen skal være langsommere) når vi mindsker
batch_size
?
Svar
Når du løser et optimeringsproblem med en CPU eller en GPU, anvender du iterativt en algoritme over nogle inputdata. I hver af disse gentagelser opdaterer du normalt en måling af dit problem ved at lave nogle beregninger på dataene. Nu når størrelsen på dine data er stor, kan det have brug for lang tid at gennemføre hver iteration og kan forbruge en masse ressourcer. Så nogle gange vælger du at anvende disse iterative beregninger på en del af dataene for at spare tid og beregningsressourcer. Denne del er batch_størrelse, og processen kaldes (i Neural Network Lingo) batch databehandling. Når du anvender dine beregninger på alle dine data, udfører du online databehandling. Jeg antager, at terminologien kommer fra 60erne og endnu før. Kan nogen huske .bat DOS-filerne? Men selvfølgelig er begrebet inkarneret til at betyde en tråd eller del af de data, der skal bruges.
Svar
Dokumentationen til Keras
om batchstørrelse kan findes under fit
funktion i Modeller (funktionel API) side
batch_size
: Heltal eller Ingen. Antal prøver pr. Gradientopdatering. Hvis ikke specificeret, er batch_size som standard 32.
Hvis du har et lille datasæt, ville det være bedst at gøre batchstørrelsen lig med størrelsen på træningsdata. Forsøg først med et lille parti, og øg derefter for at spare tid. Som itdxer nævnte, er der en kompromis mellem nøjagtighed og hastighed.
Svar
Batchstørrelse er et hyperparameter, der definerer antallet af prøver, der skal gennemgås, inden interne modelparametre opdateres.