Досліджуйте передові методи оптимізації гіперпараметрів за допомогою Amazon SageMaker Automatic Model Tuning | Веб-сервіси Amazon

Досліджуйте передові методи оптимізації гіперпараметрів за допомогою Amazon SageMaker Automatic Model Tuning | Веб-сервіси Amazon

Створення високопродуктивних рішень машинного навчання (ML) базується на дослідженні та оптимізації параметрів навчання, також відомих як гіперпараметри. Гіперпараметри — це ручки та важелі, які ми використовуємо для регулювання процесу навчання, наприклад швидкість навчання, розмір партії, сила регулярізації та інші, залежно від конкретної моделі та завдання. Дослідження гіперпараметрів передбачає систематичне змінення значень кожного параметра та спостереження за впливом на продуктивність моделі. Хоча цей процес вимагає додаткових зусиль, переваги значні. Гіперпараметрична оптимізація (HPO) може призвести до швидшого навчання, підвищення точності моделі та кращого узагальнення нових даних.

Продовжуємо мандрівку від поста Оптимізуйте гіперпараметри за допомогою автоматичного налаштування моделі Amazon SageMaker. Раніше ми досліджували оптимізацію окремого завдання, візуалізували результати для вбудованого алгоритму SageMaker і дізналися про вплив окремих значень гіперпараметрів. Окрім використання HPO як одноразової оптимізації наприкінці циклу створення моделі, ми також можемо використовувати його на кількох етапах у розмовній манері. Кожне завдання налаштування допомагає нам наблизитися до хорошої продуктивності, але крім того, ми також дізнаємося, наскільки модель чутлива до певних гіперпараметрів, і можемо використовувати це розуміння для інформування про наступне завдання налаштування. Ми можемо переглянути гіперпараметри та їхні діапазони значень на основі того, що ми дізналися, і тому перетворити цю оптимізаційну роботу на розмову. І так само, як ми, практики ML, накопичуємо знання під час цих прогонів, Автоматичне налаштування моделі Amazon SageMaker (AMT) з теплим запуском можна зберегти ці знання, отримані під час попередніх робіт з налаштування, також для наступної роботи з налаштування.

У цій публікації ми запускаємо кілька завдань HPO із спеціальним алгоритмом навчання та різними стратегіями HPO, такими як байєсовська оптимізація та випадковий пошук. Ми також використовуємо гарячі старти та візуально порівнюємо наші випробування, щоб удосконалити гіперпараметричне дослідження космосу.

Розширені концепції SageMaker AMT

У наступних розділах ми докладніше розглянемо кожну з наступних тем і покажемо, як SageMaker AMT може допомогти вам реалізувати їх у ваших проектах ML:

  • Використовуйте спеціальний навчальний код і популярну структуру ML Scikit-learn у SageMaker Training
  • Визначте спеціальні показники оцінки на основі журналів для оцінки та оптимізації
  • Виконайте HPO, використовуючи відповідну стратегію
  • Використовуйте гарячі запуски, щоб перетворити пошук одного гіперпараметра в діалогове вікно з нашою моделлю
  • Використовуйте передові методи візуалізації за допомогою нашої бібліотеки рішень, щоб порівняти дві стратегії HPO та результати налаштування завдань

Незалежно від того, використовуєте ви вбудовані алгоритми, використані в нашій першій публікації, чи власний навчальний код, SageMaker AMT пропонує безперебійну роботу користувача для оптимізації моделей ML. Він надає ключову функціональність, яка дозволяє зосередитися на поточній проблемі машинного навчання, автоматично відстежуючи випробування та результати. У той же час він автоматично керує основною інфраструктурою за вас.

У цій публікації ми відходимо від вбудованого алгоритму SageMaker і використовуємо спеціальний код. Ми використовуємо випадковий ліс із SkLearn. Але ми дотримуємося тих самих завдань ML і набору даних, що й у нашому перший пост, який виявляє рукописні цифри. Висвітлюємо зміст блокнота Юпітера 2_advanced_tuning_with_custom_training_and_visualizing.ipynb і пропонуємо вам викликати код поруч, щоб читати далі.

Давайте зануримося глибше та дізнаємося, як ми можемо використовувати спеціальний навчальний код, розгортати його та запускати, одночасно досліджуючи простір пошуку гіперпараметрів для оптимізації наших результатів.

Як побудувати модель ML і виконати оптимізацію гіперпараметрів

