Fedezze fel a hiperparaméter-optimalizálás fejlett technikáit az Amazon SageMaker Automatic Model Tuning | Amazon webszolgáltatások

Fedezze fel a hiperparaméter-optimalizálás fejlett technikáit az Amazon SageMaker Automatic Model Tuning | Amazon webszolgáltatások

A nagy teljesítményű gépi tanulási (ML) megoldások létrehozása a tanítási paraméterek, más néven hiperparaméterek feltárásán és optimalizálásán alapul. A hiperparaméterek azok a gombok és karok, amelyeket a képzési folyamat beállítására használunk, például a tanulási sebességet, a kötegméretet, a rendszeresítés erősségét és egyebeket, az adott modelltől és feladattól függően. A hiperparaméterek feltárása magában foglalja az egyes paraméterek értékeinek szisztematikus változtatását és a modell teljesítményére gyakorolt ​​hatás megfigyelését. Bár ez a folyamat további erőfeszítéseket igényel, az előnyök jelentősek. A hiperparaméter-optimalizálás (HPO) gyorsabb képzési időt, jobb modellpontosságot és jobb általánosítást eredményezhet az új adatokra.

A postától folytatjuk utunkat Optimalizálja a hiperparamétereket az Amazon SageMaker automatikus modellhangolásával. Korábban megvizsgáltunk egyetlen feladat optimalizálását, megjelenítettük a SageMaker beépített algoritmusának eredményeit, és megismertük az egyes hiperparaméterértékek hatását. Amellett, hogy a HPO-t egyszeri optimalizálásként használjuk a modellkészítési ciklus végén, több lépésben is használhatjuk beszélgetési módban. Minden egyes hangolási munka segít közelebb kerülni a jó teljesítményhez, de emellett azt is megtudjuk, hogy a modell mennyire érzékeny bizonyos hiperparaméterekre, és ezt az ismeretet felhasználhatjuk a következő hangolási munkához. A tanultak alapján felülvizsgálhatjuk a hiperparamétereket és azok értéktartományait, és így ezt az optimalizálási erőfeszítést beszélgetéssé alakíthatjuk. És ugyanúgy, ahogy mi, ML-gyakorlók tudást halmozunk fel ezeken a futásokon, Amazon SageMaker automatikus modellhangolás (AMT) melegindításokkal meg tudja őrizni a korábbi tuning munkák során megszerzett tudását a következő tuning munkára is.

Ebben a bejegyzésben több HPO-feladatot futtatunk egyéni képzési algoritmussal és különböző HPO-stratégiákkal, mint például a Bayes-i optimalizálás és a véletlenszerű keresés. A melegindításokat is gyakorlatba ültetjük, és vizuálisan összehasonlítjuk a kísérleteinket a hiperparaméteres űrkutatás finomítása érdekében.

A SageMaker AMT fejlett koncepciói

A következő szakaszokban közelebbről megvizsgáljuk a következő témák mindegyikét, és bemutatjuk, hogy a SageMaker AMT hogyan tud segíteni ezek megvalósításában az ML projektekben:

  • Használjon egyéni képzési kódot és a népszerű Scikit-learn ML keretrendszert a SageMaker Trainingben
  • Egyéni értékelési mérőszámok meghatározása a naplók alapján az értékeléshez és az optimalizáláshoz
  • Végezze el a HPO-t megfelelő stratégia alkalmazásával
  • A melegindítások használatával egyetlen hiperparaméteres keresést párbeszédablakká alakíthat a modellünkkel
  • Használjon fejlett vizualizációs technikákat megoldáskönyvtárunk segítségével a két HPO-stratégia és a hangolási feladatok eredményeinek összehasonlításához

Akár az első bejegyzésünkben használt beépített algoritmusokat, akár a saját képzési kódját használja, a SageMaker AMT zökkenőmentes felhasználói élményt kínál az ML modellek optimalizálásához. Olyan kulcsfontosságú funkciókat biztosít, amelyek lehetővé teszik, hogy az aktuális ML-problémára összpontosítson, miközben automatikusan nyomon követi a kísérleteket és az eredményeket. Ugyanakkor automatikusan kezeli az alapul szolgáló infrastruktúrát.

Ebben a bejegyzésben eltávolodunk a SageMaker beépített algoritmusától, és egyéni kódot használunk. Véletlenszerű erdőt használunk SkLearn. De ragaszkodunk ugyanahhoz az ML feladathoz és adatkészlethez, mint a miénkben első poszt, amely kézzel írt számjegyeket észlel. Kitérünk a Jupyter notebook tartalmára 2_advanced_tuning_with_custom_training_and_visualizing.ipynb és felkéri Önt, hogy hívja meg egymás mellett a kódot a további olvasáshoz.

Merüljünk el mélyebben, és fedezzük fel, hogyan használhatjuk az egyéni képzési kódot, telepíthetjük és futtathatjuk, miközben feltárjuk a hiperparaméteres keresési teret az eredmények optimalizálása érdekében.

Hogyan készítsünk ML-modellt és végezzünk hiperparaméter-optimalizálást

