Optymalizuj hiperparametry za pomocą automatycznego dostrajania modeli Amazon SageMaker PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

Zoptymalizuj hiperparametry za pomocą automatycznego dostrajania modelu Amazon SageMaker

Modele uczenia maszynowego (ML) podbijają świat. Ich działanie polega na wykorzystaniu właściwych danych treningowych oraz doborze odpowiedniego modelu i algorytmu. Ale to nie koniec tutaj. Zazwyczaj algorytmy odraczają niektóre decyzje projektowe praktykowi ML w celu przyjęcia ich konkretnych danych i zadań. Te odroczone decyzje projektowe objawiają się jako hiperparametry.

Co oznacza ta nazwa? Wynik szkolenia ML, model, można w dużej mierze postrzegać jako zbiór parametrów, których uczy się podczas szkolenia. Dlatego parametry, które są używane do konfigurowania procesu uczenia ML, są nazywane hiperparametrami — parametrami opisującymi tworzenie parametrów. W każdym razie są one bardzo praktyczne, takie jak liczba epok do nauczenia, szybkość uczenia się, maksymalna głębokość drzewa decyzyjnego i tak dalej. Przywiązujemy do nich dużą wagę, ponieważ mają one ogromny wpływ na ostateczne osiągi Twojego modelu.

Podobnie jak obracanie pokrętła odbiornika radiowego w celu znalezienia odpowiedniej częstotliwości, każdy hiperparametr powinien być starannie dostrojony, aby zoptymalizować wydajność. Przeszukiwanie przestrzeni hiperparametrów w poszukiwaniu optymalnych wartości to tzw strojenie hiperparametrów or optymalizacja hiperparametrów (HPO) i powinien skutkować modelem, który daje dokładne prognozy.

W tym poście konfigurujemy i uruchamiamy nasze pierwsze zadanie HPO przy użyciu Automatyczne strojenie modeli Amazon SageMaker (AMT). Dowiadujemy się o dostępnych metodach eksploracji wyników i tworzymy wnikliwe wizualizacje naszych prób HPO i eksploracji przestrzeni hiperparametrowej!

Automatyczne strojenie modeli Amazon SageMaker

Jako praktyk ML używający SageMaker AMT, możesz skupić się na następujących kwestiach:

  • Zapewnienie pracy szkoleniowej
  • Zdefiniowanie właściwej miary obiektywnej pasującej do Twojego zadania
  • Określanie zakresu przestrzeni wyszukiwania hiperparametrów

SageMaker AMT zajmie się resztą i nie musisz myśleć o infrastrukturze, organizowaniu zadań szkoleniowych i ulepszaniu wyboru hiperparametrów.

Zacznijmy od użycia SageMaker AMT w naszym pierwszym prostym zadaniu HPO, aby wyszkolić i dostroić algorytm XGBoost. Chcemy, aby Twoja podróż AMT była praktyczna i praktyczna, dlatego poniżej udostępniliśmy przykład Repozytorium GitHub. Ten post obejmuje 1_tuning_of_builtin_xgboost.ipynb notatnik.

W nadchodzącym poście rozszerzymy pojęcie znajdowania najlepszych hiperparametrów i uwzględnimy naukę o przestrzeni wyszukiwania oraz zakresach hiperparametrów, na które model jest wrażliwy. Pokażemy również, jak zamienić jednorazową czynność dostrajania w wieloetapową rozmowę z praktykiem ML, aby uczyć się razem. Bądź na bieżąco (zamierzona gra słów)!

Wymagania wstępne

Ten post jest przeznaczony dla wszystkich zainteresowanych poznaniem HPO i nie wymaga wcześniejszej wiedzy na ten temat. Pomocna jest jednak podstawowa znajomość koncepcji ML i programowania w języku Python. Aby uzyskać najlepsze wrażenia z nauki, zdecydowanie zalecamy śledzenie uruchamianie każdego kroku w notatniku równolegle z czytaniem tego posta. Na końcu notatnika możesz także wypróbować interaktywną wizualizację, która ożywia wyniki dostrajania.

Omówienie rozwiązania

Zamierzamy zbudować kompleksową konfigurację, aby uruchomić nasze pierwsze zadanie HPO przy użyciu SageMaker AMT. Kiedy nasza praca dostrajająca jest zakończona, przyglądamy się niektórym dostępnym metodom eksploracji wyników, zarówno za pośrednictwem Konsola zarządzania AWS oraz programowo za pośrednictwem zestawów SDK i interfejsów API platformy AWS.

Najpierw zapoznajemy się ze środowiskiem i Treningiem SageMaker, przeprowadzając samodzielną pracę szkoleniową, na razie bez żadnego strojenia. Używamy algorytmu XGBoost, jednego z wielu algorytmów dostarczonych jako Wbudowany algorytm SageMaker (nie wymaga skryptu szkoleniowego!).

