web-dev-qa-db-fra.com

Optimisation hyperparamétrique pour le modèle Pytorch

Quelle est la meilleure façon d'effectuer une optimisation hyperparamétrique pour un modèle Pytorch? Mettre en œuvre par exemple Recherche aléatoire moi-même? Utilisez Skicit Learn? Ou y a-t-il autre chose dont je ne suis pas au courant?

17
Alex

La façon la plus simple et sans paramètre d'optimiser la boîte noire est la recherche aléatoire, et elle explorera les espaces de grande dimension plus rapidement qu'une recherche dans la grille. Il existe des articles à ce sujet, mais tl; dr avec la recherche aléatoire, vous obtenez des valeurs différentes sur chaque dimension à chaque fois, tandis qu'avec la recherche dans la grille, vous n'en avez pas.

optimisation bayésienne a de bonnes garanties théoriques (malgré les approximations), et des implémentations comme Spearmint peuvent envelopper n'importe quel script que vous avez; il existe des hyperparamètres mais les utilisateurs ne les voient pas dans la pratique. Hyperband a attiré beaucoup d'attention en montrant une convergence plus rapide que l'optimisation bayésienne naïve. Il a pu le faire en exécutant différents réseaux pour différents nombres d'itérations, et l'optimisation bayésienne ne prend pas cela en charge naïvement. Bien qu'il soit possible de faire mieux avec un algorithme d'optimisation bayésien qui peut en tenir compte, tel que FABOLAS , dans la pratique, l'hyperband est si simple que vous êtes probablement mieux l'utiliser et le regarder pour régler l'espace de recherche à intervalles.

6
Gavin Gray

Vous pouvez utiliser optimisation bayésienne (divulgation complète, j'ai contribué à ce package) ou Hyperband . Ces deux méthodes tentent d'automatiser l'étape de réglage des hyperparamètres. Hyperband est censé être l'état de l'art dans cet espace. Hyperband est la seule méthode sans paramètre dont j'ai entendu parler autre que la recherche aléatoire. Vous pouvez également envisager d'utiliser l'apprentissage par renforcement pour apprendre les hyperparamètres optimaux si vous préférez.

5
jmancuso

De nombreux chercheurs utilisent Tune . Il s'agit d'un cadre de réglage hyperparamétrique évolutif, spécifiquement pour l'apprentissage en profondeur. Vous pouvez facilement l'utiliser avec n'importe quel cadre d'apprentissage en profondeur (2 lignes de code ci-dessous), et il fournit la plupart des algorithmes de pointe, y compris HyperBand, Population-based Training, Bayesian Optimization et 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()

[Avertissement: je contribue activement à ce projet!]

5
richliaw