Tutustu edistyneisiin hyperparametrien optimointiin Amazon SageMaker Automatic Model Tuning | Amazon Web Services

Tutustu edistyneisiin hyperparametrien optimointiin Amazon SageMaker Automatic Model Tuning | Amazon Web Services

Suorituskykyisten koneoppimisratkaisujen (ML) luominen perustuu harjoitusparametrien, joita kutsutaan myös hyperparametreiksi, tutkimiseen ja optimointiin. Hyperparametrit ovat nuppeja ja vipuja, joita käytämme harjoitusprosessin säätämiseen, kuten oppimisnopeutta, eräkokoa, regularisoinnin voimakkuutta ja muita, riippuen tietystä mallista ja käsillä olevasta tehtävästä. Hyperparametrien tutkimiseen kuuluu systemaattinen kunkin parametrin arvojen vaihtelu ja vaikutusten tarkkaileminen mallin suorituskykyyn. Vaikka tämä prosessi vaatii lisäponnisteluja, hyödyt ovat merkittäviä. Hyperparametrien optimointi (HPO) voi nopeuttaa harjoitusaikoja, parantaa mallin tarkkuutta ja parempaa yleistämistä uusiin tietoihin.

Jatkamme matkaa postista Optimoi hyperparametrit Amazon SageMakerin automaattisen mallin virityksen avulla. Tutkimme aiemmin yhden työn optimointia, visualisoimme sisäänrakennetun SageMaker-algoritmin tulokset ja opimme tiettyjen hyperparametriarvojen vaikutuksista. Sen lisäksi, että HPO:ta käytetään kertaluonteisena optimoinnina mallinluontisyklin lopussa, voimme myös käyttää sitä useissa vaiheissa keskustelun avulla. Jokainen viritystyö auttaa meitä pääsemään lähemmäs hyvää suorituskykyä, mutta lisäksi opimme myös kuinka herkkä malli on tietyille hyperparametreille ja voimme käyttää tätä ymmärrystä informoidakseen seuraavaa viritystyötä. Voimme tarkistaa hyperparametrit ja niiden arvoalueet oppimamme perusteella ja muuttaa näin optimointiponnistuksen keskusteluksi. Ja samalla tavalla kuin me ML-harjoittajat keräämme tietoa näiden juoksujen aikana, Amazon SageMaker automaattinen mallin viritys (AMT) Lämpimällä käynnistyksellä voi säilyttää aiemmissa viritystöissä hankitun tiedon myös seuraavaa viritystyötä varten.

Tässä viestissä suoritamme useita HPO-töitä mukautetulla koulutusalgoritmilla ja erilaisilla HPO-strategioilla, kuten Bayesin optimointi ja satunnainen haku. Teemme myös lämpimiä aloituksia ja vertaamme visuaalisesti kokeitamme parantaaksemme hyperparametrien avaruustutkimusta.

SageMaker AMT:n edistyneet konseptit

Seuraavissa osioissa tarkastelemme lähemmin jokaista seuraavista aiheista ja näytämme, kuinka SageMaker AMT voi auttaa sinua toteuttamaan ne ML-projekteissasi:

  • Käytä mukautettua harjoituskoodia ja suosittua ML-kehystä Scikit-learn SageMaker Trainingissa
  • Määritä mukautettuja arviointimittareita lokien perusteella arviointia ja optimointia varten
  • Suorita HPO käyttämällä sopivaa strategiaa
  • Käytä lämpimiä aloituksia muuttaaksesi yksittäisen hyperparametrihaun dialogiksi mallimme kanssa
  • Käytä edistyneitä visualisointitekniikoita ratkaisukirjastomme avulla vertaillaksesi kahta HPO-strategiaa ja viritystöiden tuloksia

Käytätpä sitten ensimmäisessä viestissämme käytettyjä sisäänrakennettuja algoritmeja tai omaa harjoituskoodiasi, SageMaker AMT tarjoaa saumattoman käyttökokemuksen ML-mallien optimointiin. Se tarjoaa keskeiset toiminnot, joiden avulla voit keskittyä käsillä olevaan ML-ongelmaan ja pitää automaattisesti kirjaa kokeista ja tuloksista. Samalla se hallitsee automaattisesti taustalla olevaa infrastruktuuria puolestasi.

Tässä viestissä siirrymme pois sisäänrakennetusta SageMaker-algoritmista ja käytämme mukautettua koodia. Käytämme Random Forest -metsää SkLearn. Mutta pysymme samassa ML-tehtävässä ja tietojoukossa kuin omassamme ensimmäinen viesti, joka tunnistaa käsin kirjoitetut numerot. Käsittelemme Jupyter-muistikirjan sisällön 2_advanced_tuning_with_custom_training_and_visualizing.ipynb ja kutsua sinut käyttämään koodia vierekkäin lukeaksesi lisää.

Sukellaan syvemmälle ja selvitetään, kuinka voimme käyttää mukautettua harjoituskoodia, ottaa sen käyttöön ja suorittaa sen samalla, kun tutkimme hyperparametrien hakutilaa tulosten optimoimiseksi.

Kuinka rakentaa ML-malli ja suorittaa hyperparametrien optimointi