Як виглядає типовий процес створення рішення ML? Хоча існує багато можливих варіантів використання та велика різноманітність завдань ML, ми пропонуємо наступну розумову модель для поетапного підходу:

  1. Зрозумійте свій поточний сценарій ML і виберіть алгоритм на основі вимог. Наприклад, ви можете вирішити завдання з розпізнавання зображень за допомогою алгоритму навчання під наглядом. У цій публікації ми продовжуємо використовувати сценарій розпізнавання рукописного зображення та той самий набір даних, що й у першій публікації.
  2. Вирішіть, яку реалізацію алгоритму в SageMaker Training ви хочете використовувати. Існують різні варіанти, як всередині SageMaker, так і зовнішні. Крім того, вам потрібно визначити, який базовий показник найкраще підходить для вашого завдання та для якого ви хочете оптимізувати (наприклад, точність, показник F1 або ROC). SageMaker підтримує чотири варіанти залежно від ваших потреб і ресурсів:
    • Використовуйте попередньо навчену модель через Amazon SageMaker JumpStart, який можна використовувати з коробки або просто налаштувати.
    • Використовуйте один із вбудованих алгоритмів для навчання та налаштування, як-от XGBoost, як ми робили в попередній публікації.
    • Навчіть і налаштуйте спеціальну модель на основі одного з основних фреймворків, таких як Scikit-learn, TensorFlow або PyTorch. AWS надає для цієї мети вибір готових образів Docker. У цій публікації ми використовуємо цю опцію, яка дозволяє швидко експериментувати, запускаючи власний код поверх готового зображення контейнера.
    • Принесіть свій власний образ Docker на випадок, якщо ви хочете використовувати фреймворк або програмне забезпечення, яке іншим чином не підтримується. Цей варіант вимагає найбільших зусиль, але також забезпечує найвищий ступінь гнучкості та контролю.
  3. Навчіть модель за допомогою ваших даних. Залежно від реалізації алгоритму з попереднього кроку, це може бути таким же простим, як посилання на ваші навчальні дані та запуск навчального завдання або додаткове надання спеціального коду для навчання. У нашому випадку ми використовуємо спеціальний навчальний код на Python на основі Scikit-learn.
  4. Застосуйте оптимізацію гіперпараметрів (як «розмова» з вашою моделлю ML). Після навчання ви зазвичай хочете оптимізувати продуктивність своєї моделі, знайшовши найбільш перспективну комбінацію значень для гіперпараметрів вашого алгоритму.

Залежно від вашого алгоритму ML і розміру моделі, останній крок оптимізації гіперпараметрів може виявитися більш складним, ніж очікувалося. Наступні запитання є типовими для практиків ML на цьому етапі та можуть здатися вам знайомими:

  • Які гіперпараметри впливають на мою проблему ML?
  • Як я можу ефективно здійснювати пошук у величезному просторі гіперпараметрів, щоб знайти найефективніші значення?
  • Як поєднання певних значень гіперпараметрів впливає на показник ефективності?
  • Витрати мають значення; як я можу використовувати свої ресурси ефективним чином?
  • Які експерименти з налаштуванням варті уваги і як їх порівняти?

Відповісти на ці запитання нелегко, але є хороші новини. SageMaker AMT знімає з вас важку роботу та дозволяє зосередитися на виборі правильної стратегії HPO та діапазону значень, які ви хочете дослідити. Крім того, наше рішення для візуалізації полегшує процес ітераційного аналізу та експериментування, щоб ефективно знаходити ефективні значення гіперпараметрів.

У наступних розділах ми створюємо модель розпізнавання цифр з нуля за допомогою Scikit-learn і показуємо всі ці концепції в дії.

Огляд рішення

SageMaker пропонує кілька дуже зручних функцій для навчання, оцінки та налаштування нашої моделі. Він охоплює всі функції наскрізного життєвого циклу машинного навчання, тому нам навіть не потрібно залишати свій блокнот Jupyter.

У нашому першому дописі ми використовували вбудований алгоритм SageMaker XGBoost. З метою демонстрації цього разу ми перейдемо до класифікатора Random Forest, оскільки тоді ми можемо показати, як надати власний навчальний код. Ми вирішили надати власний сценарій Python і використовувати Scikit-learn як нашу структуру. Тепер, як ми виражаємо, що ми хочемо використовувати певну структуру ML? Як ми побачимо, SageMaker використовує іншу службу AWS у фоновому режимі, щоб отримати попередньо зібраний образ контейнера Docker для навчання.Реєстр контейнерів Amazon Elastic (Amazon ECR).

