Raziščite napredne tehnike za optimizacijo hiperparametrov s samodejno nastavitvijo modela Amazon SageMaker | Spletne storitve Amazon

Raziščite napredne tehnike za optimizacijo hiperparametrov s samodejno nastavitvijo modela Amazon SageMaker | Spletne storitve Amazon

Ustvarjanje visoko zmogljivih rešitev strojnega učenja (ML) temelji na raziskovanju in optimiziranju parametrov usposabljanja, znanih tudi kot hiperparametri. Hiperparametri so gumbi in vzvodi, ki jih uporabljamo za prilagajanje procesa usposabljanja, kot so hitrost učenja, velikost serije, moč regulacije in drugo, odvisno od specifičnega modela in naloge. Raziskovanje hiperparametrov vključuje sistematično spreminjanje vrednosti vsakega parametra in opazovanje vpliva na zmogljivost modela. Čeprav ta postopek zahteva dodatna prizadevanja, so koristi pomembne. Optimizacija hiperparametrov (HPO) lahko vodi do hitrejših časov usposabljanja, izboljšane natančnosti modela in boljše posploševanja novih podatkov.

Pot nadaljujemo od postojanke Optimizirajte hiperparametre s samodejno nastavitvijo modela Amazon SageMaker. Prej smo raziskali optimizacijo posameznega opravila, vizualizirali rezultate za vgrajeni algoritem SageMaker in izvedeli o vplivu določenih vrednosti hiperparametrov. Poleg uporabe HPO kot enkratne optimizacije na koncu cikla ustvarjanja modela, ga lahko uporabimo tudi v več korakih na pogovorni način. Vsako opravilo prilagajanja nam pomaga, da se približamo dobri zmogljivosti, poleg tega pa se tudi naučimo, kako občutljiv je model na določene hiperparametre, in lahko to razumevanje uporabimo za informiranje o naslednjem opravilu prilagajanja. Hiperparametre in njihove razpone vrednosti lahko revidiramo na podlagi tega, kar smo se naučili, in tako to prizadevanje za optimizacijo spremenimo v pogovor. In na enak način, kot praktiki ML zbiramo znanje med temi teki, Samodejno prilagajanje modela Amazon SageMaker (AMT) s toplimi zagoni lahko to znanje, pridobljeno pri prejšnjih nastavitvah, ohrani tudi za naslednjo nalogo prilagoditve.

V tej objavi izvajamo več opravil HPO z algoritmom za usposabljanje po meri in različnimi strategijami HPO, kot sta Bayesova optimizacija in naključno iskanje. Prav tako izvajamo tople začetke in vizualno primerjamo naše poskuse za izboljšanje hiperparametrskega raziskovanja vesolja.

Napredni koncepti SageMaker AMT

V naslednjih razdelkih si podrobneje ogledamo vsako od naslednjih tem in pokažemo, kako vam jih lahko SageMaker AMT pomaga implementirati v vaše projekte ML:

  • Uporabite kodo za usposabljanje po meri in priljubljeno ogrodje ML Scikit-learn v SageMaker Training
  • Določite meritve vrednotenja po meri na podlagi dnevnikov za vrednotenje in optimizacijo
  • Izvedite HPO z uporabo ustrezne strategije
  • Uporabite tople zagone, da eno samo iskanje hiperparametrov spremenite v pogovorno okno z našim modelom
  • Uporabite napredne tehnike vizualizacije z uporabo naše knjižnice rešitev za primerjavo dveh HPO strategij in rezultatov nastavitev opravil

Ne glede na to, ali uporabljate vgrajene algoritme, uporabljene v naši prvi objavi, ali svojo kodo za usposabljanje, SageMaker AMT ponuja brezhibno uporabniško izkušnjo za optimizacijo modelov ML. Zagotavlja ključno funkcionalnost, ki vam omogoča, da se osredotočite na trenutno težavo ML, hkrati pa samodejno spremljate poskuse in rezultate. Hkrati samodejno upravlja osnovno infrastrukturo namesto vas.

V tej objavi se oddaljujemo od vgrajenega algoritma SageMaker in uporabljamo kodo po meri. Uporabljamo naključni gozd iz SkLearn. Vendar se držimo iste naloge ML in nabora podatkov kot v našem prva objava, ki zaznava ročno napisane številke. Pokrivamo vsebino zvezka Jupyter 2_advanced_tuning_with_custom_training_and_visualizing.ipynb in vas vabimo, da drug ob drugem prikličete kodo za nadaljnje branje.

Potopimo se globlje in odkrijmo, kako lahko uporabimo kodo za usposabljanje po meri, jo razmestimo in zaženemo, medtem ko raziskujemo iskalni prostor hiperparametrov za optimizacijo naših rezultatov.

Kako zgraditi model ML in izvesti optimizacijo hiperparametrov

