Explorați tehnici avansate de optimizare a hiperparametrilor cu Amazon SageMaker Automatic Model Tuning | Amazon Web Services

Explorați tehnici avansate de optimizare a hiperparametrilor cu Amazon SageMaker Automatic Model Tuning | Amazon Web Services

Crearea de soluții de învățare automată (ML) de înaltă performanță se bazează pe explorarea și optimizarea parametrilor de antrenament, cunoscuți și sub numele de hiperparametri. Hiperparametrii sunt butoanele și pârghiile pe care le folosim pentru a regla procesul de antrenament, cum ar fi rata de învățare, dimensiunea lotului, puterea de regularizare și altele, în funcție de modelul specific și sarcina la îndemână. Explorarea hiperparametrilor presupune variarea sistematică a valorilor fiecărui parametru și observarea impactului asupra performanței modelului. Deși acest proces necesită eforturi suplimentare, beneficiile sunt semnificative. Optimizarea hiperparametrului (HPO) poate duce la timpi de antrenament mai rapizi, o precizie îmbunătățită a modelului și o generalizare mai bună la date noi.

Ne continuăm călătoria de la post Optimizați hiperparametrii cu Amazon SageMaker Automatic Model Tuning. Am explorat anterior o singură optimizare a sarcinii, am vizualizat rezultatele pentru algoritmul încorporat SageMaker și am aflat despre impactul anumitor valori ale hiperparametrului. Pe lângă utilizarea HPO ca o optimizare unică la sfârșitul ciclului de creare a modelului, îl putem folosi și în mai mulți pași într-o manieră conversațională. Fiecare lucrare de tuning ne ajută să ne apropiem de o performanță bună, dar în plus, învățăm și cât de sensibil este modelul la anumiți hiperparametri și putem folosi această înțelegere pentru a informa următorul job de tuning. Putem revizui hiperparametrii și intervalele lor de valori pe baza a ceea ce am învățat și, prin urmare, să transformăm acest efort de optimizare într-o conversație. Și în același mod în care noi, ca practicieni ML, acumulăm cunoștințe pe parcursul acestor curse, Amazon SageMaker Automatic Model Tuning (AMT) cu porniri la cald poate menține aceste cunoștințe dobândite în lucrările de reglare anterioare și pentru următoarea lucrare de reglare.

În această postare, rulăm mai multe joburi HPO cu un algoritm de antrenament personalizat și diferite strategii HPO, cum ar fi optimizarea bayesiană și căutarea aleatorie. De asemenea, punem în acțiune pornirile calde și comparăm vizual încercările noastre pentru a perfecționa explorarea spațiului hiperparametric.

Concepte avansate ale SageMaker AMT

În secțiunile următoare, aruncăm o privire mai atentă la fiecare dintre următoarele subiecte și arătăm modul în care SageMaker AMT vă poate ajuta să le implementați în proiectele dvs. de ML:

  • Utilizați codul de antrenament personalizat și popularul cadru ML Scikit-learn în SageMaker Training
  • Definiți valori personalizate de evaluare pe baza jurnalelor pentru evaluare și optimizare
  • Efectuați HPO folosind o strategie adecvată
  • Utilizați pornirile calde pentru a transforma o singură căutare de hiperparametru într-un dialog cu modelul nostru
  • Utilizați tehnici avansate de vizualizare folosind biblioteca noastră de soluții pentru a compara două strategii HPO și a optimiza rezultatele lucrărilor

Indiferent dacă utilizați algoritmii încorporați utilizați în prima noastră postare sau propriul cod de antrenament, SageMaker AMT oferă o experiență de utilizator fără întreruperi pentru optimizarea modelelor ML. Oferă funcționalitate cheie care vă permite să vă concentrați asupra problemei ML aflate la îndemână, în timp ce urmăriți automat încercările și rezultatele. În același timp, gestionează automat infrastructura de bază pentru dvs.

În această postare, ne îndepărtăm de un algoritm încorporat SageMaker și folosim cod personalizat. Folosim o pădure aleatorie din SkLearn. Dar rămânem la aceeași sarcină ML și set de date ca și în cazul nostru prima postare, care detectează cifrele scrise de mână. Acoperim conținutul caietului Jupyter 2_ajustare_avansată_cu_formare_personalizată_și_vizualizare.ipynb și vă invit să invocați codul unul lângă altul pentru a citi mai departe.

Să ne aprofundăm și să descoperim cum putem folosi codul personalizat de antrenament, îl putem implementa și rula, în timp ce explorăm spațiul de căutare a hiperparametrilor pentru a ne optimiza rezultatele.

Cum să construiți un model ML și să realizați optimizarea hiperparametrului