Hogyan néz ki egy tipikus folyamat egy ML-megoldás felépítéséhez? Bár sok lehetséges felhasználási eset és sokféle ML feladat létezik, a következő mentális modellt javasoljuk a lépésenkénti megközelítéshez:

  1. Ismerje meg az ML forgatókönyvet, és válasszon algoritmust a követelmények alapján. Előfordulhat például, hogy egy képfelismerési feladatot szeretne megoldani egy felügyelt tanulási algoritmus segítségével. Ebben a bejegyzésben továbbra is a kézírásos képfelismerési forgatókönyvet és ugyanazt az adatkészletet használjuk, mint az első bejegyzésünkben.
  2. Döntse el, hogy a SageMaker Training algoritmus melyik megvalósítását szeretné használni. Különféle lehetőségek állnak rendelkezésre, a SageMakeren belül vagy külsőleg. Ezenkívül meg kell határoznia, hogy melyik alapul szolgáló mérőszám illik legjobban az Ön feladatához, és amelyre optimalizálni szeretne (például pontosság, F1 pontszám vagy ROC). A SageMaker négy lehetőséget támogat az Ön igényeitől és erőforrásaitól függően:
    • Használjon előre betanított modellt keresztül Amazon SageMaker JumpStart, amelyet a dobozból kivéve, vagy csak finomhangolhatsz.
    • Használja a beépített algoritmusok egyikét az edzéshez és a hangoláshoz, mint például az XGBoost, ahogy azt előző bejegyzésünkben is tettük.
    • Tanítson és hangoljon egyéni modellt az egyik fő keretrendszeren, például a Scikit-learn, a TensorFlow vagy a PyTorch alapján. Az AWS előre elkészített Docker-képeket kínál erre a célra. Ebben a bejegyzésben ezt a lehetőséget használjuk, amely lehetővé teszi, hogy gyorsan kísérletezzen úgy, hogy saját kódját futtatja egy előre elkészített tárolókép tetején.
    • Hozzon magával saját Docker-képet arra az esetre, ha olyan keretrendszert vagy szoftvert szeretne használni, amely egyébként nem támogatott. Ez az opció igényli a legtöbb erőfeszítést, ugyanakkor a legnagyobb fokú rugalmasságot és ellenőrzést is biztosítja.
  3. Tanítsd meg a modellt az adataiddal. Az előző lépésben alkalmazott algoritmus megvalósításától függően ez olyan egyszerű lehet, mint a képzési adatokra való hivatkozás és a betanítási feladat futtatása, vagy egyéni kód megadása a képzéshez. Esetünkben a Pythonban néhány egyéni képzési kódot használunk a Scikit-learn alapján.
  4. Alkalmazza a hiperparaméter-optimalizálást (az ML modellel folytatott „beszélgetésként”). A betanítás után általában optimalizálni szeretné a modell teljesítményét azáltal, hogy megtalálja az algoritmus hiperparamétereinek legígéretesebb értékkombinációját.

Az ML algoritmustól és a modell méretétől függően a hiperparaméter-optimalizálás utolsó lépése a vártnál nagyobb kihívásnak bizonyulhat. A következő kérdések jellemzőek az ML gyakorlóira ebben a szakaszban, és ismerősnek tűnhetnek:

  • Milyen hiperparaméterek befolyásolják az ML problémámat?
  • Hogyan kereshetek hatékonyan egy hatalmas hiperparaméter-területen, hogy megtaláljam a legjobban teljesítő értékeket?
  • Hogyan befolyásolja bizonyos hiperparaméterértékek kombinációja a teljesítménymutatómat?
  • A költségek számítanak; hogyan használhatom fel az erőforrásaimat hatékonyan?
  • Milyen hangolási kísérleteket érdemes végezni, és hogyan tudom ezeket összehasonlítani?

Nem könnyű válaszolni ezekre a kérdésekre, de van egy jó hír. A SageMaker AMT átveszi Öntől a nehéz terheket, és lehetővé teszi, hogy a megfelelő HPO-stratégia és értéktartomány kiválasztására összpontosítson, amelyet fel szeretne fedezni. Ezenkívül vizualizációs megoldásunk megkönnyíti az iteratív elemzési és kísérletezési folyamatot a jól teljesítő hiperparaméterértékek hatékony megtalálása érdekében.

A következő részekben egy számfelismerési modellt építünk a nulláról a Scikit-learn segítségével, és bemutatjuk mindezen koncepciókat működés közben.

Megoldás áttekintése

A SageMaker néhány nagyon hasznos funkciót kínál modellünk betanításához, értékeléséhez és hangolásához. Lefedi a teljes ML életciklus összes funkcióját, így el sem kell hagynunk a Jupyter notebookunkat.

Első bejegyzésünkben a SageMaker beépített XGBoost algoritmust használtuk. Bemutató célból ezúttal egy Random Forest osztályozóra váltunk, mert megmutatjuk, hogyan adhatja meg saját képzési kódját. Úgy döntöttünk, hogy saját Python-szkriptet biztosítunk, és keretként a Scikit-learnt használjuk. Most hogyan fejezzük ki, hogy egy adott ML keretrendszert akarunk használni? Amint látni fogjuk, a SageMaker egy másik AWS-szolgáltatást használ a háttérben, hogy lekérjen egy előre elkészített Docker konténerképet a képzéshez -Amazon Elastic Container Registry (Amazon ECR).