Widzimy, jak SageMaker Training działa w następujący sposób:

  • Uruchamia i zatrzymuje instancję
  • Zapewnia niezbędny kontener
  • Kopiuje dane szkoleniowe i sprawdzania poprawności do wystąpienia
  • Prowadzi szkolenie
  • Gromadzi metryki i dzienniki
  • Zbiera i przechowuje przeszkolony model

Następnie przechodzimy do AMT i uruchamiamy zadanie HPO:

  • Założyliśmy i uruchomiliśmy naszą pracę tuningową z AMT
  • Zagłębiamy się w dostępne metody, aby wyodrębnić szczegółowe wskaźniki wydajności i metadane dla każdego zadania szkoleniowego, co pozwala nam dowiedzieć się więcej o optymalnych wartościach w naszej przestrzeni hiperparametrów
  • Pokażemy Ci, jak przeglądać wyniki prób
  • Zapewniamy narzędzia do wizualizacji danych w serii wykresów, które ujawniają cenne informacje na temat naszej przestrzeni hiperparametrowej

Trenuj wbudowany algorytm XGBoost SageMaker

Wszystko zaczyna się od szkolenia modelu. Robiąc to, możemy zrozumieć, jak działa Trening SageMaker.

Chcemy skorzystać z szybkości i łatwości użytkowania oferowanej przez SageMaker wbudowane algorytmy. Wszystko, czego potrzebujemy, to kilka kroków, aby rozpocząć szkolenie:

  1. Przygotuj i załaduj dane – Pobieramy i przygotowujemy nasz zestaw danych jako dane wejściowe dla XGBoost i przesyłamy go do naszego Usługa Amazon Simple Storage Łyżka (Amazon S3).
  2. Wybierz identyfikator URI obrazu naszego wbudowanego algorytmu – SageMaker używa tego URI do pobrania naszego kontenera szkoleniowego, który w naszym przypadku zawiera gotowy skrypt szkoleniowy XGBoost. Obsługiwanych jest kilka wersji algorytmu.
  3. Zdefiniuj hiperparametry – SageMaker zapewnia interfejs do definiowania hiperparametry dla naszego wbudowanego algorytmu. Są to te same hiperparametry, które są używane w wersji open source.
  4. Skonstruuj estymator – Definiujemy parametry szkolenia takie jak typ instancji i ilość instancji.
  5. Wywołaj funkcję fit(). – Rozpoczynamy pracę szkoleniową.

Na poniższym diagramie pokazano, jak te kroki działają razem.

Podaj dane

Aby przeprowadzić szkolenie ML, musimy podać dane. Dostarczamy nasze dane szkoleniowe i walidacyjne do SageMaker za pośrednictwem Amazon S3.

W naszym przykładzie dla uproszczenia używamy domyślnego zasobnika SageMaker do przechowywania naszych danych. Możesz jednak dostosować następujące wartości do swoich preferencji:

sm_sess = sagemaker.session.Session([..])

BUCKET = sm_sess.default_bucket()
PREFIX = 'amt-visualize-demo'
output_path = f's3://{BUCKET}/{PREFIX}/output'

W notatniku używamy publicznego zestawu danych i przechowujemy dane lokalnie w pliku data informator. Następnie przesyłamy nasze dane szkoleniowe i walidacyjne do Amazon S3. Później definiujemy również wskaźniki do tych lokalizacji, aby przekazać je do szkolenia SageMaker.

# acquire and prepare the data (not shown here)
# store the data locally
[..]
train_data.to_csv('data/train.csv', index=False, header=False)
valid_data.to_csv('data/valid.csv', index=False, header=False)
[..]
# upload the local files to S3
boto_sess.resource('s3').Bucket(BUCKET).Object(os.path.join(PREFIX, 'data/train/train.csv')).upload_file('data/train.csv')
boto_sess.resource('s3').Bucket(BUCKET).Object(os.path.join(PREFIX, 'data/valid/valid.csv')).upload_file('data/valid.csv')

W tym poście skupimy się na wprowadzeniu HPO. Dla ilustracji używamy określonego zestawu danych i zadania, dzięki czemu możemy uzyskać pomiary obiektywnych metryk, które następnie wykorzystujemy do optymalizacji doboru hiperparametrów. Jednak dla całego stanowiska ani dane, ani zadanie nie mają znaczenia. Aby przedstawić Państwu pełny obraz, krótko opiszmy, czym się zajmujemy: trenujemy model XGBoost, który ma klasyfikować odręcznie pisane cyfry z
Optyczne rozpoznawanie zestawu danych odręcznych cyfr [1] przez Scikit-learn. XGBoost to doskonały algorytm dla danych strukturalnych, który można nawet zastosować do zbioru danych Digits. Wartości to obrazy 8×8, jak w poniższym przykładzie pokazującym a
0 a
5 oraz
4.