Cum arată un proces tipic pentru construirea unei soluții ML? Deși există multe cazuri de utilizare posibile și o mare varietate de sarcini ML, vă sugerăm următorul model mental pentru o abordare în trepte:

  1. Înțelegeți scenariul ML la îndemână și selectați un algoritm pe baza cerințelor. De exemplu, este posibil să doriți să rezolvați o sarcină de recunoaștere a imaginii folosind un algoritm de învățare supravegheată. În această postare, continuăm să folosim scenariul de recunoaștere a imaginii scrise de mână și același set de date ca în prima noastră postare.
  2. Decideți ce implementare a algoritmului în SageMaker Training doriți să utilizați. Există diverse opțiuni, în interiorul SageMaker sau externe. În plus, trebuie să definiți valoarea de bază care se potrivește cel mai bine sarcinii dvs. și pentru care doriți să o optimizați (cum ar fi acuratețea, scorul F1 sau ROC). SageMaker acceptă patru opțiuni, în funcție de nevoile și resursele dvs.:
    • Utilizați un model pre-antrenat prin Amazon SageMaker JumpStart, pe care îl puteți folosi din cutie sau pur și simplu îl puteți regla fin.
    • Utilizați unul dintre algoritmii încorporați pentru antrenament și reglare, cum ar fi XGBoost, așa cum am făcut în postarea noastră anterioară.
    • Antrenați și reglați un model personalizat bazat pe unul dintre cadrele majore precum Scikit-learn, TensorFlow sau PyTorch. AWS oferă o selecție de imagini Docker prefabricate în acest scop. Pentru această postare, folosim această opțiune, care vă permite să experimentați rapid prin rularea propriului cod deasupra unei imagini de container prefabricate.
    • Aduceți propria imagine Docker personalizată în cazul în care doriți să utilizați un cadru sau un software care nu este acceptat altfel. Această opțiune necesită cel mai mare efort, dar oferă și cel mai înalt grad de flexibilitate și control.
  3. Antrenați modelul cu datele dvs. În funcție de implementarea algoritmului de la pasul anterior, acest lucru poate fi la fel de simplu ca referirea la datele dvs. de antrenament și executarea sarcinii de antrenament sau prin furnizarea suplimentară de cod personalizat pentru antrenament. În cazul nostru, folosim un cod de antrenament personalizat în Python, bazat pe Scikit-learn.
  4. Aplicați optimizarea hiperparametrului (ca o „conversație” cu modelul dvs. ML). După antrenament, de obicei doriți să optimizați performanța modelului dvs. prin găsirea celei mai promițătoare combinații de valori pentru hiperparametrii algoritmului dvs.

În funcție de algoritmul ML și dimensiunea modelului, ultimul pas de optimizare a hiperparametrilor se poate dovedi a fi o provocare mai mare decât era de așteptat. Următoarele întrebări sunt tipice pentru practicienii ML în această etapă și vă pot suna familiare:

  • Ce fel de hiperparametri au impact pentru problema mea ML?
  • Cum pot căuta eficient într-un spațiu imens de hiperparametri pentru a găsi acele valori cu cele mai bune performanțe?
  • Cum influențează combinația anumitor valori ale hiperparametrului valoarea mea de performanță?
  • Costurile contează; cum îmi pot folosi resursele într-un mod eficient?
  • Ce fel de experimente de reglare merită și cum le pot compara?

Nu este ușor să răspunzi la aceste întrebări, dar există vești bune. SageMaker AMT vă ia greutățile și vă permite să vă concentrați pe alegerea strategiei HPO potrivite și a intervalelor de valori pe care doriți să le explorați. În plus, soluția noastră de vizualizare facilitează analiza iterativă și procesul de experimentare pentru a găsi în mod eficient valorile hiperparametrelor performante.

În secțiunile următoare, construim un model de recunoaștere a cifrelor de la zero folosind Scikit-learn și arătăm toate aceste concepte în acțiune.

Prezentare generală a soluțiilor

SageMaker oferă câteva funcții foarte utile pentru a antrena, evalua și regla modelul nostru. Acesta acoperă toate funcționalitățile unui ciclu de viață ML end-to-end, așa că nici măcar nu trebuie să părăsim notebook-ul nostru Jupyter.

În prima noastră postare, am folosit algoritmul încorporat SageMaker XGBoost. În scopuri demonstrative, de data aceasta trecem la un clasificator Random Forest, deoarece vă putem arăta apoi cum să vă furnizați propriul cod de antrenament. Am optat pentru a furniza propriul nostru script Python și pentru a folosi Scikit-learn ca cadru. Acum, cum exprimăm că vrem să folosim un cadru ML specific? După cum vom vedea, SageMaker folosește un alt serviciu AWS în fundal pentru a prelua o imagine de container Docker pre-construită pentru antrenament—Registrul Amazon de containere elastice (Amazon ECR).

Acoperim următorii pași în detaliu, inclusiv fragmente de cod și diagrame pentru a conecta punctele. După cum am menționat anterior, dacă aveți șansa, deschideți blocnotesul și rulați celulele de cod pas cu pas pentru a crea artefactele în mediul dvs. AWS. Nu există o modalitate mai bună de a învăța activ.

  1. Mai întâi, încărcați și pregătiți datele. Folosim Serviciul Amazon de stocare simplă (Amazon S3) pentru a încărca un fișier care conține datele noastre cu cifre scrise de mână.
  2. Apoi, pregătiți scriptul de antrenament și dependențele cadrului. Oferim codul de antrenament personalizat în Python, facem referire la unele biblioteci dependente și facem o rulare de testare.
  3. Pentru a defini valorile obiectivelor personalizate, SageMaker ne permite să definim o expresie regulată pentru a extrage valorile de care avem nevoie din fișierele jurnal ale containerului.
  4. Antrenați modelul folosind cadrul scikit-learn. Făcând referire la o imagine de container pre-construită, creăm un obiect Estimator corespunzător și trecem scriptul nostru de antrenament personalizat.
  5. AMT ne permite să încercăm diverse strategii HPO. Ne concentrăm pe două dintre ele pentru această postare: căutare aleatorie și căutare bayesiană.
  6. Alegeți dintre strategiile SageMaker HPO.
  7. Vizualizați, analizați și comparați rezultatele reglajului. Pachetul nostru de vizualizare ne permite să descoperim care strategie are performanțe mai bune și care valori ale hiperparametrului oferă cea mai bună performanță pe baza valorilor noastre.
  8. Continuați explorarea spațiului hiperparametric și porniți la cald lucrările HPO.