Részletesen ismertetjük a következő lépéseket, beleértve a kódrészleteket és a pontok összekapcsolására szolgáló diagramokat. Ahogy korábban említettük, ha lehetősége van rá, nyissa meg a notebookot, és lépésről lépésre futtassa a kódcellákat, hogy létrehozza a műtermékeket az AWS-környezetben. Nincs jobb módja az aktív tanulásnak.

  1. Először töltse be és készítse elő az adatokat. Használjuk Amazon egyszerű tárolási szolgáltatás (Amazon S3) a kézírásos számadatokat tartalmazó fájl feltöltéséhez.
  2. Ezután készítse elő a képzési szkriptet és a keretrendszer függőségeit. Megadjuk az egyéni képzési kódot Pythonban, hivatkozunk néhány függő könyvtárra, és tesztet hajtunk végre.
  3. Az egyéni célmetrikák meghatározásához a SageMaker lehetővé teszi, hogy definiáljunk egy reguláris kifejezést a szükséges metrikák kinyerésére a tároló naplófájljaiból.
  4. Tanítsd meg a modellt a scikit-learn keretrendszer segítségével. Egy előre elkészített tárolóképre hivatkozva létrehozunk egy megfelelő Becslő objektumot, és átadjuk az egyéni képzési szkriptünket.
  5. Az AMT lehetővé teszi számunkra, hogy különféle HPO stratégiákat próbáljunk ki. Ebben a bejegyzésben ezek közül kettőre koncentrálunk: a véletlenszerű keresésre és a bayesi keresésre.
  6. Válasszon a SageMaker HPO stratégiái közül.
  7. Vizualizálja, elemezze és hasonlítsa össze a hangolási eredményeket. Vizualizációs csomagunk lehetővé teszi számunkra, hogy felfedezzük, melyik stratégia teljesít jobban, és mely hiperparaméterértékek biztosítják a legjobb teljesítményt mérőszámaink alapján.
  8. Folytassa a hiperparaméter-tér feltárását és a melegindítási HPO-feladatokat.

Az AMT gondoskodik az alapul szolgáló számítási infrastruktúra méretezéséről és kezeléséről a különböző hangolási feladatok futtatásához Amazon rugalmas számítási felhő (Amazon EC2) példányok. Így nem kell saját magát terhelnie a példányok létrehozásával, az operációs rendszerrel és a hardverrel kapcsolatos problémák kezelésével, vagy a naplófájlok összesítésével. Az ML keretrendszer képét az Amazon ECR-ből kérik le, és a modell műtermékeit, beleértve a hangolási eredményeket, az Amazon S3 tárolja. Az összes naplót és mérőszámot a rendszer begyűjti amazonfelhőóra a kényelmes hozzáférés és szükség esetén további elemzés érdekében.

Előfeltételek

Mivel ez egy sorozat folytatása, ezért ajánlott, de nem feltétlenül kötelező elolvasni első bejegyzésünk a SageMaker AMT-ről és a HPO-ról. Ezen kívül hasznos az ML-fogalmak és a Python programozás alapvető ismerete. Azt is javasoljuk, hogy kövesse az egyes lépéseket a kísérő jegyzetfüzet GitHub adattárunkból a bejegyzés olvasása közben. A notebook az elsőtől függetlenül is futtatható, de szüksége van némi kódra az almappákból. Ügyeljen arra, hogy a teljes tárolót klónozza a környezetében a README fájlban leírtak szerint.

A kóddal való kísérletezés és az interaktív megjelenítési lehetőségek használata nagyban javítja a tanulási élményt. Szóval, kérlek nézd meg.

Töltse be és készítse elő az adatokat

Első lépésként ellenőrizzük, hogy a letöltött számjegyű adatok a képzéshez szükséges elérhető a SageMaker számára. Az Amazon S3 lehetővé teszi számunkra, hogy ezt biztonságosan és méretezhető módon tegyük. Tekintse meg a notebookot a teljes forráskódért, és bátran igazítsa hozzá saját adataihoz.

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'

A digits.csv fájl jellemző adatokat és címkéket tartalmaz. Minden számjegyet pixelértékek képviselnek egy 8×8-as képen, amint azt a következő kép mutatja a 4-es számjegyhez.
Digits Dataset a Scikit-learntől

Készítse elő a képzési szkriptet és a keretrendszer függőségeit

Most, hogy az adatokat az S3 tárolónkban tároljuk, az alapján definiálhatjuk egyéni képzési szkriptünket Scikit elsajátítható Pythonban. A SageMaker lehetőséget ad arra, hogy később egyszerűen hivatkozzunk a Python fájlra a képzéshez. Bármilyen függőséget, például a Scikit-learn vagy a pandas könyvtárakat kétféleképpen lehet biztosítani:

  • Kifejezetten megadhatók a requirements.txt filé
  • Előre telepítve vannak a mögöttes ML tárolóképbe, amelyet vagy a SageMaker biztosít, vagy egyedileg készített