Kako izgleda tipičen postopek za izdelavo rešitve ML? Čeprav obstaja veliko možnih primerov uporabe in veliko različnih nalog ML, predlagamo naslednji miselni model za postopen pristop:

  1. Razumite svoj trenutni scenarij ML in izberite algoritem na podlagi zahtev. Na primer, morda boste želeli rešiti nalogo prepoznavanja slik z algoritmom za nadzorovano učenje. V tej objavi še naprej uporabljamo scenarij za prepoznavanje ročno napisane slike in isti nabor podatkov kot v prvi objavi.
  2. Odločite se, katero izvedbo algoritma v programu SageMaker Training želite uporabiti. Obstajajo različne možnosti, znotraj SageMakerja ali zunanje. Poleg tega morate določiti, katera osnovna meritev najbolj ustreza vaši nalogi in jo želite optimizirati (na primer natančnost, rezultat F1 ali ROC). SageMaker podpira štiri možnosti, odvisno od vaših potreb in virov:
    • Uporabite vnaprej pripravljen model prek Amazon SageMaker JumpStart, ki ga lahko uporabite takoj po namestitvi ali pa ga samo natančno prilagodite.
    • Uporabite enega od vgrajenih algoritmov za usposabljanje in nastavitev, kot je XGBoost, kot smo storili v prejšnji objavi.
    • Usposobite in prilagodite model po meri, ki temelji na enem od glavnih ogrodij, kot je Scikit-learn, TensorFlow ali PyTorch. AWS za ta namen ponuja izbor vnaprej izdelanih slik Docker. Za to objavo uporabljamo to možnost, ki vam omogoča hitro eksperimentiranje z izvajanjem lastne kode na vrhu vnaprej izdelane slike vsebnika.
    • Prinesite svojo sliko Docker po meri, če želite uporabiti ogrodje ali programsko opremo, ki sicer ni podprta. Ta možnost zahteva največ truda, hkrati pa zagotavlja najvišjo stopnjo prilagodljivosti in nadzora.
  3. Usposobite model s svojimi podatki. Odvisno od implementacije algoritma iz prejšnjega koraka je to lahko preprosto kot sklicevanje na vaše podatke o usposabljanju in izvajanje opravila usposabljanja ali z dodatnim zagotavljanjem kode po meri za usposabljanje. V našem primeru uporabljamo kodo za usposabljanje po meri v Pythonu, ki temelji na Scikit-learn.
  4. Uporabite optimizacijo hiperparametrov (kot »pogovor« z vašim modelom ML). Po usposabljanju običajno želite optimizirati delovanje vašega modela z iskanjem najbolj obetavne kombinacije vrednosti za hiperparametre vašega algoritma.

Odvisno od vašega algoritma ML in velikosti modela se lahko zadnji korak optimizacije hiperparametrov izkaže za večji izziv od pričakovanega. Naslednja vprašanja so tipična za izvajalce strojnega upravljanja na tej stopnji in se vam morda zdijo znana:

  • Kakšni hiperparametri vplivajo na moj problem ML?
  • Kako lahko učinkovito preiščem ogromen prostor hiperparametrov, da najdem tiste najuspešnejše vrednosti?
  • Kako kombinacija določenih vrednosti hiperparametrov vpliva na mojo meritev uspešnosti?
  • Stroški so pomembni; kako lahko svoje vire uporabljam na učinkovit način?
  • Kakšni poskusi uglaševanja so vredni in kako jih lahko primerjam?

Na ta vprašanja ni lahko odgovoriti, vendar obstajajo dobre novice. SageMaker AMT prevzame težko delo od vas in vam omogoča, da se osredotočite na izbiro prave HPO strategije in vrednosti, ki jih želite raziskati. Poleg tega naša rešitev za vizualizacijo olajša iterativno analizo in postopek eksperimentiranja za učinkovito iskanje dobro delujočih vrednosti hiperparametrov.

V naslednjih razdelkih gradimo model prepoznavanja števk iz nič z uporabo Scikit-learn in prikazujemo vse te koncepte v akciji.

Pregled rešitev

SageMaker ponuja nekaj zelo priročnih funkcij za usposabljanje, ocenjevanje in prilagajanje našega modela. Zajema vse funkcije življenjskega cikla ML od konca do konca, tako da nam sploh ni treba zapustiti prenosnega računalnika Jupyter.

V naši prvi objavi smo uporabili SageMakerjev vgrajeni algoritem XGBoost. Za namene predstavitve tokrat preklopimo na klasifikator Random Forest, ker lahko nato pokažemo, kako zagotoviti lastno kodo za usposabljanje. Odločili smo se za lastno skripto Python in uporabo Scikit-learn kot našega ogrodja. Kako izrazimo, da želimo uporabiti določeno ogrodje ML? Kot bomo videli, SageMaker uporablja drugo storitev AWS v ozadju za pridobitev vnaprej zgrajene slike vsebnika Docker za usposabljanje –Registar elastičnih zabojnikov Amazon (Amazon ECR).