Miltä tyypillinen ML-ratkaisun rakentamisprosessi näyttää? Vaikka siellä on monia mahdollisia käyttötapauksia ja suuri valikoima ML-tehtäviä, suosittelemme seuraavaa mentaalimallia vaiheittaista lähestymistapaa varten:

  1. Ymmärrä käsillä oleva ML-skenaariosi ja valitse algoritmi vaatimusten perusteella. Saatat esimerkiksi haluta ratkaista kuvantunnistustehtävän käyttämällä valvottua oppimisalgoritmia. Tässä viestissä käytämme edelleen käsinkirjoitetun kuvantunnistusskenaariota ja samaa tietojoukkoa kuin ensimmäisessä viestissämme.
  2. Päätä, mitä algoritmin toteutusta SageMaker Trainingissa haluat käyttää. Vaihtoehtoja on useita, SageMakerin sisällä tai ulkoisissa. Lisäksi sinun on määritettävä, mikä taustalla oleva mittari sopii parhaiten tehtävääsi ja haluat optimoida (kuten tarkkuus, F1-pisteet tai ROC). SageMaker tukee neljää vaihtoehtoa tarpeidesi ja resurssien mukaan:
    • Käytä esikoulutettua mallia kautta Amazon SageMaker JumpStart, jota voit käyttää suoraan pakkauksesta tai vain hienosäätää sitä.
    • Käytä yhtä sisäänrakennetuista harjoittelu- ja viritysalgoritmeista, kuten XGBoost, kuten teimme edellisessä viestissämme.
    • Harjoittele ja viritä mukautettu malli, joka perustuu johonkin tärkeimmistä kehyksistä, kuten Scikit-learn, TensorFlow tai PyTorch. AWS tarjoaa valikoiman valmiita Docker-kuvia tähän tarkoitukseen. Käytämme tässä viestissä tätä vaihtoehtoa, jonka avulla voit kokeilla nopeasti ajamalla oman koodisi valmiiksi tehdyn säilökuvan päälle.
    • Tuo oma mukautettu Docker-kuvasi, jos haluat käyttää kehystä tai ohjelmistoa, jota ei muuten tueta. Tämä vaihtoehto vaatii eniten vaivaa, mutta tarjoaa myös suurimman joustavuuden ja hallinnan.
  3. Harjoittele mallia tiedoillasi. Riippuen edellisen vaiheen algoritmin toteutuksesta, tämä voi olla niinkin yksinkertaista kuin harjoitustietojesi viittaus ja harjoitustyön suorittaminen tai mukautetun koodin lisääminen harjoitteluun. Meidän tapauksessamme käytämme Pythonissa mukautettua harjoituskoodia, joka perustuu Scikit-learniin.
  4. Käytä hyperparametrien optimointia ("keskusteluna" ML-mallisi kanssa). Harjoittelun jälkeen haluat yleensä optimoida mallisi suorituskykyä etsimällä algoritmisi hyperparametreille lupaavimman arvoyhdistelmän.

ML-algoritmistasi ja mallin koosta riippuen hyperparametrien optimoinnin viimeinen vaihe voi osoittautua odotettua suuremmiksi haasteeksi. Seuraavat kysymykset ovat tyypillisiä ML-ammattilaisille tässä vaiheessa ja saattavat kuulostaa sinulle tutulta:

  • Millaiset hyperparametrit vaikuttavat ML-ongelmaani?
  • Kuinka voin tehokkaasti etsiä valtavasta hyperparametritilasta löytääkseni parhaiten toimivat arvot?
  • Miten tiettyjen hyperparametriarvojen yhdistelmä vaikuttaa suorituskykymittariini?
  • Kustannukset ovat tärkeitä; miten voin käyttää resurssejani tehokkaasti?
  • Millaiset virityskokeilut ovat kannattavia ja miten niitä voi verrata?

Näihin kysymyksiin ei ole helppoa vastata, mutta hyviä uutisia on. SageMaker AMT ottaa raskaan työn sinulta ja antaa sinun keskittyä valitsemaan oikean HPO-strategian ja arvoalueet, joita haluat tutkia. Lisäksi visualisointiratkaisumme helpottaa iteratiivista analyysi- ja kokeiluprosessia, jonka avulla voidaan löytää tehokkaasti toimivia hyperparametriarvoja.

Seuraavissa osioissa rakennamme numeroiden tunnistusmallin alusta alkaen Scikit-learnin avulla ja näytämme kaikki nämä käsitteet toiminnassa.

Ratkaisun yleiskatsaus

SageMaker tarjoaa erittäin käteviä ominaisuuksia mallimme kouluttamiseen, arviointiin ja virittämiseen. Se kattaa kaikki päästä päähän ML-elinkaarin toiminnot, joten meidän ei tarvitse edes jättää Jupyter-muistikirjaamme.

Ensimmäisessä viestissämme käytimme sisäänrakennettua SageMaker-algoritmia XGBoost. Esittelytarkoituksessa siirrymme tällä kertaa Random Forest -luokittimeen, koska voimme näyttää, kuinka voit antaa oman harjoituskoodisi. Päätimme tarjota oman Python-skriptimme ja käyttää Scikit-learnia viitekehyksenä. Miten ilmaistaan, että haluamme käyttää tiettyä ML-kehystä? Kuten näemme, SageMaker käyttää taustalla toista AWS-palvelua noutaakseen valmiiksi rakennetun Docker-konttikuvan koulutusta varten -Amazonin elastisten säiliörekisteri (Amazon ECR).

