[DL] 5.3. hyper-parameter 선정 방법: validation loss

2024. 3. 10. 14:24ML/DL

이전 글에서 여러 hyper-parameter(batch size, learning rate, weight initialization) 성질에 대해 살펴봤다.

이번 글에서는 적절한 hyper-parameter 조합을 찾는 효율적인 방법에 대해 살펴볼 것이다.

train vs validation vs test

일반적으로, hyper-parameter 조합의 적절함은 해당 조합으로 학습한 모델의 성능(e.g., loss, accuracy)을 기준으로 평가한다.

즉, 가장 높은 성능을 보여주는 hyper-parameter 조합이 가장 적절하다고 판단하는 것이 일반적이다.

 

그러하나, 학습 데이터셋 성능을 기준으로 사용(=검증)하면 안된다.

우리가 궁극적으로 원하는 것은 범용 성능(=일반화) 즉, 테스트 데이터 성능이 가장 높은 모델인데, 학습 데이터셋 성능을 기준으로 사용하면 학습 데이터셋에 over-fitting 되어 일반화가 안되기 때문이다.

 

그렇다고, 테스트 데이터셋을 기준으로 사용해도 안된다. 

hyper-parameter가 테스트 데이터셋에 over-fitting 되기 때문이다. 즉, 테스트 데이터셋에만 적합하도록 hyper-parameter를 조정한 것이기 때문이다.

처음 본 데이터로 성능을 측정해 범용 성능을 파악해야 하는데, 테스트 데이터셋으로 hyper-parameter를 조정하면 처음 본 데이터가 아니기 때문에, 테스트 데이터셋으로써의 의미가 없어진다.

 

그래서, hyper-parameter를 조정할 때 사용하는 전용 데이터가 필요하게 된 것이다. 우리는 이를 "검증 데이터셋"이라 부른다.

일반적으로, 검증 데이터셋은 학습 데이터셋 일부를 분리해 사용한다.

(e.g., validation dataset에서 가장 잘할 때 학습을 멈춘다 = epoch 수, validation dataset에서 가장 잘하는 모델을 고른다 = model 구조)

 

요약, 훈련 데이터: weight 학습, 검증 데이터: hyper-parameter 검증, 시험 데이터: 범용 성능 평가


하이퍼 파라미터 최적화

하이퍼 파라미터를 최적화할 때의 핵심은 하이퍼 파라미터의 최적값이 존재하는 범위를 조금씩 줄여간다는 것이다.

범위를 조금씩 줄이려면 우선 1). 대략적인 범위를 설정하고 2). 그 범위에서 "무작위"로 하이퍼 파라미터 값을 골라낸 후, 3). 추출한 값으로 학습을 하고 성능을 측정한다. 4). 높은 성능을 가진 값들(e.g., top-5)을 기반으로 범위를 재설정하여, 위 과정을 반복한다.

 

하이퍼 파라미터의 범위는 '대략적으로' 지정하는 것이 효과적이다. 실제로도 "0.001에서 1000사이와 같이 10의 거듭제곰 단위"(=log scale)로 범위를 설정한다.

 

팁을 주자면, 모델 학습은 오랜 시간이 걸리기 때문에 나쁠 듯한 값은 일찍 포기하는 것이 효율적이다. 그리고 step 횟수 혹은 epoch 횟수를 줄여 모델 학습 시간을 단축시키는 것도 효율적이다.

 

참고로, 위에서 설명한 최적화 방법보다 세련된 "베이즈 최적화" 방법이 존재한다.

자세한 내용은 Practical Bayesian Optimization of Machine Learning Algorithm을 참고해라.


K-Fold Cross Validation

데이터셋 크기가 작을 때 사용한다. 데이터셋 크기가 작으면 편향될 가능성이 높기 때문이다.

즉, 모든 데이터를 학습/검증에 사용하기 위해 이 기법을 사용하는 것이다.

 

서로 다른 학습/검증 데이터셋 조합을 k개 만든다. 그 후, 각 학습/검증 데이터셋 조합으로 모델을 학습시켜 총 k개 모델을 만든다.

 k개의 모델의 평균 validation loss를 구해, hyper-parameter 조합을 평가한다.

 

위 방식으로 최적 hyper-parameter 조합을 찾았으면, 일반적으로, 검증 데이터셋을 포함한 학습 데이터셋 전체로 새롭게 모델을 학습시키거나, 기존에 학습시킨 k개의 모델을 활용한다. (e.g., majority vote)