Ми докладно розглядаємо наступні кроки, включаючи фрагменти коду та діаграми, щоб з’єднати точки. Як згадувалося раніше, якщо у вас є можливість, відкрийте блокнот і крок за кроком запустіть комірки коду, щоб створити артефакти у вашому середовищі AWS. Немає кращого способу активного навчання.

  1. Спочатку завантажте та підготуйте дані. Ми використовуємо Служба простого зберігання Amazon (Amazon S3), щоб завантажити файл, що містить дані наших рукописних цифр.
  2. Далі підготуйте сценарій навчання та залежності фреймворку. Ми надаємо спеціальний навчальний код на Python, посилаємося на деякі залежні бібліотеки та виконуємо тестовий запуск.
  3. Щоб визначити власну цільову метрику, SageMaker дозволяє нам визначити регулярний вираз, щоб отримати потрібні метрики з файлів журналу контейнера.
  4. Навчіть модель за допомогою фреймворку scikit-learn. Посилаючись на попередньо створене зображення контейнера, ми створюємо відповідний об’єкт Estimator і передаємо наш спеціальний сценарій навчання.
  5. AMT дозволяє нам випробувати різні стратегії HPO. У цьому дописі ми зосередимося на двох із них: випадковий пошук і байєсівський пошук.
  6. Виберіть між стратегіями SageMaker HPO.
  7. Візуалізуйте, аналізуйте та порівнюйте результати налаштування. Наш пакет візуалізації дозволяє нам виявити, яка стратегія ефективніша та які значення гіперпараметрів забезпечують найкращу ефективність на основі наших показників.
  8. Продовжуйте дослідження простору гіперпараметрів і робочих місць HPO з теплим запуском.

AMT піклується про масштабування та керування основною обчислювальною інфраструктурою для виконання різноманітних завдань налаштування на Обчислювальна хмара Amazon Elastic (Amazon EC2). Таким чином, вам не потрібно обтяжувати себе підготовкою екземплярів, вирішувати будь-які проблеми з операційною системою та апаратним забезпеченням або самостійно збирати файли журналів. Зображення ML framework отримується з Amazon ECR, а артефакти моделі, включаючи результати налаштування, зберігаються в Amazon S3. Усі журнали та показники зібрані в Amazon CloudWatch для зручного доступу та подальшого аналізу, якщо це необхідно.

Передумови

Оскільки це продовження серії, його рекомендується, але не обов’язково, читати наша перша публікація про SageMaker AMT і HPO. Крім того, корисним є базове знайомство з концепціями ML і програмуванням на Python. Ми також рекомендуємо виконувати кожен крок у супровідний зошит з нашого репозиторію GitHub під час читання цієї публікації. Блокнот можна запускати незалежно від першого, але потребує коду з підпапок. Обов’язково клонуйте повний репозиторій у вашому середовищі, як описано у файлі README.

Експерименти з кодом і використання інтерактивних опцій візуалізації значно покращують ваш досвід навчання. Тож перевірте, будь ласка.

Завантажте та підготуйте дані

Як перший крок, ми переконаємося, що завантажено дані цифр який нам потрібен для навчання, доступний для SageMaker. Amazon S3 дозволяє нам робити це безпечно та з можливістю масштабування. Зверніться до блокнота, щоб отримати повний вихідний код, і не соромтеся адаптувати його за допомогою власних даних.

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 файл містить дані об’єктів і мітки. Кожна цифра представлена ​​значеннями пікселів на зображенні 8×8, як показано на наступному зображенні для цифри 4.
Набір даних цифр від Scikit-learn

Підготуйте сценарій навчання та залежності фреймворку

Тепер, коли дані зберігаються в нашому сегменті S3, ми можемо визначити наш спеціальний сценарій навчання на основі Scikit-Learn в Python. SageMaker дає нам можливість просто посилатися на файл Python пізніше для навчання. Будь-які залежності, такі як бібліотеки Scikit-learn або pandas, можна надати двома способами:

  • Їх можна вказати явно в a requirements.txt файл
  • Вони попередньо встановлені в базовому образі контейнера ML, який надається SageMaker або створюється на замовлення

Обидва варіанти зазвичай вважаються стандартними способами керування залежностями, тож ви, можливо, вже знайомі з ними. SageMaker підтримує різні фреймворки ML у готовому до використання керованому середовищі. Це включає в себе багато найпопулярніших фреймворків обробки даних і машинного навчання, таких як PyTorch, TensorFlow або Scikit-learn, як у нашому випадку. Ми не використовуємо доп requirements.txt файл, але можете додати деякі бібліотеки, щоб спробувати його.

Код нашої реалізації містить метод під назвою fit(), який створює новий класифікатор для завдання розпізнавання цифр і навчає його. На відміну від нашої першої публікації, де ми використовували вбудований алгоритм SageMaker XGBoost, тепер ми використовуємо RandomForestClassifier надається бібліотекою ML sklearn. Виклик в fit() метод на об’єкті класифікатора починає процес навчання, використовуючи підмножину (80%) наших даних CSV:

def fit(train_dir, n_estimators, max_depth, min_samples_leaf, max_features, min_weight_fraction_leaf): digits = pd.read_csv(Path(train_dir)/'digits.csv') Xtrain, Xtest, ytrain, ytest = train_test_split(digits.iloc[:, :-1], digits.iloc[:, -1], test_size=.2) m = RandomForestClassifier(n_estimators=n_estimators, max_depth=max_depth, min_samples_leaf=min_samples_leaf, max_features=max_features, min_weight_fraction_leaf=min_weight_fraction_leaf) m.fit(Xtrain, ytrain) predicted = m.predict(Xtest) pre, rec, f1, _ = precision_recall_fscore_support(ytest, predicted, pos_label=1, average='weighted') print(f'pre: {pre:5.3f} rec: {rec:5.3f} f1: {f1:5.3}') return m

Дивіться повний сценарій у нашому блокноті Jupyter на GitHub.

Чи намагалися ви запустити сценарій безпосередньо перед тим, як розгорнути ресурси контейнера для повного процесу навчання? Це хороша практика, щоб швидко переконатися, що в коді немає синтаксичних помилок, перевірити відповідність розмірів ваших структур даних і деякі інші помилки на ранній стадії.

Є два способи запустити код локально. По-перше, ви можете запустити його відразу в блокноті, що також дозволяє використовувати налагоджувач Python 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)

Крім того, запустіть сценарій поїзда з командного рядка так само, як ви можете використовувати його в контейнері. Це також підтримує налаштування різних параметрів і перезапис значень за замовчуванням за потреби, наприклад:

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

Як вихідні дані ви можете побачити перші результати продуктивності моделі на основі об’єктивних показників точності, запам’ятовування та оцінки F1. Наприклад, pre: 0.970 rec: 0.969 f1: 0.969.

Непогано для такого швидкого навчання. Але звідки взялися ці цифри і що з ними робити?

Визначте власну цільову метрику

Пам’ятайте, наша мета — повністю навчити та налаштувати нашу модель на основі об’єктивних показників, які ми вважаємо відповідними для нашого завдання. Оскільки ми використовуємо спеціальний сценарій навчання, нам потрібно чітко визначити ці показники для SageMaker.

Наш сценарій випромінює показники точності, запам’ятовування та оцінки F1 під час тренування, просто використовуючи print функція:

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

Стандартний вихід фіксується SageMaker і надсилається до CloudWatch як потік журналу. Щоб отримати значення метрик і працювати з ними пізніше в SageMaker AMT, нам потрібно надати деяку інформацію про те, як аналізувати цей вихід. Ми можемо досягти цього, визначивши оператори регулярних виразів (для отримання додаткової інформації зверніться до Відстежуйте й аналізуйте навчальні завдання за допомогою показників Amazon CloudWatch):

metric_definitions = [ {'Name': 'valid-precision', 'Regex': r'pre:s+(-?[0-9.]+)'}, {'Name': 'valid-recall', 'Regex': r'rec:s+(-?[0-9.]+)'}, {'Name': 'valid-f1', 'Regex': r'f1:s+(-?[0-9.]+)'}] 

Давайте разом пройдемося по першому визначенню метрики в попередньому коді. SageMaker шукатиме вихід у журналі, який починається з pre: і слідують один або кілька пробілів, а потім число, яке ми хочемо витягти, тому ми використовуємо круглі дужки. Щоразу, коли SageMaker знаходить таке значення, він перетворює його на метрику CloudWatch із назвою valid-precision.

Навчіть модель за допомогою фреймворку Scikit-learn

Після того, як ми створимо наш навчальний сценарій train.py і інструктувати SageMaker про те, як контролювати показники в CloudWatch, ми визначаємо a Оцінювач SageMaker об'єкт. Він ініціює завдання навчання та використовує тип екземпляра, який ми вказуємо. Але чим цей тип екземпляра може відрізнятися від того, який ви запускаєте Студія Amazon SageMaker зошит на, а чому? SageMaker Studio запускає ваші навчальні (і висновки) завдання на окремих обчислювальних екземплярах, ніж ваш блокнот. Це дозволяє продовжувати працювати в блокноті, поки завдання виконуються у фоновому режимі.

Параметр framework_version відноситься до версії Scikit-learn, яку ми використовуємо для навчання. Як варіант, ми можемо пройти image_uri до estimator. Ви можете перевірити, чи ваш улюблений фреймворк або бібліотека ML доступні як попередньо створений образ Docker SageMaker і використовувати його як є або з розширеннями.