AMT se ocupă de scalarea și gestionarea infrastructurii de calcul de bază pentru a rula diferitele joburi de reglare pe Cloud Elastic de calcul Amazon (Amazon EC2). În acest fel, nu trebuie să vă împovărați pentru a furniza instanțe, să gestionați orice probleme legate de sistemul de operare și hardware sau să agregați fișierele jurnal pe cont propriu. Imaginea cadrului ML este preluată de la Amazon ECR, iar artefactele modelului, inclusiv rezultatele reglajului, sunt stocate în Amazon S3. Toate jurnalele și valorile sunt colectate în Amazon CloudWatch pentru acces convenabil și analize suplimentare, dacă este necesar.

Cerințe preliminare

Deoarece aceasta este o continuare a unei serii, este recomandat, dar nu obligatoriu, să citiți prima noastră postare despre SageMaker AMT și HPO. În afară de asta, familiaritatea de bază cu conceptele ML și programarea Python este utilă. De asemenea, vă recomandăm să urmați fiecare pas din caiet de însoțire din depozitul nostru GitHub în timp ce citiți această postare. Notebook-ul poate fi rulat independent de primul, dar are nevoie de ceva cod din subfoldere. Asigurați-vă că ați clonat depozitul complet în mediul dvs., așa cum este descris în fișierul README.

Experimentarea codului și utilizarea opțiunilor de vizualizare interactivă vă îmbunătățește foarte mult experiența de învățare. Deci, vă rugăm să verificați.

Încărcați și pregătiți datele

Ca prim pas, ne asigurăm că este descărcat date cifre de care avem nevoie pentru instruire este accesibil pentru SageMaker. Amazon S3 ne permite să facem acest lucru într-un mod sigur și scalabil. Consultați notebook-ul pentru codul sursă complet și nu ezitați să-l adaptați cu propriile date.

sm_sess = sagemaker.session.Session(boto_session=boto_sess, sagemaker_client=sm)
BUCKET = sm_sess.default_bucket()
PREFIX = 'amt-visualize-demo'
s3_data_url = f's3://{BUCKET}/{PREFIX}/data'
digits = datasets.load_digits()
digits_df = pd.DataFrame(digits.data)
digits_df['y'] = digits.target
digits_df.to_csv('data/digits.csv', index=False)
!aws s3 sync data/ {s3_data_url} —exclude '*' —include 'digits.csv'

digits.csv fișierul conține date și etichete ale caracteristicilor. Fiecare cifră este reprezentată de valorile pixelilor într-o imagine de 8×8, așa cum se arată în imaginea următoare pentru cifra 4.
Setul de date cu cifre de la Scikit-learn

Pregătiți scriptul de antrenament și dependențele cadrului

Acum că datele sunt stocate în compartimentul nostru S3, putem defini scriptul nostru personalizat de antrenament pe baza Scikit-învață în Python. SageMaker ne oferă opțiunea de a face trimitere pur și simplu la fișierul Python mai târziu pentru antrenament. Orice dependențe precum bibliotecile Scikit-learn sau pandas pot fi furnizate în două moduri:

  • Ele pot fi specificate explicit în a requirements.txt fişier
  • Acestea sunt preinstalate în imaginea de bază a containerului ML, care este fie furnizată de SageMaker, fie personalizat

Ambele opțiuni sunt, în general, considerate căi standard pentru gestionarea dependenței, așa că este posibil să fiți deja familiarizați cu acestea. SageMaker acceptă o varietate de cadre ML într-un mediu gestionat gata de utilizare. Aceasta include multe dintre cele mai populare cadre de știință a datelor și ML, cum ar fi PyTorch, TensorFlow sau Scikit-learn, ca în cazul nostru. Nu folosim un suplimentar requirements.txt fișier, dar nu ezitați să adăugați câteva biblioteci pentru a-l încerca.

Codul implementării noastre conține o metodă numită fit(), care creează un nou clasificator pentru sarcina de recunoaștere a cifrelor și îl antrenează. Spre deosebire de prima noastră postare în care am folosit algoritmul XGBoost încorporat SageMaker, acum folosim un RandomForestClassifier oferit de biblioteca ML sklearn. Apelul lui fit() metoda de pe obiectul clasificator începe procesul de antrenament folosind un subset (80%) din datele noastre CSV:

def fit(train_dir, n_estimators, max_depth, min_samples_leaf, max_features, min_weight_fraction_leaf): digits = pd.read_csv(Path(train_dir)/'digits.csv') Xtrain, Xtest, ytrain, ytest = train_test_split(digits.iloc[:, :-1], digits.iloc[:, -1], test_size=.2) m = RandomForestClassifier(n_estimators=n_estimators, max_depth=max_depth, min_samples_leaf=min_samples_leaf, max_features=max_features, min_weight_fraction_leaf=min_weight_fraction_leaf) m.fit(Xtrain, ytrain) predicted = m.predict(Xtest) pre, rec, f1, _ = precision_recall_fscore_support(ytest, predicted, pos_label=1, average='weighted') print(f'pre: {pre:5.3f} rec: {rec:5.3f} f1: {f1:5.3}') return m

Vedeți scriptul complet în caietul nostru Jupyter pe GitHub.

Înainte de a porni resursele containerului pentru întregul proces de instruire, ați încercat să rulați direct scriptul? Aceasta este o practică bună pentru a vă asigura rapid că codul nu are erori de sintaxă, pentru a verifica dimensiunile care se potrivesc ale structurilor dvs. de date și alte erori de la început.

Există două moduri de a rula codul local. În primul rând, îl puteți rula imediat în notebook, care vă permite și să utilizați Python Debugger pdb:

# Running the code from within the notebook. It would then be possible to use the Python Debugger, pdb.
from train import fit
fit('data', 100, 10, 1, 'auto', 0.01)

Alternativ, rulați scriptul de tren din linia de comandă în același mod în care doriți să îl utilizați într-un container. Acest lucru acceptă, de asemenea, setarea diferiților parametri și suprascrierea valorilor implicite după cum este necesar, de exemplu:

!cd src && python train.py --train ../data/ --model-dir /tmp/ --n-estimators 100

Ca rezultat, puteți vedea primele rezultate pentru performanța modelului pe baza preciziei, reamintirii și a scorului F1 a valorilor obiective. De exemplu, pre: 0.970 rec: 0.969 f1: 0.969.

Nu e rău pentru un antrenament atât de rapid. Dar de unde au venit aceste numere și ce facem cu ele?

Definiți valorile obiectiv personalizate

Amintiți-vă, scopul nostru este să ne antrenăm și să ne ajustam pe deplin modelul pe baza valorilor obiective pe care le considerăm relevante pentru sarcina noastră. Deoarece folosim un script de antrenament personalizat, trebuie să definim în mod explicit acele valori pentru SageMaker.

Scriptul nostru emite precizia valorilor, reamintirea și scorul F1 în timpul antrenamentului pur și simplu folosind print funcţie:

print(f'pre: {pre:5.3f} rec: {rec:5.3f} f1: {f1:5.3}')

Ieșirea standard este capturată de SageMaker și trimisă la CloudWatch ca flux de jurnal. Pentru a prelua valorile metricii și a lucra cu ele mai târziu în SageMaker AMT, trebuie să furnizăm câteva informații despre cum să analizăm acea ieșire. Putem realiza acest lucru prin definirea declarațiilor de expresie regulată (pentru mai multe informații, consultați Monitorizați și analizați joburile de formare folosind Amazon CloudWatch Metrics):

metric_definitions = [ {'Name': 'valid-precision', 'Regex': r'pre:s+(-?[0-9.]+)'}, {'Name': 'valid-recall', 'Regex': r'rec:s+(-?[0-9.]+)'}, {'Name': 'valid-f1', 'Regex': r'f1:s+(-?[0-9.]+)'}] 

Să parcurgem împreună prima definiție a valorii din codul precedent. SageMaker va căuta rezultate în jurnalul care începe cu pre: și este urmat de unul sau mai multe spații albe și apoi de un număr pe care dorim să-l extragem, motiv pentru care folosim paranteza rotundă. De fiecare dată când SageMaker găsește o astfel de valoare, o transformă într-o măsurătoare CloudWatch cu numele valid-precision.

Antrenați modelul folosind cadrul Scikit-learn

După ce ne creăm scriptul de antrenament train.py și instruim SageMaker despre cum să monitorizeze valorile din CloudWatch, definim a SageMaker Estimator obiect. Inițiază jobul de instruire și folosește tipul de instanță pe care îl specificăm. Dar cum poate acest tip de instanță să fie diferit de cel pe care îl executați Amazon SageMaker Studio caietul aprins și de ce? SageMaker Studio rulează lucrările dvs. de instruire (și deducere) pe instanțe de calcul separate decât notebook-ul dvs. Acest lucru vă permite să continuați să lucrați în notebook în timp ce lucrările rulează în fundal.

Parametrul framework_version se referă la versiunea Scikit-learn pe care o folosim pentru munca noastră de formare. Alternativ, putem trece image_uri la estimator. Puteți verifica dacă cadrul preferat sau biblioteca ML este disponibilă ca a imagine prefabricată SageMaker Docker și folosește-l așa cum este sau cu extensii.

Mai mult, putem rula joburi de instruire SageMaker pe Instanțele Spot EC2 prin setare use_spot_instances la True. Sunt instanțe de capacitate de rezervă care pot economisiți până la 90% din costuri. Aceste instanțe oferă flexibilitate atunci când sunt executate joburile de instruire.