Podrobno obravnavamo naslednje korake, vključno z delčki kode in diagrami za povezovanje pik. Kot že omenjeno, če imate možnost, odprite zvezek in korak za korakom zaženite kodne celice, da ustvarite artefakte v svojem okolju AWS. Ni boljšega načina aktivnega učenja.

  1. Najprej naložite in pripravite podatke. Uporabljamo Preprosta storitev shranjevanja Amazon (Amazon S3), da naložite datoteko z našimi ročno napisanimi številkami.
  2. Nato pripravite skript za usposabljanje in odvisnosti ogrodja. Zagotavljamo kodo za usposabljanje po meri v Pythonu, sklicujemo se na nekatere odvisne knjižnice in izvajamo preizkus.
  3. Za definiranje meritev cilja po meri nam SageMaker omogoča definiranje regularnega izraza za ekstrahiranje meritev, ki jih potrebujemo, iz dnevniških datotek vsebnika.
  4. Usposobite model z uporabo ogrodja scikit-learn. S sklicevanjem na vnaprej zgrajeno sliko vsebnika ustvarimo ustrezen objekt Estimator in posredujemo naš skript za usposabljanje po meri.
  5. AMT nam omogoča, da preizkusimo različne HPO strategije. Za to objavo se osredotočamo na dve izmed njih: naključno iskanje in Bayesovo iskanje.
  6. Izbirajte med strategijami SageMaker HPO.
  7. Vizualizirajte, analizirajte in primerjajte rezultate uglaševanja. Naš paket za vizualizacijo nam omogoča, da na podlagi naših meritev odkrijemo, katera strategija je uspešnejša in katere vrednosti hiperparametrov zagotavljajo najboljšo uspešnost.
  8. Nadaljujte z raziskovanjem prostora hiperparametrov in opravil HPO s toplim zagonom.

AMT skrbi za skaliranje in upravljanje osnovne računalniške infrastrukture za izvajanje različnih opravil prilagajanja Amazonski elastični računalniški oblak (Amazon EC2) primerki. Na ta način se vam ni treba obremenjevati z zagotavljanjem instanc, reševanjem morebitnih težav z operacijskim sistemom in strojno opremo ali samostojnim združevanjem dnevniških datotek. Slika ogrodja ML je pridobljena iz Amazon ECR, artefakti modela, vključno z rezultati uglaševanja, pa so shranjeni v Amazon S3. Vsi dnevniki in meritve so zbrani v amazoncloudwatch za udoben dostop in nadaljnjo analizo, če je potrebno.

Predpogoji

Ker gre za nadaljevanje serije, je branje priporočljivo, ni pa nujno naša prva objava o SageMaker AMT in HPO. Poleg tega je koristno osnovno poznavanje konceptov ML in programiranja v Pythonu. Priporočamo tudi, da sledite vsakemu koraku v spremljajoči zvezek iz našega repozitorija GitHub med branjem te objave. Beležnico je mogoče zagnati neodvisno od prve, vendar potrebuje nekaj kode iz podmap. Ne pozabite klonirati celotnega repozitorija v svojem okolju, kot je opisano v datoteki README.

Eksperimentiranje s kodo in uporaba možnosti interaktivne vizualizacije močno izboljšata vašo učno izkušnjo. Torej, prosim preverite.

Naložite in pripravite podatke

Kot prvi korak poskrbimo za prenos številčni podatki ki jih potrebujemo za usposabljanje, je dostopen SageMakerju. Amazon S3 nam omogoča, da to storimo na varen in razširljiv način. Za celotno izvorno kodo si oglejte zvezek in jo lahko prilagodite svojim lastnim podatkom.

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'

O digits.csv datoteka vsebuje podatke o značilnostih in oznake. Vsako števko predstavljajo vrednosti slikovnih pik na sliki 8×8, kot je prikazano na naslednji sliki za števko 4.
Nabor števk iz Scikit-learn

Pripravite skript za usposabljanje in odvisnosti ogrodja

Zdaj, ko so podatki shranjeni v našem vedru S3, lahko definiramo svoj skript za usposabljanje po meri na podlagi Scikit-učite se v Pythonu. SageMaker nam daje možnost, da se pozneje preprosto sklicujemo na datoteko Python za usposabljanje. Vse odvisnosti, kot sta knjižnici Scikit-learn ali pandas, je mogoče zagotoviti na dva načina:

  • Lahko jih izrecno navedete v a requirements.txt datoteka
  • Vnaprej so nameščeni v osnovni sliki vsebnika ML, ki jo zagotavlja SageMaker ali izdelana po meri