Käsittelemme seuraavat vaiheet yksityiskohtaisesti, mukaan lukien koodinpätkät ja kaaviot pisteiden yhdistämiseksi. Kuten aiemmin mainittiin, jos sinulla on mahdollisuus, avaa muistikirja ja suorita koodisolut vaihe vaiheelta luodaksesi artefaktit AWS-ympäristössäsi. Ei ole parempaa tapaa aktiiviseen oppimiseen.

  1. Lataa ja valmistele ensin tiedot. Käytämme Amazonin yksinkertainen tallennuspalvelu (Amazon S3) ladataksesi tiedoston, joka sisältää käsinkirjoitetut numerotietomme.
  2. Valmistele seuraavaksi koulutusohjelma ja kehysriippuvuudet. Tarjoamme mukautetun harjoituskoodin Pythonissa, viittaamme joihinkin riippuvaisiin kirjastoihin ja teemme testiajon.
  3. Mukautettujen tavoitemittareiden määrittämiseksi SageMaker antaa meille mahdollisuuden määrittää säännöllinen lauseke, joka poimii tarvitsemamme mittarit säilön lokitiedostoista.
  4. Harjoittele malli scikit-learn-kehyksen avulla. Viittaamalla valmiiksi rakennettuun säilökuvaan luomme vastaavan Estimator-objektin ja välitämme mukautetun koulutusohjelman.
  5. AMT:n avulla voimme kokeilla erilaisia ​​HPO-strategioita. Keskitymme tässä viestissä kahteen niistä: satunnaiseen hakuun ja Bayesin hakuun.
  6. Valitse SageMaker HPO -strategioista.
  7. Visualisoi, analysoi ja vertaa viritystuloksia. Visualisointipakettimme avulla voimme selvittää, mikä strategia toimii paremmin ja mitkä hyperparametriarvot tarjoavat parhaan suorituskyvyn mittareidemme perusteella.
  8. Jatka hyperparametritilan tutkimista ja HPO-töiden lämminkäynnistystä.

AMT huolehtii taustalla olevan laskentainfrastruktuurin skaalauksesta ja hallinnasta eri viritystöiden suorittamiseksi Amazonin elastinen laskentapilvi (Amazon EC2) -tapauksissa. Tällä tavalla sinun ei tarvitse rasittaa itseäsi instansseja, käsitellä käyttöjärjestelmä- ja laitteisto-ongelmia tai koota lokitiedostoja itse. ML-kehyskuva haetaan Amazon ECR:stä ja mallin artefaktit, mukaan lukien viritystulokset, tallennetaan Amazon S3:een. Kaikki lokit ja mittarit kerätään amazonin pilvikello kätevää käyttöä ja lisäanalyysiä varten tarvittaessa.

Edellytykset

Koska tämä on jatkoa sarjalle, sen lukeminen on suositeltavaa, mutta ei välttämättä pakollista ensimmäinen viestimme SageMaker AMT:stä ja HPO:sta. Sen lisäksi ML-konseptien ja Python-ohjelmoinnin perustiedot ovat hyödyllisiä. Suosittelemme myös seuraamaan kaikkia julkaisun vaiheita mukana oleva muistikirja GitHub-arkistosta lukiessasi tätä viestiä. Muistikirjaa voidaan käyttää itsenäisesti ensimmäisestä, mutta tarvitsee koodia alikansioista. Muista kloonata koko arkisto ympäristössäsi README-tiedostossa kuvatulla tavalla.

Koodin kokeileminen ja interaktiivisten visualisointivaihtoehtojen käyttäminen parantaa huomattavasti oppimiskokemustasi. Joten tarkista se.

Lataa ja valmistele tiedot

Ensimmäisenä vaiheena varmistamme, että ladattu numerotiedot tarvitsemme koulutusta on SageMakerin käytettävissä. Amazon S3:n avulla voimme tehdä tämän turvallisesti ja skaalautuvalla tavalla. Katso muistikirjasta täydellinen lähdekoodi ja mukauta se vapaasti omilla tiedoillasi.

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 tiedosto sisältää ominaisuustiedot ja tunnisteet. Jokainen numero esitetään pikseliarvoina 8 × 8 -kuvassa, kuten seuraavassa kuvassa numerolle 4 on esitetty.
Numerot Dataset Scikit-learnistä

Valmistele koulutusskripti ja kehysriippuvuudet

Nyt kun tiedot on tallennettu S3-ämpäriimme, voimme määrittää mukautetun harjoitusskriptimme sen perusteella Scikit opittava Pythonissa. SageMaker antaa meille mahdollisuuden yksinkertaisesti viitata Python-tiedostoon myöhemmin harjoittelua varten. Kaikki riippuvuudet, kuten Scikit-learn- tai pandaskirjastot, voidaan tarjota kahdella tavalla:

  • Ne voidaan määritellä nimenomaisesti kohdassa a requirements.txt tiedosto
  • Ne on esiasennettu alla olevaan ML-säilökuvaan, joka on joko SageMakerin tarjoama tai räätälöity