Крім того, ми можемо запускати навчальні завдання SageMaker на спотових екземплярах EC2 за допомогою налаштування use_spot_instances до True. Це екземпляри резервної ємності, які можуть заощадити до 90% витрат. Ці екземпляри забезпечують гнучкість під час виконання навчальних завдань.

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

Після налаштування об’єкта Estimator ми починаємо навчання, викликавши fit() функція, що забезпечує шлях до навчального набору даних на Amazon S3. Ми можемо використовувати цей самий метод для надання даних перевірки та тестування. Ми встановили wait параметр до True щоб ми могли використовувати навчену модель у наступних клітинках коду.

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

Визначте гіперпараметри та запустіть завдання налаштування

Наразі ми навчили модель з одним набором значень гіперпараметрів. Але чи були ці цінності хорошими? Або ми могли б шукати кращих? Давайте використовувати Клас HyperparameterTuner щоб запустити систематичний пошук у просторі гіперпараметрів. Як ми шукаємо цей простір за допомогою тюнера? Необхідними параметрами є назва цільової метрики та тип цілі, які керуватимуть оптимізацією. Стратегія оптимізації є ще одним ключовим аргументом для тюнера, оскільки вона додатково визначає простір пошуку. Нижче наведено чотири різні стратегії на вибір:

  • Пошук у сітці
  • Випадковий пошук
  • Байєсовська оптимізація (за замовчуванням)
  • Гіперсмуга

Далі ми опишемо ці стратегії та дамо вам деякі вказівки, щоб вибрати одну з них далі в цій публікації.

Перш ніж ми визначимо та запустимо наш об’єкт налаштування, давайте підсумуємо наше розуміння з точки зору архітектури. Ми розглянули огляд архітектури SageMaker AMT у наш останній допис і відтворіть його уривок тут для зручності.

Архітектура автоматичного налаштування моделі Amazon SageMaker

Ми можемо вибрати, які гіперпараметри ми хочемо налаштувати або залишити статичними. Для динамічних гіперпараметрів ми надаємо hyperparameter_ranges який можна використовувати для оптимізації гіперпараметрів, які можна налаштувати. Оскільки ми використовуємо класифікатор Random Forest, ми використали гіперпараметри з Документація Scikit-learn Random Forest.

Ми також обмежуємо ресурси максимальною кількістю навчальних завдань і паралельних навчальних завдань, які може використовувати тюнер. Ми побачимо, як ці обмеження допомагають нам порівнювати результати різних стратегій між собою.

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 } 

Подібно до оцінювача fit ми запускаємо роботу з налаштування, яка викликає тюнер fit:

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

Це все, що нам потрібно зробити, щоб дозволити SageMaker виконувати навчальні завдання (n=50) у фоновому режимі, кожен з яких використовує інший набір гіперпараметрів. Ми досліджуємо результати пізніше в цій публікації. Але перед цим давайте почнемо іншу роботу з налаштування, цього разу застосувавши байєсовську стратегію оптимізації. Ми візуально порівняємо обидві стратегії після їх завершення.

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)

Зауважте, що обидва завдання налаштування можуть виконуватися паралельно, оскільки SageMaker організовує необхідні екземпляри обчислень незалежно один від одного. Це дуже корисно для практиків, які експериментують із різними підходами одночасно, як ми тут.

Виберіть між стратегіями SageMaker HPO

Що стосується стратегій налаштування, у вас є кілька варіантів із SageMaker AMT: пошук у сітці, випадковий пошук, байєсовська оптимізація та гіпердіапазон. Ці стратегії визначають, як алгоритми автоматичного налаштування досліджують задані діапазони гіперпараметрів.

Випадковий пошук досить простий. Він випадковим чином вибирає комбінації значень із заданих діапазонів і може запускатися послідовним або паралельним способом. Це все одно, що метати дротики із зав’язаними очима, сподіваючись потрапити в ціль. Ми почали з цієї стратегії, але чи покращаться результати з іншою?

Байєсовська оптимізація використовує інший підхід, ніж випадковий пошук. Він розглядає історію попередніх виборів і вибирає значення, які, ймовірно, дадуть найкращі результати. Якщо ви хочете отримати знання з попередніх досліджень, ви можете досягти цього, лише запустивши нове завдання налаштування після попередніх. Має сенс, правда? Таким чином, байєсовська оптимізація залежить від попередніх прогонів. Але чи бачите ви, яка стратегія HPO дозволяє вищий рівень паралелізації?