Obe možnosti na splošno veljata za standardna načina za upravljanje odvisnosti, zato ju morda že poznate. SageMaker podpira različnih ogrodij ML v upravljanem okolju, pripravljenem za uporabo. To vključuje veliko najbolj priljubljenih podatkovnih znanosti in ogrodij ML, kot so PyTorch, TensorFlow ali Scikit-learn, kot v našem primeru. Ne uporabljamo dodatnega requirements.txt datoteko, vendar lahko dodate nekaj knjižnic, da jo preizkusite.

Koda naše implementacije vsebuje metodo, imenovano fit(), ki ustvari nov klasifikator za nalogo prepoznavanja številk in ga uri. V nasprotju z našo prvo objavo, kjer smo uporabili algoritem XGBoost, vgrajen v SageMaker, zdaj uporabljamo RandomForestClassifier zagotavlja knjižnica ML sklearn. Klic od fit() metoda na objektu klasifikatorja začne proces usposabljanja z uporabo podnabora (80 %) naših podatkov 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

Oglejte si celoten scenarij v našem Jupyterjevem zvezku na GitHub.

Ali ste poskusili neposredno zagnati skript, preden ste zavrteli vire vsebnika za celoten proces usposabljanja? To je dobra praksa za hitro zagotavljanje, da koda nima skladenjskih napak, za zgodnje preverjanje ujemajočih se dimenzij vaših podatkovnih struktur in nekaterih drugih napak.

Obstajata dva načina za lokalno izvajanje kode. Prvič, lahko ga zaženete takoj v zvezku, kar vam omogoča tudi uporabo Python Debuggerja 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)

Druga možnost je, da zaženete skript vlaka iz ukazne vrstice na enak način, kot ga morda želite uporabiti v vsebniku. To podpira tudi nastavitev različnih parametrov in po potrebi prepisovanje privzetih vrednosti, na primer:

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

Kot izhod si lahko ogledate prve rezultate za zmogljivost modela, ki temeljijo na natančnosti objektivnih meritev, priklicu in rezultatu F1. na primer pre: 0.970 rec: 0.969 f1: 0.969.

Ni slabo za tako hiter trening. Toda od kod te številke in kaj z njimi?

Določite ciljno meritev po meri

Ne pozabite, naš cilj je v celoti usposobiti in prilagoditi naš model na podlagi objektivnih meritev, za katere menimo, da so pomembne za našo nalogo. Ker uporabljamo skript za usposabljanje po meri, moramo te metrike za SageMaker izrecno definirati.

Naš skript oddaja meritve natančnost, priklic in rezultat F1 med treningom preprosto z uporabo print funkcija:

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

Standardni izhod zajame SageMaker in pošlje v CloudWatch kot tok dnevnika. Za pridobitev metričnih vrednosti in delo z njimi pozneje v SageMaker AMT moramo zagotoviti nekaj informacij o tem, kako razčleniti ta izhod. To lahko dosežemo z definiranjem stavkov regularnih izrazov (za več informacij glejte Spremljajte in analizirajte delovna mesta za usposabljanje z uporabo meritev Amazon CloudWatch):

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.]+)'}] 

Skupaj se sprehodimo skozi prvo definicijo metrike v prejšnji kodi. SageMaker bo iskal rezultate v dnevniku, ki se začne z pre: in sledi en ali več presledkov in nato številka, ki jo želimo izluščiti, zato uporabljamo okrogel oklepaj. Vsakič, ko SageMaker najde takšno vrednost, jo spremeni v metriko CloudWatch z imenom valid-precision.

Usposobite model z uporabo ogrodja Scikit-learn

Ko ustvarimo skript za usposabljanje train.py in navodilo SageMakerju, kako spremljati metrike znotraj CloudWatcha, definiramo a Ocenjevalnik SageMaker predmet. Začne učno opravilo in uporablja vrsto primerka, ki ga podamo. Toda kako se lahko ta vrsta primerka razlikuje od tistega, ki ga izvajate Amazon SageMaker Studio zvezek in zakaj? SageMaker Studio izvaja vaša opravila usposabljanja (in sklepanja) na ločenih računalniških instancah kot vaš prenosni računalnik. To vam omogoča, da nadaljujete z delom v prenosnem računalniku, medtem ko se opravila izvajajo v ozadju.

Parameter framework_version se nanaša na različico Scikit-learn, ki jo uporabljamo za naše usposabljanje. Lahko pa tudi mimo image_uri k estimator. Preverite lahko, ali je vaše najljubše ogrodje ali knjižnica ML na voljo kot vnaprej zgrajena slika SageMaker Docker in ga uporabite takšnega kot je oz s podaljški.

Poleg tega lahko izvajamo učna opravila SageMaker na točkovnih instancah EC2 z nastavitvijo use_spot_instances do True. So primerki proste zmogljivosti, ki lahko prihranite do 90 % stroškov. Ti primeri zagotavljajo prilagodljivost glede izvajanja izobraževalnih opravil.

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}
)