Mindkét opciót általában a függőségek kezelésének szabványos módjának tekintik, ezért lehet, hogy már ismeri. A SageMaker támogatja sokféle ML keretrendszer használatra kész felügyelt környezetben. Ez magában foglalja a legnépszerűbb adattudományi és ML keretrendszereket, mint például a PyTorch, TensorFlow vagy Scikit-learn, mint esetünkben. Nem használunk kiegészítőt requirements.txt fájlt, de nyugodtan adjon hozzá néhány könyvtárat a kipróbáláshoz.

Megvalósításunk kódja egy ún fit(), amely új osztályozót hoz létre a számfelismerési feladathoz és betanítja azt. Ellentétben az első bejegyzésünkkel, ahol a SageMaker beépített XGBoost algoritmust használtuk, most egy RandomForestClassifier az ML könyvtár sklearn. A hívás a fit() metódus az osztályozó objektumon elindítja a betanítási folyamatot a CSV-adataink egy részhalmazának (80%) felhasználásával:

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

Tekintse meg a teljes forgatókönyvet a Jupyter jegyzetfüzetünkben GitHub.

Mielőtt felpörgette a konténer-erőforrásokat a teljes képzési folyamathoz, megpróbálta közvetlenül futtatni a szkriptet? Ez egy jó gyakorlat annak érdekében, hogy gyorsan megbizonyosodjon arról, hogy a kódban nincsenek szintaktikai hibák, és már korán ellenőrizheti az adatstruktúrák méreteit és más hibákat.

Kétféleképpen futtathatja a kódot helyileg. Először is azonnal futtathatja a notebookban, amely lehetővé teszi a Python Debugger használatát is 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)

Alternatív megoldásként futtassa a vonat parancsfájlt a parancssorból ugyanúgy, ahogy azt egy tárolóban szeretné használni. Ez is támogatja a különböző paraméterek beállítását és az alapértelmezett értékek szükség szerinti felülírását, például:

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

Kimenetként láthatja a modell teljesítményének első eredményeit az objektív mérőszámok pontossága, felidézése és F1-pontszáma alapján. Például, pre: 0.970 rec: 0.969 f1: 0.969.

Nem rossz egy ilyen gyors edzésért. De honnan származnak ezek a számok, és mit kezdjünk velük?

Egyéni célmutatók meghatározása

Ne feledje, a célunk az, hogy a feladatunk szempontjából relevánsnak ítélt objektív mérőszámok alapján teljes mértékben betanítsuk és hangoljuk modellünket. Mivel egyéni képzési szkriptet használunk, ezeket a mérőszámokat kifejezetten meg kell határoznunk a SageMaker számára.

Szkriptünk a mérőszámok pontosságát, visszahívását és F1-pontszámát adja ki edzés közben, egyszerűen a print funkció:

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

A szabványos kimenetet a SageMaker rögzíti, és naplófolyamként küldi el a CloudWatch-nak. A metrikaértékek lekéréséhez és későbbi munkához a SageMaker AMT-ben meg kell adnunk néhány információt a kimenet elemzéséről. Ezt reguláris kifejezések definiálásával érhetjük el (további információért lásd: Figyelemmel kísérheti és elemezheti a képzési munkákat az Amazon CloudWatch Metrics segítségével):

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

Nézzük meg együtt az előző kód első metrikadefinícióját. A SageMaker a következővel kezdődő naplóban keresi a kimenetet pre: és ezt követi egy vagy több szóköz, majd egy szám, amelyet ki szeretnénk bontani, ezért használjuk a kerek zárójelet. Minden alkalommal, amikor a SageMaker ilyen értéket talál, CloudWatch metrikává alakítja a névvel. valid-precision.

Tanítsd meg a modellt a Scikit-learn keretrendszerrel

Miután elkészítettük a képzési szkriptünket train.py és utasítsa a SageMaker-t a mérőszámok CloudWatch-en belüli figyelésére, meghatározzuk a SageMaker Becslő tárgy. Elindítja a betanítási feladatot, és az általunk megadott példánytípust használja. De miben különbözhet ez a példánytípus attól, amelyet Ön futtat Amazon SageMaker Studio notebook, és miért? A SageMaker Studio a képzési (és a következtetési) feladatokat a notebooktól eltérő számítási példányokon futtatja. Ezzel folytathatja a munkát a notebookban, miközben a feladatok a háttérben futnak.

A paraméter framework_version a Scikit-learn verzióra utal, amelyet a képzési munkánkhoz használunk. Alternatív megoldásként passzolhatunk is image_uri hoz estimator. Ellenőrizheti, hogy kedvenc keretrendszere vagy ML könyvtára elérhető-e a előre beépített SageMaker Docker kép és használja úgy, ahogy van, vagy kiterjesztésekkel.

Sőt, beállítással futtathatunk SageMaker képzési feladatokat az EC2 Spot példányokon use_spot_instances nak nek True. Ezek szabad kapacitású példányok, amelyek képesek a költségek akár 90%-át is megtakaríthatja. Ezek az esetek rugalmasságot biztosítanak a képzési feladatok végrehajtásának idején.

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