Гіперсмуга є цікавим! Він використовує стратегію мультивірності, що означає, що він динамічно розподіляє ресурси на найперспективніші навчальні завдання та зупиняє ті, які є неефективними. Таким чином, Hyperband є обчислювально ефективним із ресурсами, навчаючись на попередніх навчальних роботах. Після зупинки конфігурацій із недостатньою продуктивністю запускається нова конфігурація, значення якої вибираються випадковим чином.

Залежно від ваших потреб і характеру вашої моделі ви можете вибрати між випадковим пошуком, байєсовською оптимізацією або гіперсмугою як стратегію налаштування. Кожен із них має свій власний підхід і переваги, тому важливо розглянути, який з них найкраще підходить для вашого дослідження машинного навчання. Хороша новина для практиків ML полягає в тому, що ви можете вибрати найкращу стратегію HPO, візуально порівнюючи вплив кожного випробування на об’єктивний показник. У наступному розділі ми побачимо, як візуально визначити вплив різних стратегій.

Візуалізуйте, аналізуйте та порівнюйте результати налаштування

Коли наша робота з налаштування завершена, це стає захоплююче. Які результати вони дають? Якого приросту наших показників ви можете очікувати порівняно з вашою базовою моделлю? Які гіперпараметри є найкращими для нашого випадку використання?

Швидкий і простий спосіб переглянути результати HPO – відвідати консоль SageMaker. Під Роботи з налаштування гіперпараметрів, ми можемо бачити (для завдання налаштування) комбінацію значень гіперпараметрів, які були перевірені та забезпечили найкращу продуктивність, як виміряно нашою об’єктивною метрикою (valid-f1).

Метрики для завдань налаштування гіперпараметрів

Це все, що вам потрібно? Як фахівець з машинного навчання, ви можете бути не лише зацікавлені в цих цінностях, але, безумовно, бажаєте дізнатися більше про внутрішню роботу вашої моделі, щоб дослідити її повний потенціал і зміцнити свою інтуїцію за допомогою емпіричного зворотного зв’язку.

Хороший інструмент візуалізації може значно допомогти вам зрозуміти вдосконалення HPO з часом і отримати емпіричні відгуки щодо проектних рішень вашої моделі ML. Він показує вплив кожного окремого гіперпараметра на вашу цільову метрику та надає вказівки для подальшої оптимізації результатів налаштування.

Ми використовуємо amtviz спеціальний пакет візуалізації для візуалізації та аналізу завдань налаштування. Він простий у використанні та надає корисні функції. Ми демонструємо його переваги, інтерпретуючи окремі діаграми та, нарешті, порівнюючи випадковий пошук поруч із байєсовською оптимізацією.

Спочатку давайте створимо візуалізацію для випадкового пошуку. Ми можемо це зробити, зателефонувавши visualize_tuning_job() від amtviz і передаючи наш перший об’єкт налаштування як аргумент:

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

Ви побачите пару діаграм, але давайте розглянемо це крок за кроком. Перша діаграма розсіювання результату виглядає так, як показано нижче, і вже дає нам деякі візуальні підказки, які ми б не розпізнали в жодній таблиці.

Результати роботи з оптимізації гіперпараметрів

Кожна крапка позначає ефективність окремої навчальної роботи (наша мета valid-f1 на осі y) на основі часу його початку (вісь x), створеного певним набором гіперпараметрів. Тому ми дивимося на продуктивність нашої моделі в міру її прогресу протягом тривалості роботи з налаштування.

Пунктирною лінією виділено найкращий результат, знайдений на даний момент, і вказує на покращення з часом. Дві найкращі навчальні роботи отримали оцінку F1 приблизно 0.91.

Окрім пунктирної лінії, що показує сукупний прогрес, чи бачите ви тенденцію на діаграмі?

Напевно ні. І це очікувано, оскільки ми переглядаємо результати випадкової стратегії HPO. Кожне навчальне завдання було запущено з використанням іншого, але випадково вибраного набору гіперпараметрів. Якби ми продовжили нашу роботу з налаштування (або запустили іншу з тими самими налаштуваннями), ми, ймовірно, побачили б кращі результати з часом, але ми не можемо бути впевнені. Випадковість – складна річ.

Наступні діаграми допоможуть вам оцінити вплив гіперпараметрів на загальну продуктивність. Візуалізуються всі гіперпараметри, але для стислості зупинимося на двох з них: n-estimators та max-depth.

Деталі роботи гіперпараметра

Наші дві найкращі тренінгові роботи використовували n-estimators близько 20 і 80 і max-depth приблизно 10 і 18 відповідно. Точні значення гіперпараметрів відображаються у підказці для кожної крапки (навчальне завдання). Вони навіть динамічно підсвічуються на всіх діаграмах і дають вам багатовимірне подання! Ти це бачив? Кожен гіперпараметр наноситься на графік відносно цільової метрики як окрема діаграма.

