Оптимізація гіперпараметрів Optuna і Ray Tune — досвід HPO

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

Оптимізація гіперпараметрів: де саме втрачається якість моделі

Якість моделі втрачається не на етапі вибору архітектури, а в процедурі підбору параметрів моделі.

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

Перше джерело помилки — нестабільні метрики. На невеликій валідаційній вибірці розкид між сусідніми конфігураціями порівнянний з ефектом самого параметра: різниця в частках відсотка — це шум, а не покращення.

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

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

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

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

Ми розбираємо підбір як інженерну процедуру: зафіксовані розбиття, окремий контрольний набір, журнал усіх прогонів з параметрами й метриками, байєсівський пошук на кшталт Optuna і Ray Tune замість ручного перебору. Нижче — як це виглядає на практиці.

Що дає системна оптимізація гіперпараметрів під час навчання

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

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

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

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

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

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

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

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

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

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

Режими пошуку: сітка, випадковий перебір, байєсівський підбір

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

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

Як обирати режим під задачу

Варіант Коли підходить Обмеження
Сітковий перебір 2–3 параметри, діапазони відомі, потрібна відтворювана карта залежності Число запусків зростає як добуток значень за осями; на 6+ параметрах бюджет закінчується раніше, ніж сітка
Випадковий пошук Широкий простір, частина параметрів впливає слабко Не накопичує знання: вдалі області знаходяться випадково, хвіст бюджету йде на заздалегідь слабкі точки
Байєсівська оптимізація Дороге навчання, 5–15 параметрів, метрика неперервна Потрібен розумний старт і коректні діапазони; на рваних і дискретних метриках виграш падає
Випадковий розігрів, потім байєс Немає апріорних знань про рельєф метрики Складніше в супроводі: треба стежити за якістю сурогатної моделі

Рання зупинка працює поверх будь-якого режиму і не замінює його. Проміжні метрики знімаються на частині епох, і спроба, що відстає від найкращої, знімається — ресурси йдуть перспективним конфігураціям.

Планувальники на кшталт Optuna і Ray Tune дають усі три режими і відсікання в одному контурі, тому зміна режиму — питання конфігурації, а не переписування навчання.

Етапи впровадження циклу підбору параметрів моделі

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

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

  1. Аудит контуру навчання. Розбираємо підготовку даних, фіксацію розбиттів на вибірки, розрахунок цільової метрики і тривалість одного прогону. На виході — карта вузьких місць і оцінка, скільки випробувань реально проходить паралельно.

  2. План експериментів. Узгоджуємо базову лінію, діапазони і крок за кожним параметром, бюджет прогонів і правило зупинки. Окремо відзначаємо побічні метрики, щоб модель не обиралася за одним числом.

  3. Налаштування пошуку. Піднімаємо планувальник (наприклад, Optuna), вмикаємо ранню зупинку заздалегідь слабких прогонів і журнал випробувань. Кожен прогін зберігає конфігурацію, розбиття і артефакт моделі — результат відтворюється одним запуском.

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

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

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

Артефакти на виході: конфігурації, звіти, регламенти

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

  • Конфігурації навчання — окремий файл з простором пошуку, межами значень і фіксованим зерном генератора; повторний запуск дає зіставний результат, а не «як вийшло».
  • Журнал експериментів — таблиця за кожним запуском: параметри, метрика на валідації, тривалість, статус. Видно, які комбінації перевірялися і чому обрано фінальну.
  • Звіт за метриками — порівняння базової та налаштованої моделі з розбивкою за сегментами: де покращення є, де його немає і за рахунок чого отримано приріст.
  • Регламент запуску — порядок кроків: підготовка даних, пошук, фіксація найкращої конфігурації, перевірка на відкладеній вибірці. Цикл повторює новий інженер без автора.
  • Документація рішення — архітектура, вхідні та вихідні дані, залежності й обмеження; відповідає на питання, що робити, якщо якість просіла.
  • Перелік приймання — за якими ознаками налаштування вважається завершеним: цільова метрика досягнута, розкид між запусками в нормі, відкат до попередньої конфігурації можливий.

Кожен пункт перевіряємо разом із вашою командою: запускаємо пошук на вашій стороні, звіряємо журнал і метрики. Якщо щось не відтворюється — це наша зона відповідальності, а не «питання до середовища».

Кейс: як скоротили перебір конфігурацій у рази

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

На одну задачу йшло 40–60 запусків, підбір розтягувався на тиждень, а розкид підсумкової якості між запусками на одних і тих самих даних сягав восьми відсотків — результат залежав від того, хто і в якому порядку перебирав параметри.

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

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

Після впровадження на підбір іде 12–18 запусків замість 40–60: цикл сам відсікає слабкі гілки і не витрачає на них навчання.

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

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

Чим байєсівський підбір відрізняється від випадкового перебору

Випадковий перебір бере значення із заданих розподілів незалежно одне від одного — кожна наступна точка не пов'язана з тим, що показали минулі запуски.

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

Байєсівський підбір працює з історією. За всіма минулими запусками будується сурогатна модель — щільнісна оцінка цільової функції, як в Optuna, або гаусівський процес — і вона передбачає, де метрика ймовірніше покращиться.

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

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

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

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

Обмеження методу: шумні метрики, дорогі запуски, перенавчання

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

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

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

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

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

Конфігурації не відрізняються одна від одної в межах розкиду — як обирати?

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

Як зрозуміти, що відбір підлаштувався під валідацію?

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

Обговоримо задачу: підберемо режим пошуку під вашу модель

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

За ними вже підбираємо режим пошуку — від простого перебору сітки до байєсівського пошуку з раннім відсіканням слабких запусків.

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

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

Напрямки AI-розробки

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1542
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1394
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1369
  • Розробка логотипу компанії B2B Advance
    Розробка логотипу компанії B2B Advance
    816
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1142