Az Estimator objektum beállítása után a betanítást elindítjuk a fit() funkció, amely megadja az Amazon S3 képzési adatkészletének elérési útját. Ugyanezt a módszert használhatjuk érvényesítési és tesztadatok biztosítására. Beállítottuk a wait paraméter a True így a betanított modellt használhatjuk a következő kódcellákban.

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

Határozza meg a hiperparamétereket és futtassa a hangolási feladatokat

Eddig egy hiperparaméter-értékkészlettel tanítottuk a modellt. De jók voltak ezek az értékek? Vagy kereshetnénk jobbakat? Használjuk a HyperparameterTuner osztály hogy szisztematikus keresést hajtson végre a hiperparaméter téren. Hogyan keressük ezt a teret a tunerrel? A szükséges paraméterek az objektív metrika neve és típusa, amelyek az optimalizálást irányítják. Az optimalizálási stratégia egy másik kulcsfontosságú érv a tuner számára, mert tovább határozza meg a keresési teret. A következő négy különböző stratégia közül választhat:

  • Rács keresés
  • Véletlenszerű keresés
  • Bayesi optimalizálás (alapértelmezett)
  • Hipersáv

Tovább ismertetjük ezeket a stratégiákat, és útmutatást adunk, hogy később ebben a bejegyzésben válasszon egyet.

Mielőtt meghatároznánk és futtatnánk a tuner objektumunkat, tekintsük át a megértésünket az architektúra szempontjából. A SageMaker AMT építészeti áttekintésével foglalkoztunk utolsó bejegyzésünk és a kényelem kedvéért itt reprodukáljon belőle egy részletet.

Amazon SageMaker automatikus modellhangoló architektúra

Kiválaszthatjuk, hogy milyen hiperparamétereket szeretnénk hangolni vagy statikusan hagyni. A dinamikus hiperparaméterekhez biztosítjuk hyperparameter_ranges amelyek a hangolható hiperparaméterek optimalizálására használhatók. Mivel Random Forest osztályozót használunk, a hiperparamétereket használtuk Scikit-learn Random Forest dokumentáció.

Emellett korlátozzuk az erőforrásokat a maximális számú képzési munkával és a párhuzamos képzési munkákkal, amelyeket a tuner használhat. Meglátjuk, hogy ezek a korlátok hogyan segítenek összehasonlítani a különböző stratégiák eredményeit egymással.

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 } 

Hasonló a Becslőhöz fit funkciót, elindítunk egy hangolási feladatot a tuner hívásával fit:

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

Csak ennyit kell tennünk ahhoz, hogy a SageMaker végrehajtsa a képzési feladatokat (n=50) a háttérben, mindegyik más-más hiperparaméter-készletet használ. Az eredményeket később ebben a bejegyzésben vizsgáljuk meg. De előtte kezdjünk el egy újabb hangolási munkát, ezúttal a Bayes-féle optimalizálási stratégiát alkalmazva. A két stratégiát a befejezésük után vizuálisan is összehasonlítjuk.

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)

Vegye figyelembe, hogy mindkét tuner job futhat párhuzamosan, mert a SageMaker egymástól függetlenül hangszereli a szükséges számítási példányokat. Ez nagyon hasznos azoknak a szakembereknek, akik egyidejűleg különböző megközelítésekkel kísérleteznek, mint mi itt.

Válasszon a SageMaker HPO stratégiái közül

Ami a hangolási stratégiákat illeti, a SageMaker AMT-vel néhány lehetőség közül választhat: rácskeresés, véletlenszerű keresés, Bayes-i optimalizálás és Hyperband. Ezek a stratégiák határozzák meg, hogy az automatikus hangolási algoritmusok hogyan tárják fel a hiperparaméterek meghatározott tartományait.

A véletlenszerű keresés meglehetősen egyszerű. Véletlenszerűen választja ki az értékek kombinációit a megadott tartományokból, és futtatható szekvenciálisan vagy párhuzamosan. Ez olyan, mintha bekötött szemmel nyilakat dobnál, abban a reményben, hogy eltalálod a célt. Ezzel a stratégiával kezdtük, de javulnak-e az eredmények egy másik stratégiával?

A Bayes-féle optimalizálás más megközelítést alkalmaz, mint a véletlenszerű keresés. Figyelembe veszi a korábbi kijelölések történetét, és olyan értékeket választ ki, amelyek valószínűleg a legjobb eredményt adják. Ha tanulni szeretne a korábbi felfedezésekből, ezt csak úgy érheti el, hogy az előzőek után új tuningot futtat. Van értelme, igaz? Ily módon a Bayes-féle optimalizálás az előző futtatásoktól függ. De látod, hogy a HPO milyen stratégiája tesz lehetővé nagyobb párhuzamosítást?

