Оптимизация Hyperparameter для модели Pytorch

Каков наилучший способ оптимизации гиперпараметров для модели Pytorch? Например, например, случайный поиск? Использовать Skicit Learn? Или есть что-то еще, о чем я не знаю?

Ответ 1

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

Байесовская оптимизация имеет хорошие теоретические гарантии (несмотря на приближения), а реализации, такие как Spearmint, могут обернуть любой скрипт, который у вас есть; есть гиперпараметры, но пользователи не видят их на практике. Hyperband получил большое внимание, показав более высокую конвергенцию, чем оптимизация Naive Bayesian. Он смог сделать это, запустив разные сети для разного количества итераций, а байесовская оптимизация не поддерживает это наивно. Хотя можно улучшить ситуацию с помощью байесовского алгоритма оптимизации, который может принять это во внимание, например, FABOLAS, на практике гиперпространство настолько просто, что вы, вероятно, лучше его используете и наблюдаете за его настройкой пространства поиска с интервалами.

Ответ 2

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

Ответ 3

Многие исследователи используют Tune. Это масштабируемая среда настройки гиперпараметров, специально для глубокого обучения. Вы можете легко использовать его с любой структурой глубокого обучения (2 строки кода ниже), и она предоставляет большинство современных алгоритмов, включая HyperBand, обучение на основе численности населения, байесовскую оптимизацию и BOHB.

import torch.optim as optim
from ray import tune
from ray.tune.examples.mnist_pytorch import get_data_loaders, ConvNet, train, test


def train_mnist(config):
    train_loader, test_loader = get_data_loaders()
    model = ConvNet()
    optimizer = optim.SGD(model.parameters(), lr=config["lr"])
    for i in range(10):
        train(model, optimizer, train_loader)
        acc = test(model, test_loader)
        tune.track.log(mean_accuracy=acc)


analysis = tune.run(
    train_mnist, config={"lr": tune.grid_search([0.001, 0.01, 0.1])})

print("Best config: ", analysis.get_best_config(metric="mean_accuracy"))

# Get a dataframe for analyzing trial results.
df = analysis.dataframe()

[Отказ от ответственности: я активно участвую в этом проекте!]