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

Если мы разобьем машинное обучение на три компонента: представление, оценку и оптимизацию, настройка гиперпараметров скорректирует параметры представления модели, чтобы лучше соответствовать данным в тестовом наборе в соответствии с вашими критериями оценки. Когда мы создаем и оцениваем новые модели, мы также хотим убедиться, что мы не подгоняем модель под данные. Автоматизированные методы варьируются от грубой силы до использования другой модели, которая наблюдает за поведением y = f (x) и решает, какой путь выбрать с неисследованными параметрами, выбирая только тот набор, который может уменьшить потери.

Когда вы дойдете до этапа обучения разработки модели, вы можете знать ряд параметров, которые хотите попробовать — различные C, альфа, скорость обучения, глубину дерева — но вы, скорее всего, не знаете, какая комбинация этих значений дает наилучший результат. результаты по вашим критериям оценки. В этом руководстве я буду говорить о традиционных представлениях моделей машинного обучения с учителем, таких как линейная и логистическая регрессия OLS, деревья решений, SVM, K-ближайшие соседи, ансамбли деревьев и наивный байесовский алгоритм.

Предварительные требования и общие рекомендации

  1. Имейте четкое представление о своих критериях оценки. Примеры этого включают точность и полноту, квадрат ошибки, прирост информации, апостериорную вероятность и правдоподобие. Каковы ваши цели для этой модели?
  2. Хорошо изучите свой алгоритм и параметры, что контролирует каждый из них и как это меняет его способность к обобщению в производственной среде. Вы заметите, что некоторые параметры оказывают очень большое влияние, в то время как другие не так сильно влияют.
  3. Не забудьте дважды проверить утечку данных — результаты вашего тестового набора слишком хороши, чтобы быть правдой? Используете ли вы данные, которых у вас не будет во время вывода?

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

Параметры автоматической настройки гиперпараметров

  1. Поиск по сетке и случайный поиск
  2. байесовский
  3. Гиперполоса
  4. Методы черного ящика, включая Google Cloud Vizier и SigOpt.

Методологии тестирования

Моя установка включает 64 ядра, 240 ГБ ОЗУ, 100 ГБ SSD, ноутбук Python 3 N1 в Google Cloud Vertex AI. Я использовал одни и те же параметры во всех методах, где это было возможно, и зафиксировал случайное состояние, в том числе в разделении поезд/тест. У вас есть доступ к тем же данным, и вы можете воспроизвести результаты самостоятельно на своем локальном компьютере или в облаке. Я использовал магию Python %timeit для записи времени выполнения каждой из моих функций. Я включил простую функцию pyplot, где я рисую средний балл по каждой итерации.

Поиск по сетке и случайный поиск

Это исчерпывающий подход, при котором мы, по сути, пробуем все возможные комбинации значений и возвращаем набор параметров и обученную модель с наивысшими результатами оценки в вашем тестовом наборе. Мы знаем, что найдем оптимальный набор параметров при высоких вычислительных затратах. Я бы рекомендовал этот вариант, когда у вас не так много параметров для тестирования, а обучение вашей модели занимает всего несколько секунд для заданного набора параметров; т.е. ваш набор данных невелик, к которому вы подгоняете модель. Ознакомьтесь с документацией для SKLearn’s GridSearchCV, если вы заинтересованы в использовании этого метода. Кроме того, взгляните на методы подсчета очков, которые вы можете передать в GridSearch. Это позволит вам установить такие цели, как F1, ROC AUC, R2 и объясненная дисперсия. Ниже я привел пример, в котором я использовал GridSearchCV для оптимизации модели классификации.

Функция подготовки данных и построения графиков ~

Пример поиска по сетке

Здесь мы обучаем классификатор повышения градиента, и я указал сетку параметров с диапазоном, который модель будет тестировать и оценивать. Новая модель подходит для каждой итерации новой комбинации гиперпараметров на всем обучающем наборе, который, как определено выше, представляет собой разделение 80/20. У нас есть 5 наборов перекрестной проверки, и мы используем R2 для расчета потерь.

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

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

Учитывая эти ограничения:

  1. F — черный ящик, и решения в замкнутой форме не существует [4]
  2. F дорого оценивать
  3. Оценки y = f(x) дороги

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

Я продемонстрирую два байесовских примера, первый с использованием BayesSearchCV, а другой с использованием настраиваемого цикла. С помощью BayesSearchCV вы можете точно настроить процесс поиска с помощью количества выбранных параметров, которые компенсируют время выполнения и качество модели. Начать работу с API sk-optimize просто — вам как минимум понадобится модель и цель оценки (отзыв, точность, MSE, R2 и т. д.). Обратите внимание, что вы также можете воспользоваться параметром n_jobs для ускорения ваших вычислений, используя многопоточность на вашем ЦП, здесь я использую все доступные ядра с -1.

Вот мой последний пример, использующий пользовательский цикл для расчета и минимизации потерь на каждой итерации:

Заключение

При использовании байесовских методов общее время выполнения сократилось более чем на 80%, и оно может увеличиваться по мере масштабирования количества проверяемых параметров, как мы уже отмечали ранее, для времени выполнения поиска по сетке O(n^k). Байесовские методы оказались эффективным методом оптимизации функций черного ящика, а управляемые сервисы, такие как Vizier от Google, еще больше повышают производительность. На этапе настройки гиперпараметров в более крупных моделях создание пространства поиска и использование оптимальных методов — это способ сэкономить время и вычислительную мощность, а также позволить специалисту по данным сосредоточиться на коде модели и бизнес-целях.

Ссылки и примечания

  1. Несколько полезных вещей, которые нужно знать о машинном обучении, Домингос, 2012 г.
  2. Практическая байесовская оптимизация алгоритмов машинного обучения,
  3. Байесовская оптимизация со skopt
  4. Решения в закрытой форме — это решения, которые могут быть выражены конечным числом известных выражений. Линейная регрессия с помощью частичного метода наименьших квадратов действительно имеет выражение в закрытой форме, но при повышении градиента, когда у нас есть ансамбль слабых учеников, часто не имеет решения в закрытой форме, поскольку они в основном полагаются на итеративные методы оптимизации.