Molempia vaihtoehtoja pidetään yleisesti riippuvuuksien hallinnan vakiomenetelminä, joten saatat olla jo perehtynyt niihin. SageMaker tukee erilaisia ​​ML-kehyksiä käyttövalmiin hallitussa ympäristössä. Tämä sisältää monia suosituimpia datatieteen ja ML-kehyksiä, kuten PyTorch, TensorFlow tai Scikit-learn, kuten meidän tapauksessamme. Emme käytä ylimääräistä requirements.txt tiedostoa, mutta lisää kirjastoja kokeillaksesi sitä.

Toteutuksen koodi sisältää menetelmän nimeltä fit(), joka luo uuden luokituksen numerontunnistustehtävälle ja kouluttaa sitä. Toisin kuin ensimmäisessä viestissämme, jossa käytimme SageMakerin sisäänrakennettua XGBoost-algoritmia, käytämme nyt RandomForestClassifier tarjoaa ML-kirjasto sklearn. Kutsu fit() Luokitusobjektin menetelmä aloittaa harjoitusprosessin käyttämällä CSV-tietojen osajoukkoa (80 %):

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

Katso koko käsikirjoitus Jupyter-muistikirjastamme osoitteessa GitHub.

Ennen kuin kehitit säilöresursseja koko koulutusprosessia varten, yrititkö suorittaa komentosarjan suoraan? Tämä on hyvä käytäntö varmistaaksesi nopeasti, ettei koodissa ole syntaksivirheitä, ja tarkista varhaisessa vaiheessa tietorakenteiden dimensioita ja muita virheitä.

On kaksi tapaa suorittaa koodisi paikallisesti. Ensinnäkin voit suorittaa sen heti muistikirjassa, jolloin voit myös käyttää Python Debuggeria 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)

Vaihtoehtoisesti voit suorittaa junan komentosarjan komentoriviltä samalla tavalla kuin haluat käyttää sitä säilössä. Tämä tukee myös erilaisten parametrien asettamista ja oletusarvojen korvaamista tarpeen mukaan, esimerkiksi:

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

Tuotoksena näet ensimmäiset tulokset mallin suorituskyvystä, jotka perustuvat objektiivisten mittareiden tarkkuuteen, muistamiseen ja F1-pisteisiin. Esimerkiksi, pre: 0.970 rec: 0.969 f1: 0.969.

Ei paha näin nopeaan treeniin. Mutta mistä nämä luvut ovat peräisin ja mitä niillä tehdään?

Määritä mukautetut tavoitetiedot

Muista, että tavoitteemme on kouluttaa ja virittää mallimme täysin niiden objektiivisten mittareiden perusteella, joita pidämme tärkeänä tehtävämme kannalta. Koska käytämme mukautettua harjoitusskriptiä, meidän on määritettävä nämä tiedot SageMakerille erikseen.

Skriptimme lähettää mittareiden tarkkuuden, muistamisen ja F1-pisteet harjoittelun aikana yksinkertaisesti käyttämällä print toiminto:

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

SageMaker sieppaa vakiotulosteen ja lähettää sen CloudWatchiin lokivirtana. Jotta voimme noutaa mittausarvot ja työskennellä niiden kanssa myöhemmin SageMaker AMT:ssä, meidän on annettava tietoja tuon tulosteen jäsentämisestä. Voimme saavuttaa tämän määrittämällä säännöllisiä lausekkeita (lisätietoja on kohdassa Tarkkaile ja analysoi koulutustöitä Amazon CloudWatch -mittareiden avulla):

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

Käydään yhdessä läpi edellisen koodin ensimmäinen metrimäärittely. SageMaker etsii tulostetta lokista, joka alkaa pre: ja sitä seuraa yksi tai useampi välilyönti ja sitten numero, jonka haluamme poimia, minkä vuoksi käytämme pyöreitä sulkeita. Joka kerta kun SageMaker löytää tällaisen arvon, se muuttaa sen CloudWatch-mittariksi, jolla on nimi valid-precision.

Harjoittele mallia Scikit-learn-kehyksen avulla

Kun olemme luoneet koulutuskäsikirjoituksen train.py ja opastaa SageMakeria kuinka seurata mittareita CloudWatchin sisällä, määrittelemme a SageMaker estimaattori esine. Se käynnistää koulutustyön ja käyttää määrittämäämme ilmentymän tyyppiä. Mutta kuinka tämä ilmentymätyyppi voi olla erilainen kuin suorittamasi Amazon SageMaker Studio muistikirja päällä ja miksi? SageMaker Studio suorittaa harjoitustyösi (ja johtopäätöksesi) erillisissä laskentaesiintymissä kuin muistikirjassasi. Näin voit jatkaa työskentelyä muistikirjassasi, kun työt suoritetaan taustalla.

Parametri framework_version viittaa Scikit-learn-versioon, jota käytämme koulutustyössämme. Vaihtoehtoisesti voimme ohittaa image_uri että estimator. Voit tarkistaa, onko suosikkikehyksesi tai ML-kirjastosi saatavilla a valmiiksi rakennettu SageMaker Docker -kuva ja käytä sitä sellaisenaan tai laajennuksilla.

Lisäksi voimme suorittaa SageMaker-koulutustöitä EC2-pisteinstanssien avulla asettamalla use_spot_instances että True. Ne ovat varakapasiteetin tapauksia, jotka voivat säästää jopa 90 % kustannuksista. Nämä tapaukset tarjoavat joustavuutta koulutustehtävien suorittamiseen.

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