Optymalizuj hiperparametry za pomocą automatycznego dostrajania modeli Amazon SageMaker PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

Wybierz identyfikator URI obrazu XGBoost

Po wybraniu naszego wbudowanego algorytmu (XGBoost) musimy pobrać identyfikator URI obrazu i przekazać go do SageMaker, aby załadować go do naszej instancji szkoleniowej. W tym kroku przeglądamy dostępne wersje. Tutaj zdecydowaliśmy się na wersję 1.5.1, która oferuje najnowszą wersję algorytmu. W zależności od zadania, praktycy ML mogą napisać własny skrypt szkoleniowy, który zawiera np. etapy przygotowania danych. Ale w naszym przypadku nie jest to konieczne.

Jeśli chcesz napisać własny scenariusz treningowy, bądź na bieżąco, mamy Cię w naszym następnym poście! Pokażemy Ci, jak uruchomić zadania szkoleniowe SageMaker za pomocą własnych niestandardowych skryptów szkoleniowych.

Na razie potrzebujemy poprawnego URI obrazu, określając algorytm, region AWS i numer wersji:

xgboost_container = sagemaker.image_uris.retrieve('xgboost', region, '1.5-1')

Otóż ​​to. Teraz mamy odniesienie do algorytmu XGBoost.

Zdefiniuj hiperparametry

Teraz definiujemy nasze hiperparametry. Te wartości konfigurują sposób uczenia naszego modelu i ostatecznie wpływają na to, jak model działa w stosunku do obiektywnej metryki, względem której dokonujemy pomiaru, takiej jak dokładność w naszym przypadku. Zauważ, że nic w poniższym bloku kodu nie jest specyficzne dla SageMaker. Właściwie używamy tzw wersja open source XGBoost, właśnie dostarczony i zoptymalizowany dla SageMaker.

Chociaż każdy z tych hiperparametrów można konfigurować i regulować, obiektywna metryka multi:softmax zależy od naszego zestawu danych i rodzaju problemu, który rozwiązujemy. W naszym przypadku zestaw danych Digits zawiera wiele etykiet (może to być obserwacja odręcznej cyfry 0 or 1,2,3,4,5,6,7,8,9), co oznacza, że ​​jest to problem klasyfikacji wieloklasowej.

hyperparameters = {
    'num_class': 10,
    'max_depth': 5,
    'eta':0.2,
    'alpha': 0.2,
    'objective':'multi:softmax',
    'eval_metric':'accuracy',
    'num_round':200,
    'early_stopping_rounds': 5
}

Aby uzyskać więcej informacji na temat innych hiperparametrów, zobacz XGBoost Hiperparametry.

Skonstruuj estymator

Trening konfigurujemy na obiekcie estymatora, który jest interfejsem wysokiego poziomu dla SageMaker Training.

Następnie określamy liczbę instancji do trenowania, typ instancji (oparta na procesorze lub GPU) oraz rozmiar dołączonej pamięci masowej:

estimator = sagemaker.estimator.Estimator(
    image_uri=xgboost_container, 
    hyperparameters=hyperparameters,
    role=role,
    instance_count=1, 
    instance_type='ml.m5.large', 
    volume_size=5, # 5 GB 
    output_path=output_path
)

Mamy teraz konfigurację infrastruktury, której potrzebujemy, aby rozpocząć. Trening SageMaker zajmie się resztą.

Wywołaj funkcję fit().

Pamiętasz dane, które przesłaliśmy wcześniej do Amazon S3? Teraz tworzymy odniesienia do niego:

s3_input_train = TrainingInput(s3_data=f's3://{BUCKET}/{PREFIX}/data/train', content_type='csv')
s3_input_valid = TrainingInput(s3_data=f's3://{BUCKET}/{PREFIX}/data/valid', content_type='csv')

Wezwanie do fit() uruchamia nasze szkolenie. Przekazujemy odniesienia do danych treningowych, które właśnie stworzyliśmy, aby wskazać SageMaker Training na nasze dane szkoleniowe i sprawdzające:

estimator.fit({'train': s3_input_train, 'validation': s3_input_valid})

Zauważ, że aby później uruchomić HPO, tak naprawdę nie musimy dzwonić fit() tutaj. Potrzebujemy tylko obiektu estymatora później dla HPO i możemy po prostu przejść do tworzenia naszego zadania HPO. Ale ponieważ chcemy dowiedzieć się więcej o szkoleniu SageMaker i zobaczyć, jak przeprowadzić pojedyncze zadanie szkoleniowe, nazywamy je tutaj i przeglądamy wyniki.

