Sådan vælger du den bedste læringsrate for dit maskinlæringsprojekt

Et almindeligt problem, som vi alle står over for, når vi arbejder på dyb læringsprojekter, er at vælge en læringshastighed og optimering (hyperparametrene). Hvis du er som mig, finder du dig selv ved at gætte en optimerings- og læringsrate og derefter kontrollere, om de fungerer (og vi er ikke alene).

For bedre at forstå indvirkningen af ​​optimizer og valg af læringsfrekvens, trænede jeg den samme model 500 gange. Resultaterne viser, at de rigtige hyperparametre er afgørende for træningssucces, men alligevel kan være svære at finde.

I denne artikel vil jeg diskutere løsninger på dette problem ved hjælp af automatiserede metoder til at vælge optimale hyperparametre.

Forsøgsopstilling

Jeg trænede det grundlæggende neurologiske netværk fra TensorFlow's tutorial-serie, som lærer at genkende MNIST-cifre. Dette er et forholdsvis lille netværk med to sammenfoldelige lag og to tætte lag, i alt cirka 3.400 vægte at træne.Det samme tilfældige frø bruges til hver træning.

Det skal bemærkes, at nedenstående resultater er for en bestemt model og datasæt. De ideelle hyperparametre for andre modeller og datasæt vil variere.

(Hvis du vil donere lidt GPU-tid til at køre en større version af dette eksperiment på CIFAR-10, skal du kontakte os).

Hvilken læringsfrekvens fungerer bedst?

Den første ting, vi vil undersøge, er, hvordan læringsfrekvens påvirker modeluddannelse. I hver kørsel trænes den samme model fra bunden og varierer kun optimeringsværdien og læringshastigheden.

Modellen blev trænet med 6 forskellige optimeringsapparater: Gradient Descent, Adam, Adagrad, Adadelta, RMS Prop og Momentum. For hver optimizer blev den trænet med 48 forskellige læringshastigheder, fra 0,000001 til 100 med logaritmiske intervaller.

I hver kørsel trænes netværket, indtil det opnår mindst 97% tognøjagtighed. Den maksimale tilladte tid var 120 sekunder. Eksperimenterne blev kørt på en Nvidia Tesla K80, hostet af FloydHub. Kildekoden kan downloades.

Her er træningstiden for hvert valg af læringsrate og optimering:

Ovenstående graf er interessant. Det kan vi se:

  • For hver optimering undlader størstedelen af ​​læringshastighederne at træne modellen.
  • Der er en dalform for hver optimizer: for lav læringsrate forløber aldrig, og for høj læringsrate medfører ustabilitet og konvergerer aldrig. Ind imellem er der et bånd af "lige rigtige" læringshastigheder, der med succes træner.
  • Der er ingen læringsfrekvens, der fungerer for alle optimatorer.
  • Læringsgrad kan påvirke træningstiden i størrelsesorden.

For at opsummere ovenstående er det afgørende, at du vælger den rigtige læringsrate. Ellers vil dit netværk enten ikke træne eller tage meget længere tid at konvergere.

For at illustrere, hvordan hver optimizer adskiller sig i sin optimale indlæringshastighed, er her den hurtigste og langsomste model, der trænes for hver indlæringshastighed, på tværs af alle optimeringsprogrammer. Bemærk, at den maksimale tid er 120s (for eksempel kunne netværket ikke træne) på tværs af hele grafen - der er ingen enkelt læringsrate, der fungerer for hver optimizer:

Tjek den brede vifte af læringshastigheder (fra 0,001 til 30), der opnår succes med mindst en optimering fra ovenstående graf.

Hvilken optimizer fungerer bedst?

Nu hvor vi har identificeret de bedste læringshastigheder for hver optimizer, lad os sammenligne ydeevnen for hver optimeringstræning med den bedste læringsrate, der blev fundet for det i det foregående afsnit.

Her er valideringsnøjagtigheden af ​​hver optimering over tid. Dette giver os mulighed for at observere, hvor hurtigt, nøjagtigt og stabilt hver udfører:

Et par observationer:

  • Alle optimeringsprogrammerne, bortset fra RMSProp (se sidste punkt) , formår at konvergere inden for en rimelig tid.
  • Adam lærer hurtigst.
  • Adam er mere stabil end de andre optimeringsmaskiner, og det lider ikke under nogen større fald i nøjagtighed.
  • RMSProp blev kørt med standardargumenterne fra TensorFlow (henfaldshastighed 0,9, epsilon 1e-10, momentum 0,0), og det kunne være tilfældet, at disse ikke fungerer godt til denne opgave. Dette er en god brugssag til automatiseret hyperparametersøgning (se det sidste afsnit for mere om det).

Adam havde også en relativt bred vifte af vellykkede læringshastigheder i det forrige eksperiment. Samlet set er Adam det bedste valg af vores seks optimatorer til denne model og datasæt.

Hvordan påvirker modelstørrelse træningstiden?

Lad os nu se på, hvordan størrelsen på modellen påvirker, hvordan den træner.

Vi varierer modelstørrelsen med en lineær faktor. Denne faktor skalerer lineært antallet af sammenfiltringsfiltre og bredden af ​​det første tætte lag og således skalerer det samlede antal vægte i modellen omtrent lineært.

