Day_14 02. Hyperparameter Tuning
작성일
Hyperparameter Tuning
제대로 한번 학습을 해보고 싶다.
끝날때 까지 끝난게 아니다.
- 모델을 바꾼다.
- 데이터를 추가한다.
- 많이 모으면 모을수록 더 좋은 모델을 만들 수 있음
- Hyperparameter Tuning
Hyperparameter Tuning
- 모델 스스로 학습하지 않는 값은 사람이 지정
- (learning rate, 모델의 크기, optimizer 등)
- 하이퍼 파라메터에 의해서 값의 크게 좌우 될 때도 있음 (요즘은 그닥?)
- 마지막 0.01을 쥐어짜야 할 때 도전해볼만!
이전 만큼의 중요성은 없어졌고 요즘은 많은 데이터로 극복해 나가는 중
- 가장 기본적인 방법 - grid vs random
- grid : learning_rate(0.1, 0.01, 0.001), batch_size(32, 64, 128)
- random : 무작위로 선택
- 최근에는 베이지안 기반 기법들이 주도
- BOHB 2018
Ray
- multi-node multi processing 지원 모듈
- ML/DL의 병렬 처리를 위해 개발된 모듈
- 기본적으로 현재의 분산병렬 ML/DL 모듈의 표준
- Hyperparameter Search를 위한 다양한 모듈 제공
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]),
}
# 학습 스케줄링 알고리즘 지정
# ASHAScheduler:
# 알고리즘이 실행이 되면서 중간중간에 의미없다고 생각하는(loss 값이 잘 안나오는) metric 들은 다 잘라내버림
# 가망이 없는 애들을 먼저 걸러버림
scheduler = ASHAScheduler(
metric='loss', mode='min', max_t=max_num_epochs, grace_period=1, reduction_factor=2)
# 결과 출력 양식 지정
# CLIReporter:
# command line report
reporter = CLIReporter(
metric_columns=['loss', 'accuracy', 'training_iteration'])
# 병렬 처리 양식으로 학습 시행
result = tune.run(
# 데이터를 쪼갬
partial(train_cifar, data_dir=data_dir), # train_cifar : 학습하는 함수
resources_per_trial={'cpu': 2, 'gpu': gpus_per_trial},
config=config, num_samples=num_samples,
scheduler=scheduler,
progress_reporter=reporter
)
Ray 를 사용하기 위해서는 학습과정이 함수로 정의되어야 한다!
하이퍼파라미터 튜닝보다 데이터가 훨씬 더 중요하다 시간대비 효과가 떨어짐
댓글남기기