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

В этом руководстве мы рассмотрим 5 подходов к оптимизации гиперпараметров:

  1. Поиск по сетке
  2. Случайный поиск
  3. Байесовская оптимизация
  4. Последовательное уменьшение вдвое
  5. Hyper Band

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

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

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

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

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

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

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

Последовательное уменьшение вдвое

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

Гиперполос

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

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

На изображении вы можете видеть, что алгоритм гиперполосной обработки будет выполнять последовательное деление пополам за 5 выделений ресурсов. s = 4 начинает первый раунд с 81 испытанием, предлагая каждому отдельную эпоху, а затем итеративно выбрасывает 2/3 испытаний, пока не останется одно, и будет обучено 81 эпоху. При s = 0 алгоритм Hyperband в основном выполняет случайный поиск с 5 попытками, каждое из которых обучено максимальному количеству эпох.

ZazuML

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

Пожалуйста, загляните на наш Github!