Kaip pasirinkti geriausią mokymosi greitį mašininio mokymosi projektui

Dažna problema, su kuria susiduriame dirbdami giluminio mokymosi projektus, yra mokymosi greičio ir optimizatoriaus (hiperparametrų) pasirinkimas. Jei esate panašus į mane, pastebite, kad esate optimizatorius ir mokymosi greitis, tada patikrinkite, ar jie veikia (ir mes ne vieni).

Norėdami geriau suprasti optimizatoriaus ir mokymosi greičio pasirinkimo įtaką, tą patį modelį mokiau 500 kartų. Rezultatai rodo, kad tinkami hiperparametrai yra labai svarbūs norint sėkmingai treniruotis, tačiau juos sunku rasti.

Šiame straipsnyje aptarsiu šios problemos sprendimus naudodamas automatizuotus metodus optimaliems hiperparametrams pasirinkti.

Eksperimentinis nustatymas

Aš išmokau pagrindinį konvoliucinį neuroninį tinklą iš „TensorFlow“ mokymo programos, kuri išmoksta atpažinti MNIST skaitmenis. Tai yra pakankamai mažas tinklas, turintis du konvoliucinius sluoksnius ir du tankius sluoksnius, iš viso apytiksliai 3400 svorių, kuriuos reikia treniruoti.Kiekvienai treniruotei naudojama ta pati atsitiktinė sėkla.

Reikėtų pažymėti, kad toliau pateikiami vieno konkretaus modelio ir duomenų rinkinio rezultatai. Idealūs kitų modelių ir duomenų rinkinių hiperparametrai skirsis.

(Jei norite paaukoti šiek tiek GPU laiko didesnei šio eksperimento versijai paleisti CIFAR-10, susisiekite.)

Kuris mokymosi lygis veikia geriausiai?

Pirmas dalykas, kurį ištirsime, yra tai, kaip mokymosi greitis veikia modelio mokymą. Kiekvieno bėgimo metu tas pats modelis mokomas nuo nulio, keičiant tik optimizavimo priemonę ir mokymosi greitį.

Modelis buvo apmokytas su 6 skirtingais optimizatoriais: „Gradient Descent“, „Adam“, „Adagrad“, „Adadelta“, „RMS Prop“ ir „Momentum“. Kiekvienam optimizatoriui jis buvo mokomas 48 skirtingais mokymosi dažniais, nuo 0,000001 iki 100 logaritminiais intervalais.

Kiekvienu važiavimu tinklas treniruojamas tol, kol pasiekia bent 97% traukinio tikslumo. Maksimalus leistinas laikas buvo 120 sekundžių. Eksperimentai buvo atlikti su „Nvidia Tesla K80“, kurį vedė „FloydHub“. Šaltinio kodą galima atsisiųsti.

Kiekvieno pasirinkto mokymosi greičio ir optimizatoriaus mokymo laikas:

Aukščiau pateiktas grafikas yra įdomus. Mes galime pamatyti, kad:

  • Kiekvienam optimizatoriui dauguma mokymosi normų neišmoko modelio.
  • Kiekvienam optimizatoriui yra slėnio forma: per mažas mokymosi greitis niekada nevyksta, o per didelis mokymosi greitis sukelia nestabilumą ir niekada nesiartina. Tarp jų yra „teisingai“ mokymosi lygio grupė, kuri sėkmingai treniruojasi.
  • Nėra tokio mokymosi greičio, kuris būtų tinkamas visiems optimizatoriams.
  • Mokymosi greitis gali paveikti treniruočių laiką didumo tvarka.

Apibendrinant tai, kas išdėstyta pirmiau, labai svarbu pasirinkti teisingą mokymosi tempą. Priešingu atveju jūsų tinklas arba nesugebės treniruotis, arba užtruks daug ilgiau, kol susilies.

Norėdami parodyti, kaip kiekvienas optimizatorius skiriasi savo optimaliu mokymosi greičiu, čia pateikiamas greičiausias ir lėčiausias modelis, mokomas pagal kiekvieną optimizavimo priemonę. Atkreipkite dėmesį, kad maksimalus laikas yra 120 sekundžių (pvz., Tinklas nesugebėjo treniruotis) visame grafike - nėra vieno mokymosi greičio, tinkančio kiekvienam optimizatoriui:

Patikrinkite platų mokymosi rodiklių diapazoną (nuo 0,001 iki 30), kurie pasiekia sėkmę naudodami bent vieną iš aukščiau pateiktoje diagramoje pateiktų optimizatorių.

Kuris optimizatorius veikia geriausiai?

Dabar, kai nustatėme geriausius kiekvieno optimizavimo priemonės mokymosi rodiklius, palyginkime kiekvieno optimizavimo mokymo rezultatą su geriausiu ankstesniame skyriuje nustatytu mokymosi rodikliu.

Čia pateikiamas kiekvieno optimizavimo priemonės tikrinimo tikslumas per tam tikrą laiką. Tai leidžia mums stebėti, kaip greitai, tiksliai ir stabiliai kiekvienas veikia:

Keli pastebėjimai:

  • Visiems optimizatoriams, išskyrus „RMSProp“ (žr. Paskutinį punktą) , pavyksta sujungti per protingą laiką.
  • Adomas mokosi greičiausiai.
  • Adamas yra stabilesnis nei kiti optimizatoriai ir jis nepatiria didesnio tikslumo sumažėjimo.
  • „RMSProp“ buvo vykdomas su numatytaisiais „TensorFlow“ argumentais (skilimo greitis 0,9, „epsilon 1e-10“, impulsas 0,0) ir gali būti, kad jie netinkamai atliekami vykdant šią užduotį. Tai yra tinkamas automatinės hiperparametrų paieškos atvejis (daugiau apie tai žr. Paskutiniame skyriuje).

Ankstesniame eksperimente Adomas taip pat turėjo gana platų sėkmingo mokymosi lygį. Apskritai Adamas yra geriausias pasirinkimas iš mūsų šešių šio modelio ir duomenų rinkinio optimizatorių.

Kaip modelio dydis veikia treniruočių laiką?

Dabar pažvelkime, kaip modelio dydis įtakoja jo treniruotę.

Modelio dydį keisime tiesiniu koeficientu. Šis koeficientas linijiniu mastu pakeis konvoliucinių filtrų skaičių ir pirmojo tankio sluoksnio plotį, tokiu būdu maždaug tiesiniu masteliu pakeisdamas bendrą modelio svorių skaičių.

Yra du aspektai, kuriuos mes ištirsime:

  1. Kaip keičiasi treniruočių laikas augant modeliui fiksuoto optimizavimo priemonės ir treniruočių greičio atžvilgiu?
  2. Kuris mokymosi greitis greičiausiai treniruojasi pagal kiekvieno modelio dydį, jei norite naudoti fiksuotą optimizavimo priemonę?

Kaip keičiasi treniruočių laikas augant modeliui?

Žemiau parodyta, kiek laiko reikia 96% modelio treniruočių tikslumui pasiekti, padidinant jo dydį nuo 1x iki 10x. Mes naudojome vieną iš sėkmingiausių ankstesnių hiper parametrų:

  • Treniruočių laikas auga tiesiškai pagal modelio dydį.
  • Tas pats mokymosi greitis sėkmingai treniruoja tinklą visais dydžiais.

(Pastaba: šiais rezultatais galima remtis tik čia bandant duomenų rinkinį ir modelius, tačiau juos verta išbandyti atliekant eksperimentus.)

Tai gražus rezultatas. Hiperparametrų pasirinkimas nebuvo paneigtas linijiniu mastelio keitimu. Tai gali reikšti, kad hiperparametrų paiešką galima atlikti mažinant tinklo versiją, kad būtų sutaupyta skaičiavimo laiko.

Tai taip pat rodo, kad didėjant tinklui, konverguojant modelį jis nepatiria jokio O (n²) darbo (linijinį laiko augimą galima paaiškinti papildomomis operacijomis, patirtomis atliekant kiekvieno svorio treniruotę).

Šis rezultatas dar labiau nuramina, nes tai rodo mūsų gilaus mokymosi sistemos (čia „TensorFlow“) skales efektyviai.

Kuris mokymosi rodiklis geriausiai tinka skirtingų dydžių modeliams?

