Находите свой путь в пространствах больших размеров

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

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

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

Гиперпараметры? О чем ты говоришь?

При попытке подобрать модель для данного набора данных необходимо определить два типа параметров:

  • Параметры, используемые для настройки модели: глубина дерева решений, ядро ​​модели SVM, степень полинома, количество слоев нейронной сети,…
  • Параметры самой модели: вес, прикрепленный к листьям дерева решений, параметры ядра SVM, коэффициенты, прикрепленные к полиному, вес каждого нейрона,…

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

Зачем вам нужен AutoML для настройки гиперпараметров?

Давайте вспомним, что настройка гиперпараметров, иногда называемая оптимизацией гиперпараметров (HPO), - это процесс, который пытается максимально использовать вашу модель, определяя лучшую конфигурацию для вашей модели по отношению к выбранной вами метрике.

В основном есть две причины для использования AutoML:

  1. Найти лучший параметр вручную - довольно утомительная задача. Комбинаторика конфигурационного пространства может быть довольно большой. Для Random Forest необходимо учитывать не менее 10 параметров. Каждый параметр может принимать 10 различных значений. Следовательно, для исследования пространства конфигурации требуется оценка 10¹⁰ конфигураций!
  2. Нет абсолютно никакой гарантии, что конфигурация, оптимизированная для данного набора данных, будет работать также и с другим набором данных. Каждый раз, когда вы применяете свою модель к новому набору данных, очень важно уточнять гиперпараметры.

Использование технологий AutoML позволяет преодолеть эти два ограничения за счет автоматизации исследования пространства конфигурации.

Настройка гиперпараметров с помощью AutoML: сложная задача

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

Давайте начнем с математики, чтобы формализовать, что такое оптимизация гиперпараметров.

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

где M - оценка метрики, для которой мы хотим оптимизировать модель f_hat, используя заданные наборы поездов и тестов. Тета - это набор параметров, используемых для настройки модели. Значения берутся из конфигурационного пространства Theta.

Обычно при решении такой задачи оптимизации используются методы, основанные на численном дифференцировании. По сути, функция для оптимизации, то есть композиция M с f_hat, дифференцируется по параметрам theta. Затем используется метод Ньютона-Рафсона, градиентный спуск или любой аналогичный метод для итеративного схождения к оптимуму.

Однако в случае настройки гиперпараметров, как правило, невозможно вычислить эти градиенты:

  • Показатели могут быть негладкими, например, как MAE. См. Другую мою статью на эту тему. Следовательно, дифференциация невозможна.
  • Саму модель бывает сложно дифференцировать не только символически, но и численно. Подумайте обо всех методах, основанных на деревьях, которые являются кусочно-постоянными.
  • Градиент может исчезнуть. Это касается нейронных сетей, но также и древовидных методов: Random Forest, XGBoost, CatBoost, LightGBM,…
  • Численная оценка градиентов отнимает много времени, поскольку для каждого изменения в каждом направлении параметра нам необходимо обучить полную модель.
  • Гиперпараметры модели не могут быть непрерывными. Подумайте о параметрах nb_estimators XGBoost: это целое число. То же самое и с категориальными параметрами.

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

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

Почему бы не использовать поиск по сетке?

Одним из вариантов может быть использование грубой силы. В конце концов, поиск лучших гиперпараметров для XGBoost, Random Forest или любой другой модели просто требует оценки ваших метрик для каждой возможной конфигурации.

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

Так что это может быть вариант только тогда, когда ваше конфигурационное пространство очень ограничено.

А что насчет случайного поиска

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

Использование SMAC

Альтернативу грубой силе и случайному исследованию предлагает библиотека SMAC: Sequential Model-based Algorithm Configuration.

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

См. Эту очень интересную основополагающую статью для получения более подробной информации по этому вопросу. Я также написал полную статью о том, как создать собственный двигатель HPO с помощью модели:



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

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

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

Исследование пространства конфигурации руководствуется внутренней моделью производительности. Как показано в коде, вдохновленном этим примером SMAC, SMAC учится на предыдущих запусках и улучшает свои знания на каждом этапе:

В приведенном выше коде для настройки гиперпараметров используются SMAC и RandomizedSearchCV. Обратите внимание, что SMAC поддерживает как непрерывные реальные параметры, так и категориальные. Поддержка категориальных параметров была одной из причин использования Random Forest в качестве внутренней модели для руководства исследованием.

Этот код иллюстрирует использование SMAC со случайным лесом в качестве модели для точной настройки, но я использовал его для моделей XGBoost, а также для моделей SVM или SARIMA, и он отлично работает.

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

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

В результате SMAC быстрее приходит к лучшему решению.

Заключение

Поиск оптимальных гиперпараметров для модели - утомительная, но важная задача. SMAC - очень эффективная библиотека, которая предоставляет Auto ML и действительно ускоряет построение точных моделей. Любая модель может извлечь выгоду из этой тонкой настройки: XGBoost, Random Forest, SVM, SARIMA,…

Очень интересно видеть, что методы на основе машинного обучения могут использоваться для улучшения обучения моделей машинного обучения. Однако возникает вопрос: как оптимизировать гиперпараметры внутренней модели случайного леса SMAC?

Вы найдете ответ в коде SMAC или в академической статье: они жестко запрограммированы;)