Coborârea gradientului lot versus coborârea gradientului stochastic

Să presupunem că avem un set de antrenament $ (x _ {(i)}, y _ {(i)}) $ pentru $ i = 1, \ dots, m $ . Să presupunem, de asemenea, că rulăm un tip de algoritm de învățare supravegheat pe setul de antrenament. Ipotezele sunt reprezentate ca $ h _ {\ theta} (x _ {(i)}) = \ theta_0 + \ theta_ {1} x _ {(i) 1} + \ cdots + \ theta_ { n} x _ {(i) n} $ . Trebuie să găsim parametrii $ \ mathbf {\ theta} $ care minimizează „distanța” dintre $ y _ {(i )} $ și $ h _ {\ theta} (x _ {(i)}) $ . Să $$ J (\ theta) = \ frac {1} {2} \ sum_ {i = 1} ^ {m} (y _ {(i)} – h _ {\ theta } (x _ {(i)}) ^ {2} $$

Apoi vrem să găsim $ \ theta $ minimizează $ J (\ theta) $ . În coborârea gradientului inițializăm fiecare parametru și efectuăm următoarea actualizare: $$ \ theta_j : = \ theta_j- \ alpha \ frac {\ partial} {\ partial \ theta_ {j}} J (\ theta) $$

Care este diferența cheie între coborârea de gradient în lot și coborârea de gradient stochastic?

Ambele folosesc regula de actualizare de mai sus. Dar este una mai bună decât cealaltă?

Răspuns

Aplicabilitatea descendenței de gradient în lot sau stocastic depinde într-adevăr de varietatea de erori așteptată.

Coborârea gradientului în lot calculează gradientul utilizând întregul set de date. Acest lucru este excelent pentru colectoarele de eroare convexe sau relativ netede. În acest caz, ne deplasăm oarecum pătrund direct către o soluție optimă, locală sau globală. În plus, coborârea de gradient pe loturi, dată fiind o rată de învățare recoaptă, va găsi în cele din urmă minimul situat în bazinul său de atracție.

Coborârea de gradient stochastic (SGD) calculează gradientul utilizând un singur eșantion. Majoritatea aplicațiilor de SGD folosește de fapt un minibatch de mai multe eșantioane, din motive care vor fi explicate puțin mai târziu. SGD funcționează bine (nu este bine, presupun, dar mai bine decât coborârea în gradient de lot) pentru colectoarele de eroare care au o mulțime de maxime / minime locale. caz, gradientul oarecum mai zgomotos calculat folosind numărul redus de eșantioane tinde să scoată modelul din minimele locale într-o regiune care, sperăm, este mai optimă. Eșantioanele individuale sunt cu adevărat zgomotoase, în timp ce minibatch-urile tind să medieze puțin din zgomot. , cantitatea de smucitură este redusă atunci când se utilizează minibatch-uri. Un echilibru bun este atins atunci când dimensiunea minibatch-ului este suficient de mică pentru a evita unele dintre minimele locale sărace, dar suficient de mari încât să nu evite minimele globale sau l mai performante minime ocale. (De altfel, acest lucru presupune că cele mai bune minime au un bazin de atracție mai mare și mai profund și, prin urmare, sunt mai ușor de căzut.)

Un avantaj al SGD este că este mult mai rapid din punct de vedere al calculului. seturile de date de multe ori nu pot fi păstrate în RAM, ceea ce face vectorizarea mult mai puțin eficientă. Mai degrabă, fiecare eșantion sau lot de eșantioane trebuie încărcat, lucrat, rezultatele stocate și așa mai departe. Minibatch SGD, pe de altă parte, este de obicei făcut în mod intenționat suficient de mic pentru a putea fi tratat prin calcul.

De obicei, acest avantaj de calcul este valorificat prin efectuarea mult mai multor iterații ale SGD, făcând mult mai mulți pași decât descendența convențională în gradient de lot . De obicei, rezultă un model care este foarte apropiat de cel care ar fi găsit prin coborâre în gradient de lot, sau mai bine.

Modul în care îmi place să mă gândesc la modul în care funcționează SGD este să-mi imaginez că am un punct care reprezintă distribuția mea de intrare. Modelul meu încearcă să afle această distribuție de intrare. Înconjurarea distribuției de intrare este o zonă umbrită care reprezintă distribuțiile de intrare ale tuturor minibatchurilor posibile pe care le-aș putea proba. De obicei, este o presupunere corectă că distribuțiile de intrare minibatch sunt aproape de distribuția de intrare adevărată. Coborârea în gradient a lotului, la toate etapele, ia cea mai abruptă rută pentru a ajunge la distribuția de intrare adevărată. SGD, pe de altă parte, alege un punct aleatoriu din zona umbrită și ia cea mai abruptă rută către acest punct. La fiecare iterație, totuși, alege un punct nou. Media tuturor acestor pași va aproxima distribuția de intrare adevărată, de obicei destul de bine.

Comentarii

  • În practică, nimeni nu folosește Descrescere în gradient de lot. Este ‘ pur și simplu prea scump din punct de vedere al calculului, pentru că nu prea mult a unui câștig. (Câștigul este că ‘ renunți la ” adevărat ” gradient.) Când aveți o funcție de pierdere extrem de neconvexă, trebuie doar să pășiți în cea mai bună direcție corectă și ‘ în cele din urmă veți converge o n un minim local. Astfel, minibatch SGD.
  • @Jason_L_Bens aveți vreo referință (lucrări sau texte online) în care să pot citi mai multe despre acești algoritmi?
  • @ user110320 Nu sunt de pe capul meu, nu, deși ei ‘ sunt algoritmi foarte obișnuiți și, prin urmare, ar trebui să existe o tonă de resurse disponibile pe subiect, cu un pic de căutare. Dacă ‘ sunteți în căutarea unei abordări generale, ‘ vă recomand să citiți câteva din Yoshua Bengio ‘ s Learning Deep Architecture for AI. ‘ este locul unde am început.

Răspuns

După cum sugerează un alt răspuns, principalul motiv pentru care se folosește SGD este reducerea costului de calcul al gradientului, menținând în același timp direcția gradientului, atunci când este mediată pe mai multe mini-loturi sau eșantioane – ceea ce vă ajută cu siguranță să vă aduceți la minimele locale.

  1. De ce funcționează minibatch .

Matematica din spatele acestui lucru este că, gradul ” adevărat ” al funcției de cost (gradientul pentru eroarea de generalizare sau pentru seturile de mostre infinit de mari) este așteptarea a gradientului $ g $ peste distribuția adevărată generatoare de date $ p_ {data} $ ; gradientul actual $ \ hat {g} $ calculat pe un lot de eșantioane este întotdeauna o aproximare la gradientul adevărat cu distribuția empirică a datelor $ \ hat {p} _ {data} $ . $$ \ hat {g} = E _ {\ hat {p} _ {data}} ({\ partial J (\ theta) \ over \ partial \ theta}) $$ Coborârea gradientului în lot vă poate aduce posibilul ” gradient optim ” având în vedere toate eșantioanele de date, nu este ” adevărat ” gradient totuși. Un lot mai mic (adică un minibatch) nu este probabil la fel de optim ca lotul complet, dar ambele sunt aproximări – la fel și minibatchul cu un singur eșantion (SGD).

Presupunând că nu există dependență între $ m $ eșantioane într-un minibatch, $ \ hat {g} (m) $ calculat este un imparțial estimarea gradientului adevărat. Erorile standard (pătrate) ale estimărilor cu diferite dimensiuni de minibatch sunt invers proporționale cu dimensiunile minibatch-ului. Adică, $$ {SE ({\ hat {g} (n)}) \ over SE ({\ hat {g} (m)})} = {\ sqrt { m \ over n}} $$ Adică, reducerea erorii standard este rădăcina pătrată a creșterii dimensiunii eșantionului. Aceasta înseamnă că, dacă dimensiunea minibatch-ului este mică, rata de învățare trebuie să fie și ea mică, pentru a obține stabilitate față de marea varianță. Când eșantioanele nu sunt independente, proprietatea estimării imparțiale nu mai este menținută. Acest lucru necesită amestecarea probelor înainte de antrenament, dacă mostrele sunt secvențiate nu suficient de aleatoriu.

  1. De ce minibatch-ul poate funcționează mai bine .

În primul rând, minibatch-ul face ca unele probleme de învățare de la intratabile din punct de vedere tehnic să fie tratabile datorită cererii reduse de calcul cu o dimensiune mai mică a lotului.

În al doilea rând, dimensiunea redusă a lotului nu înseamnă neapărat o precizie redusă a gradientului. Mostrele de instruire au multe zgomote, valori aberante sau părtiniri. Un minibatch eșantionat aleatoriu poate reflecta distribuția adevărată care generează date mai bine (sau nu mai rău) decât lotul original original. Dacă unele iterații ale actualizărilor gradientului minibatch vă oferă o estimare mai bună, în general, rezultatul mediu al unei epoci poate fi mai bun decât gradientul calculat dintr-un lot complet.

În al treilea rând, minibatch-ul nu doar ajută la rezolvarea problemelor neplăcute eșantioane de date, dar ajută, de asemenea, să facă față funcției de cost neplăcute care are multe minime locale. După cum menționează Jason_L_Bens, uneori colectorii de eroare pot fi mai ușor de a prinde un gradient regulat într-un minim local, în timp ce mai dificil de a prinde gradientul temporar aleatoriu calculat cu minibatch. atingând minimele globale într-un singur pas, dar iterând pe colectorul de eroare. Gradientul vă oferă în mare măsură doar direcția de iterație. Cu minibatch, puteți itera mult mai repede. În multe cazuri, cu cât sunt mai multe iterații, cu atât puteți atinge un punct mai bun. Nu vă pasă deloc de vreme, punctul este optim la nivel global sau chiar local. Doriți doar să ajungeți la un model rezonabil care să vă aducă o eroare de generalizare acceptabilă. Minibatch face acest lucru mai ușor.

Este posibil să găsiți cartea ” Deep learning ” de Ian Goodfellow, și colab., are discuții destul de bune despre acest subiect dacă îl citiți cu atenție.

Comentarii

  • Pentru probleme de optimizare convexă, ceea ce ați spus este bine.Dar pentru a utiliza metode de gradient pe funcții neconvexe, ați ratat un motiv foarte critic pentru care SGD este mai bun decât lotul GD. Vedeți răspunsul meu datascience.stackexchange.com/questions/16807/…
  • @horaceT Multumesc pentru comentariul tau. Întrucât punctul pe care l-ați menționat a fost descris de Jason_L_Bens mai sus cu detalii, nu m-am deranjat să repet, dar am trimis răspunsul său în ultimul al treilea paragraf, cu respectul cuvenit. Pentru o problemă de optimizare a coborârii în gradient, neconvexa este reflectată de minimele locale, inclusiv punctul șa (a se vedea ultimul al treilea paragraf); și din motive de descriere, răspunsul meu descrie SGD ca minibatch, dar cu o dimensiune a lotului de 1 (a se vedea al treilea paragraf).
  • De ce ați spus practic în * în cele din urmă într-o epocă, sunteți practic de calcul media gradienților pe baza tuturor eșantioanelor date. *? Nu ‘ crezi că această afirmație este greșită din cauza actualizării ponderilor la fiecare pas?
  • @Media Ai dreptate. Am ‘ am eliminat ultimul paragraf. Mulțumesc.

Răspuns

Pentru mine, gradientul lotului seamănă cu gradientul slab. În gradientul slab, dimensiunea lotului este aleasă, astfel încât fiecare parametru care trebuie actualizat să varieze, de asemenea, în mod independent, dar nu neapărat ortogonal, în lot. De exemplu, dacă lotul conține 10 experimente, 10 rânduri, atunci este posibil să formați $ 2 ^ {10-1} = 512 $ coloane independente. 10 rânduri permit actualizarea independentă, dar nu ortogonală, a 512 parametri.

Lasă un răspuns

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