Wat is batchgrootte in neuraal netwerk?

Ik “gebruik Python Keras package voor neuraal netwerk. Dit is de link . Is batch_size gelijk aan het aantal testvoorbeelden? Van Wikipedia hebben we dit informatie:

In andere gevallen kan het evalueren van de som-gradiënt echter dure evaluaties van de gradiënten van alle summand-functies vereisen. Wanneer de trainingsset enorm is en er bestaan geen eenvoudige formules, het evalueren van de sommen van gradiënten wordt erg duur, omdat het evalueren van de gradiënt het evalueren van alle “gradiënten van de som en functies” vereist. Om bij elke iteratie te besparen op de rekenkosten, bemonstert stochastische gradiëntafdaling bij elke stap een subset van summand-functies. Dit is zeer effectief in het geval van grootschalige machine learning-problemen.

Beschrijft bovenstaande informatie testgegevens? Is dit hetzelfde als batch_size in keras (aantal monsters per verloopupdate)?

Opmerkingen

Antwoord

De batchgrootte definieert het aantal monsters dat door het netwerk wordt verspreid.

Bijvoorbeeld , stel dat u 1050 trainingsvoorbeelden heeft en dat u een batch_size wilt instellen die gelijk is aan 100. Het algoritme neemt de eerste 100 voorbeelden (van de 1e tot de 100e) uit de trainingsdataset en traint het netwerk. Vervolgens neemt het de tweede 100 monsters (van 101e tot 200e) en traint het netwerk opnieuw. We kunnen deze procedure blijven doen totdat we alle monsters door het netwerk hebben gepropageerd. P roblem kan gebeuren met de laatste set monsters. In ons voorbeeld hebben we “1050 gebruikt die niet deelbaar is door 100 zonder rest. De eenvoudigste oplossing is om de laatste 50 monsters te nemen en het netwerk te trainen.

Voordelen van het gebruik van een batchgrootte < aantal van alle samples:

  • Het vereist minder geheugen. Aangezien u het netwerk traint met minder samples, vereist de algehele trainingsprocedure minder geheugen. Dit is vooral belangrijk als u niet de hele dataset in het geheugen van uw machine kunt passen.

  • Netwerken trainen doorgaans sneller met mini-batches. Dat komt omdat we updaten de gewichten na elke voortplanting. In ons voorbeeld hebben we “11 batches gepropageerd (10 van hen hadden 100 monsters en 1 had 50 monsters) en na elk ervan hebben we de parameters van ons netwerk bijgewerkt. Als we alle monsters tijdens de propagatie zouden gebruiken, zouden we slechts 1 update uitvoeren voor de parameter van het netwerk.

Nadelen van het gebruik van een batchgrootte < aantal van alle monsters:

  • Hoe kleiner de batch, hoe minder nauwkeurig de schatting van het verloop zal zijn. In de onderstaande afbeelding kun je zien dat de richting van het minibatchverloop (groene kleur) veel meer fluctueert in vergelijking met de richting van het volledige batchverloop (blauwe kleur).

Verlooprichtingen voor verschillende batchopstellingen

Stochastic is slechts een mini-batch met batch_size gelijk aan 1. In dat geval verandert het verloop nog vaker van richting dan een mini-batch verloop.

Opmerkingen

  • Nee, ik heb ‘ t. Dit is een populaire techniek in neurale netwerken en deze terminologie zie je in verschillende bibliotheken, boeken en artikelen. Wilt u testgegevensfout in elk tijdperk controleren of gewoon het model verifiëren na de training?
  • Het netwerk convergeert ook sneller naarmate het aantal updates aanzienlijk hoger is. Het instellen van de mini-batchgrootte is een beetje een kunst, te klein en je loopt het risico je leren te stochastisch en sneller te maken, maar zal convergeren naar onbetrouwbare modellen, te groot en het past niet in het geheugen en duurt nog steeds eeuwen.
  • Betekent dit dat batch_size=<size of dataset> wordt beschouwd als online leren, of liever batch_size=1? En geldt dit allemaal ook voor RNNs? Bij gebruik van batch_size in RNNs, wordt de batch beschouwd als een soort virtuele tijdstap in die zin dat alle instanties in die batch worden berekend alsof ze tegelijkertijd zijn opgetreden ?
  • Meestal bedoelen mensen met online leren batch_size=1. Het idee achter online leren is dat u uw model bijwerkt zodra u het voorbeeld ziet. Bij een grotere batchgrootte betekent dit dat u eerst de verschillende voorbeelden bekijkt voordat u een update uitvoert. In RNN kan de grootte van de batch verschillende betekenissen hebben.Gewoonlijk is het ‘ gebruikelijk om de trainingsreeks op te splitsen in vensters met een vaste grootte (zoals 10 woorden). In dit geval betekent het opnemen van 100 van deze vensters tijdens de training dat je batch_size=100 hebt.
  • @Oleg Melnikov, als je laatste batch aanzienlijk kleiner is (laat ‘ s zeggen dat het 1 zou zijn in plaats van 50), dan is de schatting voor het verloop minder nauwkeurig en kan het uw gewicht een beetje verknoeien. Stel je in de afbeelding hierboven voor dat je 10 updates maakt met een mini batch 100 (groene lijnen) en een met mini batch 1 (rode lijn). Wat betekent dat in het volgende tijdperk een paar eerste iteraties kunnen beginnen met het oplossen van het probleem met de laatste mini-batch 1-update van het vorige tijdperk.

