Ce este dimensiunea lotului în rețeaua neuronală?

Eu „folosesc Python Keras package pentru rețeaua neuronală. Acesta este link . Este batch_size egal cu numărul de probe de testare? Din Wikipedia avem acesta informații:

Cu toate acestea, în alte cazuri, evaluarea gradientului sumă poate necesita evaluări costisitoare ale gradienților din toate funcțiile sumandului. Când setul de instruire este enorm și nu există formule simple, evaluarea sumelor gradienților devine foarte costisitoare, deoarece evaluarea gradientului necesită evaluarea tuturor gradienților funcțiilor sumand. Pentru a economisi costul de calcul la fiecare iterație, descendența stochastică descinde un subset de funcții sumand la fiecare pas. Acest lucru este foarte eficient în cazul problemelor de învățare automată pe scară largă.

Informațiile de mai sus descriu datele de testare? Este la fel ca batch_size în keras (Număr de eșantioane pe actualizare de gradient)?

Comentarii

  • Este ‘ bine să vezi cursul class.coursera.org/ml-005/lecture/preview , în special pentru săptămâna 4-6 + 10. Wikipedia poate să nu fie o resursă atât de valoroasă pentru învățarea rețelelor neuronale.

Răspuns

dimensiunea lotului definește numărul de eșantioane care vor fi propagate prin rețea.

De exemplu , să spunem că aveți 1050 de eșantioane de antrenament și doriți să configurați un batch_size egal cu 100. Algoritmul ia primele 100 de eșantioane (de la 1 la 100) din setul de date de antrenament și antrenează rețeaua. Apoi, ia al doilea 100 de eșantioane (de la 101 la 200) și antrenează rețeaua din nou. Putem continua să facem această procedură până când am propagat toate eșantioanele prin rețea. P roblem s-ar putea întâmpla cu ultimul set de mostre. În exemplul nostru, am folosit 1050 care nu este divizibil cu 100 fără rest. Cea mai simplă soluție este doar să obțineți cele 50 de eșantioane finale și să instruiți rețeaua.

Avantajele utilizării unei dimensiuni de lot < numărul tuturor eșantioanelor:

  • Necesită mai puțină memorie. Deoarece instruiți rețeaua folosind mai puține eșantioane, procedura generală de antrenament necesită mai puțină memorie. „Este deosebit de important dacă nu puteți încadra întregul set de date în memoria mașinii dvs.

  • De obicei, rețelele se antrenează mai repede cu mini-loturi. Asta pentru că actualizăm greutățile după fiecare propagare. În exemplul nostru „am propagat 11 loturi (10 dintre ele aveau 100 de probe și 1 aveau 50 de probe) și după fiecare dintre ele am„ actualizat parametrii rețelei noastre. Dacă am folosi toate probele în timpul propagării, vom face doar 1 actualizare pentru parametrul rețelei.

Dezavantaje ale utilizării unei dimensiuni de lot < numărul tuturor eșantioanelor:

  • Cu cât lotul este mai mic, cu atât va fi mai puțin precisă estimarea gradientului. În figura de mai jos, puteți vedea că direcția gradientului mini-lot (culoare verde) fluctuează mult mai mult în comparație cu direcția gradientului complet al lotului (culoare albastră).

Direcții de gradient pentru diferite setări de loturi

Stochastic este doar un mini-lot cu batch_size egal cu 1. În acest caz, gradientul își schimbă direcția chiar mai des decât un gradient de mini-lot.

Comentarii

  • Nu, nu am ‘ t. Aceasta este o tehnică populară în rețelele neuronale și această terminologie o puteți vedea în diferite biblioteci, cărți și articole. Doriți să verificați eroarea de date de testare în fiecare epocă sau să verificați doar modelul după antrenament?
  • De asemenea, rețeaua converge mai repede, deoarece numărul de actualizări este considerabil mai mare. Configurarea dimensiunii mini-lotului este un fel de artă, prea mică și riscați să faceți învățarea prea stocastică, mai rapidă, dar va converge la modele nesigure, prea mari și nu se va potrivi în memorie și va dura încă vârste.
  • Înseamnă asta că batch_size=<size of dataset> sunt considerate învățare online sau mai bine zis batch_size=1? Și toate acestea rămân valabile și pentru RNN-uri? Când se utilizează batch_size în RNN-uri, lotul este considerat un fel de pas de timp virtual în sensul că toate instanțele din acel lot vor fi calculate ca și cum ar fi avut loc simultan ?
  • În mod obișnuit, atunci când oamenii spun învățare online, înseamnă batch_size=1. Ideea din spatele învățării online este că vă actualizați modelul imediat ce vedeți exemplul. Cu o dimensiune mai mare a lotului, înseamnă că mai întâi căutați mai multe mostre înainte de a actualiza. În RNN dimensiunea lotului poate avea semnificații diferite.De obicei, este ‘ obișnuit să împărțiți secvența de antrenament în fereastra de dimensiune fixă (cum ar fi 10 cuvinte). În acest caz, includerea a 100 dintre aceste ferestre în timpul antrenamentului va însemna că aveți batch_size=100.
  • @Oleg Melnikov, dacă ultimul dvs. lot are o dimensiune semnificativ mai mică (permiteți ‘ s spun că ar fi 1 în loc de 50), atunci estimarea pentru gradient ar fi mai puțin precisă și vă poate descurca puțin greutățile. În imaginea de mai sus, imaginați-vă că faceți 10 actualizări cu un mini lot 100 (linii verzi) și unul cu mini lot 1 (linia roșie). Ceea ce înseamnă că, în următoarea epocă, câteva iterații pot începe să rezolve problema cu ultima actualizare mini-lot 1 din epoca anterioară.