Ko je objekt Estimator nastavljen, začnemo z usposabljanjem s klicem fit() funkcijo, ki zagotavlja pot do nabora podatkov o usposabljanju na Amazon S3. To isto metodo lahko uporabimo za zagotavljanje validacijskih in testnih podatkov. Postavili smo wait parameter v True tako da lahko uporabimo usposobljeni model v naslednjih kodnih celicah.

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

Definirajte hiperparametre in zaženite nastavitvena opravila

Doslej smo usposobili model z enim nizom vrednosti hiperparametrov. Toda ali so bile te vrednosti dobre? Ali pa bi lahko iskali boljše? Uporabimo Razred HyperparameterTuner za izvajanje sistematičnega iskanja po prostoru hiperparametrov. Kako preiščemo ta prostor s sprejemnikom? Potrebna parametra sta ime metrike cilja in vrsta cilja, ki bosta vodila optimizacijo. Strategija optimizacije je še en ključni argument za sprejemnik, saj dodatno opredeljuje iskalni prostor. Sledijo štiri različne strategije, med katerimi lahko izbirate:

  • Iskanje po mreži
  • Naključno iskanje
  • Bayesova optimizacija (privzeto)
  • Hiperpas

Nadalje opisujemo te strategije in vas opremimo z nekaj smernicami za izbiro v nadaljevanju te objave.

Preden definiramo in zaženemo naš objekt tunerja, povzamemo naše razumevanje z vidika arhitekture. Pokrili smo arhitekturni pregled SageMaker AMT v naša zadnja objava in tukaj za lažjo reprodukcijo izvlečka.

Arhitektura samodejnega prilagajanja modela Amazon SageMaker

Izberemo lahko, katere hiperparametre želimo prilagoditi ali pustimo statične. Za dinamične hiperparametre nudimo hyperparameter_ranges ki se lahko uporabijo za optimizacijo za nastavljive hiperparametre. Ker uporabljamo klasifikator Random Forest, smo uporabili hiperparametre iz Scikit-learn Random Forest dokumentacija.

Prav tako omejimo vire z največjim številom izobraževalnih opravil in vzporednih izobraževalnih opravil, ki jih sprejemnik lahko uporabi. Videli bomo, kako nam te omejitve pomagajo med seboj primerjati rezultate različnih strategij.

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 } 

Podobno kot pri cenilcu fit funkcijo, začnemo z uglaševanjem, ki kliče uglaševalnik fit:

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

To je vse, kar moramo storiti, da lahko SageMaker izvaja usposabljanja (n=50) v ozadju, pri čemer vsak uporablja drugačen niz hiperparametrov. Rezultate raziščemo kasneje v tej objavi. Pred tem pa začnimo še eno uglaševanje, tokrat z uporabo Bayesove strategije optimizacije. Obe strategiji bomo po zaključku vizualno primerjali.

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)

Upoštevajte, da se obe opravili uglaševalnika lahko izvajata vzporedno, ker SageMaker neodvisno drug od drugega orkestrira zahtevane računske instance. To je zelo koristno za praktike, ki eksperimentirajo z različnimi pristopi hkrati, kot mi tukaj.

Izbirajte med strategijami SageMaker HPO

Ko gre za strategije prilagajanja, imate s SageMaker AMT nekaj možnosti: iskanje po omrežju, naključno iskanje, Bayesova optimizacija in Hyperband. Te strategije določajo, kako algoritmi za samodejno uglaševanje raziskujejo določene obsege hiperparametrov.

Naključno iskanje je precej preprosto. Naključno izbere kombinacije vrednosti iz navedenih obsegov in se lahko izvaja zaporedno ali vzporedno. To je kot metanje pikada z zavezanimi očmi v upanju, da boš zadel tarčo. Začeli smo s to strategijo, a se bodo rezultati izboljšali z drugo?

Bayesova optimizacija ima drugačen pristop kot naključno iskanje. Upošteva zgodovino prejšnjih izbir in izbere vrednosti, ki bodo verjetno prinesle najboljše rezultate. Če se želite učiti iz prejšnjih raziskovanj, lahko to dosežete samo z izvajanjem novega opravila prilagajanja po prejšnjih. Je smiselno, kajne? Na ta način je Bayesova optimizacija odvisna od prejšnjih zagonov. Toda ali vidite, katera strategija HPO omogoča večjo paralelizacijo?

Hiperpas je zanimiv! Uporablja strategijo več zvestobe, kar pomeni, da dinamično dodeljuje vire najbolj obetavnim delovnim mestom usposabljanja in ustavi tista, ki niso uspešna. Zato je Hyperband računalniško učinkovit z viri in se uči iz prejšnjih izobraževalnih del. Po zaustavitvi neučinkovitih konfiguracij se začne nova konfiguracija, njene vrednosti pa so izbrane naključno.

