[ 딥러닝 특화과정 ] 딥러닝에서 하이퍼파라미터 종류와 튜닝 방법을 정리합니다.
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
- 무작위 접근 방식 random sampling
- (a) 딥러닝 이전에는 파라미터가 적었기 때문에 explored the values using a grid
- (b) 딥러닝에는 많은 하이퍼파라미터가 존재하는데, 어떤 파라미터가 중요한지 미리 알 수 없기 때문에 다양한 값을 탐색하도록 무작위 접근 방식을 추천한다.
- 정밀화 접근 방식 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에 가까운 곳에서 샘플을 뽑는 것이 더 효율적이다.
- 예를 들어, $β$값이 (A) 0.9000 → 0.9005 (B) 0.9990 → 0.9995 변하는 경우, (A)보다 (B)가 알고리즘에 더 큰 영향을 끼친다.
Hyperparameters tuning in practice: Pandas vs. Caviar
하이퍼파라미터 튜닝 프로세스 : Computation Resource에 따라 결정한다.
- Pandas
baby sitting "one" model
: 리소스 CPU, GPU가 많지 않은 경우 사용하는 방법이다.- 파라미터를 무작위로 초기화 후 훈련 시작
- 러닝커브를 지켜보면서 하이퍼파라미터를 조금씩 변경한다.
- Caviar 동시에 여러 모델 훈련
Training many models in parallel
: 리소스가 충분한 경우, 여러 모델 병렬적으로 훈련 후 결과를 확인/비교한다.
Source&Reference : 하이퍼파라미터 (Hyperparameter) > 도리의 디지털라이프
'Certificate - DS > Deep learning specialization' 카테고리의 다른 글
Model Debugging - Hyperparameter 하이퍼파라미터 값 조정 (0) | 2021.11.23 |
---|---|
Model debugging and Loss curve (0) | 2021.11.23 |
Activation Function 활성화 함수 - Sigmoid, tanh, ReLU, LeakyReLU (0) | 2021.11.21 |
[Hyperparameters] Batch/Batch size/Epoch/Iteration 배치, 에포크 (0) | 2021.11.20 |
Overfitting, Strategies to prevent overfitting 과적합과 과적합 문제를 해결하기 위한 방법 (0) | 2021.11.19 |