de Thalles Silva
O introducere în reglarea hiper-parametrii de înaltă dimensiune
Cele mai bune practici pentru optimizarea modelelor ML

Dacă te-ai luptat vreodată cu reglarea modelelor Machine Learning (ML), citești piesa potrivită.
Reglare hiper-parametru se referă la problema găsirii unui set optim de valori ale parametrilor pentru un algoritm de învățare.
De obicei, procesul de alegere a acestor valori este o sarcină care necesită mult timp.
Chiar și pentru algoritmi simpli precum Regresia Liniară, găsirea celui mai bun set pentru hiper-parametri poate fi dificilă. Cu Deep Learning, lucrurile se înrăutățesc și mai mult.
Unii dintre parametrii de reglat atunci când optimizați rețelele neuronale (NN) includ:
- rata de învățare
- impuls
- regularizare
- probabilitatea abandonului
- normalizarea lotului
În această scurtă piesă, vorbim despre cele mai bune practici pentru optimizarea modelelor ML. Aceste practici vin în mână în principal atunci când numărul parametrilor de acordat depășește doi sau trei.
Problema cu Grid Search
Grid Search este de obicei o alegere bună atunci când avem un număr mic de parametri de optimizat. Pentru doi sau chiar trei parametri diferiți, ar putea fi calea de urmat.
Pentru fiecare hiper-parametru, definim un set de valori candidate de explorat.
Apoi, ideea este de a încerca exhaustiv fiecare combinație posibilă a valorilor parametrilor individuali.
Pentru fiecare combinație, antrenăm și evaluăm un model diferit.
La final, îl păstrăm pe cel cu cea mai mică eroare de generalizare.
Principala problemă cu Grid Search este că este un algoritm exponențial de timp. Costul său crește exponențial cu numărul de parametri.
Cu alte cuvinte, dacă trebuie să optimizăm p parametrii și fiecare ia cel mult v valori, rulează în O (vᵖ) timp.
De asemenea, Căutarea în rețea nu este la fel de eficientă în explorarea spațiului hiper-parametru pe cât am putea crede.
Uitați-vă din nou la codul de mai sus. Folosind această configurație, vom instrui un total de 256 de modele diferite. Rețineți că, dacă decidem să adăugăm încă un parametru, numărul experimentelor ar crește la 1024.
Cu toate acestea, această configurare explorează doar patru valori diferite pentru fiecare hiper-parametru. Asta este, pregătim 256 de modele pentru a explora doar patru valori ale ratei de învățare, regularizare și așa mai departe.
În plus, Grid Search necesită de obicei încercări repetitive. Ia learning_rate_search
valorile din codul de mai sus ca exemplu.
learning_rate_search = [0.1, 0.01, 0.001, 0.0001]
Să presupunem că după prima noastră încercare (256 de încercări de model), obținem cel mai bun model cu o rată de învățare de 0,01.
În această situație, ar trebui să încercăm să ne perfecționăm valorile de căutare „mărind” grila în jurul valorii de 0,01, în speranța de a găsi o valoare și mai bună.
Pentru a face acest lucru, am putea configura o nouă rețea de căutare și să redefinim gama de căutare a ratei de învățare, cum ar fi:
learning_rate_search = [0.006, 0.008, 0.01, 0.04, 0.06]
Dar dacă obținem cel mai bun model cu o rată de învățare de 0,0001?
Deoarece această valoare se află chiar la marginea intervalului de căutare inițială, ar trebui să schimbăm valorile și să încercăm din nou cu un set diferit, cum ar fi:
learning_rate_search = [0.0001, 0.00006, 0.00002]
Și, probabil, încercați să rafinați gama după ce găsiți un candidat bun.
Toate aceste detalii subliniază doar cât de consumatoare de timp poate fi căutarea cu hiper-parametri.
O abordare mai bună – Random Search
Ce zici de alegerea valorilor noastre de candidat hiper-parametru la întâmplare? Oricât de intuitivă ar părea, această idee este aproape întotdeauna mai bună decât Grid Search.
Un pic de intuiție
Rețineți că unii dintre hiper-parametri sunt mai importanți decât alții.
Rata de învățare și factorul de impuls, de exemplu, merită mai mult acordate decât toate celelalte.
Cu toate acestea, cu excepția de mai sus, este greu de știut care dintre ele joacă roluri majore în procesul de optimizare. De fapt, aș argumenta că importanța fiecărui parametru s-ar putea schimba pentru diferite arhitecturi de modele și seturi de date.
Să presupunem că optimizăm peste doi hiper-parametri – rata de învățare și forța de regularizare. De asemenea, luați în considerare faptul că doar rata de învățare contează pentru problemă.
În cazul Grid Search, vom derula nouă experimente diferite, dar vom încerca doar trei candidați pentru rata de învățare.

