Концептуальное объяснение байесовской оптимизации гиперпараметров для машинного обучения

Концепции эффективной настройки гиперпараметров с использованием байесовской оптимизации

Ниже приведены четыре распространенных метода оптимизации гиперпараметров для машинного обучения в порядке повышения эффективности:

  1. Вручную
  2. Поиск по сетке
  3. Случайный поиск
  4. Оптимизация на основе байесовской модели

(Существуют также другие методы, такие как эволюционный и градиентный.)

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

На этих рисунках сравнивается ошибка проверки для гиперпараметрической оптимизации нейронной сети классификации изображений со случайным поиском серым цветом и байесовской оптимизацией (с использованием Tree Parzen Estimator или TPE) зеленым цветом. Чем меньше, тем лучше: меньшая ошибка набора проверки обычно означает лучшую производительность набора тестов, а меньшее количество испытаний означает меньше затрат времени. Очевидно, что у байесовских методов есть значительные преимущества, и эти графики, наряду с другими впечатляющими результатами, убедили меня, что пора сделать следующий шаг и изучить оптимизацию гиперпараметров на основе моделей.

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

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

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

Обновление: Вот краткий блокнот Jupyter, показывающий основы использования оптимизации на основе байесовской модели в библиотеке Hyperopt Python.

Оптимизация гиперпараметров

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

Оптимизация гиперпараметров представлена ​​в виде уравнения как:

Здесь f (x) представляет собой объективную оценку, которую необходимо минимизировать, например RMSE или коэффициент ошибок, оцениваемую на проверочном наборе; x * - это набор гиперпараметров, который дает наименьшее значение оценки, а x может принимать любое значение в домене X. Проще говоря, мы хотим найти гиперпараметры модели, которые дают лучший результат при проверке установить показатель.

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

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

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

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

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

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

В литературе эта модель называется суррогатом целевой функции и представлена ​​как p (y | x). Суррогат намного проще оптимизировать, чем целевую функцию, и байесовские методы работают, находя следующий набор гиперпараметров для оценки фактической целевой функции, выбирая гиперпараметры, которые лучше всего работают с суррогатной функцией. Другими словами:

  1. Постройте суррогатную вероятностную модель целевой функции
  2. Найдите гиперпараметры, которые лучше всего подходят для суррогата
  3. Примените эти гиперпараметры к истинной целевой функции
  4. Обновите суррогатную модель с учетом новых результатов
  5. Повторяйте шаги 2–4, пока не будет достигнуто максимальное количество итераций или время

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

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

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

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

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

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

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

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

Есть пять аспектов оптимизации гиперпараметров на основе моделей:

  1. Домен гиперпараметров для поиска
  2. Целевая функция, которая принимает гиперпараметры и выводит оценку, которую мы хотим минимизировать (или максимизировать)
  3. Суррогатная модель целевой функции
  4. Критерий, называемый функцией выбора, для оценки того, какие гиперпараметры выбрать следующим из суррогатной модели
  5. История, состоящая из пар (оценка, гиперпараметр), используемых алгоритмом для обновления суррогатной модели

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

Домен

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

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

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

Целевая функция

Целевая функция принимает гиперпараметры и выводит единственную действительную оценку, которую мы хотим минимизировать (или максимизировать). В качестве примера рассмотрим случай построения случайного леса для задачи регрессии. Гиперпараметры, которые мы хотим оптимизировать, показаны в сетке гиперпараметров выше, а оценка, которую нужно минимизировать, - это среднеквадратичная ошибка. Тогда наша целевая функция будет выглядеть (на Python):

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

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

Суррогатная функция (вероятностная модель)

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

Существует несколько различных форм суррогатной функции, включая гауссовские процессы и регрессию случайного леса. Однако в этом посте мы сосредоточимся на древовидной структуре Parzen Estimator, предложенной Бергстра и др. В статье Алгоритмы для оптимизации гиперпараметров. Эти методы различаются тем, как они создают суррогатную функцию, которую мы немного объясним. Сначала нам нужно поговорить о функции выбора.

Функция выбора

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

Здесь y * - пороговое значение целевой функции, x - предлагаемый набор гиперпараметров, y - фактическое значение целевой функции с использованием гиперпараметров x, а p (y | x) - суррогатная вероятностная модель, выражающая вероятность y. учитывая x. Проще говоря, цель состоит в том, чтобы максимизировать ожидаемое улучшение по отношению к x. Это означает нахождение лучших гиперпараметров при суррогатной функции p (y | x).

Если p (y | x) равно нулю везде, где y ‹y *, то гиперпараметры x не должны давать никаких улучшений. Если интеграл положительный, это означает, что гиперпараметры x, как ожидается, дадут лучший результат, чем пороговое значение.

Древовидный оценщик парзена (TPE)

Теперь вернемся к суррогатной функции. Методы SMBO различаются тем, как они строят суррогатную модель p (y | x). Древовидный оценщик парзена строит модель, применяя правило Байеса. Вместо прямого представления p (y | x) он использует:

p (x | y), которая представляет собой вероятность гиперпараметров с учетом оценки целевой функции, в свою очередь, выражается:

где y ‹y * представляет меньшее значение целевой функции, чем порог. Объяснение этого уравнения состоит в том, что мы делаем два разных распределения для гиперпараметров: одно, в котором значение целевой функции меньше порога, l (x), и тот, где значение целевой функции больше порога, g (x).

Давайте обновим наш график случайного леса, включив в него пороговое значение:

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

Интуитивно кажется, что мы хотим извлечь значения x из l (x), а не из g (x), потому что это распределение основано только на значениях x, которые дали более низкие баллы, чем порог. Оказывается, именно об этом и говорит математика! С помощью правила Байеса и нескольких замен уравнение ожидаемого улучшения (которое мы пытаемся максимизировать) становится следующим:

Термин справа - самая важная часть. Это говорит о том, что Ожидаемое улучшение пропорционально соотношению l (x) / g (x), и поэтому, чтобы максимизировать ожидаемое улучшение, мы должны максимизировать это соотношение. Наша интуиция была правильной: мы должны рисовать значения гиперпараметров, которые более вероятны при l (x), чем при g (x)!

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

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

История

Каждый раз, когда алгоритм предлагает новый набор гиперпараметров-кандидатов, он оценивает их с фактической целевой функцией и записывает результат в пару (оценка, гиперпараметры). Эти записи образуют историю. Алгоритм строит l (x) и g (x), используя историю, чтобы создать вероятностную модель целевой функции, которая улучшается с каждой итерацией.

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

Собираем все вместе

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

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

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

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

Надеюсь, это убедило вас в том, что оптимизация на основе байесовской модели стоит попробовать!

Реализация

К счастью для нас, сейчас существует ряд библиотек, которые могут выполнять SMBO в Python. Spearmint и MOE используют гауссовский процесс для суррогата, Hyperopt использует древовидную структуру Parzen Estimator, а SMAC использует регрессию случайного леса. Все эти библиотеки используют критерий ожидаемого улучшения для выбора следующих гиперпараметров из суррогатной модели. В следующих статьях мы рассмотрим использование Hyperopt в Python, и уже есть несколько хороших статей и примеров кода для изучения.

Выводы

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

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

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

Для получения дополнительных сведений чрезвычайно полезны следующие статьи:

  1. Алгоритмы оптимизации гиперпараметров [Ссылка]
  2. Создание науки о поиске моделей: оптимизация гиперпараметров в сотнях измерений для архитектур Vision [Ссылка]
  3. Учебник по байесовской оптимизации [Ссылка]
  4. Вывод человека из цикла: обзор байесовской оптимизации [Ссылка]

Как всегда, я приветствую отзывы и конструктивную критику. Со мной можно связаться в Twitter @koehrsen_will