www.machinelearningmastery.ru

Машинное обучение, нейронные сети, искусственный интеллект
Header decor

Home
Занимательная история, выдающиеся люди, малоизвестные факты, находки, открытия, фальсификации. Присоединяйся!

Алгоритмы оптимизации гиперпараметров в Python

Дата публикации Nov 3, 2018

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

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

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

Если вы часто оказываетесь в штатах 1–3, то этот пост поможет вам стать лучше.

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

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

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

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

В этом блоге мы расскажем о теории гиперпараметрической оптимизации, а затем познакомимся с демонстрацией с использованием hyperopt. Hyperopt - это библиотека оптимизации гиперпараметров в Python, которая использует TPE (разновидность SMBO) для оптимизации. Прежде чем углубиться в SMBO, давайте вспомним основы гиперпараметров, поиска по сетке и случайного поиска. Вы можете пропустить части (1–3), если вы уже знакомы с ними.


Содержание

  1. Основные определения
  2. Последовательная модель на основе оптимизации (SMBO)
  3. Типы SMBO: на основе Гаусса и на основе TPE
  4. Руки на примерах с использованием Hyperopt

Основные определения

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

Внутренние особенности модели случайного леса

Все вышеперечисленные функции являются встроенными функциями модели. Для метода ансамбля на основе деревьев, такого как случайный лес или повышение градиента, max_depth, min_sample_leaf и n_estimators (количество деревьев в ансамбле) являются наиболее важными.

2.Grid Searchявляется самым основным алгоритмическим методом для оптимизации гиперпараметров. Это похоже на выполнение вложенных циклов для всех возможных значений встроенных функций. Параметр rf_params в приведенном ниже примере содержит функции модели, которые требуют точной настройки.

В приведенном выше случае модель будет переподготовлена ​​300 раз.
2 (n_estimator) * 3 (max_features) * 10 (max_depth) * 5 (cv работает) = 300

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

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

Код для случайного поиска такой же, как и в GridSearch, с той лишь разницей, что мы добавляем n_iter = 100, который фиксирует верхний предел количества разрешенных прогонов. Сетка / Случайный поиск являются примераминеосведомленный поискЭто означает, что следующий набор функций не зависит от результатов последних запусков. Оба они требуют переподготовки на каждой итерации, что влечет за собой огромные затраты.

Последовательная модель на основе оптимизации (SMBO)

SMBO минимизирует потери проверки путем последовательного выбора различных наборов гиперпараметров, где следующий набор выбран байесовскими рассуждениями (в зависимости от предыдущих прогонов) Говоря интуитивно, SMBO оглядывается на результаты последних прогонов, чтобы сосредоточить будущие поиски на областях, которые выглядят более перспективными.

SMBO используется всякий раз, когда функция пригодности (f: X -> R) дорого оценивать. В таких случаях приблизительныйе(суррогатM) рассчитывается. Эта модельMдешевле вычислить. Как правило, внутренний цикл в SMBO - это численная оптимизация этого суррогата или некоторая трансформация этого суррогата (строка 3 в коде ниже). СмыслИкс*что максимизирует суррогат становится предложением, где истинная функция потерьеследует оценить (строка 4).

Рисунок 1: Псевдокод общей последовательной оптимизации на основе модели

H: История наблюдений
T: количество испытаний
f: истинная функция
M: суррогатная функция для приближения f
S: вычисляет следующее присвоение гиперпараметра
x *: пример экземпляра, где M минимизировано

Объяснение псевдокода:
Линия 1 :Инициировать пустойЧАС.
Строка 2: начать цикл с фиксированным количеством испытаний.
Строка 3:
1. л
заработать суррогатную функцию дляеназываетсяМ.
2. Определите критерий оценки, который необходимо минимизировать.
3. S (x, M) запускается
для нескольких экземпляров х, чтобы найтиИкс*которыйминимизирует S.
Строка 4:еоценивается на лучшее х.
Строка 5: Hобновляется с текущим значениемх, ф (х).
Строка 6: М есть
обновляется после каждой итерации, чтобы стать лучшим приближениеме.
Строка 7:
Процесс заканчивается после фиксированного количества итераций.

Функции Приобретения (S)определить баланс между изучением новых областей в объективном пространстве и эксплуатацией областей, которые, как известно, имеют благоприятные значения. Различные варианты SMBO используют разные алгоритмы для оптимизации ожидаемого улучшения (EI, популярный выбор для функций сбора данных). Например, Hyperopt оптимизирует EI через TPE (Tree Parzen Estimators), в то время как Spearmint использует гауссовские процессы для их оптимизации.

SMBO оптимизирует EI (ожидаемое улучшение)
  1. Пм: задняя ГП знаяЧАС
  2. y *: значение суррогата для нового кандидата
  3. y: значение суррогата для предыдущего кандидата

Интуитивно он определяет неотрицательный EI по отношению к наилучшему ранее наблюдаемому объективному значению в данном месте x.

Гауссовские процессы на основе EI оптимизации

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

ГП являются стандартным суррогатом для моделирования целевой функции (е) в байесовской оптимизации. В такой обстановкееПредполагается, что GP со среднимUи ковариантное ядроK.Выбор ядраКможет иметь серьезные последствия для суррогатной реконструкции. В этом подходе модельМ (линия 6 на фиг.1)определяет прогнозирующее распределениер (у | х, D).

Трехуровневый подход к оценке Парзена (TPE)

TPEоценки ядра организованы в древовидные структуры для сохранения условной зависимости. В отличие от подхода на основе GP, какие моделир (у | х)непосредственноTPE приближается к этомур (х | у)а такжер (у),

TPE вносит 2 изменения в GP-способ оптимизации ожидаемых инвестиций.

  1. p (y | x) заменяется на p (x | y) * p (y) / p (x)
  2. Случай 1: p (x | y) = l (x), если y <y *
    Случай 2: p (x | y) = g (x), если y≥y *
  • л (х)является плотность, сформированная с помощью наблюдений {Икс} такой, что соответствующая потеряF (X)было меньше чему *
  • г (х)состоит из оставшихся наблюдений

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

Это приводит к следующему выводу

EI после специфических оптимизаций TPE

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

Руки по оптимизации параметров с помощью Hyperopt

Hyperopt - это библиотека Python для автоматической настройки моделей через SMBO. Применение hyperopt для оптимизации гиперпараметров является трехэтапным процессом:

  1. Определение целевой функции.
  2. Определение пространства поиска (xgb_space).
  3. Определение базы данных испытаний для сохранения результатов каждой итерации.

Следующий блок кода является примером того, как выполнить оптимизацию гиперпараметров для xgboost (библиотека повышения градиента).

Чтобы использовать тот же сценарий для других моделей, требуются небольшие изменения, основанные на модели. Вам нужно внести изменения в переменную xgb_space, чтобы удовлетворить пространство поиска выбранной вами модели. В целевой функции необходимо внести изменения в способ выполнения кросс-валидации (как мы использовали метод xgb Specc), а также какую метрику вы хотите минимизировать. Например, для LightGBM (перейдите кLightGBMчтобы узнать об этой удивительной библиотеке) вы можете использовать код как есть, внеся небольшие изменения.

В будущем я опубликую более подробный практический блог о библиотеке hyperopt.

Этот блог служит кратким обзором методов оптимизации гиперпараметров, доступных нам в настоящее время. Мы начали с неинформированных поисков, таких как поиск по сетке / случайный поиск, затем перешли к другим байесовским методам, таким как SMBO на основе GP и SMBO на основе TPE, и, наконец, к рабочему примеру hyperopt.

Ссылки

Пожалуйста, просмотрите следующий материал, если вы хотите копать глубже

  1. HyperoptGitHub хранилище
  2. Бумага Hyperopt
  3. Алгоритмы оптимизации гиперпараметров

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

Оригинальная статья

Footer decor

© www.machinelearningmastery.ru | Ссылки на оригиналы и авторов сохранены. | map