Po rozpoczęciu szkolenia zaczynamy widzieć dane wyjściowe poniżej komórek, jak pokazano na poniższym zrzucie ekranu. Wyjście jest dostępne w Amazon Cloud Watch jak i w tym zeszycie.

Czarny tekst to wyjście dziennika z samego SageMaker, pokazujące kroki związane z orkiestracją szkolenia, takie jak uruchamianie instancji i ładowanie obrazu szkoleniowego. Niebieski tekst jest wyprowadzany bezpośrednio z samej instancji szkoleniowej. Możemy obserwować proces ładowania i parsowania danych treningowych oraz wizualnie zobaczyć postęp treningu i poprawę metryki celu bezpośrednio ze skryptu szkoleniowego działającego na instancji.

Wyjście z funkcji fit() w Jupyter Notebook

Należy również zauważyć, że na końcu zadania wyjściowego wyświetlany jest czas trwania szkolenia w sekundach i rozliczane sekundy.

Na koniec widzimy, że SageMaker ładuje nasz model treningowy do ścieżki wyjściowej S3 zdefiniowanej w obiekcie estymatora. Model jest gotowy do wdrożenia w celu wnioskowania.

W przyszłym poście utworzymy własny kontener treningowy i zdefiniujemy nasze metryki treningowe do wyemitowania. Zobaczysz, jak SageMaker jest niezależny od tego, jaki pojemnik przekazujesz mu do treningu. Jest to bardzo przydatne, gdy chcesz szybko zacząć korzystać z wbudowanego algorytmu, ale później zdecydujesz się przekazać własny, niestandardowy skrypt szkoleniowy!

Sprawdź aktualne i poprzednie stanowiska szkoleniowe

Do tej pory pracowaliśmy z naszego notatnika z naszym kodem i przesyłaliśmy zadania szkoleniowe do SageMaker. Zmieńmy perspektywę i zostawmy na chwilę notatnik, aby sprawdzić, jak to wygląda na konsoli SageMaker.

Widok konsoli zadań szkoleniowych SageMaker

SageMaker przechowuje historyczny zapis uruchomionych zadań szkoleniowych, ich konfiguracji, takich jak hiperparametry, algorytmy, wprowadzane dane, rozliczany czas i wyniki. Na liście na poprzednim zrzucie ekranu widać najnowsze zadania szkoleniowe odfiltrowane dla XGBoost. Podświetlona praca szkoleniowa to praca, którą właśnie przeszkoliliśmy w notatniku, której dane wyjściowe widziałeś wcześniej. Przyjrzyjmy się temu indywidualnemu zadaniu szkoleniowemu, aby uzyskać więcej informacji.

Poniższy zrzut ekranu przedstawia widok konsoli naszego zadania szkoleniowego.

Widok konsoli pojedynczego zadania szkoleniowego SageMaker

Możemy przejrzeć informacje, które otrzymaliśmy jako dane wyjściowe komórki do naszego fit() funkcji w indywidualnym zadaniu szkoleniowym w konsoli SageMaker, wraz z parametrami i metadanymi, które zdefiniowaliśmy w naszym estymatorze.

Przywołaj dane wyjściowe dziennika z instancji szkoleniowej, którą widzieliśmy wcześniej. Tutaj również możemy uzyskać dostęp do dzienników naszej pracy szkoleniowej, przewijając do monitor sekcja i wybór Zobacz rejestry.

Konsola Widok zakładki monitorowania w zadaniu szkoleniowym

To pokazuje nam dzienniki instancji w CloudWatch.

Widok konsoli dzienników instancji treningowych w CloudWatch

Pamiętaj również o hiperparametrach, które określiliśmy w naszym notatniku dla zadania szkoleniowego. Widzimy je tutaj również w tym samym interfejsie użytkownika zadania szkoleniowego.

Widok konsoli hiperparametrów zadania SageMaker Training

W rzeczywistości szczegóły i metadane, które określiliśmy wcześniej dla naszego zadania szkoleniowego i estymatora, można znaleźć na tej stronie w konsoli SageMaker. Mamy przydatny zapis ustawień użytych do szkolenia, takich jak użyty kontener szkoleniowy oraz lokalizacje zestawów danych szkoleniowych i sprawdzania poprawności.

W tym momencie możesz zapytać, dlaczego dokładnie jest to istotne dla optymalizacji hiperparametrów? To dlatego, że możesz wyszukiwać, sprawdzać i zagłębiać się w te badania HPO, które nas interesują. Może te z najlepszymi wynikami lub te, które wykazują interesujące zachowanie. Zostawimy ci to, co zdefiniujesz jako „interesujące”. Daje nam wspólny interfejs do sprawdzania naszych zadań szkoleniowych i możesz go używać z SageMaker Search.