Glede na vaše potrebe in naravo vašega modela lahko kot strategijo uglaševanja izbirate med naključnim iskanjem, Bayesovo optimizacijo ali hiperpasovnostjo. Vsak ima svoj pristop in prednosti, zato je pomembno razmisliti, kateri je najboljši za vaše raziskovanje ML. Dobra novica za izvajalce strojnega pisanja je, da lahko izberete najboljšo strategijo HPO tako, da vizualno primerjate vpliv vsakega poskusa na objektivno metriko. V naslednjem razdelku vidimo, kako vizualno prepoznati vpliv različnih strategij.

Vizualizirajte, analizirajte in primerjajte rezultate uglaševanja

Ko je naše uglaševanje končano, postane vznemirljivo. Kakšne rezultate prinašajo? Kakšno izboljšanje naše metrike lahko pričakujete v primerjavi z vašim osnovnim modelom? Kateri so najučinkovitejši hiperparametri za naš primer uporabe?

Hiter in preprost način za ogled rezultatov HPO je obisk konzole SageMaker. Spodaj Hiperparametrska nastavitev, lahko vidimo (na opravilo prilagajanja) kombinacijo vrednosti hiperparametrov, ki so bile preizkušene in zagotavljajo najboljšo zmogljivost, kot jo meri naša objektivna metrika (valid-f1).

Meritve za opravila prilagajanja hiperparametrov

Je to vse kar potrebuješ? Kot praktika ML vas morda ne zanimajo samo te vrednote, ampak zagotovo želite izvedeti več o notranjem delovanju vašega modela, da raziščete njegov polni potencial in okrepite svojo intuicijo z empiričnimi povratnimi informacijami.

Dobro orodje za vizualizacijo vam lahko zelo pomaga razumeti izboljšave HPO skozi čas in pridobiti empirične povratne informacije o oblikovalskih odločitvah vašega modela ML. Prikazuje vpliv vsakega posameznega hiperparametra na vašo ciljno metriko in nudi smernice za nadaljnjo optimizacijo vaših rezultatov uravnavanja.

Mi uporabljamo amtviz paket za vizualizacijo po meri za vizualizacijo in analizo nastavitev. Je enostaven za uporabo in ponuja uporabne funkcije. Dokazujemo njegove prednosti z interpretacijo nekaterih posameznih grafikonov in končno primerjavo naključnega iskanja vzporedno z Bayesovo optimizacijo.

Najprej ustvarimo vizualizacijo za naključno iskanje. To lahko storimo s klicem visualize_tuning_job() iz amtviz in posredovanje našega prvega objekta sprejemnika kot argumenta:

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

Videli boste nekaj grafikonov, a pojdimo korak za korakom. Prvi izhodni graf razpršenosti je videti takole in nam že daje nekaj vizualnih namigov, ki jih ne bi prepoznali v nobeni tabeli.

Rezultati dela za optimizacijo hiperparametrov

Vsaka pika predstavlja uspešnost posameznega usposabljanja (naš cilj valid-f1 na osi y) na podlagi njegovega začetnega časa (os x), ki ga ustvari določen niz hiperparametrov. Zato gledamo na delovanje našega modela, ko napreduje med trajanjem uglaševanja.

Črtkana črta poudarja najboljši rezultat, ugotovljen do sedaj, in označuje izboljšanje skozi čas. Najboljši dve delovni mesti za usposabljanje sta dosegli oceno F1 okoli 0.91.

Ali poleg pikčaste črte, ki prikazuje kumulativni napredek, vidite trend na grafikonu?

Verjetno ne. In to je pričakovano, ker si ogledujemo rezultate naključne strategije HPO. Vsako usposabljanje je bilo izvedeno z uporabo drugačnega, a naključno izbranega niza hiperparametrov. Če bi nadaljevali z naravnavanjem (ali zagnali drugo z enako nastavitvijo), bi verjetno sčasoma videli nekaj boljših rezultatov, vendar ne moremo biti prepričani. Naključnost je zapletena stvar.

Naslednji grafikoni vam pomagajo oceniti vpliv hiperparametrov na splošno zmogljivost. Vizualizirani so vsi hiperparametri, vendar se zaradi jedrnatosti osredotočimo na dva izmed njih: n-estimators in max-depth.

Podrobnosti o opravilih hiperparametrov

Naši najboljši dve delovni mesti za usposabljanje sta uporabljali n-estimators okoli 20 in 80, in max-depth približno 10 oziroma 18. Natančne vrednosti hiperparametrov so prikazane v opisu orodja za vsako piko (opravilo usposabljanja). V vseh grafikonih so celo dinamično poudarjeni in vam omogočajo večdimenzionalni pogled! Ali si videl to? Vsak hiperparameter je narisan glede na ciljno metriko kot ločen grafikon.

Zdaj pa, kakšne vpoglede dobimo n-estimators?

