Setarea ratei de învățare a rețelei dvs. neuronale
Jeremy Jordan
Inginer de învățare automată. Pe larg curios.
Mai multe postări de Jeremy Jordan.

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 2016Perfect! 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