Chociaż SageMaker AMT koordynuje zadania HPO, wszystkie wersje próbne HPO są uruchamiane jako indywidualne zadania szkoleniowe SageMaker i jako takie można uzyskać do nich dostęp.

Mając za sobą trening, przejdźmy do strojenia!

Trenuj i dostrajaj wbudowany algorytm XGBoost SageMaker

Aby dostroić nasz model XGBoost, ponownie wykorzystamy nasze istniejące hiperparametry i zdefiniujemy zakresy wartości, które chcemy dla nich zbadać. Pomyśl o tym jako o poszerzeniu granic eksploracji w naszej przestrzeni wyszukiwania hiperparametrów. Nasze zadanie dostrajania będzie pobierać próbki z przestrzeni wyszukiwania i uruchamiać zadania szkoleniowe dla nowych kombinacji wartości. Poniższy kod pokazuje, jak określić zakresy hiperparametrów, z których SageMaker AMT powinien pobierać próbki:

from sagemaker.tuner import IntegerParameter, ContinuousParameter, HyperparameterTuner

hpt_ranges = {
    'alpha': ContinuousParameter(0.01, .5),
    'eta': ContinuousParameter(0.1, .5),
    'min_child_weight': ContinuousParameter(0., 2.),
    'max_depth': IntegerParameter(1, 10)
}

Zakresy dla poszczególnych hiperparametrów są określone przez ich typ, np Parametr ciągły. Aby uzyskać więcej informacji i wskazówek dotyczących wyboru tych zakresów parametrów, patrz Dostosuj model XGBoost.

Nie przeprowadziliśmy jeszcze żadnych eksperymentów, więc nie znamy zakresów dobrych wartości dla naszych hiperparametrów. Dlatego zaczynamy od wykształconego przypuszczenia, wykorzystując naszą wiedzę o algorytmach i naszą dokumentację hiperparametrów dla wbudowanych algorytmów. To definiuje punkt wyjścia do zdefiniowania przestrzeni wyszukiwania.

Następnie uruchamiamy próbkowanie zadania strojenia z hiperparametrów w zdefiniowanych zakresach. W rezultacie możemy zobaczyć, które zakresy hiperparametrów dają dobre wyniki. Dzięki tej wiedzy możemy udoskonalić granice przestrzeni wyszukiwania, zawężając lub poszerzając zakresy hiperparametrów, które mają być używane. Pokazujemy, jak uczyć się z prób w następnej i ostatniej części, w której badamy i wizualizujemy wyniki.

W następnym poście będziemy kontynuować naszą podróż i zanurkować głębiej. Ponadto dowiemy się, że istnieje kilka strategii, których możemy użyć do eksploracji naszej przestrzeni wyszukiwania. Uruchomimy kolejne zadania HPO, aby znaleźć jeszcze bardziej wydajne wartości dla naszych hiperparametrów, porównując te różne strategie. Zobaczymy również, jak przeprowadzić ciepły start z SageMaker AMT, aby wykorzystać wiedzę zdobytą z wcześniej eksplorowanych przestrzeni wyszukiwania w naszej eksploracji poza tymi początkowymi granicami.

W tym poście skupimy się na tym, jak analizować i wizualizować wyniki pojedynczego zadania HPO przy użyciu strategii wyszukiwania bayesowskiego, która prawdopodobnie będzie dobrym punktem wyjścia.

Jeśli podążasz dalej w połączonym notatniku, zauważ, że przekazujemy ten sam estymator, którego użyliśmy w naszym pojedynczym, wbudowanym zadaniu szkoleniowym XGBoost. Ten obiekt estymatora działa jako szablon dla nowych zadań szkoleniowych tworzonych przez AMT. AMT zmieni wtedy hiperparametry w zdefiniowanych przez nas zakresach.

Określając, że chcemy zmaksymalizować nasz obiektywny miernik, validation:accuracy, mówimy SageMaker AMT, aby wyszukał te metryki w dziennikach instancji treningowych i wybrał wartości hiperparametrów, które jego zdaniem zmaksymalizują metrykę dokładności naszych danych walidacyjnych. Wybraliśmy odpowiedni obiektywna miara dla XGBoost z naszej dokumentacji.

Dodatkowo możemy skorzystać z równoległości z max_parallel_jobs. Może to być potężne narzędzie, zwłaszcza w przypadku strategii, których próby są wybierane niezależnie, bez uwzględniania (uczenia się) wyników poprzednich prób. W następnym poście omówimy te inne strategie i parametry. W tym poście używamy strategii bayesowskiej, która jest doskonałą strategią domyślną.

