Не теряйте время, используйте Оптуну

Для тех, кто знаком с трудным процессом настройки гиперпараметров, Optuna — спаситель.

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

Если вы все еще настраиваете свои модели с помощью поиска по сетке, вам нужно изменить свой подход — вы теряете производительность.

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

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

Настройка гиперпараметров

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

Поиск по сетке крайне неэффективен. Как с точки зрения траты времени, так и с точки зрения изучения меньшего пространства гиперпараметров.

В результате получается модель с худшими характеристиками.

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



По сути, не используйте поиск по сетке. Анализ пространства поиска гиперпараметров занимает слишком много времени.

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

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

Оптуна

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

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



Оптимизация гиперпараметров с помощью Optuna
Как создать оптимальную версию вашей модели.towardsdatascience.com



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

  • Оценщик Парцена с древовидной структурой (используется в этой статье)
  • Квази-Монте-Карло Сэмплер
  • Сэмплер пространства поиска пересечения

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

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

Шаблоны исследований

Параметры модели

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

Функция оптимизации не позволяет пользователю переключаться между разными моделями на лету. Это также не позволяет использовать различные сетки параметров для функции оптимизации.

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

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

Динамическая оптимизация модели

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

Теперь вы можете просто создавать разные сетки параметров для разных экспериментов в словарях Python и передавать любые модели, которые вам могут понравиться.

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

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

Загрузить модель

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

Анализ исследований

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

Ниже я определил еще несколько функций, которые помогут.

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

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

После проведения исследований и определения лучших моделей вам необходимо запустить модель в производство.

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

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

Исследование вилки

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

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

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

Считаете, что ваша скорость обучения недостаточно низкая? Настройте сетку параметров и продолжайте работу. Базовая объективная модель для поиска гиперпараметров продолжает оптимизироваться при продолжении исследования.

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

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

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

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

Эксперименты

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

Используемые данные

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

Настраивать

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

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

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

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

Это простой процесс с функцией set_params() вашей модели.

Продолжение исследований

Optuna настроена на создание сетки параметров для исследования и оптимизацию по серии испытаний.

Что-то, что вы, возможно, также сделали, это перезагрузили свои исследования и продолжили их оптимизировать. Но если вы уже исчерпали свое пространство для поиска, ваши результаты могут не сильно улучшиться.

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

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

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

Последние мысли

Optuna — мощный инструмент. Лучшие специалисты по данным стекаются к нему, и на то есть веские причины.

Это экономит время и позволяет создавать более качественные модели.

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

Но, перенеся отслеживание моделей в существующие инструменты, вы можете сэкономить ценное время и усилия вашей команды.

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

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