Kun Estimator-objekti on asetettu, aloitamme koulutuksen soittamalla fit() toiminto, joka toimittaa polun Amazon S3:n harjoitustietojoukkoon. Voimme käyttää samaa menetelmää validointi- ja testidatan tarjoamiseen. Asetamme wait parametri True jotta voimme käyttää koulutettua mallia seuraavissa koodisoluissa.

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

Määritä hyperparametrit ja suorita viritystöitä

Tähän mennessä olemme kouluttaneet mallia yhdellä hyperparametriarvojen sarjalla. Mutta olivatko ne arvot hyviä? Vai voisimmeko etsiä parempia? Käytetään HyperparameterTuner-luokka suorittaa systemaattisen haun hyperparametriavaruudesta. Kuinka etsimme tätä tilaa virittimellä? Tarvittavat parametrit ovat tavoitteen metriikan nimi ja tavoitetyyppi, jotka ohjaavat optimointia. Optimointistrategia on toinen keskeinen argumentti virittimelle, koska se määrittelee edelleen hakuavaruuden. Seuraavassa on neljä erilaista strategiaa, joista valita:

  • Verkkohaku
  • Satunnainen haku
  • Bayesin optimointi (oletus)
  • Hyperband

Kuvaamme edelleen näitä strategioita ja annamme sinulle ohjeita valitaksesi yksi myöhemmin tässä viestissä.

Ennen kuin määrittelemme ja käytämme viritinobjektiamme, kerrotaanpa ymmärryksemme arkkitehtuurin näkökulmasta. Kävimme läpi SageMaker AMT:n arkkitehtonisen yleiskatsauksen viimeinen postauksemme ja toista ote siitä tässä mukavuuden vuoksi.

Amazon SageMakerin automaattinen mallin viritysarkkitehtuuri

Voimme valita, mitä hyperparametreja haluamme virittää tai jättää staattisiksi. Tarjoamme dynaamisille hyperparametreille hyperparameter_ranges joita voidaan käyttää optimoimaan viritettäville hyperparametreille. Koska käytämme Random Forest -luokittajaa, olemme hyödyntäneet hyperparametreja Scikit-learn Random Forest -dokumentaatio.

Rajoitamme myös resursseja enimmäismäärällä koulutustöitä ja rinnakkaisia ​​koulutustöitä, joita virittäjä voi käyttää. Näemme kuinka nämä rajat auttavat meitä vertaamaan eri strategioiden tuloksia keskenään.

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 } 

Samanlainen kuin arvioijan fit -toimintoa, aloitamme viritystyön kutsumalla virittimen fit:

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

Tämä on kaikki mitä meidän on tehtävä antaaksemme SageMakerin suorittaa koulutustyöt (n=50) taustalla, joista jokainen käyttää erilaista hyperparametrijoukkoa. Tutkimme tuloksia myöhemmin tässä postauksessa. Mutta sitä ennen aloitetaan toinen viritystyö, tällä kertaa Bayesin optimointistrategiaa soveltaen. Vertaamme molempia strategioita visuaalisesti niiden valmistumisen jälkeen.

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)

Huomaa, että molemmat viritintyöt voivat toimia rinnakkain, koska SageMaker järjestää tarvittavat laskentaesiintymät toisistaan ​​riippumatta. Siitä on paljon apua harjoittajille, jotka kokeilevat erilaisia ​​lähestymistapoja samanaikaisesti, kuten täällä.

Valitse SageMaker HPO -strategioista

Mitä tulee viritysstrategioihin, sinulla on muutamia vaihtoehtoja SageMaker AMT:n kanssa: ruudukkohaku, satunnainen haku, Bayesin optimointi ja Hyperband. Nämä strategiat määrittävät, kuinka automaattiset viritysalgoritmit tutkivat määritettyjä hyperparametrialueita.

Satunnaishaku on melko yksinkertaista. Se valitsee satunnaisesti arvoyhdistelmiä määritetyiltä alueilta ja voidaan ajaa peräkkäin tai rinnakkain. Se on kuin heittäisi tikkaa sidottuin silmin toivoen osuvansa maaliin. Olemme aloittaneet tällä strategialla, mutta paranevatko tulokset toisella?

Bayesilainen optimointi on erilainen kuin satunnainen haku. Se ottaa huomioon aiempien valintojen historian ja valitsee arvot, jotka todennäköisesti tuottavat parhaat tulokset. Jos haluat oppia aikaisemmista tutkimusmatkoista, voit saavuttaa tämän vain suorittamalla uuden viritystyön edellisten jälkeen. Onko järkevää, eikö? Tällä tavalla Bayesin optimointi on riippuvainen aiemmista ajoista. Mutta näetkö, mikä HPO:n strategia mahdollistaa suuremman rinnakkaisuuden?

Hyperband on mielenkiintoinen juttu! Se käyttää multifidelity-strategiaa, mikä tarkoittaa, että se kohdistaa dynaamisesti resurssit lupaavimpiin koulutustehtäviin ja pysäyttää heikosti suoriutuvat. Siksi Hyperband on laskennallisesti tehokas resurssien kanssa oppien aiemmista koulutustöistä. Kun huonosti toimivat kokoonpanot on pysäytetty, uusi konfiguraatio alkaa, ja sen arvot valitaan satunnaisesti.