Antwoord

In de terminologie van het neurale netwerk:

  • één epoch = één voorwaartse pas en één achterwaartse pas van alle trainingsvoorbeelden
  • batchgrootte = het aantal trainingsvoorbeelden in één voorwaartse / achterwaartse pass. Hoe groter de batchgrootte, hoe meer geheugenruimte u nodig heeft.
  • aantal iteraties = aantal passages, elke pass met gebruik van [batchgrootte] aantal voorbeelden. Voor alle duidelijkheid, één pass = één voorwaartse pas + één achterwaartse pas (we tellen de voorwaartse pas en de achterwaartse pas niet als twee verschillende passages).

Voorbeeld: als je 1000 trainingsvoorbeelden hebt en je batchgrootte is 500, dan duurt het 2 iteraties om 1 epoch te voltooien.

Ter info: Afweging van batchgrootte versus aantal iteraties om een neuraal netwerk te trainen

Reacties

  • Maar wat is het verschil tussen gebruik [batchgrootte] nummers van voorbeelden en train het netwerk op elk voorbeeld en ga verder met de volgende [batchgrootte] nummers voorbeelden. Aangezien u een voorbeeld door het netwerk laat gaan en SGD toepast en het volgende voorbeeld neemt, zal het geen verschil of de batchgrootte 10 of 1000 of 100000 is. Na [batc h size] aantal voorbeelden is gedaan, het volgende voorbeeld van de volgende batch zal volgen. Het maakt alleen een verschil als het aantal voorbeelden van [batchgrootte] [aantal iteraties] keer het netwerk passeert en vervolgens doorgaat met de volgende voorbeelden van [batchgrootte].
  • Een belangrijk onderscheid is dat de leerstap (één stap) wordt één keer toegepast voor elke batch, terwijl je door alle batches moet bladeren om één epoch te maken. Het verschil is dus niet alleen algoritmisch in het geheugen: grotere batches betekenen dat u het gemiddelde van de gradiënt over meer monsters maakt.
  • Wat is ‘ is het verschil tussen epoch en iteraties ?
  • @Goldname 1 epoch bevat alle trainingsvoorbeelden, terwijl 1 iteratie alleen [batchgrootte] aantal trainingsvoorbeelden bevat.
  • Dus: als het aantal epochs constant is, en we ‘ door het convergentiegrafiek opnieuw te plotten waarbij elk punt het resultaat na elk epoch voorstelt, kunnen we verwachten dat de resulterende plot ‘ vloeiender is ‘ (en de training om langzamer te zijn) naarmate we batch_size verminderen?

Antwoord

Wanneer u een optimalisatieprobleem oplost met een CPU of een GPU, past u iteratief een algoritme toe op sommige invoergegevens. In elk van deze iteraties werkt u gewoonlijk een metriek van uw probleem bij door enkele berekeningen op de gegevens uit te voeren. Als de omvang van uw gegevens nu groot is, kan het een aanzienlijke hoeveelheid tijd kosten om elke iteratie te voltooien, en kan het veel bronnen verbruiken. Dus soms kiest u ervoor om deze iteratieve berekeningen toe te passen op een deel van de gegevens om tijd en rekenkracht te besparen. Dit gedeelte is de batch_size en het proces wordt (in de Neural Network Lingo) batchgegevensverwerking genoemd. Wanneer u uw berekeningen toepast op al uw gegevens, dan voert u online gegevensverwerking uit. Ik denk dat de terminologie uit de jaren 60 komt, en zelfs daarvoor. Herinnert iemand zich de .bat DOS-bestanden? Maar natuurlijk incarneerde het concept als een thread of een deel van de te gebruiken gegevens.

Antwoord

De documentatie voor Keras over de batchgrootte is te vinden onder de fit functie in de Modellen (functionele API) pagina

batch_size: geheel getal of geen. Aantal monsters per verloopupdate. Indien niet gespecificeerd, zal batch_size standaard 32 zijn.

Als u een kleine dataset heeft, is het het beste om de batchgrootte gelijk te stellen aan de grootte van de trainingsdata. Probeer het eerst met een kleine batch en verhoog vervolgens om tijd te besparen. Zoals itdxer al zei, is er een afweging tussen nauwkeurigheid en snelheid.

Antwoord

Batchgrootte is een hyperparameter die het aantal monsters definieert om doorheen te werken voordat de interne modelparameters worden bijgewerkt.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *