PyTorch : Hyper-parameter Tuning
Introduction
- 모델 성능을 좋게 만드는 방법은 크게 3가지가 있다.
- 모델 변경
- data check
- hyperparameter tuning
- 모델을 변경하는 것은 사실 요즘 좋은 backbone 모델이 있어서 큰 의미는 없다.
- 가장 좋은 성능 향상을 보이는 것은 data preprocessing인데, 이 부분이 요즘 가장 화두가 되는 MLOps와 관련이 깊다.
- Hyper parameter tuning은 좋은 성능을 보일 것이라 생각했지만 요즘은 별로 큰 향상을 보이지는 못한다.
Hyper-parameter Tuning
- 모델 스스로 학습하지 않는 값을 사람이 직접 지정하며 모델의 성능을 확인한다.
- learning rate, 모델 크기, optimizer 등등
- 요즘은 AutoML의 발달로 이 부분도 많이 축소가 되고 있다.
- 가장 기본적인 방법론에는 Grid Search와 Random Search가 있다.
Random Search for Hyper-parameter Optimization
- Grid Search란 왼쪽 그림처럼 해당하는 경우의 수 조합을 모두 확인하는 방식이다.
내 기억으론GridSearchCV
라는 함수를 쓰면 TensorFlow에서 튜닝을 했는데 토치는 될지 모르겠다. - 또 다른 방법은 Random으로 가장 좋은 조합을 찍어내는 것이다.
- 과거에 자주 사용하는 방식은 Random Search로 탐색을 하다가 잘 나오는 부분에서 Grid Search를 진행하는 방식을 썼다.
- 요즘은 베이지안 방식을 많이 사용하는데 이 방법은 BOHB 2018에서 참고할 수 있다.
Ray
- Spark를 개발한 연구실에서 개발한 multi-node multi processing 지원 모듈이다.
- 머신러닝의 병렬 처리에서 자주 사용하기 위해 만들어졌다.
- Ray Settings
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from ray import tune
from ray.tune import CLIReporter
from ray.tune.schedulers import ASHAScheduler
data_dir = # your directory
load_data(data_dir)
config = {
'''
your hyper-parameter tuning configuration
'''
}
scheduler = ASHASceduler(metric=metric, mode=mode, max_t=max_num_epochs, grace_period=1, reduction_factor=2)
reporter = CLIReporter(metric_colums=metric_columns)
result = tune.run(
partial(train_cifar, data_dir=data_dir),
resource_per_trial={'cpu':cpu_num, 'gpu':gpus_per_tiral},
config=config, num_samples=num_samples,
scheduler=scheduler,
progress_reporter=reporter
)
config
에 우리가 테스트할 hyper-parameter 조합을 설정한다.scheduler
가 중요한데, 스케쥴러를 세팅하는 방식에 따라 어떤 값을 체크하고 어떻게 파라미터 조합을 짤 지를 결정한다.
Comments powered by Disqus.