Riippuen tarpeistasi ja mallisi luonteesta, voit valita viritysstrategiaksesi satunnaisen haun, Bayesin optimoinnin tai Hyperbandin välillä. Jokaisella on oma lähestymistapansa ja etunsa, joten on tärkeää harkita, mikä niistä toimii parhaiten ML-tutkimuksessasi. Hyvä uutinen ML:n harjoittajille on, että voit valita parhaan HPO-strategian vertaamalla visuaalisesti kunkin kokeen vaikutusta tavoitemittariin. Seuraavassa osiossa näemme, kuinka visuaalisesti tunnistaa eri strategioiden vaikutukset.

Visualisoi, analysoi ja vertaa viritystuloksia

Kun viritystyömme ovat valmiit, siitä tulee jännittävää. Mitä tuloksia ne tuottavat? Millaista lisäystä voit odottaa mittaristamme verrattuna perusmalliisi? Mitkä ovat parhaiten toimivat hyperparametrit meidän käyttötapauksessamme?

Nopea ja suoraviivainen tapa tarkastella HPO:n tuloksia on käydä SageMaker-konsolissa. Alla Hyperparametrien viritystyöt, voimme nähdä (viritystyötä kohti) yhdistelmän hyperparametriarvoja, jotka on testattu ja jotka ovat tuottaneet parhaan suorituskyvyn tavoitemittarillamme mitattuna (valid-f1).

Mittarit hyperparametrien viritystöitä varten

Onko siinä kaikki mitä tarvitset? ML-ammattilaisena saatat olla kiinnostunut noista arvoista, mutta haluat varmasti oppia lisää mallisi sisäisestä toiminnasta tutkiaksesi sen koko potentiaalia ja vahvistaaksesi intuitiota empiirisellä palautteella.

Hyvä visualisointityökalu voi auttaa sinua ymmärtämään HPO:n parannuksia ajan myötä ja saada empiiristä palautetta ML-mallisi suunnittelupäätöksistä. Se näyttää kunkin yksittäisen hyperparametrin vaikutuksen tavoitemittariisi ja antaa ohjeita viritystulosten optimointiin.

Käytämme amtviz mukautettu visualisointipaketti viritystöiden visualisointiin ja analysointiin. Se on helppokäyttöinen ja tarjoaa hyödyllisiä ominaisuuksia. Osoitamme sen hyödyn tulkitsemalla joitain yksittäisiä kaavioita ja lopuksi vertaamalla satunnaista hakua rinnakkain Bayesin optimoinnin kanssa.

Ensin luodaan visualisointi satunnaista hakua varten. Voimme tehdä tämän soittamalla visualize_tuning_job() alkaen amtviz ja ensimmäisen viritinobjektin välittäminen argumenttina:

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

Näet pari kaaviota, mutta katsotaanpa se askel askeleelta. Ensimmäinen tulosteen sirontakaavio näyttää seuraavalta ja antaa jo meille joitain visuaalisia vihjeitä, joita emme tunnistaisi mistään taulukosta.

Hyperparametrien optimointityön tulokset

Jokainen piste edustaa yksittäisen koulutustyön suorituskykyä (tavoitteemme valid-f1 y-akselilla) sen aloitusajan (x-akselin) perusteella, joka on tuotettu tietyllä hyperparametrijoukolla. Siksi tarkastelemme mallimme suorituskykyä sen edetessä viritystyön aikana.

Pisteviiva korostaa parasta tähän mennessä löydettyä tulosta ja osoittaa parantumista ajan myötä. Kaksi parasta koulutustyötä saavuttivat F1-pisteen noin 0.91.

Näetkö kaaviossa trendin kumulatiivista kehitystä osoittavan katkoviivan lisäksi?

Luultavasti ei. Ja tämä on odotettavissa, koska katsomme satunnaisen HPO-strategian tuloksia. Jokainen harjoitustyö suoritettiin käyttämällä erilaista, mutta satunnaisesti valittua hyperparametrisarjaa. Jos jatkaisimme viritystöitämme (tai suorittaisimme toisen samalla asetuksella), näkisimme todennäköisesti parempia tuloksia ajan myötä, mutta emme voi olla varmoja. Satunnaisuus on hankala asia.

Seuraavat kaaviot auttavat sinua arvioimaan hyperparametrien vaikutusta yleiseen suorituskykyyn. Kaikki hyperparametrit visualisoidaan, mutta lyhyyden vuoksi keskitymme kahteen niistä: n-estimators ja max-depth.

Hyperparametritöiden tiedot

Kaksi parasta koulutustyötämme olivat käytössä n-estimators noin 20 ja 80 ja max-depth noin 10 ja 18. Tarkat hyperparametriarvot näytetään työkaluvihjeessä jokaiselle pisteelle (harjoitustyölle). Ne korostetaan jopa dynaamisesti kaikissa kaavioissa ja antavat sinulle moniulotteisen näkymän! Näitkö tuon? Jokainen hyperparametri piirretään objektiivisena mittarina erillisenä kaaviona.

Millaisia ​​oivalluksia nyt saamme n-estimators?

