Jeremy Jordan

Inginer de învățare automată. Pe larg curios.

Mai multe postări de Jeremy Jordan.

ratei

Jeremy Jordan

În postările anterioare, am discutat despre modul în care putem antrena rețelele neuronale folosind propagarea înapoi cu descendență în gradient. Unul dintre hiperparametrii cheie de setat pentru a antrena o rețea neuronală este rata de învățare pentru coborârea în gradient. Ca reamintire, acest parametru scalează amploarea actualizărilor noastre de greutate pentru a minimiza funcția de pierdere a rețelei.

Dacă rata de învățare este setată prea mică, instruirea va progresa foarte încet, deoarece faceți actualizări foarte mici la greutățile din rețeaua dvs. Cu toate acestea, dacă rata de învățare este setată prea mare, poate provoca un comportament divergent nedorit în funcția de pierdere. Voi vizualiza aceste cazuri mai jos - dacă vi se par dificil de interpretat aceste imagini, aș recomanda să citiți (cel puțin) prima secțiune din postarea mea despre coborârea în gradient.

Deci, cum găsim rata de învățare optimă?

3e-4 este cea mai bună rată de învățare pentru Adam, cu mâinile jos.

- Andrej Karpathy (@karpathy) 24 noiembrie 2016

Perfect! Cred că treaba mea este terminată.

(Voiam doar să mă asigur că oamenii înțeleg că aceasta este o glumă.)

- Andrej Karpathy (@karpathy) 24 noiembrie 2016

(Umoriți-vă citind prin acel fir după ce ați terminat această postare.)

Peisajul de pierdere al unei rețele neuronale (vizualizat mai jos) este o funcție a valorilor parametrilor rețelei care cuantifică „eroarea” asociată cu utilizarea unei configurații specifice a valorilor parametrilor atunci când se efectuează inferența (predicția) asupra unui set de date dat. Acest peisaj de pierdere poate arăta destul de diferit, chiar și pentru arhitecții de rețea foarte asemănători. Imaginile de mai jos sunt dintr-o hârtie, Vizualizarea peisajului de pierdere a rețelelor neuronale, care arată cum conexiunile reziduale dintr-o rețea pot produce o topologie de pierdere mai lină.


Credit de imagine

Rata optimă de învățare va depinde de topologia peisajului de pierdere, care este la rândul său dependentă atât de arhitectura modelului, cât și de setul de date. În timp ce utilizați o rată de învățare implicită (de exemplu, valorile implicite setate de biblioteca dvs. de învățare profundă) pot oferi rezultate decente, puteți îmbunătăți adesea performanța sau accelera antrenamentul căutând o rată de învățare optimă. Sper că veți vedea în secțiunea următoare că aceasta este o sarcină destul de ușoară.

O abordare sistematică pentru găsirea ratei optime de învățare

În cele din urmă, am dori o rată de învățare, care are ca rezultat o scădere accentuată a pierderii rețelei. Putem observa acest lucru efectuând un experiment simplu în care creștem treptat rata de învățare după fiecare mini-lot, înregistrând pierderea la fiecare increment. Această creștere treptată poate fi pe o scară liniară sau exponențială.

Pentru ratele de învățare care sunt prea mici, pierderea poate scădea, dar cu o rată foarte mică. Când intrați în zona de rată optimă de învățare, veți observa o scădere rapidă a funcției de pierdere. Creșterea ratei de învățare va determina în continuare o creștere a pierderii, deoarece actualizările parametrilor determină pierderea „sări în jurul valorii” și chiar deviază de la minime. Amintiți-vă, cea mai bună rată de învățare este asociată cu cea mai puternică scădere a pierderii, așa că suntem interesați în principal de analiza pantei parcelei.

Ar trebui să setați intervalul limitelor ratei de învățare pentru acest experiment, astfel încât să le observați toate trei faze, ceea ce face ca intervalul optim să fie banal pentru identificare.

