[Pytorch] Hyperparameter Tuning

hyunsooo·2022년 9월 28일
0

원하는 결과를 얻기 위한 방법은 대표적으로 아래와 같다.

  1. 모델자체를 바꾸기

  2. 데이터를 추가하기

  3. Hyperparameter Tuning

모델자체를 바꾸는 것이 가장 지대한 영향을 주지만 최근에는 좋은 모델이란 것이 일반화 되어 있기 때문에 데이터를 추가하는게 더 좋은 성능을 내기 쉽다. 그 다음이 Hyperparameter Tuning이 된다.

Hyperparameter Tuning

  • 모델 스스로 학습하지 않는 값은 사람이 지정한다. (Learning Rate, 모델의 크기, optimizer 등)

  • 하이퍼파라미터에 의해서 값이 크게 좌우 될 때도 있었지만 최근에는 큰 기대를 하지 않는편이다.

  • 마지막 0.01이라도 성능을 높이기 위한 작업이라고 이해할 수 있다.

  • 가장 기본적인 방법은 grid, random이 있다.

    • grid : 일정한 파라미터 수치에 대한 조합을 전부 실험해본다.
    • random : random으로 좋은 파라미터를 찾고 그 영역안에서 grid를 사용한다.
  • 최근에는 베이지안 기반 기법들이 주도한다.(BOHB)

Ray

  • multi-node multi processing 지원 모듈(node:컴퓨터)

  • ML/DL의 병렬 처리를 위해 개발된 모듈

  • 기본적으로 현재의 분산병렬 ML/DL 모듈의 표준

  • Hyperparameter Search를 위한 다양한 모듈 제공

  • pip install ray


data_dir = os.path.abspath("./data")
load_data(data_dir)
# 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)),
    # grid라는 것을 알 수 있음
    "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_samplers=num_samplers,
    scheduler=scheduler,
    progress_reporter=reporter)
  • ray를 사용할때는 모든 코드가 하나의 함수형태로 구성되어야 한다.
profile
지식 공유

0개의 댓글