💡 Эта запись в блоге — первая часть нашей серии статей о настройке гиперпараметров. Если вам нужен практический обзор различных методов настройки, обязательно ознакомьтесь с частью 2 Как настроить гиперпараметры в XGBoost и частью 3 Как распределить настройку гиперпараметров с помощью Ray Tune.

Настройка гиперпараметров является неотъемлемой частью управления поведением модели машинного обучения. Если мы неправильно настроим наши гиперпараметры, наши оценочные параметры модели дадут неоптимальные результаты, поскольку они не минимизируют функцию потерь. Это означает, что наша модель делает больше ошибок. На практике ключевые показатели, такие как точность или матрица путаницы, будут хуже.

В этой статье мы рассмотрим несколько примеров гиперпараметров и углубимся в несколько моделей для настройки гиперпараметров. Затем в следующих двух статьях этой серии мы продемонстрируем как настроить гиперпараметры на XGBoost и как выполнить распределенную настройку гиперпараметров.

Что такое гиперпараметры?

В машинном обучении нам нужно различать параметры и гиперпараметры. Алгоритм обучения изучает или оценивает параметры модели для заданного набора данных, а затем продолжает обновлять эти значения по мере продолжения обучения. После завершения обучения эти параметры становятся частью модели. Например, каждый вес и смещение в нейронной сети является параметром.

С другой стороны, гиперпараметры специфичны для самого алгоритма, поэтому мы не можем вычислить их значения на основе данных. Мы используем гиперпараметры для расчета параметров модели. Различные значения гиперпараметров создают разные значения параметров модели для данного набора данных.

Настройка гиперпараметров заключается в поиске набора оптимальных значений гиперпараметров для алгоритма обучения при одновременном применении этого оптимизированного алгоритма к любому набору данных. Эта комбинация гиперпараметров максимизирует производительность модели, сводя к минимуму предопределенную функцию потерь для получения лучших результатов с меньшим количеством ошибок. Обратите внимание, что алгоритм обучения оптимизирует потери на основе входных данных и пытается найти оптимальное решение в рамках заданной настройки. Однако гиперпараметры точно описывают этот параметр.

Например, если мы работаем над моделями обработки естественного языка (NLP), мы, вероятно, используем нейронные сети, машины опорных векторов (SVM), байесовские сети и экстремальное повышение градиента (XGB) для настройки параметров.

Позже мы подробно обсудим, как выполнять настройку гиперпараметров.

Типы гиперпараметров

Некоторые важные гиперпараметры, которые требуют настройки в нейронных сетях:

  • Количество скрытых слоев. Это компромисс между максимально простой (быстрой и обобщенной) нейронной сетью и правильной классификацией входных данных. Мы можем начать со значений от четырех до шести и проверять точность предсказания наших данных, когда мы увеличиваем или уменьшаем этот гиперпараметр.
  • Количество узлов/нейронов на слой. Больше не всегда лучше при определении количества нейронов для использования на слое. До определенного момента может помочь увеличение количества нейронов. Но слишком широкие слои могут запоминать обучающий набор данных, в результате чего сеть будет менее точной на новых данных.
  • Скорость обучения: параметры модели настраиваются итеративно, а скорость обучения определяет размер корректировки на каждом этапе. Чем ниже скорость обучения, тем ниже изменения в оценках параметров. Это означает, что для соответствия модели требуется больше времени (и больше данных), но это также означает, что более вероятно, что мы на самом деле найдем минимальные потери.
  • Импульс. Импульс помогает нам избежать попадания в локальные минимумы, сопротивляясь быстрым изменениям значений параметров. Он побуждает параметры продолжать изменяться в том же направлении, в котором они уже изменялись, что помогает предотвратить зигзагообразное движение на каждой итерации. Старайтесь начинать с низких значений импульса и повышайте их по мере необходимости.

Мы рассматриваем эти важные гиперпараметры для настройки SVM:

  • C: компромисс между плавной границей решения (более общая) и четкой границей решения (более точная для обучающих данных). Низкое значение может привести к тому, что модель неправильно классифицирует некоторые обучающие данные, а высокое значение может привести к переоснащению модели. Переобучение создает анализ, слишком специфичный для текущего набора данных и, возможно, непригодный для будущих данных и ненадежный для будущих наблюдений.
  • Гамма: инверсия радиуса влияния выборок данных, которые мы выбрали в качестве опорных векторов. Высокие значения указывают на малый радиус влияния и малые границы решений, которые не учитывают относительно близкие выборки данных. Эти высокие значения вызывают переоснащение. Низкие значения указывают на значительное влияние удаленных выборок данных, поэтому модель не может получить правильные границы решений из набора данных.