Această tehnică a fost propusă de Leslie Smith în Cyclical Learning Rates for Training Neural Networks și evanghelizată de Jeremy Howard în cursul fast.ai.

Stabilirea unui program pentru ajustarea ratei de învățare în timpul antrenamentului

O altă tehnică frecvent utilizată, cunoscută sub numele de recoacere a ratei de învățare, recomandă să începeți cu o rată de învățare relativ ridicată și apoi să reduceți treptat rata de învățare în timpul antrenamentului. Intuiția din spatele acestei abordări este că ne-ar plăcea să trecem rapid de la parametrii inițiali la o gamă de valori ale parametrilor „buni”, dar apoi am dori o rată de învățare suficient de mică încât să putem explora „mai profund, dar mai îngust părți ale funcției de pierdere "(din notele CS231n ale lui Karparthy). Dacă vă este greu să vă imaginați ceea ce tocmai am menționat, amintiți-vă că o rată prea mare de învățare poate determina actualizarea parametrilor să „sară” peste valorile minime ideale, iar actualizările ulterioare vor avea ca rezultat o convergență zgomotoasă continuă în regiunea generală dintre minime sau, în cazuri mai extreme, poate duce la divergența față de minime.

Cea mai populară formă de recoacere a ratei de învățare este o decădere în trepte, în care rata de învățare este redusă cu un procent după un număr stabilit de epoci.

Mai general, putem stabili că este util să definim un programul ratei de învățare în care rata de învățare se actualizează în timpul antrenamentului conform unor reguli specificate.

Ratele ciclice de învățare

În lucrarea menționată anterior, Cyclical Learning Rates for Training Neural Networks, Leslie Smith propune un program de rată de învățare ciclic care variază între două valori legate. Programul principal al ratei de învățare (vizualizat mai jos) este o regulă de actualizare triunghiulară, dar menționează, de asemenea, utilizarea unei actualizări triunghiulare împreună cu o decădere ciclică fixă ​​sau o decădere ciclică exponențială.


Credit de imagine

Notă: La sfârșitul acestei postări, voi furniza codul pentru a implementa acest program de rată de învățare. Astfel, dacă nu vă pasă să înțelegeți formularea matematică, puteți trece peste această secțiune.

Putem scrie programul general ca

unde $ x $ este definit ca

și $ cycle $ pot fi calculate ca

unde $ \ eta_ $ și $ \ eta_ $ definesc limitele ratei noastre de învățare, $ iterații $ reprezintă numărul de mini-loturi finalizate, $ stepsize $ definește jumătatea ciclului. Din câte pot să adun, $ 1-x $ ar trebui să fie întotdeauna pozitiv, deci se pare că operațiunea $ \ max $ nu este strict necesară.

Pentru a analiza cum funcționează această ecuație, să o construim progresiv cu vizualizări. Pentru imaginile de mai jos, actualizarea triunghiulară pentru 3 cicluri complete este afișată cu o dimensiune a pasului de 100 de iterații. Amintiți-vă, o singură iterație corespunde unui mini-lot de antrenament.

În primul rând, putem stabili „progresul” nostru în timpul antrenamentului în termeni de semicicluri pe care le-am parcurs. Ne măsurăm progresul în termeni de semicicluri și nu de cicluri complete, astfel încât să putem atinge simetria în cadrul unui ciclu (acest lucru ar trebui să devină mai clar pe măsură ce continuați să citiți).

Apoi, comparăm progresul semiciclului nostru cu numărul de semicicluri care vor fi finalizate la sfârșitul ciclului curent. La începutul unui ciclu, avem încă două semicicluri încă de finalizat. La sfârșitul unui ciclu, această valoare ajunge la zero.

Apoi, vom adăuga 1 la această valoare pentru a schimba funcția care trebuie centrată pe axa y. Acum ne arătăm progresul într-un ciclu cu referire la punctul de jumătate de ciclu.