Na podlagi levega grafikona se zdi, da zelo nizki razponi vrednosti (pod 10) pogosteje dajejo slabe rezultate v primerjavi z višjimi vrednostmi. Zato lahko višje vrednosti pripomorejo k boljšemu delovanju vašega modela – zanimivo.

V nasprotju s tem je korelacija max-depth hiperparameter za našo objektivno metriko je precej nizek. Ne moremo jasno povedati, kateri razponi vrednosti so s splošnega vidika boljši.

Če povzamemo, naključno iskanje vam lahko pomaga najti dobro delujoč niz hiperparametrov tudi v razmeroma kratkem času. Prav tako ni nagnjen k dobri rešitvi, ampak daje uravnotežen pogled na iskalni prostor. Vaša uporaba virov pa morda ne bo zelo učinkovita. Še naprej izvaja usposabljanja s hiperparametri v razponih vrednosti, za katere je znano, da dajejo slabe rezultate.

Oglejmo si rezultate našega drugega uglaševanja z Bayesovo optimizacijo. Lahko uporabimo amtviz za vizualizacijo rezultatov na enak način, kot smo to počeli doslej za sprejemnik naključnega iskanja. Ali, kar je še bolje, lahko uporabimo zmožnost funkcije za primerjavo obeh opravil uglaševanja v enem nizu grafikonov. Zelo priročno!

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

Hiperparameter Optimization Job Bayesian VS Random

Zdaj je več pik, ker vizualiziramo rezultate vseh učnih opravil za naključno iskanje (oranžne pike) in Bayesovo optimizacijo (modre pike). Na desni strani lahko vidite grafikon gostote, ki prikazuje porazdelitev vseh rezultatov F1. Večina izobraževalnih del je dosegla rezultate v zgornjem delu F1 lestvice (nad 0.6) – to je dobro!

Kaj je tu ključnega pomena? Razpršeni graf jasno prikazuje korist Bayesove optimizacije. Sčasoma zagotavlja boljše rezultate, ker se lahko uči iz prejšnjih voženj. Zato smo z uporabo Bayesian dosegli bistveno boljše rezultate v primerjavi z naključnimi (0.967 proti 0.919) z enakim številom izobraževalnih opravil.

Lahko naredite še več amtviz. Vrtajmo noter.

Če SageMakerju AMT daste navodila za izvajanje večjega števila opravil za uglaševanje, lahko postane gledanje več preskusov hkrati neurejeno. To je eden od razlogov, zakaj smo naredili te grafikone interaktivne. Lahko kliknete in povlečete na vsakem razpršenem grafu hiperparametrov, da povečate določena območja vrednosti in izboljšate svojo vizualno interpretacijo rezultatov. Vse druge karte se samodejno posodobijo. To je zelo koristno, kajne? Oglejte si naslednje tabele kot primer in poskusite sami v svojem zvezku!

Funkcije vizualizacije opravil za optimizacijo hiperparametrov

Kot maksimalist prilagajanja se lahko tudi odločite, da bi izvajanje drugega opravila prilagajanja hiperparametrov lahko še izboljšalo zmogljivost vašega modela. Toda tokrat je mogoče raziskati bolj specifičen obseg vrednosti hiperparametrov, ker že veste (približno), kje lahko pričakujete boljše rezultate. Na primer, lahko se odločite, da se osredotočite na vrednosti med 100–200 for n-estimators, kot je prikazano na grafikonu. To omogoča AMT, da se osredotoči na najbolj obetavna izobraževalna dela in poveča vašo učinkovitost prilagajanja.

Če povzamem, amtviz nudi vam bogat nabor zmožnosti vizualizacije, ki vam omogočajo boljše razumevanje vpliva hiperparametrov vašega modela na zmogljivost in omogočajo pametnejše odločitve pri vaših dejavnostih prilagajanja.

Nadaljujte z raziskovanjem prostora hiperparametrov in opravil HPO s toplim zagonom

Videli smo, da nam AMT pomaga učinkovito raziskovati iskalni prostor hiperparametrov. Kaj pa, če potrebujemo več krogov uglaševanja za iterativno izboljšanje rezultatov? Kot smo že omenili na začetku, želimo vzpostaviti povratni cikel optimizacije – naš »pogovor« z modelom. Ali moramo vsakič začeti iz nič?

Oglejmo si koncept vodenja a opravilo nastavitve hiperparametrov toplega zagona. Ne sproži novih uglaševalnih opravil iz nič, ampak ponovno uporabi tisto, kar se je naučilo v prejšnjih zagonih HPO. To nam pomaga, da smo učinkovitejši s časom prilagajanja in računalniškimi viri. Nadalje lahko ponavljamo svoje prejšnje rezultate. Za uporabo toplih zagonov ustvarimo a WarmStartConfig in navedite warm_start_type as IDENTICAL_DATA_AND_ALGORITHM. To pomeni, da spremenimo vrednosti hiperparametrov, ne spremenimo pa podatkov ali algoritma. AMT-ju rečemo, naj prejšnje znanje prenese na našo novo uglaševalsko službo.