А тепер, яку інформацію ми отримуємо n-estimators?

На лівій діаграмі здається, що дуже низькі діапазони значень (нижче 10) частіше дають погані результати порівняно з вищими значеннями. Тому вищі значення можуть допомогти вашій моделі працювати краще — цікаво.

Навпаки, співвідношення в max-depth гіперпараметр для нашої об’єктивної метрики досить низький. Ми не можемо чітко визначити, які діапазони значень ефективніші із загальної точки зору.

Таким чином, довільний пошук може допомогти вам знайти ефективний набір гіперпараметрів навіть за відносно короткий проміжок часу. Крім того, він не спрямований на хороше рішення, але дає збалансоване уявлення про простір пошуку. Проте використання ваших ресурсів може бути не дуже ефективним. Він продовжує виконувати навчальні завдання з гіперпараметрами в діапазонах значень, які, як відомо, дають погані результати.

Давайте розглянемо результати нашої другої роботи з налаштування за допомогою байєсівської оптимізації. Ми можемо використовувати amtviz щоб візуалізувати результати так само, як ми це робили досі для тюнера випадкового пошуку. Або, ще краще, ми можемо використати можливість функції для порівняння обох завдань налаштування в одному наборі діаграм. Дуже зручно!

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

Робота оптимізації гіперпараметрів Байєсова VS випадкова

Тепер крапок більше, оскільки ми візуалізуємо результати всіх навчальних завдань як для випадкового пошуку (помаранчеві крапки), так і для байєсівської оптимізації (сині крапки). Праворуч ви можете побачити діаграму щільності, яка візуалізує розподіл усіх показників F1. Більшість навчальних завдань досягли результатів у верхній частині шкали F1 (понад 0.6) — це добре!

Який тут ключовий висновок? Діаграма розсіювання чітко демонструє переваги байєсівської оптимізації. Він забезпечує кращі результати з часом, оскільки може навчатися на попередніх запусках. Ось чому ми досягли значно кращих результатів, використовуючи байєсівський метод порівняно з випадковим (0.967 проти 0.919) з такою ж кількістю навчальних завдань.

Ви можете зробити ще більше amtviz. Давайте вникнемо.

Якщо ви дасте SageMaker AMT вказівку виконати більшу кількість завдань для налаштування, перегляд багатьох випробувань одночасно може стати безладним. Це одна з причин, чому ми зробили ці діаграми інтерактивними. Ви можете клацнути та перетягнути кожну діаграму розсіювання гіперпараметрів, щоб збільшити певні діапазони значень і уточнити візуальну інтерпретацію результатів. Усі інші діаграми оновлюються автоматично. Це дуже корисно, чи не так? Подивіться наступні діаграми як приклад і спробуйте самі в своєму зошиті!

Функції візуалізації завдання оптимізації гіперпараметрів

Як максималіст налаштування, ви також можете вирішити, що виконання іншої роботи з налаштування гіперпараметрів може ще більше покращити продуктивність вашої моделі. Але цього разу можна вивчити більш конкретний діапазон значень гіперпараметрів, оскільки ви вже знаєте (приблизно), де очікувати кращих результатів. Наприклад, ви можете зосередитися на значеннях від 100 до 200 фор n-estimators, як показано на діаграмі. Це дозволяє AMT зосередитися на найперспективніших навчальних роботах і підвищує ефективність налаштування.

Підсумовуючи це, amtviz надає вам багатий набір можливостей візуалізації, які дозволяють краще зрозуміти вплив гіперпараметрів вашої моделі на продуктивність і дозволяють приймати розумніші рішення під час налаштування.

Продовжуйте дослідження простору гіперпараметрів і робочих місць HPO з теплим запуском

Ми побачили, що AMT допомагає нам ефективно досліджувати простір пошуку гіперпараметрів. Але що, якщо нам потрібно кілька раундів налаштування, щоб ітеративно покращити наші результати? Як згадувалося на початку, ми хочемо встановити цикл оптимізації зворотного зв’язку — нашу «розмову» з моделлю. Чи потрібно щоразу починати з нуля?

Давайте розглянемо концепцію запуску a завдання налаштування гіперпараметрів гарячого запуску. Він не запускає нові завдання налаштування з нуля, він повторно використовує те, що було вивчено під час попередніх запусків HPO. Це допомагає нам ефективніше використовувати час налаштування та обчислювальні ресурси. Ми можемо продовжувати повторювати наші попередні результати. Щоб використовувати теплий запуск, ми створюємо a WarmStartConfig і вкажіть warm_start_type as IDENTICAL_DATA_AND_ALGORITHM. Це означає, що ми змінюємо значення гіперпараметрів, але не змінюємо дані чи алгоритм. Ми кажемо AMT перенести попередні знання на нашу нову роботу з налаштування.