În acest moment, putem lua valoarea absolută pentru a obține o formă triunghiulară în cadrul fiecărui ciclu. Aceasta este valoarea pe care o atribuim lui $ x $.

Cu toate acestea, am dori ca programul nostru de rată de învățare să înceapă de la valoarea minimă, crescând la valoarea maximă la mijlocul unui ciclu și apoi să scadă înapoi la valoarea minimă. Putem realiza acest lucru calculând pur și simplu $ 1-x $.

Acum avem o valoare pe care o putem folosi pentru a modula rata de învățare adăugând o fracțiune din intervalul ratei de învățare la rata minimă de învățare (denumită și rata de învățare de bază).

Smith scrie, principala ipoteză din spatele justificării unei rate ciclice de învățare (spre deosebire de una care scade doar) este „aceea creșterea ratei de învățare ar putea avea un efect negativ pe termen scurt și să obțină în continuare un efect benefic pe termen mai lung.„Într-adevăr, lucrarea sa include câteva exemple de evoluție a funcției de pierdere care deviază temporar către pierderi mai mari, convergând în cele din urmă către o pierdere mai mică în comparație cu o rată de învățare fixă ​​de referință.

Pentru a obține intuiția cu privire la motivul pentru care acest efect pe termen scurt ar produce un efect pozitiv pe termen lung, este important să înțelegem caracteristicile dorite ale minimului nostru convergent. În cele din urmă, am dori ca rețeaua noastră să învețe din date într-o manieră care să generalizeze până la datele nevăzute. Mai mult, o rețea cu proprietăți bune de generalizare ar trebui să fie robustă în sensul că modificările mici ale parametrilor rețelei nu cauzează modificări drastice ale performanței. Având în vedere acest lucru, este logic că minimele ascuțite conduc la o generalizare slabă, deoarece modificările mici ale valorilor parametrilor pot duce la o pierdere drastic mai mare. Permițând creșterea uneori a ratei de învățare, putem „sări” din minimele ascuțite, care ne-ar crește temporar pierderile, dar ar putea duce în cele din urmă la convergența asupra unor minime mai dorite.

Notă: Deși „minimele plate pentru o generalizare bună” sunt acceptate pe scară largă, puteți citi aici un contraargument bun.

În plus, creșterea ratei de învățare poate permite, de asemenea, „traversarea mai rapidă a platourilor punctului de șa”. După cum puteți vedea în imaginea de mai jos, gradienții pot fi foarte mici într-un punct de șa. Deoarece actualizările parametrilor sunt o funcție a gradientului, acest lucru duce la optimizarea noastră făcând pași foarte mici; poate fi util să creșteți rata de învățare aici pentru a evita blocarea prea multă vreme la un punct de șa.


Credit de imagine (cu modificare)

Notă: Un punct de șa, prin definiție, este un punct critic în care unele dimensiuni respectă un minim local, în timp ce alte dimensiuni observă un maxim local. Deoarece rețelele neuronale pot avea mii sau chiar milioane de parametri, este puțin probabil să observăm un adevărat minim local în toate aceste dimensiuni; punctele de șa sunt mult mai susceptibile să apară. Când m-am referit la „minime ascuțite”, în mod realist ar trebui să ne imaginăm un punct de șa în care dimensiunile minime sunt foarte abrupte, în timp ce dimensiunile maxime sunt foarte largi (așa cum se arată mai jos).

Coborâre în gradient stochastic cu reporniri calde (SGDR)

O abordare ciclică similară este cunoscută sub numele de coborâre în gradient stochastic cu reporniri calde unde un program de recoacere agresiv este combinat cu „reporniri” periodice la rata inițială de învățare inițială.

Putem scrie acest program ca

