Spørgsmål:
Hvad er batchstørrelse i neuralt netværk?
user2991243
2015-05-22 14:15:22 UTC
view on stackexchange narkive permalink

Jeg bruger Python Keras-pakke til neuralt netværk. Dette er linket. Er batch_size lig med antallet af testprøver? Fra Wikipedia har vi disse oplysninger:

I andre tilfælde kan evaluering af sumgradienten muligvis kræve dyre evalueringer af gradienterne fra alle sommerfunktioner. Når træningssættet er enormt, og der ikke findes enkle formler, bliver det meget dyrt at evaluere summen af ​​gradienter, fordi evaluering af gradienten kræver evaluering af alle summerfunktionernes 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 maskinlæringsproblemer.

Ovenstående information beskriver testdata? Er dette det samme som batch_size i keras (antal prøver pr. Gradientopdatering)?

Det er godt at se https://class.coursera.org/ml-005/lecture/preview kursus, især for dig uge 4-6 + 10. Wikipedia er måske ikke så værdifuld ressource for at lære neurale netværk.
Fem svar:
itdxer
2015-05-22 14:47:47 UTC
view on stackexchange narkive permalink

batchstørrelse definerer antallet af prøver, der skal formeres gennem netværket.

Lad os for eksempel sige, at du har 1050 træningseksempler, og at 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. Problem kan opstå 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 hente 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. Det 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 er fordi 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ærks parametre. Hvis vi brugte alle prøver under udbredelse, foretog vi kun 1 opdatering til netværksparameteren.

Ulemper ved at bruge en batchstørrelse < antal af alle prøver:

  • Jo mindre batch, jo 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 sammenlignet med retningen af ​​den fulde batchgradient (blå farve).

Gradient directions for different batch setups

Stokastisk er bare en mini-batch med batch_size svarende til 1. I så fald ændrer gradienten sin retning endnu oftere end en mini-batch-gradient.

Tak for svaret.arbejder du med `Keras`?alligevel at indstille testdata i denne pakke?
Nej, det gjorde jeg ikke.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?
Ja.Det er rigtigt.Lignende struktur har vi i `MATLAB`, men jeg fandt kun tog- og valideringsdatasæt her.Jeg tror her i denne pakkevalideringsdatasæt er det samme som testdata, men der stoppes ikke tidligt, så vi har ingen reelle valideringsdata.
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 vil konvergere til upålidelige modeller, for store, og det passer ikke ind i hukommelsen og tager stadig aldre.
Betyder dette, at "batch_size = " betragtes som online læring, eller rettere "batch_size = 1"?Og forbliver alt dette også for RNN'er?Når der bruges 'batch_size' i RNN'er, betragtes batchen som en slags _virtual tidsskridt_, idet alle forekomsterne i denne batch beregnes som om de opstod på én gang?
Typisk 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 vindue med fast størrelse (som 10 ord).I dette tilfælde inkluderer 100 af disse vinduer under træningen, at du har 'batch_size = 100'.
@itdxer: "Problemet sker normalt med det sidste sæt prøver."Hvad er problemet nøjagtigt?Så den sidste batch bærer 50 prøver, men er designet til at bære 100. Jeg kan ikke se et problem her, udover en lille gener af halvspildt batch kun i sidste trin.Hvad overser jeg?
@Oleg Melnikov, hvis din sidste batch har betydeligt mindre størrelse (lad os sige, at det ville være 1 i stedet for 50), så ville 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 et par første iteration begynde at løse problemer med den sidste mini batch 1 opdatering fra den forrige periode.
@itdxer.Hvorfor ville gradienten være mindre nøjagtig?Det ser ud til, at du antager, at i implementeringen af Keras og TF ville den sidste batch blive polstret med noget støj, der ville slette gradienten.Er det rigtigt?Under alle omstændigheder noget at tænke over;)
@OlegMelnikov MIT deep learning book har en god forklaring relateret til dette problem (kapitel 8.1.3): http://www.deeplearningbook.org/contents/optimization.html
Det lyder som om dette svar er forkert eller forvirrende.Fra hvad jeg ved, er batchstørrelsen antallet af varer fra datasættet, det tager at udløse vægtjusteringen.Så hvis du bruger batch-størrelse 1, opdaterer du vægte efter hver prøve.Hvis du bruger batchstørrelse 10, beregner du gennemsnitsfejl og opdaterer derefter vægte hver 10. prøve.
Batch, der almindeligvis bruges som en terminologi til træning af antal prøver, men det er ikke nødvendigt at anvende træning for at kalde det batch.Hvis du har en database med 100M enheder, som du vil klassificere, bliver du stadig nødt til at opdele den i batches og forudsige dig pr. Batch (selvom du vil distribuere den på mange maskiner).Faktisk vil mange biblioteker bruge terminologi med batchstørrelse i disse tilfælde (du kan tjekke Keras doc).Med batchstørrelse udbredes alle 10 eksempler på samme tid, men gradient beregnes pr. Gennemsnitlig fejl, da den er mere effektiv.
Endnu en fordel ved mini-batch gradientnedstigning er, at den kan springe ud af lokale minimas, hvis omkostningsfunktionen ikke er konveks.Så ulempen nævnt i svaret kan faktisk være en fordel i disse scenarier.
Franck Dernoncourt
2015-08-06 02:12:44 UTC
view on stackexchange narkive permalink

