Hyperparameters Tuning 하이퍼파라미터 튜닝

[ 딥러닝 특화과정 ] 딥러닝에서 하이퍼파라미터 종류와 튜닝 방법을 정리합니다.

Hyperparameters $vs$ Parameters

  • Hyperparameters : 사용자가 직접 설정
  • Parameters : 모델 혹은 데이터에 의해 결정

Hyperparameter tuning

딥러닝에는 다양한 하이퍼파라미터가 존재한다.

No Hyperparameters
1 Learning rate α , stepsize, 학습률
2 모멘텀(Momentum) 알고리즘의 β
3 은닉 유닛의 수
4 미니배치 크기
5 은닉층의 갯수
6 학습률 감쇠(learning rate decay) 정도
7 Optimizer Adam $\beta_1, \beta_2, \epsilon$ $\beta_1 =0.9, \beta_2 =0.999, \epsilon=10^{-8}$ (튜닝을 해도 되지만, 보통 기본값을 사용한다.)

Tuning process

  1. 무작위 접근 방식 random sampling
    • (a) 딥러닝 이전에는 파라미터가 적었기 때문에 explored the values using a grid
    • (b) 딥러닝에는 많은 하이퍼파라미터가 존재하는데, 어떤 파라미터가 중요한지 미리 알 수 없기 때문에 다양한 값을 탐색하도록 무작위 접근 방식을 추천한다.
  2. 정밀화 접근 방식 coarse to fine
    전체 하이퍼파라미터 공간에서 무작위로 탐색하여 좋은 점을 찾은 후, zoom in to that section 그 근방의 작은 영역으로 확대해 더 정밀하게 탐색하는 것이다.

Using an Appropriate Scale - learning rate α, Momentum β

은닉 유닛의 수, 은닉층의 수는 무작위로 뽑는 것이 합리적인 하이퍼파라미터이지만, 그렇지 않은 경우도 존재한다.

학습률 learning rate

1 과 0.0001 사이의 값중에 균일하게 무작위 값을 고르게 되면, 90%의 값이 1 과 0.1 사이에 존재하기 때문에, 합리적이라고 할 수 없다. using logarithmic scale rather then in linear scale 선형척도(1) 대신 로그척도(2)에서 찾는 것이 더 합리적인 방법이다.

# 0과 -4 사이에 균일하게 "무작위로 고르고" 
r = -4*np.random.rand() 
# "10의 지수로" 바꿔주는 것 
α = 10**r

지수 가중 이동 평균 β

  • $β$ best range : $[0.9 , 0.999]$
  • $β$의 샘플을 뽑을 때도 최적의 값을 구하기 위해 0.9 와 0.999 사이의 값을 선형 탐색하는 것은 비합리적이기 때문에 $1-β$ 를 취해준 후, 위의 예시와 마찬가지로 로그척도에서 무작위 값을 선택하여 탐색한다.
    1 - β in range 0.001 to 0.1 (1 - 0.9 and 1 - 0.999)
a_log = -3
b_log = -1 
r = (a_log-b_log) * np.random.rand() + b_log 

# 1-beta = 10^r 
beta = 1 - 10^r
  • 선형척도가 비합리적인 이유? : $β$가 1에 가까울 수록 알고리즘 결과에 더 큰 영향을 끼치기 때문이다.
    • 예를 들어, $β$값이 (A) 0.9000 → 0.9005 (B) 0.9990 → 0.9995 변하는 경우, (A)보다 (B)가 알고리즘에 더 큰 영향을 끼친다.
      (A)는 약 10개의 값을 (B)는 1000개→2000개의 값의 평균을 구하는 것이기 때문이다. $(1/(1-β))$ : $β$가 1에 가까울 수록 작은 변화에 민감하게 반응한다. 따라서 $1-β$를 취해준 후 0에 가까운 곳에서 샘플을 뽑는 것이 더 효율적이다.

Hyperparameters tuning in practice: Pandas vs. Caviar

하이퍼파라미터 튜닝 프로세스 : Computation Resource에 따라 결정한다.

  • Pandas baby sitting "one" model : 리소스 CPU, GPU가 많지 않은 경우 사용하는 방법이다.
    1. 파라미터를 무작위로 초기화 후 훈련 시작
    2. 러닝커브를 지켜보면서 하이퍼파라미터를 조금씩 변경한다.
  • Caviar 동시에 여러 모델 훈련 Training many models in parallel : 리소스가 충분한 경우, 여러 모델 병렬적으로 훈련 후 결과를 확인/비교한다.

Source&Reference : 하이퍼파라미터 (Hyperparameter) > 도리의 디지털라이프