unde $$ este rata de învățare la intervalul de timp $ t $ (incrementat fiecare mini-lot), $ ^ i> $ și $ ^ i> $ definesc intervalul ratelor de învățare dorite, $ T_ $ reprezintă numărul de epoci de la ultima repornire (această valoare este calculată la fiecare iterație și astfel poate lua valori fracționare) și $ T_$ definește numărul de epoci dintr-un ciclu. Să încercăm să descompunem această ecuație.

Acest program de recoacere se bazează pe funcția cosinusului, care variază între -1 și 1. $ >> $ este capabil să ia valori între 0 și 1, care este intrarea funcției noastre cosinus. Regiunea corespunzătoare a funcției cosinusului este evidențiată mai jos cu verde. Adăugând 1, funcția noastră variază între 0 și 2, care este apoi scalată cu $ \ frac $ pentru a varia acum între 0 și 1. Astfel, luăm pur și simplu rata minimă de învățare și adăugăm o fracțiune din intervalul specificat de viteză de învățare ($ ^ i - \ eta_ ^ i> $). Deoarece această funcție începe de la 1 și scade la 0, rezultatul este o rată de învățare care începe la maximul intervalului specificat și se descompune la valoarea minimă. Odată ce ajungem la sfârșitul unui ciclu, $ T_ $ se resetează la 0 și începem înapoi la rata maximă de învățare.

Autorii notează că acest program de învățare poate fi adaptat în continuare la:

  1. Extindeți ciclul pe măsură ce antrenamentul progresează.
  2. Decedați $ ^ i> $ și $ ^ i> $ după fiecare ciclu.

Prin creșterea drastică a ratei de învățare la fiecare repornire, putem ieși în esență de la minimele locale și putem continua explorarea peisajului pierderilor.

Ideea îngrijită: prin captarea instantanee a greutăților la sfârșitul fiecărui ciclu, cercetătorii au reușit să construiască un ansamblu de modele cu prețul instruirii unui singur model. Acest lucru se datorează faptului că rețeaua „se instalează” pe diferite optime locale de la ciclu la ciclu, așa cum se arată în figura de mai jos.

Implementare

Atât găsirea gamei optime de rate de învățare, cât și atribuirea unui program de rate de învățare pot fi implementate destul de banal folosind Keras Callbacks.

Găsirea intervalului optim de rată de învățare

Putem scrie un Callback Keras care urmărește pierderea asociată cu o rată de învățare variată liniar într-un interval definit.

Stabilirea unui program de rată de învățare

Step Decay
Pentru o descompunere simplă a pasului, putem folosi LearningRateScheduler Callback.

Rata ciclică de învățare

Pentru a aplica tehnica ciclului de învățare ciclic, putem face referire la acest repo care a implementat deja tehnica în lucrare. De fapt, această repo este citată în apendicele lucrării.

Coborâre în gradient stochastic cu reporniri

Ansambluri instantanee
Pentru a aplica tehnica „Tren 1, obține M gratuit”, poți face referire la această repo.

Lecturi suplimentare

  • Stanford CS231n: Recomandarea ratei de învățare
  • Rata ciclică de învățare pentru formarea rețelelor neuronale
  • Explorarea topologiei funcției de pierdere cu rate ciclice de învățare
  • SGDR: Coborâre în gradient stochastic cu reporniri calde
  • Ansambluri instantanee: Antrenează 1, primește M gratuit
    • (extinderea conceptului) Suprafețe de pierdere, conectivitate mod și ansamblare rapidă a DNN-urilor
  • Vizualizarea peisajului de pierdere a plaselor neuronale
  • Optimizare pentru Deep Learning Highlights în 2017: Sebastian Ruder
  • Despre formarea pe loturi mari pentru învățarea profundă: decalaj de generalizare și minime clare
  • Minimele ascuțite se pot generaliza pentru rețelele adânci
  • Cele două etape ale descendenței gradientului în învățarea profundă
  • Progrese recente pentru o mai bună înțelegere a învățării profunde - Partea I

Abonați-vă la Jeremy Jordan

Primiți cele mai recente postări livrate direct în căsuța de e-mail