Vasemman kaavion perusteella näyttää siltä, ​​että erittäin pienet arvoalueet (alle 10) antavat useammin huonoja tuloksia kuin korkeammat arvot. Siksi korkeammat arvot voivat auttaa mallia toimimaan paremmin – mielenkiintoista.

Sen sijaan korrelaatio max-depth tavoitemittarimme hyperparametri on melko alhainen. Emme voi selvästi sanoa, mitkä arvoalueet toimivat paremmin yleisestä näkökulmasta.

Yhteenvetona voidaan todeta, että satunnainen haku voi auttaa sinua löytämään hyvin toimivan hyperparametrijoukon jopa suhteellisen lyhyessä ajassa. Se ei myöskään ole puolueellinen hyvään ratkaisuun, vaan antaa tasapainoisen kuvan hakutilasta. Resurssien käyttösi ei kuitenkaan välttämättä ole kovin tehokasta. Se jatkaa koulutustöiden suorittamista hyperparametreillä arvoalueilla, joiden tiedetään tuottavan huonoja tuloksia.

Tarkastellaan toisen viritystyömme tuloksia Bayesin optimointia käyttäen. Voimme käyttää amtviz visualisoidaksesi tulokset samalla tavalla kuin teimme tähän mennessä satunnaisen hakuvirittimen kohdalla. Tai vielä parempi, voimme käyttää toiminnon kykyä vertailla molempia viritystöitä yhdessä kaaviosarjassa. Ihan kätevä!

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

Hyperparametrien optimointityö Bayesian VS Random

Pisteitä on nyt enemmän, koska visualisoimme kaikkien koulutustöiden tulokset sekä satunnaishaulle (oranssit pisteet) että Bayesin optimoinnille (siniset pisteet). Oikealla puolella näet tiheyskaavion, joka visualisoi kaikkien F1-pisteiden jakautumisen. Suurin osa koulutustehtävistä saavutti F1-asteikon yläosan (yli 0.6) tulokset – hyvä!

Mikä tässä on avaimenperä? Sirontakaavio osoittaa selvästi Bayesin optimoinnin edut. Se tuottaa parempia tuloksia ajan myötä, koska se voi oppia aiemmista ajoista. Tästä syystä saimme Bayesian avulla huomattavasti parempia tuloksia kuin satunnaisesti (0.967 vs. 0.919) samalla määrällä koulutustehtäviä.

Voit tehdä vielä enemmänkin amtviz. Porataanpa sisään.

Jos annat SageMaker AMT:lle ohjeen suorittaa suurempi määrä töitä viritystä varten, useiden kokeilujen näkeminen kerralla voi olla sotkuista. Tämä on yksi syistä, miksi teimme näistä kaavioista interaktiivisia. Voit napsauttaa ja vetää jokaista hyperparametrin sirontakuvaajaa lähentääksesi tiettyjä arvoalueita ja tarkentaaksesi visuaalista tulkintaasi tuloksista. Kaikki muut kaaviot päivitetään automaattisesti. Se on aika hyödyllistä, eikö? Katso seuraavat kaaviot esimerkkinä ja kokeile sitä itse muistikirjassasi!

Hyperparametrien optimoinnin työn visualisointiominaisuudet

Viritysmaksimalistina saatat myös päättää, että toisen hyperparametrin viritystyön suorittaminen voisi parantaa mallisi suorituskykyä entisestään. Mutta tällä kertaa voidaan tutkia tarkempaa hyperparametriarvojen aluetta, koska tiedät jo (suunnilleen), mistä odottaa parempia tuloksia. Voit esimerkiksi keskittyä arvoihin välillä 100–200 for n-estimators, kuten kaaviosta näkyy. Tämä antaa AMT:n keskittyä lupaavimpiin koulutustehtäviin ja parantaa viritystehokkuutta.

Tehdä yhteenveto, amtviz tarjoaa sinulle runsaasti visualisointiominaisuuksia, joiden avulla voit ymmärtää paremmin mallisi hyperparametrien vaikutusta suorituskykyyn ja mahdollistaa älykkäämpiä päätöksiä viritystoiminnoissasi.

Jatka hyperparametritilan tutkimista ja HPO-töiden lämminkäynnistystä

Olemme nähneet, että AMT auttaa meitä tutkimaan hyperparametrien hakuavaruutta tehokkaasti. Mutta entä jos tarvitsemme useita virityskierroksia parantaaksemme tuloksiamme iteratiivisesti? Kuten alussa mainittiin, haluamme luoda optimoinnin palautesyklin - "keskustelumme" mallin kanssa. Pitääkö meidän aloittaa alusta joka kerta?

Katsotaanpa ajamisen käsitettä a lämminkäynnistys hyperparametrin viritystyö. Se ei käynnistä uusia viritystöitä tyhjästä, vaan käyttää uudelleen aiemmissa HPO-ajoissa opittua. Tämä auttaa meitä tehostamaan viritysaikaamme ja laskentaresurssejamme. Voimme toistaa aiempia tuloksiamme edelleen. Lämpimien käynnistysten käyttämiseksi luomme a WarmStartConfig ja täsmentää warm_start_type as IDENTICAL_DATA_AND_ALGORITHM. Tämä tarkoittaa, että muutamme hyperparametrien arvoja, mutta emme muuta dataa tai algoritmia. Pyydämme AMT:tä siirtämään aiemman tiedon uuteen viritystehtäväämme.