S sklicevanjem na našo prejšnjo Bayesovo optimizacijo in nastavitve naključnega iskanja kot parents, za topel zagon lahko uporabimo oba:

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

Če si želite ogledati prednosti uporabe vročih zagonov, si oglejte naslednje tabele. Te ustvarijo amtviz na podoben način kot prej, le da smo tokrat dodali še eno uglaševanje, ki temelji na toplem zagonu.

Hiperparameter Optimization Job Warmstart

Na levem grafikonu lahko opazimo, da nova opravila prilagajanja večinoma ležijo v zgornjem desnem kotu grafa meritev uspešnosti (glejte pike, označene z oranžno). Topel začetek je res ponovno uporabil prejšnje rezultate, zato so te podatkovne točke med najboljšimi rezultati za rezultat F1. To izboljšanje se odraža tudi v grafikonu gostote na desni.

Z drugimi besedami, AMT samodejno izbere obetavne nize vrednosti hiperparametrov na podlagi svojega znanja iz prejšnjih poskusov. To je prikazano v naslednjem grafikonu. Algoritem bi na primer preizkusil nizko vrednost za n-estimators manj pogosto, ker je znano, da dajejo slabe rezultate F1. Za to ne zapravljamo nobenih sredstev, zahvaljujoč toplim začetkom.

Vizualizirana opravila za optimizacijo hiperparametrov

Čiščenje

Da bi se izognili neželenim stroškom, ko končate eksperimentiranje s HPO, morate odstraniti vse datoteke v vedru S3 s predpono amt-visualize-demo in tudi zaustavite vire SageMaker Studio.

Zaženite to kodo v svojem zvezku, da odstranite vse datoteke S3 iz te objave:

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

Če želite obdržati nabore podatkov ali modelne artefakte, lahko spremenite predpono v kodi na amt-visualize-demo/data da samo izbriše podatke oz amt-visualize-demo/output da izbrišete samo artefakte modela.

zaključek

Naučili smo se, kako umetnost gradnje rešitev ML vključuje raziskovanje in optimizacijo hiperparametrov. Prilagajanje teh gumbov in ročic je zahteven, a nagrajujoč postopek, ki vodi do hitrejšega časa usposabljanja, izboljšane natančnosti modela in na splošno boljših rešitev ML. Funkcionalnost SageMaker AMT nam pomaga zagnati več opravil naravnavanja in jih zagnati v toplem stanju ter zagotavlja podatkovne točke za nadaljnji pregled, vizualno primerjavo in analizo.

V tej objavi smo preučili strategije HPO, ki jih uporabljamo s SageMaker AMT. Začeli smo z naključnim iskanjem, preprosto, a učinkovito strategijo, pri kateri so hiperparametri naključno vzorčeni iz iskalnega prostora. Nato smo rezultate primerjali z Bayesovo optimizacijo, ki uporablja verjetnostne modele za vodenje iskanja optimalnih hiperparametrov. Potem ko smo skozi začetne poskuse identificirali ustrezno strategijo HPO in dobre razpone vrednosti hiperparametrov, smo pokazali, kako uporabiti vroče zagone za racionalizacijo prihodnjih delovnih mest HPO.

Iskalni prostor hiperparametrov lahko raziskujete s primerjavo kvantitativnih rezultatov. Predlagali smo vzporedno vizualno primerjavo in zagotovili potreben paket za interaktivno raziskovanje. V komentarjih nam povejte, kako koristno vam je bilo na vaši poti prilagajanja hiperparametrov!


O avtorjih

Uemit YoldasÜmit Yoldas je višji arhitekt rešitev pri Amazon Web Services. V Nemčiji dela s podjetniškimi strankami v različnih panogah. Želi si prevesti koncepte umetne inteligence v rešitve iz resničnega sveta. Zunaj dela uživa v času z družino, uživa v dobri hrani in se ukvarja s telesno pripravljenostjo.

Elina LesikElina Lesik je arhitekt rešitev s sedežem v Münchnu. Osredotoča se na poslovne stranke iz industrije finančnih storitev. V njenem prostem času lahko Elino najdete na nekaterih IT srečanjih, ko gradi aplikacije z generativno umetno inteligenco, razvija novo idejo o hitrem reševanju podnebnih sprememb ali teče v gozdu, da se pripravi na polmaraton s tipičnim odstopanjem od načrtovanega urnika.

Mariano kampMariano Kamp je glavni arhitekt rešitev pri Amazon Web Services. Sodeluje z bankami in zavarovalnicami v Nemčiji na področju strojnega učenja. V prostem času Mariano z ženo uživa v pohodništvu.

Časovni žig:

Več od Strojno učenje AWS