Udalosti
31. 3., 23 - 2. 4., 23
Najväčšia vzdelávacia udalosť fabric, Power BI a SQL. 31. marec – 2. apríl. Pomocou kódu FABINSIDER ušetríte 400 USD.
Zaregistrujte saTento prehliadač už nie je podporovaný.
Inovujte na Microsoft Edge a využívajte najnovšie funkcie, aktualizácie zabezpečenia a technickú podporu.
Ladenie hyperparametrov je proces hľadania optimálnych hodnôt pre parametre, ktoré model strojového učenia nenaučí počas trénovania, ale nastaví ho používateľ ešte pred začatím procesu trénovania. Tieto parametre sa bežne označujú ako hyperparametre a medzi príklady patrí miera učenia, počet skrytých vrstiev v neurálnej sieti, sila regulácie a veľkosť dávky.
Výkon modelu strojového učenia môže byť vysoko citlivý na výber hyperparametrov a optimálna množina hyperparametrov sa môže výrazne líšiť v závislosti od konkrétneho problému a množiny údajov. Ladenie hyperparametrov je preto kritickým krokom v kanáli strojového učenia, pretože môže mať významný vplyv na presnosť a výkon modelu a zovšeobecnenie.
V službe Fabric môžu dátoví vedci využívať FLAML
zjednodušenú knižnicu jazyka Python na efektívnu automatizáciu strojového učenia a operácií umelej inteligencie na účely svojich požiadaviek na ladenie hyperparametrov. V poznámkových blokoch služby Fabric môžu používatelia zavolať flaml.tune
na ladenie ekonomických hyperparametrov.
Dôležité
Táto funkcia je vo verzii Preview.
Na dokončenie úlohy základného ladenia možno použiť flaml.tune
tri základné kroky:
Prvým krokom je zadanie vášho cieľa vyladenie. Ak to chcete urobiť, mali by ste najprv zadať svoju postup hodnotenia s ohľadom na hyperparametre vo funkcii evaluation_function
definovanej používateľom. Funkcia vyžaduje ako vstup konfiguráciu hyperparametrov. Môže jednoducho vrátiť hodnotu metriky v skalárnom zozname alebo vrátiť slovník párov názvov metriky a hodnôt metriky.
V príklade uvedenom nižšie môžeme definovať funkciu vyhodnotenia s ohľadom na 2 hyperparametre s názvom x
a y
.
import time
def evaluate_config(config: dict):
"""evaluate a hyperparameter configuration"""
score = (config["x"] - 85000) ** 2 - config["x"] / config["y"]
faked_evaluation_cost = config["x"] / 100000
time.sleep(faked_evaluation_cost)
# we can return a single float as a score on the input config:
# return score
# or, we can return a dictionary that maps metric name to metric value:
return {"score": score, "evaluation_cost": faked_evaluation_cost, "constraint_metric": config["x"] * config["y"]}
V ďalšom kroku určíme vyhľadávací priestor hyperparametrov. Vo vyhľadávacej oblasti je potrebné zadať platné hodnoty pre hyperparametre a spôsob vzorkovania týchto hodnôt (napríklad z rovnomerného rozdelenia alebo log-uniformnej distribúcie). V nižšie uvedenom príklade môžeme poskytnúť priestor na vyhľadávanie hyperparametrov x
a y
. Platné hodnoty pre obe hodnoty sú celé čísla v rozsahu od [1 do 100 000]. Tieto hyperparametre sa odoberajú uniformne v zadaných rozsahoch.
from flaml import tune
# construct a search space for the hyperparameters x and y.
config_search_space = {
"x": tune.lograndint(lower=1, upper=100000),
"y": tune.randint(lower=1, upper=100000)
}
# provide the search space to tune.run
tune.run(..., config=config_search_space, ...)
S protokolom FLAML môžu používatelia prispôsobiť doménu pre konkrétny hyperparameter. Používateľom to umožňuje zadať typ a platný rozsah, z ktorých môžu vzorkovať parametre. Flaml podporuje nasledujúce typy hyperparametrov: float, integer a categorical. Ako príklad nižšie môžete vidieť bežne používané domény:
config = {
# Sample a float uniformly between -5.0 and -1.0
"uniform": tune.uniform(-5, -1),
# Sample a float uniformly between 3.2 and 5.4,
# rounding to increments of 0.2
"quniform": tune.quniform(3.2, 5.4, 0.2),
# Sample a float uniformly between 0.0001 and 0.01, while
# sampling in log space
"loguniform": tune.loguniform(1e-4, 1e-2),
# Sample a float uniformly between 0.0001 and 0.1, while
# sampling in log space and rounding to increments of 0.00005
"qloguniform": tune.qloguniform(1e-4, 1e-1, 5e-5),
# Sample a random float from a normal distribution with
# mean=10 and sd=2
"randn": tune.randn(10, 2),
# Sample a random float from a normal distribution with
# mean=10 and sd=2, rounding to increments of 0.2
"qrandn": tune.qrandn(10, 2, 0.2),
# Sample a integer uniformly between -9 (inclusive) and 15 (exclusive)
"randint": tune.randint(-9, 15),
# Sample a random uniformly between -21 (inclusive) and 12 (inclusive (!))
# rounding to increments of 3 (includes 12)
"qrandint": tune.qrandint(-21, 12, 3),
# Sample a integer uniformly between 1 (inclusive) and 10 (exclusive),
# while sampling in log space
"lograndint": tune.lograndint(1, 10),
# Sample a integer uniformly between 2 (inclusive) and 10 (inclusive (!)),
# while sampling in log space and rounding to increments of 2
"qlograndint": tune.qlograndint(2, 10, 2),
# Sample an option uniformly from the specified choices
"choice": tune.choice(["a", "b", "c"]),
}
Ďalšie informácie o tom, ako môžete prispôsobiť domény v rámci vyhľadávacieho priestoru, nájdete v dokumentácii flaml o prispôsobení priestorov vyhľadávania.
Posledným krokom je určenie obmedzení úlohy ladenia. Jedným z pozoruhodných vlastností flaml.tune
je, že je schopný dokončiť proces ladenia v rámci požadovaného obmedzenia prostriedkov. Ak to chcete urobiť, používateľ môže poskytnúť obmedzenia prostriedkov v súvislosti s časom steny v hodinách (v sekundách) pomocou argumentu time_budget_s
alebo z hľadiska počtu skúšobných verzií s použitím argumentu num_samples
.
# Set a resource constraint of 60 seconds wall-clock time for the tuning.
flaml.tune.run(..., time_budget_s=60, ...)
# Set a resource constraint of 100 trials for the tuning.
flaml.tune.run(..., num_samples=100, ...)
# Use at most 60 seconds and at most 100 trials for the tuning.
flaml.tune.run(..., time_budget_s=60, num_samples=100, ...)
Ďalšie informácie o obmedzeniach konfigurácie s prírastkom nájdete v dokumentácii flaml s rozšírenými možnosťami ladenia.
Po definovaní našich kritérií ladenia môžeme vykonať skúšobnú verziu ladenia. Na sledovanie výsledkov skúšobnej verzie môžeme využiť automatické označovanie toku strojového učenia na zaznamenávanie metrík a parametrov pre každú z týchto spustení. Tento kód zaznamená celú skúšobnú verziu ladenia hyperparametrov a zvýrazní každú z kombinácií hyperparametrov, ktoré preskúmal flaml.
import mlflow
mlflow.set_experiment("flaml_tune_experiment")
mlflow.autolog(exclusive=False)
with mlflow.start_run(nested=True, run_name="Child Run: "):
analysis = tune.run(
evaluate_config, # the function to evaluate a config
config=config_search_space, # the search space defined
metric="score",
mode="min", # the optimization mode, "min" or "max"
num_samples=-1, # the maximal number of configs to try, -1 means infinite
time_budget_s=10, # the time budget in seconds
)
Poznámka
Keď je automatické označovanie toku MLflow povolené, metriky, parametre a modely by sa mali automaticky zaznamenávať ako spustenie toku strojového učenia. To sa však líši podľa rámca. Metriky a parametre pre konkrétne modely sa nemusia zaznamenávať do denníka. Pre modely XGBoost, LightGBM, Spark a SynapseML sa napríklad nebudú zaznamenávať žiadne metriky. Ďalšie informácie o tom, aké metriky a parametre sa zaznamenávajú z jednotlivých rámcov, nájdete v dokumentácii o automatickom značení toku strojového učenia.
Funkcia flaml.tune
podporuje vyladenie Apache Spark aj učeníkov s jedným uzlom. Okrem toho môžete pri ladení študentom s jedným uzlom (napríklad Scikit-Learn) tiež paralelne ladiť tak, aby sa proces ladenia zrýchlil nastavením .use_spark = True
V prípade klastrov Spark spustí protokol FLAML predvolene jednu skúšobnú verziu pre každého vykonávateľa. Počet súbežných skúšobných verzií môžete tiež prispôsobiť pomocou argumentu n_concurrent_trials
.
analysis = tune.run(
evaluate_config, # the function to evaluate a config
config=config_search_space, # the search space defined
metric="score",
mode="min", # the optimization mode, "min" or "max"
num_samples=-1, # the maximal number of configs to try, -1 means infinite
time_budget_s=10, # the time budget in seconds
use_spark=True,
)
print(analysis.best_trial.last_result) # the best trial's result
print(analysis.best_config) # the best config
Ďalšie informácie o tom, ako paralelne využiť svoje chodníky ladenia, nájdete v dokumentácii flaml pre paralelné úlohy služby Spark.
Modul flaml.visualization
poskytuje pomocné funkcie na vykreslenie procesu optimalizácie pomocou nástroja Plotly. Využitím služby Plotly môžu používatelia interaktívne preskúmať svoje výsledky experimentovania automatizovaného strojového učenia. Ak chcete tieto funkcie vykreslenia použiť, jednoducho zadajte svoj optimalizovaný flaml.AutoML
objekt alebo flaml.tune.tune.ExperimentAnalysis
objekt ako vstup.
V poznámkovom bloku môžete použiť nasledujúce funkcie:
plot_optimization_history
: Vykreslte históriu optimalizácie všetkých skúšok v experimente.plot_feature_importance
: Vykreslí sa dôležitosť pre každú funkciu v množine údajov.plot_parallel_coordinate
: Vykreslí v experimente vzťahy vysokorozmerných parametrov.plot_contour
: Vykreslte v experimente vzťah parametra ako znázornenie kontúry.plot_edf
: Vykresliť cieľovú hodnotu EDF (funkcia empirickej distribúcie) experimentu.plot_timeline
: Vykreslí časovú os experimentu.plot_slice
: Vykreslí v štúdii vzťah parametra ako výsek.plot_param_importance
: Vykreslí sa dôležitosť hyperparametrov experimentu.Udalosti
31. 3., 23 - 2. 4., 23
Najväčšia vzdelávacia udalosť fabric, Power BI a SQL. 31. marec – 2. apríl. Pomocou kódu FABINSIDER ušetríte 400 USD.
Zaregistrujte saDokumentácia
Automatizované strojové učenie v službe Fabric - Microsoft Fabric
Prehľad automatizovaného strojového učenia v službe Fabric
Používanie automatizovaného strojového učenia (rozhranie) - Microsoft Fabric
Automatizácia pracovného postupu strojového učenia (Preview) s minimálnym použitím rozhrania automatizovaného strojového učenia v službe Fabric
Modelovanie bodovania s funkciou PREDICT - Microsoft Fabric
Zistite, ako používať modely strojového učenia v službe Fabric pomocou škálovateľnej funkcie s názvom PREDICT.