끊임없이 실험들을 정리를 하고 그것을 바탕으로 좋은 모델을 찾아내는 것을 Hyperparameter tuning이라 한다.
좋은 모델을 찾아내는 방법
Hyperparameter Tuning
모델 스스로 학습하지 않는 값은 사람이 지정(learning rate, model(batch) size, optimizer 등)
한 때는 hyperparameter에 의해 값이 크게 좌우 될 때도 있었지만, 요즘에는 그렇지 않다.
최근에는 베이지안 기반 기법들이 주도하고있으며, 가장 기본적인 방법으로는 grid 와 random이 있다.
grid
random
Ray
data_dir = os.path.abspath("./data")
load_data(data_dir)
# config에 하이퍼 파라미터 search space 지정
config = {"l1": tune.sample_from(lambda _: 2 ** np.random.randint(2, 9)),
"l2": tune.sample_from(lambda _: 2 ** np.random.randint(2, 9)),
"lr": tune.loguniform(1e-4, 1e-1),
"batch_size": tune.choice([2, 4, 8, 16])}
# 학습 스케줄링 알고리즘 지정
scheduler = ASHAScheduler(metric="loss", mode="min", max_t=max_num_epochs,
grace_period=1,reduction_factor=2)
# 결과 출력 양식 지정
reporter = CLIReporter(metric_columns=["loss", "accuracy", "training_iteration"])
# 병렬 처리 양식으로 학습 시행
result = tune.run(partial(train_cifar, data_dir=data_dir),resources_per_trial={"cpu": 2, "gpu": gpus_per_trial},
config=config, num_samples=num_samples,scheduler=scheduler,progress_reporter=reporter)