web-dev-qa-db-ja.com

Pytorchモデルのハイパーパラメーター最適化

Pytorchモデルのハイパーパラメーター最適化を実行する最良の方法は何ですか?実装する自分でランダム検索? Skicit Learnを使用しますか?または、私が気付いていない他に何かありますか?

17
Alex

ブラックボックスの最適化を行う最も簡単なパラメーターなしの方法はランダム検索であり、グリッド検索よりも高速に高次元の空間を探索します。これに関する論文がありますが、ランダム検索ではtl; drごとに毎次元ごとに異なる値を取得しますが、グリッド検索ではそうではありません。

ベイジアン最適化 は(近似にかかわらず)優れた理論的保証があり、スペアミントのような実装は、お持ちのスクリプトをラップできます。ハイパーパラメーターはありますが、実際にはユーザーには表示されません。ハイパーバンドは、単純ベイズ最適化よりも高速な収束を示すことで多くの注目を集めました。異なる反復回数で異なるネットワークを実行することでこれを行うことができましたが、ベイジアン最適化はそれを素朴にサポートしていません。 [〜#〜] fabolas [〜#〜] など、これを考慮に入れることができるベイジアン最適化アルゴリズムを使用することでより良い結果を得ることができますが、実際にはハイパーバンドは非常に単純です。間隔を空けて検索スペースを調整するために使用し、監視することをお勧めします。

6
Gavin Gray

ベイジアン最適化 (完全公開、このパッケージに貢献しました)または ハイパーバンド を使用できます。これらの方法はどちらも、ハイパーパラメーター調整段階の自動化を試みます。ハイパーバンドは、おそらくこの分野の最先端技術です。ハイパーバンドは、ランダム検索以外で聞いた、パラメーターを使用しない唯一の方法です。必要に応じて、強化学習を使用して最適なハイパーパラメーターを学習することもできます。

5
jmancuso

多くの研究者は Tune を使用します。これは、特にディープラーニング向けのスケーラブルなハイパーパラメーター調整フレームワークです。ディープラーニングフレームワーク(以下の2行のコード)で簡単に使用でき、HyperBand、Population-based Training、Bayesian Optimization、および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()

[免責事項:私はこのプロジェクトに積極的に貢献しています!]

5
richliaw