Określamy również max_jobs aby określić, ile prób ma zostać uruchomionych łącznie. Możesz odejść od naszego przykładu i użyć mniejszej liczby, aby zaoszczędzić pieniądze.

n_jobs = 50
n_parallel_jobs = 3

tuner_parameters = {
    'estimator': estimator, # The same estimator object we defined above
    'base_tuning_job_name': 'bayesian',
    'objective_metric_name': 'validation:accuracy',
    'objective_type': 'Maximize',
    'hyperparameter_ranges': hpt_ranges,
    'strategy': 'Bayesian',
    'max_jobs': n_jobs,
    'max_parallel_jobs': n_parallel_jobs
}

Po raz kolejny dzwonimy fit(), w taki sam sposób, jak wtedy, gdy wcześniej we wpisie uruchomiliśmy pojedyncze zlecenie szkoleniowe. Ale tym razem na obiekcie tunera, a nie na obiekcie estymatora. To rozpoczyna pracę dostrajania, a AMT z kolei rozpoczyna pracę szkoleniową.

tuner = HyperparameterTuner(**tuner_parameters)
tuner.fit({'train': s3_input_train, 'validation': s3_input_valid}, wait=False)
tuner_name = tuner.describe()['HyperParameterTuningJobName']
print(f'tuning job submitted: {tuner_name}.')

Poniższy diagram rozszerza naszą poprzednią architekturę, włączając HPO z SageMaker AMT.

Omówienie treningu SageMaker i optymalizacji hiperparametrów za pomocą SageMaker AMT

Widzimy, że nasza praca HPO została przesłana. W zależności od liczby prób, określonych przez n_jobs i poziom równoległości, może to zająć trochę czasu. W naszym przykładzie może to potrwać do 30 minut w przypadku 50 prób z poziomem równoległości wynoszącym tylko 3.

tuning job submitted: bayesian-221102-2053.

Po zakończeniu tego strojenia przyjrzyjmy się informacjom dostępnym w konsoli SageMaker.

Zbadaj zadania AMT na konsoli

Znajdźmy nasze zadanie strojenia na konsoli SageMaker, wybierając Trening w okienku nawigacji, a następnie Zadania dostrajania hiperparametrów. To daje nam listę naszych zadań AMT, jak pokazano na poniższym zrzucie ekranu. Tutaj umieszczamy nasze bayesian-221102-2053 zadanie dostrajania i stwierdzić, że zostało ono zakończone.

Widok konsoli strony zadań dostrajania hiperparametrów. Obraz przedstawia widok listy zadań dostrajania, zawierający nasz 1 wpis dotyczący dostrajania

Przyjrzyjmy się bliżej wynikom tej pracy HPO.

Zbadaliśmy programowe wyodrębnianie wyników w notatnik. Najpierw przez SageMaker SDK dla Pythona, która jest otwartą biblioteką Pythona wyższego poziomu, zapewniającą dedykowany interfejs API dla SageMaker. Potem przez Boto3, która zapewnia nam interfejsy API niższego poziomu do SageMaker i innych usług AWS.

Korzystając z SageMaker Python SDK, możemy uzyskać wyniki naszej pracy HPO:

sagemaker.HyperparameterTuningJobAnalytics(tuner_name).dataframe()[:10]

To pozwoliło nam przeanalizować wyniki każdej z naszych prób w Pandas DataFrame, jak widać na poniższym zrzucie ekranu.

Tabela Pandas w Jupyter Notebook przedstawiająca wyniki i metadane z tras przeprowadzonych w ramach naszego zadania HPO

Teraz ponownie zmieńmy perspektywę i zobaczmy, jak wyglądają wyniki na konsoli SageMaker. Następnie przyjrzymy się naszym niestandardowym wizualizacjom.

Na tej samej stronie wybierając nasz bayesian-221102-2053 zadanie strojenia dostarcza nam listę prób, które zostały przeprowadzone dla naszego zadania strojenia. Każda próba HPO tutaj jest zadaniem szkoleniowym SageMaker. Przypomnijmy sobie wcześniej, kiedy trenowaliśmy nasz pojedynczy model XGBoost i badaliśmy zadanie szkoleniowe w konsoli SageMaker. Tutaj możemy zrobić to samo dla naszych prób.

Kiedy badamy nasze próby, widzimy to bayesian-221102-2053-048-b59ec7b4 stworzył najlepiej działający model z dokładnością walidacji na poziomie około 89.815%. Zbadajmy, jakie hiperparametry doprowadziły do ​​takiej wydajności, wybierając Najlepsza praca szkoleniowa patka.

Widok konsoli pojedynczego zadania dostrajania, pokazujący listę uruchomionych zadań szkoleniowych