Viitaten aiempiin Bayes-optimointi- ja satunnaisten hakujen viritystyöhön kuten parents, voimme käyttää niitä molempia lämpimään alkuun:

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

Näet lämpökäynnistyksen hyödyt seuraavista taulukoista. Nämä ovat luoneet amtviz samalla tavalla kuin aiemmin, mutta tällä kertaa olemme lisänneet toisen viritystyön lämpimään aloitukseen.

Hyperparametrien optimointityön lämmin aloitus

Vasemmassa kaaviossa voimme havaita, että uudet viritystyöt ovat enimmäkseen suorituskyvyn metriikkakaavion oikeassa yläkulmassa (katso oranssilla merkityt pisteet). Lämmin aloitus on todellakin käyttänyt uudelleen aikaisempia tuloksia, minkä vuoksi nuo datapisteet ovat F1-pisteiden kärkituloksissa. Tämä parannus näkyy myös oikealla olevassa tiheyskaaviossa.

Toisin sanoen AMT valitsee automaattisesti lupaavat hyperparametriarvojoukot aiemmista kokeista saatujen tietojen perusteella. Tämä näkyy seuraavassa kaaviossa. Algoritmi esimerkiksi testaa alhaisen arvon n-estimators harvemmin, koska niiden tiedetään tuottavan huonoja F1-pisteitä. Emme tuhlaa siihen resursseja lämpimien käynnistysten ansiosta.

Hyperparametrien optimointi visualisoidut työt

Puhdistaa

Jotta vältytään ei-toivotuilta kustannuksilta, kun olet lopettanut HPO-kokeilun, sinun on poistettava kaikki tiedostot S3-alueeltasi etuliitteellä amt-visualize-demo ja myös sulje SageMaker Studion resurssit.

Suorita seuraava koodi muistikirjassasi poistaaksesi kaikki S3-tiedostot tästä viestistä:

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

Jos haluat säilyttää tietojoukot tai mallin artefaktit, voit muuttaa koodin etuliitettä amt-visualize-demo/data vain poistaaksesi tiedot tai amt-visualize-demo/output poistaaksesi vain mallin artefaktit.

Yhteenveto

Olemme oppineet kuinka ML-ratkaisujen rakentamiseen liittyy hyperparametrien tutkiminen ja optimointi. Näiden nuppien ja vipujen säätäminen on vaativa mutta palkitseva prosessi, joka johtaa nopeampiin harjoitusaikoihin, parempaan mallin tarkkuuteen ja kaiken kaikkiaan parempiin ML-ratkaisuihin. SageMaker AMT -toiminto auttaa meitä suorittamaan useita viritystöitä ja käynnistämään ne lämpimästi ja tarjoaa datapisteitä lisätarkastelua, visuaalista vertailua ja analysointia varten.

Tässä viestissä tarkastelimme HPO-strategioita, joita käytämme SageMaker AMT:n kanssa. Aloitimme satunnaisella haulla, yksinkertaisella mutta tehokkaalla strategialla, jossa hyperparametrit otetaan satunnaisesti hakuavaruudesta. Seuraavaksi vertasimme tuloksia Bayesin optimointiin, joka käyttää todennäköisyysmalleja optimaalisten hyperparametrien etsimiseen. Kun olemme tunnistaneet sopivan HPO-strategian ja hyvät hyperparametrien arvoalueet alkukokeiden kautta, osoitimme, kuinka lämpimiä käynnistyksiä voidaan käyttää tulevien HPO-töiden virtaviivaistamiseen.

Voit tutkia hyperparametrihakuavaruutta vertaamalla kvantitatiivisia tuloksia. Olemme ehdottaneet vierekkäistä visuaalista vertailua ja toimittaneet tarvittavan paketin interaktiivista tutkimista varten. Kerro meille kommenteissa, kuinka hyödyllinen se oli sinulle hyperparametrien viritysmatkallasi!


Tietoja kirjoittajista

Uemit YoldasYmit Yoldas on vanhempi ratkaisuarkkitehti Amazon Web Services -palvelussa. Hän työskentelee yritysasiakkaiden kanssa eri toimialoilla Saksassa. Hän on halunnut muuttaa tekoälykonsepteja todellisiksi ratkaisuiksi. Työn ulkopuolella hän viihtyy perheen kanssa, nauttii hyvästä ruoasta ja harrastaa kuntoilua.

Elina LesykElina Lesyk on Solutions Architect, joka sijaitsee Münchenissä. Hän keskittyy rahoituspalvelualan yritysasiakkaisiin. Vapaa-ajallaan Elina voi löytää IT-tapaamisista rakentamassa sovelluksia generatiivisella tekoälyllä, ajamassa uutta ideaa ilmastonmuutoksen nopeaan korjaamiseen tai juoksemassa metsässä valmistautumaan puolimaratoniin tyypillisellä poikkeuksella suunnitellusta aikataulusta.

Mariano kampMariano Kamp on johtava ratkaisuarkkitehti Amazon Web Services -palvelussa. Hän työskentelee pankkien ja vakuutusyhtiöiden kanssa Saksassa koneoppimisen parissa. Vapaa-ajallaan Mariano nauttii vaelluksesta vaimonsa kanssa.

Aikaleima:

Lisää aiheesta AWS-koneoppiminen