Acum, aruncați o privire la ce se întâmplă dacă eșantionăm candidații în mod uniform la întâmplare. În acest scenariu, explorăm de fapt nouă valori diferite pentru fiecare parametru.
Dacă nu sunteți încă convins, să presupunem că optimizăm peste trei hiper-parametri. De exemplu, rata de învățare, forța de regularizare și impulsul.

Pentru Grid Search, vom desfășura 125 de antrenamente, dar vom explora doar cinci valori diferite ale fiecărui parametru.
Pe de altă parte, cu Random Search, vom explora 125 de valori diferite pentru fiecare.
Cum să o facă
Dacă vrem să încercăm valori pentru rata de învățare, să spunem în intervalul de la 0,1 la 0,0001, facem:
Rețineți că eșantionăm valori de la a distribuție uniformă pe o scară de jurnal.
Vă puteți gândi la valorile -1 și -4 (pentru rata de învățare) ca exponenți în interval [10e-1, 10e-4].
Dacă nu folosim o scară log, eșantionarea nu va fi uniformă în intervalul dat. Cu alte cuvinte, nu trebuie să încercați să testați valori precum:
În această situație, majoritatea valorilor nu ar fi prelevate dintr-o regiune „validă”. De fapt, având în vedere eșantioanele ratei de învățare din acest exemplu, 72% din valori ar cădea în interval [0.02, 0.1].
Mai mult, 88% din valorile eșantionate ar proveni din interval [0.01, 0.1]. Adică, doar 12% dintre candidații la rata de învățare, 3 valori, ar fi eșantionați din interval [0.0004, 0.01]. Nu face aia.
În graficul de mai jos, prelevăm 25 de valori aleatorii din interval [0.1,0.0004]. Graficul din stânga sus arată valorile originale.
În dreapta sus, observați că 72% din valorile eșantionate se află în interval [0.02, 0.1]. 88% din valori se încadrează în interval [0.01, 0.1].
Graficul inferior arată distribuția valorilor. Doar 12% din valori se află în interval [0.0004, 0.01]. Pentru a rezolva această problemă, eșantionați valorile dintr-o distribuție uniformă într-o scară de jurnal.

Un comportament similar s-ar întâmpla cu parametrul de regularizare.
De asemenea, rețineți că, la fel ca în Grid Search, trebuie să luați în considerare cele două cazuri menționate mai sus.
Dacă cel mai bun candidat cade foarte aproape de margine, raza dvs. de acțiune ar putea fi oprită și ar trebui să fie schimbată și re-eșantionată. De asemenea, după ce ați ales primii candidați buni, încercați să re-eșantionați la o gamă mai bună de valori.
În concluzie, acestea sunt cheile de luat masa.
- Dacă aveți mai mult de doi sau trei hiper-parametri de reglat, preferați Căutarea aleatorie. Este mai rapid / mai ușor de implementat și converge mai repede decât Grid Search.
- Folosiți o scară adecvată pentru a alege valorile dvs. Eșantion dintr-o distribuție uniformă într-un spațiu jurnal. Acest lucru vă va permite să testați valori distribuite în mod egal în intervalele de parametri.
- Indiferent de Căutarea aleatorie sau de rețea, acordați atenție candidaților pe care îi alegeți. Asigurați-vă că intervalele parametrilor sunt setate corect și rafinați cei mai buni candidați, dacă este posibil.
Mulțumesc pentru lectură! Pentru mai multe lucruri interesante despre Deep Learning, consultați câteva dintre articolele mele anterioare:
Cum să vă antrenați propriul FaceID ConvNet folosind execuția TensorFlow Eager
Fețele sunt peste tot – de la fotografii și videoclipuri pe site-urile de socializare, până la aplicații de securitate pentru consumatori precum …medium.freecodecamp.orgMachine Learning 101: O introducere intuitivă la descendența gradientului
Coborârea în gradient este, fără îndoială, inima și sufletul majorității algoritmilor de învățare automată (ML). Cu siguranță cred …cătredatascience.com