Możemy zobaczyć szczegółowy widok najlepszych ocenionych hiperparametrów.

Widok konsoli pojedynczego zadania dostrajania, pokazujący szczegóły najlepszego zadania szkoleniowego

Możemy od razu zobaczyć, jakie wartości hiperparametrów doprowadziły do ​​​​tej doskonałej wydajności. Chcemy jednak wiedzieć więcej. Możesz zgadnąć co? Widzimy to alpha przyjmuje przybliżoną wartość 0.052456 i podobnie eta jest ustawiony na 0.433495. To mówi nam, że te wartości działały dobrze, ale niewiele nam mówi o samej przestrzeni hiperparametrów. Na przykład możemy się zastanawiać, czy 0.433495 dla eta była najwyższą testowaną wartością lub czy jest miejsce na rozwój i ulepszenie modelu poprzez wybranie wyższych wartości.

W tym celu musimy pomniejszyć i spojrzeć znacznie szerzej, aby zobaczyć, jak działały inne wartości naszych hiperparametrów. Jednym ze sposobów jednoczesnego spojrzenia na wiele danych jest wykreślenie na wykresie wartości hiperparametrów z naszych prób HPO. W ten sposób widzimy, jak te wartości zachowywały się względnie. W następnej sekcji pobieramy te dane z SageMaker i wizualizujemy je.

Wizualizuj nasze próby

SageMaker SDK dostarcza nam danych do naszej eksploracji, a notatniki dają wgląd w to. Ale istnieje wiele sposobów wykorzystania i wizualizacji. W tym poście udostępniamy próbkę przy użyciu Altair biblioteka wizualizacji statystycznych, której używamy do tworzenia bardziej wizualnego przeglądu naszych prób. Te znajdują się w amtviz pakiet, który dostarczamy w ramach próbki:

from amtviz import visualize_tuning_job
visualize_tuning_job(tuner, trials_only=True)

Moc tych wizualizacji staje się natychmiast widoczna, gdy wykreślamy dokładność walidacji naszych prób (oś y) w czasie (oś x). Poniższy wykres po lewej stronie przedstawia dokładność sprawdzania poprawności w czasie. Wyraźnie widać poprawę wydajności modelu w miarę przeprowadzania większej liczby prób w miarę upływu czasu. Jest to bezpośredni i oczekiwany wynik prowadzenia HPO ze strategią bayesowską. W naszym następnym poście zobaczymy, jak to wypada w porównaniu z innymi strategiami i zauważymy, że nie musi tak być w przypadku wszystkich strategii.

Dwa wykresy przedstawiające szlaki HPO. Wykres po lewej pokazuje dokładność walidacji w czasie. Prawy wykres przedstawia wykres gęstości dla wartości dokładności walidacji

Po przejrzeniu ogólnego postępu w czasie, spójrzmy teraz na naszą przestrzeń hiperparametrów.

Poniższe wykresy pokazują dokładność walidacji na osi y, przy czym każdy wykres jest pokazany max_depth, alpha, eta, min_child_weight odpowiednio na osi x. Na każdym wykresie nanieśliśmy całe nasze zadanie HPO. Każdy punkt jest pojedynczą próbą, a każdy wykres zawiera wszystkie 50 prób, ale oddzielnie dla każdego hiperparametru. Oznacza to, że nasza najlepsza próba, nr 48, jest reprezentowana przez dokładnie jedną niebieską kropkę na każdym z tych wykresów (które zaznaczyliśmy dla Ciebie na poniższym rysunku). Możemy wizualnie porównać jego działanie w kontekście wszystkich pozostałych 49 prób. Przyjrzyjmy się więc uważnie.

Fascynujący! Od razu widzimy, które regiony zdefiniowanych przez nas zakresów w naszej przestrzeni hiperparametrów są najbardziej wydajne! Myśląc o naszym eta value, teraz jest jasne, że wartości próbkowania bliższe 0 dawały gorsze wyniki, podczas gdy zbliżanie się do naszej granicy, 0.5, daje lepsze wyniki. Wydaje się, że jest odwrotnie alpha, max_depth wydaje się mieć bardziej ograniczony zestaw preferowanych wartości. Patrzeć na max_depth, możesz również zobaczyć, jak użycie strategii bayesowskiej nakazuje SageMaker AMT częstsze próbkowanie wartości, które sprawdziły się w przeszłości.

Cztery wykresy przedstawiające dokładność walidacji na osi y, przy czym każdy wykres przedstawia odpowiednio max_głębokość, alfa, eta, min_child_weight na osi x. Każdy punkt danych reprezentuje pojedynczą próbę HPO