estimator = SKLearn( 'train.py', source_dir='src', role=get_execution_role(), instance_type= 'ml.m5.large', instance_count=1, framework_version='0.23-1', metric_definitions=metric_definitions, # Uncomment the following three lines to use Managed Spot Training # use_spot_instances= True, # max_run= 60 * 60 * 24, # max_wait= 60 * 60 * 24, hyperparameters = {'n-estimators': 100, 'max-depth': 10, 'min-samples-leaf': 1, 'max-features': 'auto', 'min-weight-fraction-leaf': 0.1}
)

După ce obiectul Estimator este configurat, începem antrenamentul apelând la fit() funcție, furnizând calea către setul de date de antrenament pe Amazon S3. Putem folosi aceeași metodă pentru a furniza date de validare și de testare. Am stabilit wait parametru pentru a True astfel încât să putem folosi modelul antrenat în celulele de cod ulterioare.

estimator.fit({'train': s3_data_url}, wait=True)

Definiți hiperparametri și rulați joburi de reglare

Până acum, am antrenat modelul cu un set de valori de hiperparametru. Dar erau acele valori bune? Sau am putea să căutăm altele mai bune? Să folosim Clasa HyperparameterTuner pentru a efectua o căutare sistematică în spațiul hiperparametrului. Cum căutăm acest spațiu cu tunerul? Parametrii necesari sunt numele metricii obiectivului și tipul obiectivului care vor ghida optimizarea. Strategia de optimizare este un alt argument cheie pentru tuner, deoarece definește în continuare spațiul de căutare. Următoarele sunt patru strategii diferite din care puteți alege:

  • Căutare în grilă
  • Căutare aleatorie
  • Optimizare bayesiană (implicit)
  • Hiperbandă

Descriem în continuare aceste strategii și vă oferim câteva îndrumări pentru a alege una mai târziu în această postare.

Înainte de a defini și de a rula obiectul nostru tuner, să recapitulăm înțelegerea noastră din perspectiva arhitecturii. Am acoperit prezentarea arhitecturală a SageMaker AMT în ultima noastră postare și reproduceți un fragment din acesta aici pentru comoditate.

Arhitectura de reglare automată a modelelor Amazon SageMaker

Putem alege ce hiperparametri dorim să reglam sau să lăsăm statici. Pentru hiperparametrii dinamici, oferim hyperparameter_ranges care poate fi folosit pentru optimizarea pentru hiperparametri reglabili. Deoarece folosim un clasificator Random Forest, am folosit hiperparametrii din Documentația Scikit-learn Random Forest.

De asemenea, limităm resursele cu numărul maxim de joburi de instruire și joburi de formare paralele pe care le poate folosi tunerul. Vom vedea cum aceste limite ne ajută să comparăm rezultatele diferitelor strategii între ele.