I den neurale netværksterminologi:

  • en epoke = en fremadgående pasning og en bagudgående pasning af alle træningseksemplerne
  • batchstørrelse = antallet af træningseksempler i en fremad / bagudpasning. Jo højere batchstørrelse, desto mere hukommelsesplads har du brug for.
  • antal iterationer = antal passeringer, hvert pass ved hjælp af [batchstørrelse] antal eksempler. For at være klar, en pas = en pas frem + en baglæns pas (vi tæller ikke den fremadgående og den bagudgående pas som to forskellige pas).

Eksempel: hvis du har 1000 træningseksempler , og din batchstørrelse er 500, så tager det 2 iterationer at gennemføre 1 epoke.

FYI: Tradeoff batchstørrelse vs. antal iterationer for at træne et neuralt netværk

Men hvad er forskellen mellem at bruge [batchstørrelse] antal eksempler og træne netværket i hvert eksempel og fortsætte med de næste [batchstørrelse] numreeksempler.Da du sender et eksempel gennem netværket og anvender SGD og tager det næste eksempel og så videre, vil det ikke gøre nogen forskel, hvis batchstørrelsen er 10 eller 1000 eller 100000. Efter [batchstørrelse] foretages antallet af eksempler, det næste eksempel pånæste batch følger.Det gør kun en forskel, hvis [batchstørrelse] antallet af eksempler vil passere [antal iterationer] gange netværket og derefter fortsætte med de næste [batchstørrelses] eksempler.
En vigtig skelnen er, at indlæringstrinnet (et trin) anvendes en gang for hver batch, mens du er nødt til at cykle gennem alle batches 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-epoken inkluderer alle træningseksemplerne, mens 1 iteration kun inkluderer [batchstørrelse] antal træningseksempler.
Så hvis antallet af epoker er konstant, og 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 bliver langsommere), når vi falder"batch_størrelse"?
pebox11
2017-07-10 20:12:14 UTC
view on stackexchange narkive permalink

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 en betydelig mængde tid til at fuldfø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 60'erne 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.

otayeby
2018-07-25 01:38:33 UTC
view on stackexchange narkive permalink

Dokumentationen til Keras om batchstørrelse findes under fit -funktionen på siden Modeller (funktionel API)

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æningsdataene.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.

Ehtisham Raza
2020-04-20 10:14:13 UTC
view on stackexchange narkive permalink

Batchstørrelse er et hyperparameter, der definerer antallet af prøver, der skal arbejdes med, inden de interne modelparametre opdateres.



Denne spørgsmål og svar blev automatisk oversat fra det engelske sprog.Det originale indhold er tilgængeligt på stackexchange, som vi takker for den cc by-sa 3.0-licens, den distribueres under.
Loading...