Vykdykime tą patį eksperimentą keliais mokymosi tempais ir sužinokime, kaip treniruočių laikas reaguoja į modelio dydį:

  • Geriausiai sekėsi mokymosi rodikliams 0,0005, 0,001, 0,00146 - jie taip pat pasirodė geriausiai per pirmąjį eksperimentą. Čia matome tą pačią „saldaus taško“ juostą, kaip ir pirmojo eksperimento metu.
  • Kiekvieno mokymosi greičio laikas treniruotis auga tiesiškai, priklausomai nuo modelio dydžio.
  • Mokymosi greičio našumas nepriklausė nuo modelio dydžio. Tie patys rodikliai, kurie geriausiai pasirodė 1x dydžiui, buvo geriausi 10x dydžiui.
  • Virš 0,001 padidinus mokymosi greitį, pailgėjo laikas treniruotis ir padidėjo treniruočių laiko dispersija (palyginti su linijine modelio dydžio funkcija).
  • Laiką treniruotis galima apytiksliai modeliuoti kaip c + kn modeliui, kurio svoris n , fiksuota kaina c ir mokymosi konstanta k = f (mokymosi greitis) .

Apibendrinant galima pasakyti, kad geriausiai mokantis 1x dydžio mokymosi rodiklis taip pat buvo geriausias 10x dydžio mokymosi lygis.

Mokymosi greičio pasirinkimo automatizavimas

Kaip rodo ankstesni rezultatai, labai svarbu, kad modelio mokymas galėtų tinkamai pasirinkti optimizavimo priemonę ir mokymosi greitį.

Rankinis šių hiperparametrų pasirinkimas užima daug laiko ir yra klaidų. Keičiantis jūsų modeliui, ankstesnis hiperparametrų pasirinkimas gali nebebūti idealus. Nepraktiška nuolat atlikti naujas paieškas rankomis.

Yra keli būdai, kaip automatiškai pasirinkti hiper parametrus. Čia aprašysiu porą skirtingų požiūrių.

Tinklelio paieška

Tinklelio paieška yra tai, ką atlikome per pirmąjį eksperimentą - kiekvienam hiperparametrui sukurkite galimų verčių sąrašą. Tada mokykite tinklą kiekvienam galimų hiperparametrų verčių deriniui ir išmatuokite jo našumą. Geriausi hiperparametrai yra tie, kurie užtikrina geriausią stebimą veikimą.

Tinklelio paiešką labai lengva įgyvendinti ir suprasti. Taip pat lengva patikrinti, ar ieškojote pakankamai plačioje parametrų paieškos dalyje. Dėl šių priežasčių jis yra labai populiarus tyrimuose.

Gyventojų mokymas

Gyventojų mokymas („DeepMind“) yra elegantiškas genetinių algoritmų panaudojimas hiperparametrų pasirinkimui.

PBT yra sukurta modelių visuma. Jie visi yra nuolat mokomi lygiagrečiai. Kai kuris nors gyventojas turi pakankamai ilgai mokytis, kad parodytų pagerėjimą, jo patvirtinimo tikslumas lyginamas su likusia populiacija. Jei jo našumas yra mažiausias 20%, jis nukopijuoja ir mutuoja vieno iš 20% geriausių atlikėjų hiper parametrus ir kintamuosius.

Tokiu būdu sėkmingiausi hiperparametrai pagimdo daugybę šiek tiek mutavusių jų pačių variantų ir greičiausiai atrandami geriausi hiperparametrai.

Tolesni žingsniai

Dėkojame, kad perskaitėte šį mokymosi lygio tyrimą. Šiuos eksperimentus pradėjau iš savo smalsumo ir nusivylimo dėl hiperparametrų pasukimo, ir tikiuosi, kad jums patiks rezultatai ir išvados tiek, kiek aš turiu.

Jei yra tam tikra tema ar plėtinys, kurį norite pamatyti, praneškite man. Be to, jei norėtumėte paaukoti šiek tiek GPU laiko daug didesnei šio eksperimento versijai paleisti, norėčiau pasikalbėti.

Šie raštai yra dalis metų trukmės AI architektūros temų nagrinėjimo. Sekite šį leidinį (ir šiam straipsniui skirkite plojimų!) Norėdami gauti naujienų, kai pasirodys kiti kūriniai.