Любой сквозной проект машинного обучения можно разделить на несколько этапов:

  1. Получить данные
  2. Исследовательский анализ данных и визуализация
  3. Предварительная обработка и очистка данных
  4. Выбрать и обучить модель
  5. Оптимизация гиперпараметров (HPO)
  6. Представьте свое решение
  7. Запускайте, контролируйте и обслуживайте свою систему.

В этом посте я подробно расскажу вам о следующих подходах к оптимизации гиперпараметров:

Введение

Предположим, вы хорошо поняли свои данные, предварительно обработали их и подготовили к обучению. На данном этапе проекта машинного обучения у вас есть краткий список перспективных моделей (нейронная сеть, Random-Forest, SVM, XgBoost), и вы хотели бы оптимизировать их гиперпараметры, чтобы увидеть, какая модель лучше всего подходит для вашей задачи. . Но сначала что такое гиперпараметры?

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

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

Гиперпараметры – это независимые от обучения переменные. Эти параметры относятся к выбранному алгоритму, и пользователи могут произвольно устанавливать эти параметры. (например, скорость обучения нейронной сети, количество оценок в случайном лесу).

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

Подходы к оптимизации гиперпараметров

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

Ручной поиск

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

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

Параллельный поиск

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

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

Почему нас не устраивает эта техника? Позволь мне привести пример:

Если мы хотим попробовать 3 разных значения для parameter_1, мы можем попробовать их все и сравнить их результаты. Если мы хотим попробовать 3 разных значения для parameter_1 и 3 разныхзначения для parameter_2, тогда у нас будет 3x3 = 9 разных попыток. Я думаю, вы поняли, что количество попыток будет экспоненциально увеличиваться с увеличением количества параметров и значений. Пробовать их все по одному неэффективно. (Хотя параллельный поиск является наиболее распространенным подходом hpo из-за его простоты.)

Последовательный поиск

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

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

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

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

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

  • Сокращение времени выполнения оптимизации гиперпараметров
  • Лучшие результаты на тестовом наборе

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

Эволюционный поиск

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

Меня всегда восхищали симуляции 2D Box Car, где вы можете понять, как работают генетические алгоритмы, в гораздо более практическом смысле. В симуляции есть основные правила: у каждой машины будет 2 колеса, они должны быть соединены шасси и т. д. Кроме того, есть некоторые параметры, такие как размер колес, форма шасси. Это параметры, которые мы хотели бы оптимизировать для лучшей машины. Моделирование начинается со случайной популяции, и к концу каждого прогона лучшие кандидаты передают свои гены (параметры) следующему поколению. В популяцию вводятся случайные мутации параметров, и автомобили с более высоким показателем приспособленности живут дольше других.

Мы можем использовать эту концепцию естественного отбора для оптимизации гиперпараметров наших моделей машинного обучения. Допустим, у нас есть совокупность N моделей машинного обучения с некоторыми предопределенными параметрами. Затем мы можем обучить эти модели и решить оставить половину моделей с лучшим результатом. Из этих N/2моделей мы можем создать новую совокупность N моделей машинного обучения с аналогичными гиперпараметрами. Я говорю подобное не точно, потому что какой смысл создавать новую популяцию. Один из недостатков генетических алгоритмов заключается в том, что, поскольку мутации чисто случайны, последствия также случайны, как и эволюция. Я снова рекомендую прочитать этот удивительный пост в блоге для получения дополнительной информации.

Поиск по населению

Обучение на основе популяции (PBT) — это метод оптимизации гиперпараметров машинного обучения, разработанный DeepMind. Этот метод сочетает в себе как параллельный, так и последовательный методы поиска. Расскажу как:

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

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

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

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

В 2020 году Anyscale (компания, известная своей библиотекой Python Ray) опубликовала новый метод, похожий на PBT, под названием Бандиты на основе населения (PB2). Похожий на PBT, PB2 одновременно обучает и оптимизирует ряд сетей, позволяя быстро найти оптимальную настройку. Однако, в отличие от PBT, PB2 использует вероятностную модель для эффективного управления поиском, что позволяет обнаруживать высокопроизводительные конфигурации гиперпараметров с гораздо меньшим количеством агентов, чем обычно требовалось в предыдущей работе. Для получения более подробной информации о проверке PB2 см. собственный документ Anyscale.

Бандитский поиск

PB2 был поиском как бандитов, так и населения. Но что значит «бандит» в контексте теории вероятностей? Задача многорукого бандита (иногда называемая Nпроблемой вооруженного бандита) – это задача, в которой необходимо использовать фиксированный ограниченный набор ресурсов. распределяются между конкурирующими (альтернативными) вариантами таким образом, чтобы максимизировать их ожидаемую выгоду, когда свойства каждого выбора известны лишь частично во время распределения и могут быть лучше поняты по прошествии времени или путем распределения ресурсов для выбора.

Короче говоря, мы можем думать о задаче оптимизации гиперпараметров как о задаче бандитов с бесконечными руками, где предопределенный ресурс, такой как итерации, выборки данных или функции, распределяется между случайно выбранными конфигурациями. Алгоритм HyperBand, основанный на бандитах, направлен на оптимизацию с помощью метода, называемого последовательным делением пополам. Hyperband реализует оптимизацию гиперпараметров путем случайной выборки кандидатов и их «пробования» в первую очередь, запуская их для определенного бюджета. Подход является итеративным, перспективные кандидаты обрабатываются в течение более длительного времени, что повышает достоверность их результатов. Хотя это очень эффективный подход к гонкам, случайная выборка не использует знания, полученные о кандидатах во время оптимизации. Поэтому я бы все же предпочел PBT HyperBand.

Резюме основных результатов

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

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

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

Рекомендации

Последовательный поиск

Связанные с населением

Связанные с бандитами