Patrząc na nasze eta wartości, możemy się zastanawiać, czy warto eksplorować bardziej w prawo, może poza 0.45? Czy nadal spada do niższej dokładności, czy potrzebujemy tutaj więcej danych? To zastanawianie się jest częścią celu prowadzenia naszej pierwszej pracy HPO. Daje nam wgląd w to, które obszary przestrzeni hiperparametrowej powinniśmy dalej eksplorować.

Jeśli chcesz dowiedzieć się więcej i jesteś tak podekscytowany jak my tym wprowadzeniem do tematu, czekaj na nasz następny post, w którym porozmawiamy więcej o różnych strategiach HPO, porównamy je ze sobą i przećwicz szkolenie z naszym własnym skryptem Pythona.

Sprzątać

Aby uniknąć ponoszenia niepożądanych kosztów po zakończeniu eksperymentowania z HPO, musisz usunąć wszystkie pliki z zasobnika S3 z prefiksem amt-visualize-demo i również zamknij zasoby Studio.

Uruchom następujący kod w swoim notatniku, aby usunąć wszystkie pliki S3 z tego posta.

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

Jeśli chcesz zachować zestawy danych lub artefakty modelu, możesz zmodyfikować prefiks w kodzie na amt-visualize-demo/data tylko usunąć dane lub amt-visualize-demo/output aby usunąć tylko artefakty modelu.

Wnioski

W tym poście wytrenowaliśmy i dostroiliśmy model przy użyciu wbudowanej wersji algorytmu XGBoost SageMaker. Używając HPO z SageMaker AMT, dowiedzieliśmy się o hiperparametrach, które działają dobrze dla tego konkretnego algorytmu i zbioru danych.

Widzieliśmy kilka sposobów przeglądu wyników naszej pracy związanej z dostrajaniem hiperparametrów. Rozpoczynając od wyodrębnienia hiperparametrów z najlepszej próby, nauczyliśmy się również, jak uzyskać głębsze zrozumienie tego, jak nasze próby rozwijały się w czasie i jakie wartości hiperparametrów mają wpływ.

Korzystając z konsoli SageMaker, zobaczyliśmy również, jak zagłębić się w poszczególne przebiegi treningowe i przeglądać ich dzienniki.

Następnie dokonaliśmy pomniejszenia, aby zobaczyć wszystkie nasze próby razem i przeanalizować ich wydajność w stosunku do innych prób i hiperparametrów.

Dowiedzieliśmy się, że na podstawie obserwacji z każdej próby byliśmy w stanie poruszać się po przestrzeni hiperparametrów, aby zobaczyć, że niewielkie zmiany wartości naszych hiperparametrów mogą mieć ogromny wpływ na wydajność naszego modelu. Dzięki SageMaker AMT możemy przeprowadzić optymalizację hiperparametrów, aby efektywnie znaleźć dobre wartości hiperparametrów i zmaksymalizować wydajność modelu.

W przyszłości przyjrzymy się różnym strategiom HPO oferowanym przez SageMaker AMT i sposobom korzystania z naszego własnego, niestandardowego kodu szkoleniowego. Daj nam znać w komentarzach, jeśli masz pytanie lub chcesz zasugerować obszar, który powinniśmy omówić w nadchodzących postach.

Do tego czasu życzymy Tobie i Twoim modelom szczęśliwej nauki i strojenia!

Referencje

Cytaty:

[1] Dua, D. i Graff, C. (2019). Repozytorium uczenia maszynowego UCI [http://archive.ics.uci.edu/ml]. Irvine, Kalifornia: University of California, School of Information and Computer Science.


O autorach

Optymalizuj hiperparametry za pomocą automatycznego dostrajania modeli Amazon SageMaker PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.Andrzej Ellul jest architektem rozwiązań w Amazon Web Services. Współpracuje z małymi i średnimi przedsiębiorstwami w Niemczech. Poza pracą Andrew lubi odkrywać przyrodę pieszo lub na rowerze.

Optymalizuj hiperparametry za pomocą automatycznego dostrajania modeli Amazon SageMaker PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.Elinę Lesyk jest architektem rozwiązań z siedzibą w Monachium. Skupia się na klientach korporacyjnych z branży usług finansowych. W wolnym czasie Elina lubi uczyć się teorii gry na gitarze po hiszpańsku, aby uczyć się krzyżowo i biegać.

Optymalizuj hiperparametry za pomocą automatycznego dostrajania modeli Amazon SageMaker PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.Mariano Kampa jest głównym architektem rozwiązań w Amazon Web Services. Pracuje z klientami usług finansowych w Niemczech nad uczeniem maszynowym. W wolnym czasie Mariano lubi spacerować z żoną.

Znak czasu:

Więcej z Uczenie maszynowe AWS