Der er to aspekter, vi vil undersøge:

  1. Hvordan ændres træningstiden, når modellen vokser, for en fast optimering og træningsfrekvens?
  2. Hvilken læringsfrekvens træner hurtigst på hver modelstørrelse til en fast optimering?

Hvordan ændres træningstiden, når modellen vokser?

Nedenfor vises den tid, det tager at træne 96% træningsnøjagtighed på modellen, hvilket øger størrelsen fra 1x til 10x. Vi har brugt en af ​​vores mest succesrige hyperparametre fra tidligere:

  • Træningstiden vokser lineært med modelstørrelsen.
  • Den samme læringshastighed træner netværket på tværs af alle modelstørrelser.

(Bemærk: følgende resultater kan kun påberåbes for datasættet og modellerne testet her, men det kan være værd at teste for dine eksperimenter.)

Dette er et godt resultat. Vores valg af hyperparametre blev ikke ugyldiggjort ved lineær skalering af modellen. Dette kan antyde, at hyperparametersøgning kan udføres på en nedskaleret version af et netværk for at spare på beregningstiden.

Dette viser også, at når netværket bliver større, medfører det ikke noget O (n²) arbejde med at konvergere modellen (den lineære vækst i tiden kan forklares med de ekstra operationer, der afholdes for hver vægttræning).

Dette resultat er yderligere betryggende, da det viser vores dybe læringsramme (her TensorFlow) skalerer effektivt.

Hvilken læringsfrekvens fungerer bedst for forskellige størrelser af modellen?

Lad os køre det samme eksperiment for flere læringshastigheder og se, hvordan træningstiden reagerer på modelstørrelse:

  • Læringshastigheder 0,0005, 0,001, 0,00146 klarede sig bedst - disse klarer sig også bedst i det første eksperiment. Vi ser her det samme "sweet spot" band som i det første eksperiment.
  • Hver læringsfrekvens for træningstid vokser lineært med modelstørrelse.
  • Læringsgrad ydeevne afhænger ikke af modelstørrelse. De samme hastigheder, der klarer sig bedst for 1x størrelse, klarer sig bedst for 10x størrelse.
  • Over 0,001 øgede øgning af læringshastigheden træningstiden og øgede også variansen i træningstid (sammenlignet med en lineær funktion af modelstørrelse).
  • Tid til at træne kan groft modelleres som c + kn for en model med n vægte, faste omkostninger c og indlæringskonstant k = f (læringsrate) .

Sammenfattende var den bedste læringsrate for størrelse 1x også den bedste læringsrate for størrelse 10x.

Automatisering af valg af læringsrate

Som de tidligere resultater viser, er det afgørende for modeluddannelse at have et godt valg af optimering og læringsrate.

Manuel valg af disse hyperparametre er tidskrævende og fejlbehæftet. Når din model ændres, er det tidligere valg af hyperparametre muligvis ikke længere ideelt. Det er upraktisk at løbende udføre nye søgninger manuelt.

Der er en række måder til automatisk at vælge hyperparametre. Jeg skitserer et par forskellige tilgange her.

Net-søgning

Netsøgning er det, vi udførte i det første eksperiment - for hver hyperparameter skal du oprette en liste over mulige værdier. Derefter træner netværket for hver kombination af mulige hyperparameterværdier og måler, hvordan det fungerer. De bedste hyperparametre er dem, der giver den bedst observerede ydeevne.

Netsøgning er meget let at implementere og forstå. Det er også let at kontrollere, at du har søgt i en tilstrækkelig bred sektion af parametersøgningen. Det er meget populært inden for forskning på grund af disse grunde.

Befolkningsbaseret træning

Befolkningsbaseret træning (DeepMind) er en elegant implementering af brugen af ​​en genetisk algoritme til hyperparametervalg.

I PBT oprettes en population af modeller. De trænes alle sammen løbende parallelt. Når ethvert medlem af befolkningen har haft tilstrækkelig lang tid til at træne for at vise forbedring, sammenlignes dens valideringsnøjagtighed med resten af ​​befolkningen. Hvis dens ydeevne er på de laveste 20%, kopieres og muteres hyperparametrene og variablerne hos en af ​​de 20% mest udøvende kunstnere.

På denne måde skaber de mest succesrige hyperparametre mange let muterede varianter af sig selv, og de bedste hyperparametre findes sandsynligvis.

Næste skridt

Tak, fordi du læste denne undersøgelse af læringshastigheder. Jeg begyndte disse eksperimenter ud fra min egen nysgerrighed og frustration omkring hyper-parameter drejning, og jeg håber du nyder resultaterne og konklusionerne lige så meget som jeg har.

Hvis der er et bestemt emne eller en udvidelse, du er interesseret i at se, så lad mig det vide. Også, hvis du er interesseret i at donere lidt GPU-tid til at køre en meget større version af dette eksperiment, vil jeg meget gerne tale.

Disse skrifter er en del af en årelang udforskning af AI-arkitekturemner. Følg denne publikation (og giv denne artikel en bifald!) For at få opdateringer, når de næste stykker kommer ud.