Hipersáv egy érdekes! Multi-fidelity stratégiát alkalmaz, ami azt jelenti, hogy dinamikusan allokálja az erőforrásokat a legígéretesebb képzési munkákhoz, és leállítja azokat, amelyek alulteljesítenek. Ezért a Hyperband számításilag hatékony az erőforrásokkal, tanulva a korábbi képzési munkákból. Az alulteljesítő konfigurációk leállítása után egy új konfiguráció indul el, amelynek értékeit véletlenszerűen választják ki.

Igényeitől és modellje jellegétől függően választhat a véletlenszerű keresés, a Bayes-i optimalizálás vagy a hipersáv között, mint hangolási stratégia. Mindegyiknek megvan a maga megközelítése és előnyei, ezért fontos megfontolni, hogy melyik a legmegfelelőbb az ML felfedezéséhez. A jó hír az ML gyakorlói számára, hogy kiválaszthatja a legjobb HPO-stratégiát, ha vizuálisan összehasonlítja az egyes kísérletek hatását az objektív mérőszámra. A következő részben azt látjuk, hogyan lehet vizuálisan azonosítani a különböző stratégiák hatását.

Vizualizálja, elemezze és hasonlítsa össze a hangolási eredményeket

Amikor a hangolási munkáink befejeződnek, izgalmas lesz. Milyen eredményeket adnak? Milyen növekedésre számíthat a mutatónkon az alapmodellhez képest? Melyek a legjobban teljesítő hiperparaméterek a mi használati esetünkben?

A HPO eredményeinek gyors és egyszerű módja a SageMaker konzol meglátogatása. Alatt Hiperparaméter hangolási munkák, láthatjuk (hangolási munkánként) a tesztelt hiperparaméter-értékek kombinációját, és az objektív mérőszámunk alapján a legjobb teljesítményt nyújtották (valid-f1).

A hiperparaméter-hangolási feladatok mérőszámai

Ez minden, amire szüksége van? ML gyakorlóként előfordulhat, hogy Önt nem csak ezek az értékek érdeklik, hanem minden bizonnyal szeretne többet megtudni modellje belső működéséről, hogy feltárja a benne rejlő lehetőségeket, és empirikus visszajelzésekkel erősítse meg intuícióját.

Egy jó vizualizációs eszköz nagyban segíthet megérteni a HPO által az idő múlásával elért javulást, és empirikus visszajelzést kaphat az ML modell tervezési döntéseiről. Megmutatja az egyes hiperparaméterek hatását a célmutatóra, és útmutatást ad a hangolási eredmények további optimalizálásához.

Az általunk használt amtviz egyéni vizualizációs csomag a hangolási munkák megjelenítéséhez és elemzéséhez. Használata egyszerű, és hasznos funkciókat kínál. Ennek előnyeit néhány egyedi diagram értelmezésével mutatjuk be, végül pedig a véletlenszerű keresést a Bayes-optimalizálással összehasonlítjuk.

Először hozzunk létre egy vizualizációt a véletlenszerű kereséshez. Ezt telefonon megtehetjük visualize_tuning_job() ból ből amtviz és az első tuner objektumunk átadása argumentumként:

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

Látni fog néhány diagramot, de nézzük meg lépésről lépésre. A kimenet első szórásdiagramja a következőképpen néz ki, és máris olyan vizuális támpontokat ad, amelyeket egyetlen táblázatban sem ismernénk fel.

Hiperparaméter-optimalizálási munka eredményei

Minden pont egy egyéni képzési feladat teljesítményét jelzi (célunk valid-f1 az y tengelyen) a kezdési ideje (x tengely) alapján, amelyet egy meghatározott hiperparaméterkészlet állít elő. Ezért a modellünk teljesítményét a hangolási munka időtartama alatti előrehaladtával vizsgáljuk.

A szaggatott vonal kiemeli az eddig talált legjobb eredményt, és az idő múlásával javulást jelez. A legjobb két edzésmunka 1 körüli F0.91-es pontszámot ért el.

A halmozott fejlődést mutató szaggatott vonalon kívül lát trendet a diagramon?

Valószínűleg nem. És ez várható is, mert a véletlenszerű HPO-stratégia eredményeit nézzük. Minden egyes képzési feladatot különböző, de véletlenszerűen kiválasztott hiperparaméter-készlettel futtattunk. Ha folytatnánk a hangolási munkánkat (vagy futtatnánk egy másikat ugyanazzal a beállítással), idővel valószínűleg jobb eredményeket látnánk, de nem lehetünk biztosak benne. A véletlenszerűség trükkös dolog.

A következő diagramok segítenek felmérni a hiperparaméterek hatását az általános teljesítményre. Minden hiperparaméter látható, de a rövidség kedvéért ezek közül kettőre összpontosítunk: n-estimators és a max-depth.

Hiperparaméteres munkák részletei

A két legjobb képzési munkánk használt n-estimators 20 és 80 körüli, és max-depth 10, illetve 18 körüli. A pontos hiperparaméterértékek az eszköztippen keresztül jelennek meg minden egyes ponthoz (oktatási feladathoz). Még dinamikusan kiemelve is vannak az összes diagramon, és többdimenziós nézetet biztosítanak! Láttad azt? Minden hiperparaméter külön diagramként jelenik meg az objektív metrikával szemben.

Nos, milyen meglátásokra jutunk n-estimators?

