Настройка гиперпараметров — распространенная и важная часть алгоритма. Байесовская оптимизация — это эффективный метод настройки гиперпараметров, который оптимизируется путем построения вероятностной модели целевой функции и использования этой модели для выбора следующего параметра для оценки. В этой статье рассказывается, как использовать байесовскую оптимизацию для многокритериальной настройки гиперпараметров.
Байесовская оптимизация – эточерный ящикМетод оптимизации,Он балансирует компромиссы между разведкой и эксплуатацией на каждой итерации.,найти оптимальное решение. Я не буду много говорить о принципах байесовской оптимизации.,В Интернете есть много отличных объяснений. Общий процесс таков:
Сначала предположим, что целевая функция следует гауссовскому процессу, и обновим это предположение, наблюдая за значением целевой функции. Затем в качестве следующей точки наблюдения он выбирает точку, в которой доход максимизируется.
существовать Система Что касается рекомендаций, модель часто является многокритериальной. Если взять в качестве примера поток контента, то целями могут быть: клики, продолжительность, пересылка, комментарии, лайки, концентрация. наи т. д.。исуществоватьупражнятьсясередина,Проблема, с которой вы обязательно столкнетесь::Определение гиперпараметров в формулах многокритериального слияния。
Простой,Можно использовать“погладить по голове(Опыт принятия решений)+Насильственный обыск”。Этот подход полезен дляПодходит, когда гиперпараметров мало или на ранних стадиях бизнес-итерации.。Но если гиперпараметров больше,Жесткий поиск параметров и последующее проведение A/B-экспериментов часто приводят к потере большого количества времени и трафика. Следовательно, байесовская оптимизация может помочь нам в настройке параметров.
Распространенным методом объединения нескольких целей является умножение степени, поэтому простейшим гиперпараметром может быть показатель степени каждой цели.
Score=\prod Predict_{i}^{α_{i}}
вα_{i}для первогоiцелевой показатель степени,Predict_{i}для первогоiПрогнозируемое значение модели цели。Такα_{i}Это гиперпараметр, который нам нужно настроить.。
В байесовской оптимизации необходимо определить цель оптимизации, то есть конкретное значение. Следовательно, функцию вознаграждения необходимо определять на основе эффекта онлайн-эксперимента A/B, например:
Reward=20∗Time+10∗Like+35∗CTR+10∗Share
Вот несколько извлеченных уроков:
Теперь мы можем использовать байесовскую оптимизацию для поиска оптимальных гиперпараметров. Конкретные шаги заключаются в следующем:
4. После завершения итерации байесовский оптимизатор возвращает оптимальный набор гиперпараметров.
Здесь необходимо отметить, что при наблюдении онлайн-экспериментов A/B обеспечьте максимальную достоверность данных, например, экспериментальная группа обеспечивает больший трафик или экспериментальный период длиннее. В зависимости от вашего бизнеса, получение относительно уверенного заключения обычно занимает 3–7 дней.
кроме того,Исходные параметры частоОпределяется искусственным опытом,Зазор может быть больше,Проведите эксперименты A/B в качестве первого раунда настройки параметров.
Без лишних слов, перейдем непосредственно к коду:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from bayes_opt import BayesianOptimization, UtilityFunction
def black_box_function(x, y):
return (x - 1) ** 2 + y ** 2 - 1
optimizer = BayesianOptimization(
f=None,
pbounds={'x': (-3, 3), 'y': (-3, 3)},
verbose=2,
random_state=1,
allow_duplicate_points=True
)
utility = UtilityFunction(kind="ucb", kappa=2.5, xi=0.0)
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
# Evaluate the black_box_function on a meshgrid
x = np.linspace(-3, 3, 100)
y = np.linspace(-3, 3, 100)
x, y = np.meshgrid(x, y)
z = black_box_function(x, y)
# Plot the surface
ax.plot_surface(x, y, z, cmap='viridis', alpha=0.3)
# Optimization loop
explored_points = []
for _ in range(12):
next_point = optimizer.suggest(utility)
target = black_box_function(**next_point)
optimizer.register(params=next_point, target=target)
explored_points.append((next_point['x'], next_point['y'], target))
print(next_point, target)
# Plot all explored points after the optimization loop
for i in range(1, len(explored_points)):
x_values = [explored_points[i-1][0], explored_points[i][0]]
y_values = [explored_points[i-1][1], explored_points[i][1]]
z_values = [explored_points[i-1][2], explored_points[i][2]]
ax.plot(x_values, y_values, z_values, c='red', marker='o', markersize=5, linewidth=1)
plt.show()
print(optimizer.max)
Онлайн-эксперимент A/B аналогичен демо-версии. Требуется только вручную вычислить наблюдаемые значения в автономном режиме, чтобы заменить выходные данные функции black_box_function.
Ссылка на код:https://github.com/bayesian-optimization/BayesianOptimization
индекс | Улучшить эффект |
---|---|
Aиндекс | +**% Положительно значимо |
Bиндекс | +**% Положительно значимо |
Cиндекс | +**% Положительно значимо |
Dиндекс | +**% Положительно значимо |
Eиндекс | -**% Отрицательно значимо |
Наконец, давайте поговорим о реальном онлайн-индексе бизнеса.,Четыре индекса ABCD эффективно улучшены,Eиндекс Отрицательно инновации. Между ними было несколько корректировок.,Всегда будут ситуации, когда замена неизбежна.,Окончательная оценка замены приемлема.