Важные гиперпараметры, требующие настройки для XGBoost:

  • max_depth и min_child_weight: управляют древовидной архитектурой. max_depth определяет максимальное количество узлов от корня до самого дальнего листа (число по умолчанию — 6). min_child_weight — это минимальный вес, необходимый для создания нового узла в дереве.
  • learning_rate: Это определяет количество исправлений на каждом шаге, учитывая, что каждый повышающий раунд исправляет ошибки предыдущего раунда. Learning_rate принимает значения от 0 до 1, а значение по умолчанию равно 0,3.
  • n_estimators: определяет количество деревьев в ансамбле. Значение по умолчанию — 100. Обратите внимание, что если бы мы использовали vanilla XGBoost вместо scikit-learn, мы бы использовали num_boost_rounds вместо n_estimators.
  • colsample_bytree и subsample: контролируют выборки набора данных, используемые в каждом раунде. Эти гиперпараметры помогают избежать переобучения. subsample — это доля используемых выборок со значением от 0 до 1 и значением по умолчанию 1. colsample_bytree определяет долю столбцов (признаков) и принимает числа от 0 до 1 со значением по умолчанию 1.

В этих примерах гиперпараметры, стремящиеся к одной или другой крайности, могут негативно повлиять на способность нашей модели делать прогнозы. Хитрость заключается в том, чтобы найти правильное значение для каждого гиперпараметра, чтобы наша модель работала хорошо и давала наилучшие возможные результаты.

Методы настройки гиперпараметров

Теперь, когда мы понимаем, что такое гиперпараметры и важность их настройки, нам нужно знать, как выбрать их оптимальные значения. Мы можем найти эти оптимальные значения гиперпараметров, используя ручные или автоматические методы.

При настройке гиперпараметров вручную мы обычно начинаем с рекомендуемых значений по умолчанию или эмпирических правил, а затем ищем диапазон значений методом проб и ошибок. Но ручная настройка — утомительный и трудоемкий подход. Это непрактично, когда есть много гиперпараметров с широким диапазоном.

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

Поиск по сетке

Поиск по сетке — это своего рода «грубая сила» метода настройки гиперпараметров. Мы создаем сетку возможных дискретных значений гиперпараметров, а затем подгоняем модель под каждую возможную комбинацию. Мы записываем производительность модели для каждого набора, а затем выбираем комбинацию, обеспечивающую наилучшую производительность.

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

Случайный поиск

Метод случайного поиска (как следует из его названия) выбирает значения случайным образом, а не использует предопределенный набор значений, как метод поиска по сетке.

Случайный поиск пробует случайную комбинацию гиперпараметров на каждой итерации и записывает производительность модели. После нескольких итераций он возвращает микс, давший наилучший результат.

Случайный поиск уместен, когда у нас есть несколько гиперпараметров с относительно большими доменами поиска. Мы можем создавать дискретные диапазоны (например, [5–100] с шагом 5) и при этом получать достаточно хороший набор комбинаций.

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

Байесовская оптимизация

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

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

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

Вероятностная модель основана на прошлых результатах оценки. Он оценивает вероятность результата целевой функции комбинации гиперпараметров:

P(результат | гиперпараметры)

Эта вероятностная модель является «суррогатом» целевой функции. Целевой функцией может быть, например, среднеквадратическая ошибка (RMSE). Мы вычисляем целевую функцию, используя обучающие данные с комбинацией гиперпараметров. Мы пытаемся ее оптимизировать (максимизировать или минимизировать, в зависимости от выбранной целевой функции).

Применение вероятностной модели к гиперпараметрам не требует больших вычислительных затрат по сравнению с целевой функцией, поэтому этот метод обычно обновляет и улучшает модель суррогатной вероятности каждый раз, когда выполняется целевая функция. Более качественные прогнозы гиперпараметров уменьшают количество оценок целевой функции, необходимых для достижения хорошего результата.

Примерами суррогатных моделей являются гауссовские процессы, регрессия случайного леса и древовидные оценки Парзена (TPE).

На рисунке ниже показано, как суррогатная функция находит минимум «целевой» функции, где «целевая» функция неизвестна.

После нескольких итераций по оценкам (наблюдениям), полученным от «целевой» функции, суррогатная модель находит минимум в координатах x=-0,35 и y=-0,8. Обратите внимание, что есть несколько оценок, близких к этой точке, соответствующих последним итерациям, поскольку модель почти нашла минимум и выдает аналогичные значения (разные цветовые точки соответствуют разным итерациям).

Модель байесовской оптимизации сложна в реализации. К счастью, мы можем использовать готовые библиотеки, чтобы упростить процесс. Стоит использовать этот тип модели, потому что он находит адекватную комбинацию гиперпараметров за относительно небольшое количество итераций.

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

Следующие шаги

Мы должны выполнить настройку гиперпараметров модели, чтобы обеспечить хорошие результаты нашей модели машинного обучения и данных. Мы можем выбрать один из трех методов настройки гиперпараметров — поиск по сетке, случайный поиск и байесовскую оптимизацию. Если оценка нашей модели с обучающими данными будет быстрой, мы можем выбрать метод поиска по сетке. В противном случае мы должны выбрать случайный поиск или байесовскую оптимизацию, чтобы сэкономить время и вычислительные ресурсы.

В следующей статье этой серии мы продемонстрируем на практике как настроить гиперпараметры на XGBoost. Мы создадим и оптимизируем модель машинного обучения для идентификации изображений цифр.

Первоначально опубликовано на https://www.anyscale.com.