Răspuns

În terminologia rețelei neuronale:

  • o epoch = o trecere înainte și o trecere înapoi a toate exemplele de antrenament
  • dimensiunea lotului = numărul de exemple de antrenament într-o singură trecere înainte / înapoi. Cu cât dimensiunea lotului este mai mare, cu atât veți avea nevoie de mai mult spațiu de memorie.
  • numărul de iterații = numărul de pase, fiecare trecere utilizând [dimensiunea lotului] numărul de exemple. Pentru a fi clar, o trecere = o trecere înainte + o trecere înapoi (nu contăm trecerea înainte și trecerea înapoi ca două treceri diferite).

Exemplu: dacă aveți 1000 de exemple de antrenament și dimensiunea lotului dvs. este de 500, va dura 2 iterații pentru a finaliza o epocă.

FYI: Dimensiunea lotului de compromis vs. numărul de iterații pentru formarea unei rețele neuronale

Comentarii

  • Dar care este diferența dintre folosind [dimensiunea lotului] numere de exemple și instruiți rețeaua pe fiecare exemplu și continuați cu exemplele următoare de numere [dimensiunea lotului]. Deoarece treceți un exemplu prin rețea și aplicați SGD și luați următorul exemplu și așa mai departe, acesta nu va face diferență dacă dimensiunea lotului este de 10 sau 1000 sau 100000. După [batc h size] numărul de exemple se face următorul exemplu al următorului lot va urma. Face diferența doar dacă numărul de exemplare [dimensiunea lotului] va trece [numărul de iterații] ori de câte ori rețeaua va continua cu următoarele exemple [dimensiunea lotului].
  • O distincție importantă este aceea că pasul de învățare (un pas) se aplică o dată pentru fiecare lot, în timp ce trebuie să parcurgeți toate loturile pentru a face o epocă. Deci, diferența este, de asemenea, algoritmică, nu numai în memorie: loturile mai mari înseamnă că mediați gradientul pentru mai multe eșantioane.
  • Care este ‘ diferența dintre epocă și iterații ?
  • Epoca @Goldname 1 include toate exemplele de antrenament, în timp ce 1 iterație include doar [dimensiunea lotului] numărul de exemple de antrenament.
  • Deci: dacă numărul de epoci este constant și ‘ replotând graficul de convergență cu fiecare punct reprezentând rezultatul după fiecare epocă, ne putem aștepta ca graficul rezultat să fie ‘ mai fin ‘ (și antrenamentul să fie mai lent) pe măsură ce scădem batch_size?

Răspuns

Când rezolvați cu un procesor sau un GPU o problemă de optimizare, aplicați iterativ un algoritm peste unele date de intrare. În fiecare dintre aceste iterații, de obicei, actualizați o valoare a problemei dvs. făcând câteva calcule pe date. Acum, când dimensiunea datelor dvs. este mare, ar putea avea nevoie de un timp considerabil pentru a finaliza fiecare iterație și poate consuma o mulțime de resurse. Așadar, uneori alegeți să aplicați aceste calcule iterative pe o porțiune de date pentru a economisi timp și resurse de calcul. Această porțiune este lotul_size și procesul este denumit (în rețeaua neuronală Lingo) procesarea datelor în lot. Când aplicați calculele pe toate datele dvs., atunci faceți procesarea online a datelor. Cred că terminologia vine din anii 60 și chiar înainte. Își amintește cineva fișierele .bat DOS? Dar, desigur, conceptul întrupat pentru a însemna un fir sau o parte din datele care urmează să fie utilizate.

Răspuns

Documentația pentru Keras despre dimensiunea lotului poate fi găsită în funcția fit în pagina

Modele (API funcțional)

batch_size: Întreg sau Niciuna. Număr de eșantioane pe actualizare de gradient. Dacă nu este specificat, batch_size va fi implicit la 32.

Dacă aveți un set de date mic, cel mai bine ar fi să faceți dimensiunea lotului egală cu dimensiunea date de instruire. Încercați mai întâi cu un lot mic, apoi creșteți pentru a economisi timp. După cum a menționat itdxer , există un compromis între acuratețe și viteză.

Răspuns

Dimensiunea lotului este un hiperparametru care definește numărul de eșantioane pentru a lucra înainte de actualizarea parametrilor interni ai modelului.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *