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

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

Байесовская оптимизация состоит из трех основных этапов:

  1. Рассчитать производительность моделей по набору гиперпараметров
  2. Оцените распределение точности с помощью гауссовой регрессии процесса
  3. Выберите новый набор гиперпараметров для тестирования на основе распределения gpr.

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

Знаете, что было бы очень полезно? Если бы существовало распределение точности модели по каждому уникальному набору гиперпараметров. Тогда было бы легко найти лучшие гиперпараметры, так как вам просто нужно было бы найти пик (максимальную точность) распределения и использовать соответствующие гиперпараметры. Невозможно получить точное распределение точности, но есть способ ее оценить — регрессия гауссовского процесса. Это метод оценки распределения на основе предыдущих значений. Я не буду вдаваться в математику, стоящую за этим (я действительно в этом не разбираюсь…), но он играет огромную роль в байесовской оптимизации.

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

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

Функция приобретения, которую я использовал, называется ожидаемым улучшением. Он принимает распределение gpr, а затем выбирает набор параметров таким образом, что:

расчетная точность + неопределенность

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

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

Код

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

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

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

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

Время проверить это!

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

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