Så du har sett alla tutorials. Du förstår nu hur ett neuralt nätverk fungerar. Du har byggt en katt- och hundklassificerare. Du försökte dig på ett halvanständigt RNN på karaktärsnivå. Du är bara en pip install tensorflow
bort från att bygga terminatorn, eller hur? Fel.
En mycket viktig del av djupinlärning är att hitta rätt hyperparametrar. Detta är siffror som modellen kan inte lära sig.
I den här artikeln kommer jag att gå igenom några av de vanligaste (och viktiga) hyperparametrarna som du kommer att stöta på på vägen till förstaplatsen på Kaggles topplistor. Dessutom kommer jag också att visa dig några kraftfulla algoritmer som kan hjälpa dig att välja dina hyperparametrar på ett klokt sätt.
Hyperparametrar i Deep Learning
Hyperparametrar kan ses som inställningsrattarna för din modell.
Ett snyggt 7.1 Dolby Atmos hemmabiosystem med en subwoofer som producerar bas utanför det mänskliga örats hörbara räckvidd är värdelöst om du ställer in din AV-receiver på stereo.
På samma sätt kommer en inception_v3 med en biljon parametrar inte ens ta dig förbi MNIST om dina hyperparametrar är avstängda.
Så nu, låt oss ta en titt på rattarna för att ställa in innan vi kommer in på hur man ringer in rätt inställningar.
Inlärningshastighet
Förmodligen den viktigaste hyperparametern, inlärningshastigheten, grovt sett, styr hur snabbt ditt neurala nät "lär sig".
Så varför förstärker vi inte det här och lever livet på den snabba banan?
Inte så enkelt. Kom ihåg att i djupinlärning är vårt mål att minimera en förlustfunktion. Om inlärningshastigheten är för hög kommer vår förlust att börja hoppa över allt och aldrig konvergera.
Och om inlärningshastigheten är för liten kommer modellen att ta alldeles för lång tid att konvergera, som illustreras ovan.
Momentum
Eftersom den här artikeln fokuserar på hyperparameteroptimering, tänker jag inte förklara hela konceptet med fart. Men kortfattat kan momentumkonstanten ses som massan av en boll som rullar nerför förlustfunktionens yta.
Ju tyngre boll, desto snabbare faller den. Men om den är för tung kan den fastna eller skjuta över målet.
Hoppa av
Om du känner av ett tema här kommer jag nu att hänvisa dig till Amar Budhirajas artikel om avhopp.
Men som en snabb uppfräschning är dropout en regulariseringsteknik som föreslagits av Geoff Hinton som slumpmässigt ställer in aktiveringar i ett neuralt nätverk till 0 med en sannolikhet på (p). Detta hjälper till att förhindra neurala nät från att överanpassa (memorera) data i stället för att lära sig dem.
(p) är en hyperparameter.
Arkitektur — Antal lager, neuroner per lager, etc.
En annan (ganska ny) idé är att göra själva det neurala nätverkets arkitektur till en hyperparameter.
Även om vi i allmänhet inte får maskiner att ta reda på arkitekturen för våra modeller (annars skulle AI-forskare förlora sina jobb), men vissa nya tekniker som t.ex. Neural arkitektursökning har implementerat denna idé med varierande grad av framgång.
Om du har hört talas om AutoML, så här gör Google i princip: gör allt till en hyperparameter och sedan kasta en miljard TPU på problemet och låt det lösa sig självt.
Men för de allra flesta av oss som bara vill klassificera katter och hundar med en budgetmaskin hopsatt efter en Black Friday-rea, är det på tiden att vi kommer på hur vi får dessa modeller för djupinlärning att fungera.
Algoritmer för hyperparameteroptimering
Rutnätssökning
Detta är det enklaste sättet att få bra hyperparametrar. Det är bokstavligen bara brute force.
Algoritmen: Prova ett gäng hyperparametrar från en given uppsättning hyperparametrar och se vad som fungerar bäst.
Proffsen: Det är lätt nog för en femteklassare att genomföra. Kan lätt parallelliseras.
Nackdelarna: Som du säkert gissat är det vansinnigt beräkningsmässigt dyrt (som alla brute force-metoder är).
Ska jag använda det: Antagligen inte. Rutnätssökning är fruktansvärt ineffektivt. Även om du vill hålla det enkelt är det bättre att använda slumpmässig sökning.
Slumpmässig sökning
Allt finns i namnet — slumpmässiga sökningar. Slumpvis.
Algoritmen: Prova ett gäng slumpmässiga hyperparametrar från en enhetlig fördelning över något hyperparameterutrymme och se vad som fungerar bäst.
Proffsen: Kan lätt parallelliseras. Lika enkelt som rutnätssökning, men lite bättre prestanda, som illustreras nedan:
Nackdelarna: Även om det ger bättre prestanda än rutnätssökning, är det fortfarande lika beräkningsintensivt.
Ska jag använda det: Om trivial parallellisering och enkelhet är av yttersta vikt, gå för det. Men om du kan avvara tid och ansträngning, kommer du att belönas stort genom att använda Bayesian Optimization.
Bayesiansk optimering
Till skillnad från de andra metoderna vi har sett hittills använder Bayesiansk optimering kunskap om tidigare iterationer av algoritmen. Med rutnätssökning och slumpmässig sökning är varje hyperparametergissning oberoende. Men med Bayesianska metoder, varje gång vi väljer och provar olika hyperparametrar, tum mot perfektion.
Idéerna bakom Bayesian hyperparameterjustering är långa och detaljrika. Så för att undvika för många kaninhål ska jag ge dig kärnan här. Men se till att läsa på Gaussiska processer och Bayesiansk optimering i allmänhet, om det är sånt du är intresserad av.
Kom ihåg att anledningen till att vi använder dessa hyperparameterjusteringsalgoritmer är att det är omöjligt att faktiskt utvärdera flera hyperparameterval individuellt. Låt oss till exempel säga att vi ville hitta en bra inlärningshastighet manuellt. Detta skulle innebära att ställa in en inlärningshastighet, träna din modell, utvärdera den, välja en annan inlärningshastighet, träna din modell från början igen, omvärdera den och cykeln fortsätter.
Problemet är att "träning av din modell" kan ta upp till dagar (beroende på problemets komplexitet) att slutföra. Så du skulle bara kunna prova ett fåtal inlärningshastigheter när tidsfristen för inlämning av papper för konferensen dyker upp. Och vad vet du, du har inte ens börjat leka med farten. Hoppsan.
Algoritmen: Bayesianska metoder försöker bygga en funktion (mer exakt, en sannolikhetsfördelning över möjlig funktion) som uppskattar hur bra din modell kanske vara för ett visst val av hyperparametrar. Genom att använda den här ungefärliga funktionen (kallas surrogatfunktion i litteraturen) behöver du inte gå igenom uppsättningen, träna, utvärdera loopen för många gånger, eftersom du bara kan optimera hyperparametrarna till surrogatfunktionen.
Som ett exempel, säg att vi vill minimera den här funktionen (tänk på det som en proxy för din modells förlustfunktion):
Surrogatfunktionen kommer från något som kallas en Gaussisk process (obs: det finns andra sätt att modellera surrogatfunktionen, men jag använder en Gaussisk process). Som, jag nämnde, kommer jag inte att göra några matematiska härledningar, men här är vad allt snack om Bayesianer och Gaussianer går ner till:
$$ mathbb{P} (F_n(X)|X_n) = frac{e^{-frac12 F_n^T Sigma_n^{-1} F_n}}{sqrt{(2pi)^n |Sigma_n|}} $$
Vilket visserligen är en munsbit. Men låt oss försöka bryta ner det.
Den vänstra sidan talar om för dig att en sannolikhetsfördelning är inblandad (med tanke på närvaron av det snygga utseendet ( mathbb{P} ) ). Om vi tittar inom parentes kan vi se att det är en sannolikhetsfördelning av ( F_n(X) ), vilket är en godtycklig funktion. Varför? För kom ihåg, vi definierar en sannolikhetsfördelning över alla möjliga funktioner, inte bara en viss. I huvudsak säger den vänstra sidan att sannolikheten för att den sanna funktionen som mappar hyperparametrar till modellens mätvärden (som valideringsnoggrannhet, loggsannolikhet, testfelfrekvens, etc.) är ( F_n(X) ), givet vissa exempeldata (X_n) är lika med vad som än är på höger sida.
Nu när vi har funktionen att optimera optimerar vi den.
Så här kommer den Gaussiska processen att se ut innan vi startar optimeringsprocessen:
Använd din favoritoptimerare (proffsen gillar att maximera förväntad förbättring), men på något sätt, följ bara skyltarna (eller gradienterna) och innan du vet ordet av hamnar du på ditt lokala minima.
Efter några iterationer blir Gauss-processen bättre på att approximera målfunktionen:
Oavsett vilken metod du använde har du nu hittat `argmin` av surrogatfunktionen. Ans överraskning, överraskning, de argument som minimerar surrogatfunktionen är (en uppskattning av) de optimala hyperparametrarna! Jippie.
Det slutliga resultatet ska se ut så här:
Använd dessa "optimala" hyperparametrar för att göra ett träningslopp på ditt neurala nät, och du bör se en viss förbättring. Men du kan också använda denna nya information för att göra om hela Bayesianska optimeringsprocessen, igen, och igen, och igen. Kör gärna Bayesian-slingan hur många gånger du vill, men var försiktig. Du beräknar faktiskt saker. Dessa AWS-krediter kommer inte gratis, du vet. Eller gör de...
Proffsen: Bayesiansk optimering ger bättre resultat än både rutnätssökning och slumpmässig sökning.
Nackdelarna: Det är inte lika lätt att parallellisera.
Ska jag använda det: I de flesta fall, ja! De enda undantagen skulle vara om
- Du är en expert på djupinlärning och du behöver inte hjälp av en ynklig approximationsalgoritm.
- Du har tillgång till enorma beräkningsresurser och kan massivt parallellisera rutnätssökning och slumpmässig sökning.
- Om du är en frekventist/anti-bayesiansk statistiknörd.
Ett alternativt tillvägagångssätt för att hitta en bra inlärningshastighet
I alla metoder vi har sett hittills finns det ett underliggande tema: automatisera jobbet för maskininlärningsingenjören. Vilket är bra och allt; tills din chef får reda på detta och bestämmer sig för att ersätta dig med 4 RTX Titan-kort. Va. Antar att du borde ha hållit dig till manuell sökning.
Men misströsta inte, det finns aktiv forskning inom området för att få forskare att göra mindre och samtidigt få mer betalt. Och en av idéerna som har fungerat extremt bra är inlärningshastighetstestet, som så vitt jag vet först dök upp i en papper av Leslie Smith.
Uppsatsen handlar egentligen om en metod för att schemalägga (ändra) inlärningstakten över tid. LR-testet (inlärningshastighet) var en guldklimp som författaren bara slentrianmässigt tappade på sidan.
När du använder ett inlärningshastighetsschema som varierar inlärningshastigheten från ett lägsta till ett maximalt värde, t.ex cykliska inlärningshastigheter or stokastisk gradientnedstigning med varma omstarter, föreslår författaren att linjärt öka inlärningshastigheten efter varje iteration från ett litet till ett stort värde (säg, 1e-7
till 1e-1
), utvärdera förlusten vid varje iteration och rita upp förlusten (eller testfel eller noggrannhet) mot inlärningshastigheten på en loggskala. Din tomt ska se ut ungefär så här:
Som markerats på handlingen, skulle du sedan använda ställa in ditt inlärningshastighetsschema för att studsa mellan den lägsta och maximala inlärningshastigheten, som hittas genom att titta på handlingen och försöka få ögonen på regionen med den brantaste lutning.
Här är ett exempel på LR-intervalltestplot (DenseNet tränad på CIFAR10) från vår Colab anteckningsbok:
Som en tumregel, om du inte gör några tjusiga inlärningshastighetsscheman, ställ bara in din konstanta inlärningshastighet till en storleksordning lägre än minimivärdet på tomten. I det här fallet skulle det vara ungefär 1e-2
.
Det coolaste med den här metoden, förutom att den fungerar riktigt bra och besparar dig tid, mental ansträngning och beräkning som krävs för att hitta bra hyperparametrar med andra algoritmer, är att den praktiskt taget inte kostar någon extra beräkning.
Medan de andra algoritmerna, nämligen rutnätssökning, slumpmässig sökning och Bayesiansk optimering, kräver att du kör ett helt projekt som tangerar ditt mål att träna ett bra neuralt nät, LR range-testet utför bara en enkel, vanlig träningsloop och håller reda på några variabler längs vägen.
Här är den typ av konvergenshastighet du kan förvänta dig när du använder en optimal inlärningshastighet (från exemplet i anteckningsbok):
LR-räckviddstestet har genomförts av teamet kl snabbt.ai, och du borde definitivt ta en titt på deras bibliotek för att implementera LR range-testet (de kallar det inlärningshastighetssökare) samt många andra algoritmer med lätthet.
För den mer sofistikerade djupinlärningsutövaren
Om du är intresserad, det finns också en anteckningsbok skriven i ren pytorch som implementerar ovanstående. Detta kan ge dig en bättre förståelse för utbildningsprocessen bakom kulisserna. Kolla in det här..
Spara dig själv ansträngningen
Naturligtvis fungerar alla dessa algoritmer, hur bra de är, inte alltid i praktiken. Det finns många fler faktorer att ta hänsyn till när du tränar neurala nät, till exempel hur du ska förbearbeta din data, definiera din modell och faktiskt få en dator som är kraftfull nog att köra det förbannade.
Nanonetter ger lättanvända API:er till träna och implementera anpassad djupinlärning modeller. Den tar hand om alla tunga lyft, inklusive dataökning, överföringsinlärning och ja, hyperparameteroptimering!
Nanonetter använder Bayesiansk sökning på deras enorma GPU-kluster för att hitta rätt uppsättning hyperparametrar utan att du behöver oroa dig för att blåsa pengar på det senaste grafikkortet och out of bounds for axis 0
.
När den väl hittar den bästa modellen, Nanonetter serverar den på deras moln så att du kan testa modellen med deras webbgränssnitt eller för att integrera den i ditt program med två rader kod.
Säg adjö till mindre än perfekta modeller.
Slutsats
I den här artikeln har vi pratat om hyperparametrar och några metoder för att optimera dem. Men vad betyder allt?
När vi försöker allt hårdare att demokratisera AI-tekniken, är automatisk hyperparameterjustering förmodligen ett steg i rätt riktning. Det tillåter vanliga människor som du och jag att bygga fantastiska applikationer för djupinlärning utan en doktorsexamen i matematik.
Även om du skulle kunna hävda att att göra modeller sugna på datorkraft lämnar de allra bästa modellerna i händerna på dem som har råd med nämnda datorkraft, molntjänster som AWS och Nanonets hjälper till att demokratisera tillgången till kraftfulla maskiner, vilket gör djupinlärning mycket mer tillgänglig.
Men mer fundamentalt, vad vi är faktiskt gör här med matematik för att lösa mer matematik. Vilket är intressant inte bara på grund av hur meta det låter, utan också på grund av hur lätt det kan misstolkas.
Vi har verkligen kommit långt från hålkortens och spårningstabellernas era till en ålder där vi optimerar funktioner som optimerar funktioner som optimerar funktioner. Men vi är inte i närheten av att bygga maskiner som kan "tänka" på egen hand.
Och det är inte avskräckande, inte det minsta, för om mänskligheten kan göra så mycket med så lite, föreställ dig vad framtiden har att erbjuda, när våra visioner blir något som vi faktiskt kan se.
Och så sitter vi, på en kuddad nätstol och stirrar på en tom terminalskärm, varje tangenttryckning ger oss en sudo
superkraft som kan torka disken ren.
Och så sitter vi, vi sitter där hela dagen, för nästa stora genombrott kanske bara blir ett pip install
bort.
Lata att koda? Vill du inte spendera på datorresurser? Gå över till Nanonetter och Börja bygga en modell nu!
Du kanske är intresserad av våra senaste inlägg på:
Källa: https://nanonets.com/blog/hyperparameter-optimization/
- 7
- 9
- tillgång
- aktiv
- AI
- algoritm
- algoritmer
- Alla
- amp
- API: er
- tillämpningar
- arkitektur
- argument
- Artikeln
- Ljud
- Automatiserad
- AV
- AWS
- BÄST
- Miljarder
- Bit
- Svart
- Black Friday
- SLUTRESULTAT
- Byggnad
- Bunch
- Ring
- vilken
- fall
- Kontanter
- Katter
- cloud
- molntjänster
- koda
- Gemensam
- Compute
- databehandling
- beräkningskraft
- Konferens
- fortsätter
- Kostar
- krediter
- datum
- dag
- djupt lärande
- Hundar
- tappade
- ingenjör
- uppskattningar
- etc
- SNABB
- Figur
- fynd
- Förnamn
- passa
- följer
- Fri
- Fredag
- FS
- fungera
- framtida
- gif
- GitHub
- Ge
- Gold
- god
- GPU
- stor
- Rutnät
- huvud
- här.
- Hög
- Hem
- Hur ser din drömresa ut
- How To
- HTTPS
- Hungrig
- Tanken
- inches
- Inklusive
- informationen
- involverade
- IT
- Jobb
- Lediga jobb
- hålla
- kunskap
- Large
- senaste
- LÄRA SIG
- inlärning
- Bibliotek
- litteraturen
- lokal
- logotyp
- Lång
- maskininlärning
- Maskiner
- Majoritet
- Framställning
- kartor
- matte
- Media
- Medium
- meme
- meta
- Metrics
- modell
- Momentum
- nämligen
- netto
- nät
- neural
- neurala nätverk
- nummer
- beställa
- Övriga
- Papper
- prestanda
- inlägg
- kraft
- Program
- projektet
- ombud
- stansen
- område
- rates
- RE
- forskning
- Resurser
- Resultat
- Körning
- Till Salu
- Skala
- screen
- Sök
- Tjänster
- in
- inställning
- Kort
- Tecken
- Enkelt
- Small
- So
- LÖSA
- Utrymme
- fart
- spendera
- Spot
- starta
- igång
- statistik
- framgång
- yta
- överraskning
- system
- Målet
- Teknologi
- testa
- Framtiden
- teater
- tema
- tid
- spår
- Utbildning
- självstudiekurser
- Unsplash
- us
- verktyg
- värde
- Kolla på
- webb
- VEM
- vind
- Arbete
- fungerar
- X