Посилаючись на наші попередні роботи з оптимізації Байєса та налаштування випадкового пошуку parents, ми можемо використовувати їх обидва для гарячого старту:

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

Щоб побачити переваги використання теплого запуску, зверніться до наступних таблиць. Вони генеруються amtviz подібним чином, як ми це робили раніше, але цього разу ми додали іншу роботу з налаштування на основі гарячого запуску.

Гарячий запуск завдання оптимізації гіперпараметрів

На лівій діаграмі ми можемо спостерігати, що нові роботи з налаштування здебільшого лежать у верхньому правому куті графіка показників продуктивності (див. крапки, позначені помаранчевим кольором). Теплий старт справді повторно використав попередні результати, тому ці точки даних знаходяться в найкращих результатах для оцінки F1. Це покращення також відображається на діаграмі щільності праворуч.

Іншими словами, AMT автоматично вибирає перспективні набори значень гіперпараметрів на основі своїх знань з попередніх випробувань. Це показано на наступній діаграмі. Наприклад, алгоритм перевірить низьке значення для n-estimators рідше, оскільки відомо, що вони дають погані оцінки F1. Ми не витрачаємо на це ресурси, завдяки теплим стартам.

Гіперпараметрична оптимізація візуалізованих завдань

Прибирати

Щоб уникнути небажаних витрат після того, як ви закінчите експериментувати з HPO, ви повинні видалити всі файли у вашому сегменті S3 із префіксом amt-visualize-demo а також вимкніть ресурси SageMaker Studio.

Запустіть наступний код у своєму блокноті, щоб видалити всі файли S3 із цієї публікації:

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

Якщо ви бажаєте зберегти набори даних або артефакти моделі, ви можете змінити префікс у коді на amt-visualize-demo/data лише видалити дані або amt-visualize-demo/output щоб видалити лише артефакти моделі.

Висновок

Ми дізналися, як мистецтво створення рішень ML передбачає дослідження та оптимізацію гіперпараметрів. Регулювання цих ручок і важелів є складним, але корисним процесом, який призводить до швидшого часу навчання, покращення точності моделі та кращих рішень для машинного навчання. Функціональність SageMaker AMT допомагає нам запускати кілька завдань налаштування та запускати їх у теплий режим, а також надає точки даних для подальшого перегляду, візуального порівняння та аналізу.

У цій публікації ми розглянули стратегії HPO, які ми використовуємо з SageMaker AMT. Ми почали з випадкового пошуку, простої, але ефективної стратегії, де гіперпараметри випадково вибираються з простору пошуку. Далі ми порівняли результати з байєсівською оптимізацією, яка використовує імовірнісні моделі для керування пошуком оптимальних гіперпараметрів. Після того, як ми визначили відповідну стратегію HPO та хороші діапазони значень гіперпараметрів під час початкових випробувань, ми показали, як використовувати теплий запуск для оптимізації майбутніх робіт HPO.

Ви можете досліджувати простір пошуку гіперпараметрів, порівнюючи кількісні результати. Ми запропонували паралельне візуальне порівняння та надали необхідний пакет для інтерактивного дослідження. Розкажіть нам у коментарях, наскільки це було корисно для вас у вашій подорожі налаштування гіперпараметрів!


Про авторів

Уеміт ЙолдасУміт Йолдас є старшим архітектором рішень Amazon Web Services. Він працює з корпоративними клієнтами в різних галузях Німеччини. Він прагне втілити концепції штучного інтелекту в реальні рішення. Поза роботою він насолоджується часом із родиною, смакуючи смачну їжу та займаючись фітнесом.

Еліна ЛесикЕліна Лесик є архітектором рішень у Мюнхені. Вона зосереджена на корпоративних клієнтах із галузі фінансових послуг. У вільний час ви можете знайти Еліну, яка розробляє додатки за допомогою генеративного штучного інтелекту на деяких ІТ-зустрічах, висуває нову ідею щодо швидкого вирішення проблеми зміни клімату або біжить у лісі, щоб підготуватися до напівмарафону з типовим відхиленням від запланованого графіка.

Маріано кампМаріано Камп є головним архітектором рішень Amazon Web Services. Він працює з банками та страховими компаніями Німеччини над машинним навчанням. У вільний час Маріано любить піші прогулянки з дружиною.

Часова мітка:

Більше від AWS Машинне навчання