A bal oldali diagram alapján úgy tűnik, hogy a nagyon alacsony értéktartományok (10 alatti) gyakrabban adnak rossz eredményeket a magasabb értékekhez képest. Ezért a magasabb értékek elősegíthetik a modell jobb teljesítményét – ez érdekes.

Ezzel szemben a korreláció a max-depth célmutatónkhoz viszonyított hiperparaméter meglehetősen alacsony. Nem tudjuk egyértelműen megmondani, hogy általános szempontból mely értéktartományok teljesítenek jobban.

Összefoglalva, a véletlenszerű keresés segítségével viszonylag rövid idő alatt is megtalálhatja a jól teljesítő hiperparaméterkészletet. Ezenkívül nem elfogult a jó megoldás felé, hanem kiegyensúlyozott képet ad a keresési térről. Az erőforrások felhasználása azonban nem biztos, hogy túl hatékony. Továbbra is olyan hiperparaméterekkel futtat oktatási feladatokat, amelyekről ismert, hogy gyenge eredményeket hoznak.

Vizsgáljuk meg második hangolási munkánk eredményét Bayes-optimalizálással. Tudjuk használni amtviz hogy az eredményeket ugyanúgy vizualizáljuk, mint eddig a véletlenszerű kereső tuner esetében. Vagy ami még jobb, a funkció képességét felhasználva összehasonlíthatjuk a két hangolási feladatot egyetlen diagramkészletben. Nagyon praktikus!

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

Hiperparaméter optimalizálási munka Bayes VS Random

Most több pont van, mert az összes képzési feladat eredményét megjelenítjük mind a véletlenszerű keresésnél (narancssárga pontok), mind a Bayes-i optimalizálásnál (kék pontok). A jobb oldalon egy sűrűségdiagram látható, amely az összes F1-pontszám eloszlását mutatja be. A képzési munkák többsége az F1-es skála felső részének (0.6 feletti) eredményt ért el – ez jó!

Mi itt a legfontosabb dolog? A szórásdiagram egyértelműen mutatja a Bayes-féle optimalizálás előnyeit. Idővel jobb eredményeket hoz, mert tanulhat a korábbi futtatásokból. Ezért értünk el szignifikánsan jobb eredményeket a Bayes-i módszerrel, mint a véletlenszerű (0.967 vs. 0.919) azonos számú képzési munkával.

Még többet is megtehetsz vele amtviz. Fúrjunk bele.

Ha utasítást ad a SageMaker AMT-nek, hogy nagyobb számú feladatot futtasson a hangoláshoz, akkor sok próba egyszerre látva zűrzavarossá válhat. Ez az egyik oka annak, hogy interaktívvá tesszük ezeket a diagramokat. Kattintson és húzza az összes hiperparaméter szóródiagramját, hogy bizonyos értéktartományokra nagyítson, és finomítsa az eredmények vizuális értelmezését. Az összes többi diagram automatikusan frissül. Ez elég hasznos, nem? Tekintse meg példaként a következő diagramokat, és próbálja ki saját maga a füzetében!

Hiperparaméter-optimalizálás munkamegjelenítési funkciók

Hangolás-maximalistaként azt is eldöntheti, hogy egy másik hiperparaméter-hangolási feladat futtatása tovább javíthatja a modell teljesítményét. Ezúttal azonban a hiperparaméterértékek egy specifikusabb tartománya fedezhető fel, mert már tudja (nagyjából), hogy hol várható jobb eredmény. Dönthet például úgy, hogy a 100 és 200 közötti értékekre összpontosít n-estimators, ahogy a diagramon látható. Ez lehetővé teszi az AMT számára, hogy a legígéretesebb képzési munkákra összpontosítson, és növeli a hangolási hatékonyságot.

Összefoglalva, amtviz A vizualizációs lehetőségek gazdag készletét kínálja, amelyek lehetővé teszik, hogy jobban megértse a modell hiperparamétereinek hatását a teljesítményre, és intelligensebb döntéseket hozzon hangolási tevékenységei során.

Folytassa a hiperparaméter-tér feltárását és a melegindítási HPO-feladatokat

Láttuk, hogy az AMT segít hatékonyan felfedezni a hiperparaméteres keresési teret. De mi van akkor, ha többszöri hangolásra van szükségünk az eredményeink iteratív javításához? Ahogy az elején említettük, szeretnénk létrehozni egy optimalizálási visszacsatolási ciklust – a modellel való „beszélgetésünket”. Minden alkalommal a nulláról kell kezdenünk?

Nézzük meg a futás fogalmát a melegindítás hiperparaméter hangolási feladat. Nem a nulláról indít új hangolási munkákat, hanem újra felhasználja a korábbi HPO futtatások során tanultakat. Ez segít hatékonyabbá tenni a hangolási időnket és a számítási erőforrásokat. Tovább iterálhatjuk korábbi eredményeinket. A melegindítások használatához létrehozunk a WarmStartConfig és adja meg warm_start_type as IDENTICAL_DATA_AND_ALGORITHM. Ez azt jelenti, hogy módosítjuk a hiperparaméterek értékeit, de nem változtatjuk meg az adatokat vagy az algoritmust. Azt mondjuk az AMT-nek, hogy a korábbi tudást vigye át az új tuning munkánkba.