tuner_parameters = { 'estimator': estimator, 'base_tuning_job_name': 'random', 'metric_definitions': metric_definitions, 'objective_metric_name': 'valid-f1', 'objective_type': 'Maximize', 'hyperparameter_ranges': hpt_ranges, 'strategy': 'Random', 'max_jobs': n, # 50 'max_parallel_jobs': k # 2 } 

Similar cu cel al estimatorului fit funcția, începem o lucrare de reglare apelând tuner-ul fit:

random_tuner = HyperparameterTuner(**tuner_parameters)
random_tuner.fit({'train': s3_data_url}, wait=False)

Acesta este tot ce trebuie să facem pentru a-i lăsa pe SageMaker să execute joburile de formare (n=50) în fundal, fiecare folosind un set diferit de hiperparametri. Analizăm rezultatele mai târziu în această postare. Dar înainte de asta, să începem o altă lucrare de reglare, de data aceasta aplicând strategia de optimizare Bayesiană. Vom compara vizual ambele strategii după finalizarea lor.

tuner_parameters['strategy'] = 'Bayesian'
tuner_parameters['base_tuning_job_name'] = 'bayesian'
bayesian_tuner = HyperparameterTuner(**tuner_parameters)
bayesian_tuner.fit({'train': s3_data_url}, wait=False)

Rețineți că ambele joburi de tuner pot rula în paralel, deoarece SageMaker orchestrează instanțele de calcul necesare independent una de cealaltă. Acest lucru este destul de util pentru practicanții care experimentează cu abordări diferite în același timp, așa cum facem noi aici.

Alegeți dintre strategiile SageMaker HPO

Când vine vorba de strategii de reglare, aveți câteva opțiuni cu SageMaker AMT: căutare în grilă, căutare aleatorie, optimizare Bayesiană și Hyperband. Aceste strategii determină modul în care algoritmii de reglare automată explorează intervalele specificate de hiperparametri.

Căutarea aleatorie este destul de simplă. Selectează aleatoriu combinații de valori din intervalele specificate și poate fi rulat într-o manieră secvenţială sau paralelă. Este ca și cum ai arunca săgeți legat la ochi, în speranța de a lovi ținta. Am început cu această strategie, dar rezultatele se vor îmbunătăți cu alta?

Optimizarea bayesiană are o abordare diferită de căutarea aleatorie. Acesta ia în considerare istoricul selecțiilor anterioare și alege valorile care ar putea produce cele mai bune rezultate. Dacă doriți să învățați din explorările anterioare, puteți realiza acest lucru doar rulând o nouă lucrare de reglare după cele anterioare. Are sens, nu? În acest fel, optimizarea bayesiană depinde de rulările anterioare. Dar vedeți ce strategie HPO permite o paralelizare mai mare?

Hiperbandă este unul interesant! Utilizează o strategie multi-fidelitate, ceea ce înseamnă că alocă în mod dinamic resurse celor mai promițătoare locuri de muncă de formare și le oprește pe cele care au performanțe slabe. Prin urmare, Hyperband este eficient din punct de vedere computațional cu resurse, învățând din joburile anterioare de formare. După oprirea configurațiilor neperformante, începe o nouă configurație, iar valorile acesteia sunt alese aleatoriu.

În funcție de nevoile dvs. și de natura modelului dvs., puteți alege între căutare aleatorie, optimizare Bayesiană sau Hyperband ca strategie de reglare. Fiecare are propria abordare și avantaje, așa că este important să luați în considerare care dintre ele funcționează cel mai bine pentru explorarea dvs. ML. Vestea bună pentru practicienii ML este că puteți selecta cea mai bună strategie HPO comparând vizual impactul fiecărei încercări asupra metricii obiective. În secțiunea următoare, vedem cum să identificăm vizual impactul diferitelor strategii.

Vizualizați, analizați și comparați rezultatele reglajului

Când lucrările noastre de reglare sunt finalizate, devine interesant. Ce rezultate dau? La ce fel de creștere vă puteți aștepta de la metricul nostru în comparație cu modelul dvs. de bază? Care sunt hiperparametrii cu cele mai bune performanțe pentru cazul nostru de utilizare?

O modalitate rapidă și simplă de a vizualiza rezultatele HPO este accesând consola SageMaker. Sub Lucrări de reglare a hiperparametrilor, putem vedea (pe sarcină de reglare) combinația de valori ale hiperparametrului care au fost testate și au furnizat cea mai bună performanță, măsurată de metrica noastră obiectivă (valid-f1).

Valori pentru lucrările de reglare a hiperparametrului

Este tot ce ai nevoie? În calitate de practicant ML, s-ar putea să nu fiți interesat doar de acele valori, dar cu siguranță doriți să aflați mai multe despre funcționarea interioară a modelului dvs. pentru a explora întregul său potențial și pentru a vă consolida intuiția cu feedback empiric.

Un instrument bun de vizualizare vă poate ajuta foarte mult să înțelegeți îmbunătățirea prin HPO în timp și să obțineți feedback empiric cu privire la deciziile de proiectare ale modelului dvs. ML. Acesta arată impactul fiecărui hiperparametru individual asupra valorii dvs. obiective și oferă îndrumări pentru a optimiza și mai mult rezultatele reglajului.

Noi folosim amtviz pachet de vizualizare personalizat pentru a vizualiza și analiza lucrările de reglare. Este simplu de utilizat și oferă funcții utile. Demonstrăm beneficiile acesteia prin interpretarea unor diagrame individuale și, în final, comparând căutarea aleatorie alături de optimizarea bayesiană.

Mai întâi, să creăm o vizualizare pentru căutare aleatorie. Putem face asta sunând visualize_tuning_job() din amtviz și trecem primul nostru obiect tuner ca argument:

from amtviz import visualize_tuning_job
visualize_tuning_job(random_tuner, advanced=True, trials_only=True)

Veți vedea câteva diagrame, dar haideți să o luăm pas cu pas. Primul grafic de dispersie din rezultat arată ca următorul și deja ne oferă câteva indicii vizuale pe care nu le-am recunoaște în niciun tabel.

Rezultatele jobului de optimizare a hiperparametrilor

Fiecare punct reprezintă performanța unui job de antrenament individual (obiectivul nostru valid-f1 pe axa y) pe baza timpului său de pornire (axa x), produs de un set specific de hiperparametri. Prin urmare, ne uităm la performanța modelului nostru pe măsură ce acesta progresează pe durata lucrării de reglare.

Linia punctată evidențiază cel mai bun rezultat găsit până acum și indică îmbunătățirea în timp. Cele mai bune două locuri de muncă de antrenament au obținut un scor F1 de aproximativ 0.91.

Pe lângă linia punctată care arată progresul cumulat, vedeți o tendință în grafic?

Probabil ca nu. Și acest lucru este de așteptat, deoarece vedem rezultatele strategiei HPO aleatoare. Fiecare job de antrenament a fost rulat folosind un set diferit de hiperparametri, dar selectat aleatoriu. Dacă ne-am continua munca de reglare (sau am rula altul cu aceeași setare), probabil că am vedea niște rezultate mai bune în timp, dar nu putem fi siguri. Aleatorie este un lucru complicat.

Următoarele diagrame vă ajută să evaluați influența hiperparametrilor asupra performanței generale. Toți hiperparametrii sunt vizualizați, dar, de dragul conciziei, ne concentrăm pe doi dintre ei: n-estimators și max-depth.

Detalii despre locurile de muncă cu hiperparametru

Primele noastre două locuri de muncă de formare au fost folosite n-estimators de aproximativ 20 și 80, și max-depth de aproximativ 10, respectiv 18. Valorile exacte ale hiperparametrului sunt afișate prin tooltip pentru fiecare punct (training job). Ele sunt chiar evidențiate dinamic în toate diagramele și vă oferă o vedere multidimensională! Ai văzut asta? Fiecare hiperparametru este reprezentat în raport cu metrica obiectivă, ca un grafic separat.

Acum, despre ce fel de perspective obținem n-estimators?

Pe baza graficului din stânga, se pare că intervalele de valori foarte mici (sub 10) oferă mai des rezultate slabe în comparație cu valorile mai mari. Prin urmare, valorile mai mari vă pot ajuta modelul să aibă performanțe mai bune — interesant.

În schimb, corelația dintre max-depth hiperparametrul pentru metrica noastră obiectiv este destul de scăzut. Nu putem spune clar care intervale de valori au performanțe mai bune dintr-o perspectivă generală.

În rezumat, căutarea aleatorie vă poate ajuta să găsiți un set de hiperparametri cu performanțe bune chiar și într-un timp relativ scurt. De asemenea, nu este orientat spre o soluție bună, dar oferă o vedere echilibrată a spațiului de căutare. Cu toate acestea, utilizarea resurselor dvs. s-ar putea să nu fie foarte eficientă. Continuă să ruleze joburi de antrenament cu hiperparametri în intervale de valori despre care se știe că oferă rezultate slabe.

Să examinăm rezultatele celui de-al doilea job de reglare folosind optimizarea bayesiană. Putem folosi amtviz pentru a vizualiza rezultatele în același mod în care am făcut-o până acum pentru tunerul de căutare aleatorie. Sau, și mai bine, putem folosi capacitatea funcției de a compara ambele lucrări de reglare într-un singur set de diagrame. Destul de la îndemână!

visualize_tuning_job([random_tuner, bayesian_tuner], advanced=True, trials_only=True)

Lucrări de optimizare a hiperparametrilor Bayesian VS Aleatoriu

Sunt mai multe puncte acum, deoarece vizualizăm rezultatele tuturor joburilor de antrenament atât pentru căutarea aleatorie (puncte portocalii) cât și pentru optimizarea Bayesiană (puncte albastre). În partea dreaptă, puteți vedea o diagramă de densitate care vizualizează distribuția tuturor scorurilor F1. Majoritatea locurilor de muncă de antrenament au obținut rezultate în partea superioară a scalei F1 (peste 0.6) – asta e bine!

Care este cheia de luat aici? Graficul de dispersie arată clar beneficiile optimizării bayesiene. Oferă rezultate mai bune în timp, deoarece poate învăța din rulările anterioare. De aceea, am obținut rezultate semnificativ mai bune utilizând Bayesian comparativ cu aleatoriu (0.967 vs. 0.919) cu același număr de joburi de formare.

Există chiar mai multe cu care poți face amtviz. Hai să forăm.

Dacă îi dați lui SageMaker AMT instrucțiunile de a rula un număr mai mare de lucrări pentru reglare, vederea mai multor încercări simultan poate deveni dezordonată. Acesta este unul dintre motivele pentru care am făcut aceste diagrame interactive. Puteți face clic și trage pe fiecare diagramă de dispersie hiperparametru pentru a mări anumite intervale de valori și pentru a vă rafina interpretarea vizuală a rezultatelor. Toate celelalte diagrame sunt actualizate automat. E destul de util, nu-i așa? Vedeți următoarele diagrame ca exemplu și încercați-l singur în caiet!

Funcții de vizualizare a lucrărilor de optimizare a hiperparametrilor

În calitate de maximalist de reglare, puteți decide, de asemenea, că rularea unui alt job de reglare hiperparametrică ar putea îmbunătăți și mai mult performanța modelului dvs. Dar de această dată, o gamă mai specifică de valori ale hiperparametrului poate fi explorată, deoarece știți deja (aproximativ) unde să vă așteptați la rezultate mai bune. De exemplu, puteți alege să vă concentrați pe valori între 100-200 pentru n-estimators, așa cum se arată în diagramă. Acest lucru permite AMT să se concentreze pe cele mai promițătoare locuri de muncă de antrenament și crește eficiența reglajului.

Pentru a rezuma, amtviz vă oferă un set bogat de capabilități de vizualizare care vă permit să înțelegeți mai bine impactul hiperparametrilor modelului dvs. asupra performanței și să permiteți decizii mai inteligente în activitățile dvs. de reglare.

Continuați explorarea spațiului hiperparametric și porniți la cald lucrările HPO

Am văzut că AMT ne ajută să explorăm eficient spațiul de căutare a hiperparametrilor. Dar dacă avem nevoie de mai multe runde de reglare pentru a ne îmbunătăți în mod iterativ rezultatele? După cum am menționat la început, dorim să stabilim un ciclu de feedback de optimizare - „conversația” noastră cu modelul. Trebuie să începem de la zero de fiecare dată?

Să analizăm conceptul de rulare a lucrare de reglare a hiperparametrului pornire la cald. Nu inițiază noi joburi de reglare de la zero, ci reutiliza ceea ce s-a învățat în execuțiile HPO anterioare. Acest lucru ne ajută să fim mai eficienți cu timpul de reglare și resursele de calcul. Putem repeta în continuare peste rezultatele noastre anterioare. Pentru a folosi pornirile calde, creăm un WarmStartConfig și specificați warm_start_type as IDENTICAL_DATA_AND_ALGORITHM. Aceasta înseamnă că schimbăm valorile hiperparametrului, dar nu schimbăm datele sau algoritmul. Îi spunem AMT să transfere cunoștințele anterioare în noul nostru job de reglare.

Referindu-ne la joburile noastre anterioare de optimizare bayesiană și de reglare aleatorie a căutării ca parents, le putem folosi pe ambele pentru startul cald:

warm_start_config = WarmStartConfig(warm_start_type=WarmStartTypes.IDENTICAL_DATA_AND_ALGORITHM, parents=[bayesian_tuner_name, random_tuner_name])
tuner_parameters['warm_start_config'] = warm_start_config

Pentru a vedea beneficiile utilizării pornirilor la cald, consultați următoarele diagrame. Acestea sunt generate de amtviz într-un mod similar ca și mai devreme, dar de data aceasta am adăugat o altă lucrare de reglare bazată pe un start cald.

Lucrări de optimizare a hiperparametrilor Warmstart

În graficul din stânga, putem observa că noile joburi de reglare se află în cea mai mare parte în colțul din dreapta sus al graficului de performanță (vezi punctele marcate cu portocaliu). Startul cald a reutilizat într-adevăr rezultatele anterioare, motiv pentru care acele puncte de date sunt în primele rezultate pentru scorul F1. Această îmbunătățire este reflectată și în graficul de densitate din dreapta.

Cu alte cuvinte, AMT selectează automat seturi promițătoare de valori ale hiperparametrului pe baza cunoștințelor sale din studiile anterioare. Acest lucru este prezentat în graficul următor. De exemplu, algoritmul ar testa o valoare scăzută pentru n-estimators mai rar, deoarece se știe că acestea produc scoruri F1 slabe. Nu risipim resurse pentru asta, datorită starturilor calde.

Lucrări vizualizate de optimizare a hiperparametrilor

A curăța

Pentru a evita costurile nedorite când ați terminat de experimentat cu HPO, trebuie să eliminați toate fișierele din compartimentul S3 cu prefixul amt-visualize-demo și, de asemenea, închideți resursele SageMaker Studio.

Rulați următorul cod în blocnotes pentru a elimina toate fișierele S3 din această postare:

!aws s3 rm s3://{BUCKET}/amt-visualize-demo --recursive

Dacă doriți să păstrați seturile de date sau artefactele modelului, puteți modifica prefixul din cod la amt-visualize-demo/data pentru a șterge doar datele sau amt-visualize-demo/output pentru a șterge doar artefactele modelului.

Concluzie

Am învățat cum arta de a construi soluții ML implică explorarea și optimizarea hiperparametrilor. Reglarea acelor butoane și pârghii este un proces solicitant, dar plin de satisfacții, care duce la timpi de antrenament mai rapizi, la o precizie îmbunătățită a modelului și la soluții ML mai bune. Funcționalitatea SageMaker AMT ne ajută să rulăm mai multe lucrări de reglare și să le pornim la cald și oferă puncte de date pentru revizuire ulterioară, comparare vizuală și analiză.

În această postare, am analizat strategiile HPO pe care le folosim cu SageMaker AMT. Am început cu căutarea aleatorie, o strategie simplă, dar performantă, în care hiperparametrii sunt eșantionați aleatoriu dintr-un spațiu de căutare. Apoi, am comparat rezultatele cu optimizarea bayesiană, care utilizează modele probabilistice pentru a ghida căutarea hiperparametrilor optimi. După ce am identificat o strategie HPO adecvată și intervale bune de valori ale hiperparametrilor prin testele inițiale, am arătat cum să folosim pornirile calde pentru a eficientiza viitoarele locuri de muncă HPO.

Puteți explora spațiul de căutare a hiperparametrilor comparând rezultatele cantitative. Am sugerat comparația vizuală una lângă alta și am oferit pachetul necesar pentru explorarea interactivă. Spune-ne în comentarii cât de util a fost pentru tine în călătoria ta de reglare a hiperparametrilor!


Despre autori

Uemit YoldasÜmit Yoldas este arhitect senior de soluții cu Amazon Web Services. Lucrează cu clienți întreprinderi din diverse industrii din Germania. El este determinat să traducă conceptele AI în soluții reale. În afara serviciului, se bucură de timpul cu familia, savurând mâncare bună și să facă fitness.

Elina LesykElina Lesyk este un arhitect de soluții situat în Munchen. Ea se concentrează asupra clienților întreprinderi din industria serviciilor financiare. În timpul ei liber, o puteți găsi pe Elina construind aplicații cu IA generativă la unele întâlniri IT, conducând o idee nouă despre remedierea rapidă a schimbărilor climatice sau alergând în pădure pentru a se pregăti pentru un semimaraton cu o abatere tipică de la programul planificat.

Mariano kampMariano Kamp este arhitect principal de soluții cu Amazon Web Services. Lucrează cu bănci și companii de asigurări din Germania pe învățarea automată. În timpul liber, lui Mariano îi place drumețiile cu soția sa.

Timestamp-ul:

Mai mult de la Învățare automată AWS