НОВЫЙ МЕАП

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

Отрывок из книги Куан Нгуен Байесовская оптимизация в действии

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

Читайте дальше, если хотите узнать больше. Байесовская оптимизация не так сложна, как вы думаете!

Получите скидку 25 % на Байесовскую оптимизацию в действии, введя fccnguyen в поле кода скидки при оформлении заказа на сайте manning.com.

Введение в байесовскую оптимизацию

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

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

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

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

Поиск оптимума дорогостоящей функции черного ящика — сложная задача.

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

Настройка гиперпараметров как пример дорогостоящей проблемы оптимизации черного ящика

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

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

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

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

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

Если это типичный набор реальных данных, этот процесс может занять много времени и ресурсов. Рисунок 1 из OpenAI (https://openai.com/blog/ai-and-compute/) показывает, что по мере того, как нейронные сети становятся все больше и глубже, объем необходимых вычислений (измеряемый в петафлопах/с-днях) увеличивается. экспоненциально.

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

Возвращаясь к нашему примеру с нейронной сетью в таблице 1, какое количество слоев мы должны попробовать дальше, чтобы получить точность выше 81%? Некоторое значение между 10 и 20 слоями является многообещающим, поскольку и 10, и 20 слоев лучше, чем 5 слоев. Но какое точное значение мы должны проверить следующим, все еще не очевидно, поскольку между любым числом от 10 до 20 все еще может быть большая вариабельность. модель ведет себя как функция количества слоев. Хотя мы знаем, что 10 слоев приводят к 81 %, а 20 слоёв дают 75 %, мы не можем с уверенностью сказать, какое значение дадут, скажем, 15 слоёв. Это означает, что мы должны учитывать наш уровень неопределенности при рассмотрении этих значений между 10 и 20.

Кроме того, что, если какое-то число больше 20 на самом деле даст нам максимально возможную точность? Это относится ко многим большим наборам данных, где нейронной сети необходима достаточная глубина, чтобы узнать что-нибудь полезное. Или, хотя это маловероятно, что, если нам действительно нужно небольшое количество слоев (менее 5)?

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

Проблема дорогостоящей оптимизации методом черного ящика

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

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

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

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

Вся процедура представлена ​​на рисунке 2.

Введение в байесовскую оптимизацию

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

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

Этот рабочий процесс состоит из двух основных компонентов:

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

Давайте представим каждый из этих двух компонентов.

Моделирование с помощью гауссовского процесса

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

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

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

Принятие решений с помощью байесовской политики оптимизации

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

Объединение процесса Гаусса и политики оптимизации для формирования цикла оптимизации

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

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

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

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

Далее мы суммируем ключевые навыки, которым вы научитесь на протяжении всей книги.

Что вы узнаете из этой книги?

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

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

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

Подробнее о книге можно узнать здесь.