Hivatkozva korábbi Bayes-optimalizálási és véletlenszerű keresési hangolási munkáinkra, mint parents, mindkettőt használhatjuk melegindításhoz:

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

A melegindítás előnyeinek megismeréséhez tekintse meg a következő táblázatokat. Ezeket generálja amtviz hasonló módon, mint korábban, de ezúttal egy melegindításon alapuló tuningmunkával egészítettünk ki.

Hiperparaméter optimalizálási feladat Warmstart

A bal oldali diagramon azt láthatjuk, hogy az új hangolási munkák többnyire a teljesítménymetria grafikonjának jobb felső sarkában találhatók (lásd a narancssárgával jelölt pontokat). A meleg rajt valóban újra felhasználta a korábbi eredményeket, ezért ezek az adatpontok az F1-es pontszámok legjobb eredményei között szerepelnek. Ezt a javulást a jobb oldali sűrűségtáblázat is tükrözi.

Más szavakkal, az AMT a korábbi kísérletekből származó ismeretei alapján automatikusan kiválasztja a hiperparaméterértékek ígéretes készleteit. Ez a következő táblázatban látható. Például az algoritmus egy alacsony értéket tesztel n-estimators ritkábban, mert köztudottan ezek rossz F1-es eredményeket produkálnak. Nem pazarolunk erre erőforrásokat, köszönhetően a melegindításoknak.

Hiperparaméter optimalizálás Vizualizált Jobs

Tisztítsuk meg

A nemkívánatos költségek elkerülése érdekében, amikor befejezte a HPO-val való kísérletezést, el kell távolítania az összes fájlt az S3 tárolóból az előtaggal. amt-visualize-demo és ugyancsak állítsa le a SageMaker Studio erőforrásait.

Futtassa a következő kódot a jegyzetfüzetében az összes S3-fájl eltávolításához ebből a bejegyzésből:

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

Ha meg szeretné tartani az adatkészleteket vagy a modellműtermékeket, módosíthatja a kód előtagját amt-visualize-demo/data hogy csak az adatokat törölje ill amt-visualize-demo/output hogy csak a modell melléktermékeit törölje.

Következtetés

Megtanultuk, hogy az ML-megoldások felépítésének művészete hogyan foglalja magában a hiperparaméterek feltárását és optimalizálását. A gombok és karok beállítása megerőltető, de kifizetődő folyamat, amely gyorsabb edzési időhöz, jobb modellpontossághoz és összességében jobb ML-megoldásokhoz vezet. A SageMaker AMT funkciója segít több hangolási feladat futtatásában és melegindításában, valamint adatpontokat biztosít a további áttekintéshez, vizuális összehasonlításhoz és elemzéshez.

Ebben a bejegyzésben megvizsgáltuk azokat a HPO-stratégiákat, amelyeket a SageMaker AMT-vel használunk. Véletlenszerű kereséssel kezdtük, egy egyszerű, de hatékony stratégiával, ahol a hiperparaméterek véletlenszerűen kerülnek mintavételre a keresési térből. Ezután összehasonlítottuk az eredményeket a Bayes-optimalizálással, amely valószínűségi modelleket használ az optimális hiperparaméterek kereséséhez. Miután a kezdeti kísérletek során azonosítottuk a megfelelő HPO-stratégiát és a jó hiperparaméter-értéktartományokat, megmutattuk, hogyan lehet melegindításokat használni a jövőbeni HPO-feladatok egyszerűsítésére.

A hiperparaméteres keresési teret a kvantitatív eredmények összehasonlításával fedezheti fel. Javasoltuk az egymás melletti vizuális összehasonlítást, és biztosítottuk a szükséges csomagot az interaktív felfedezéshez. Ossza meg velünk kommentben, hogy mennyire volt hasznos a hiperparaméteres hangolás során!


A szerzőkről

Uemit YoldasÜmit Yoldas az Amazon Web Services vezető megoldástervezője. Vállalati ügyfelekkel dolgozik Németország különböző iparágaiban. Arra törekedett, hogy az AI-koncepciókat valós megoldásokká alakítsa. A munkán kívül szívesen tölti a családdal töltött időt, a jó ételeket és a fitneszt.

Elina LesykElina Lesyk a Solutions Architect Münchenben található. A pénzügyi szolgáltatási ágazat vállalati ügyfeleire összpontosít. Szabadidejében találkozhat Elina generatív mesterséges intelligenciával alkalmazásokat építő informatikai találkozókon, új ötleteket ad a klímaváltozás gyors orvoslására, vagy fut az erdőben, hogy felkészüljön egy félmaratonra, tipikusan a tervezett ütemtervtől való eltéréssel.

Mariano kampMariano Kamp az Amazon Web Services fő megoldási építésze. Németországban bankokkal és biztosítótársaságokkal dolgozik gépi tanulással. Szabadidejében Mariano szívesen túrázik feleségével.

Időbélyeg:

Még több AWS gépi tanulás