Hyperparameter Tuning
Настройка гиперпараметров позволяет найти параметры обучения, обеспечивающие наилучшее качество на проверочной выборке. Сравниваются поиск по сетке, случайный и байесовский поиск, а также эволюционные методы.
Настройка гиперпараметров — это поиск параметров обучения, при которых модель машинного обучения показывает наилучшие результаты на отложенных данных. Гиперпараметры задаются до начала обучения, в отличие от весов модели, которые модель учит на данных. Каждую конфигурацию нужно оценить: обучить модель и проверить её на валидационных данных. Поэтому настройка — один из самых ресурсоёмких этапов создания модели, и выбор хорошей стратегии поиска не менее важен, чем выбор значений для поиска.
Распространённые гиперпараметры#
В глубоком обучении для компьютерного зрения параметры, которые чаще всего нужно настраивать, делятся на несколько групп:
- Оптимизация: Скорость обучения и её расписание, импульс, затухание весов и выбор оптимизатора, например SGD или оптимизатора Adam. Скорость обучения обычно влияет сильнее всего, поэтому её ищут по логарифмической шкале.
- Длительность обучения и размер пакета: число эпох, длительность разогрева и размер пакета.
- Аугментация данных: вероятность и интенсивность каждого преобразования, например отражения, масштабирования, изменения цветов и мозаичной аугментации.
- Веса функции потерь: коэффициенты, уравновешивающие слагаемые составной функции потерь, например потери для рамок и классификации в детекторе.
Методы поиска#
Специалисты исследуют пространство возможных конфигураций с помощью нескольких стратегий:
- Поиск по сетке: обучает модель на всех сочетаниях заданного списка значений. Метод прост и перебирает все варианты, но стоимость растёт с каждым добавленным гиперпараметром.
- Случайный поиск: случайным образом выбирает конфигурации из допустимых диапазонов. Бергстра и Бенжио показали, что этот метод находит модели не хуже, а иногда и лучше, чем поиск по сетке, затрачивая лишь малую часть вычислительных ресурсов: для каждой задачи важны лишь несколько гиперпараметров, а случайная выборка перебирает больше различных значений каждого из них.
- Байесовская оптимизация: строит суррогатную модель зависимости оценки от гиперпараметров и выбирает следующий эксперимент там, где улучшение наиболее вероятно. Библиотеки, например Optuna, используют этот подход по умолчанию.
- Методы ранней остановки: Hyperband и последовательное сокращение числа вариантов запускают множество конфигураций с небольшим бюджетом и выделяют дополнительные эпохи только самым перспективным.
- Эволюционные алгоритмы: рассматривают каждую конфигурацию как геном и улучшают популяцию конфигураций с помощью отбора и мутаций.
Эволюционный поиск#
Эволюционный поиск подходит для обучения с множеством взаимодействующих гиперпараметров: ему не нужна модель пространства поиска — достаточно оценивать приспособленность каждого эксперимента. На каждом шаге выбирается одна из лучших найденных конфигураций, часть её значений мутирует, на полученной конфигурации запускается обучение, а новая конфигурация добавляется в набор, если показывает хорошие результаты.
Тюнер Ultralytics выполняет этот цикл для обучения YOLO: на каждой итерации выбирается родительская конфигурация из девяти вариантов с наивысшей приспособленностью, мутирует примерно половина из максимум 26 гиперпараметров, связанных со скоростью обучения, коэффициентами функции потерь и аугментацией, а приспособленность при детекции оценивается по mAP50-95. Гиперпараметры для этапа COCO официальных контрольных точек YOLO26 нашли с помощью этого эволюционного поиска.
from ultralytics import YOLO
# Загрузи предварительно обученную модель YOLO26n
model = YOLO("yolo26n.pt")
# Пространство поиска: границы (min, max) для каждого настраиваемого гиперпараметра
search_space = {"lr0": (1e-5, 1e-2), "degrees": (0.0, 45.0)}
# На каждой из 30 итераций обучение длится 10 эпох с новыми мутировавшими значениями
model.tune(data="coco8.yaml", epochs=10, iterations=30, space=search_space, plots=False, save=False, val=False)Запуск сохраняет best_hyperparameters.yaml, график приспособленности по итерациям и веса лучшей итерации в каталоге tune. model.tune() обучает модель с AdamW, если оптимизатор не указан, поскольку оптимизатор по умолчанию optimizer="auto" перезаписал бы настроенный lr0.
Настройка гиперпараметров и смежные понятия#
- Обучение модели: обучение подбирает веса для одного фиксированного набора гиперпараметров с помощью обратного распространения ошибки. Настройка — это внешний цикл, который многократно запускает обучение и сравнивает результаты.
- Дообучение: несмотря на похожее название, дообучение продолжает обучение весов предварительно обученной модели на новых данных. Для него тоже нужно настраивать гиперпараметры, например уменьшенную скорость обучения и число замороженных слоёв.
- Поиск нейросетевой архитектуры (NAS): выполняет поиск по структуре сети, например по типам и ширине слоёв, а не по параметрам обучения.
- Автоматизированное машинное обучение (AutoML): автоматизирует весь процесс, включая выбор модели и предобработку данных; настройка гиперпараметров — один из его компонентов.
- Переобучение на валидационном наборе: сотни экспериментов по настройке, оцениваемых на одном и том же разбиении валидационных данных, могут случайно подобрать параметры под это разбиение. Поэтому итоговые результаты нужно оценивать на отдельном тестовом наборе, который не использовался при настройке.










