Data Science/ML | DL

Learning Rate Scheduling과 Hyperparameter Tuning

402번째 거북이 2023. 3. 19. 16:39

😶Learning Rate Scheduling

2023.03.06 - [Data Science/ML | DL] - Optimization: Gradient Descent를 넘어서

 

Optimization: Gradient Descent를 넘어서

Optimization에 대한 포스팅을 Gradient Descent 를 중점으로 했었다. 2022.08.21 - [Data Science/ML | DL] - Optimization: Random Search부터 Gradient Descent까지 Optimization: Random Search부터 Gradient Descent까지 Optimization이란?😶

dippingtodeepening.tistory.com

Optimizer인 SGD, SGD+Momentum, Adagrad, RMSprop, Adam 모두 Learning Rate를 hyperparameter로 필요로 한다.

 

고정된 gloabal learning rate를 사용하는 것보다, learning rate를 조건에 맞게 감소시키는 방식이 필요할 수 있다.

이러한 learning rate 조정법을 learning rate scheduling이라고 하며, 그 종류에는 아래와 같은 것들이 있다.

 

# Linear Decay

임계지점에 도달하기 이전까지 lr을 선형적으로 감소시키는 방식이다.

 

# Step Decay

특정 지점에 도달하면 lr을 감소시킨다.

 

# Exponential Decay

연속적인 exponential 형태로 lr을 감소시킨다.

 

✔️초기 LR 설정법

제일 처음 learning rate는 어떻게 초기화하는 것이 좋을까.

일반적으로 초기 lr을 설정하는 방식은 아래와 같다.

 

1. 처음 몇 번(100번 정도)의 iteration을 모니터링해서 가장 performance가 잘 나온 lr을 initial learning rate로 초기화한다. 

2. minibatch의 크기를 고려하여 lr을 정한다. (batch size가 클수록 lr을 크게 해도 안정적이다.)

3. 초기화한 lr이 loss explode를 야기하는 것 같다면 lr을 아주 작은 수에서부터 (~최대 5000 iteration까지) linearly increase해본다.


😶Hyperparameter Tuning

✔️파라미터와 하이퍼파라미터의 차이

파라미터는 곧 모델의 형태다. Weight, bias가 파라미터인 것!

training을 하여 파라미터를 계속 업데이트하는 것이 모델 훈련과정이다.

 

하이퍼파라미터는 우리가 파라미터를 최적화하기 위해 튜닝해야 하는 요소들이다.

lr, #of layers, learning rate, batchsize 등이 하이퍼파라미터이다.

 

✔️Manual Tuning

하이퍼파라미터 튜닝방식 중 하나다.

말 그대로 여러 하이퍼파라미터 조합을 하나하나 실행해보면서 성능을 비교해 최적 파라미터를 찾는 방식이다.

각 하이퍼파라미터가 어떤 역할을 하는지 이해할 필요가 있는 방식이다.

기본적인 strategy는 최적 하이퍼파라미터를 찾기 위해 cross validation을 하는 것.

 

# Coarse-to-fine Sampling Scheme

성능이 좋은 하이퍼파라미터 조합이 분포하는 region에 대해서 sampling down하여 다시 시행하면 된다.

 

# Random Sampling over Grid Search

Grid Search 방식은 중요하지 않은 하이퍼파라미터만 바뀌고 중요한 하이퍼파라미터가 고정되어있다면 소용이 없다.

(연산만 많고 성능에는 그렇게 영향이 가지 않을 것이기 때문. 그림 참고)

이 경우 Random Search 방식이 더 exploration 측면에서 유리하다.

특정 하이퍼파라미터가 타 하이퍼파라미터보다 중요한 현상이 반영되기 때문이다.

 

✔️바람직한 Sampling Distribution

하이퍼파라미터를 샘플링 할 때 적절한 분포에 대한 설명이다.

# Binary/Discrete Hyperparameter

연속적이지 않은 형태의 하이퍼파라미터는 Bernoulli나 Multinoulli 분포에서 샘플링한다.

 

# Positive Real-Valued Hyperparameter

양의 실수인 연속 하이퍼파라미터는 log-scale의 Uniform Distribution에서 샘플링한다.

그냥 uniform한 분포에서 샘플링하지 않고 log-uniform한 분포에서 샘플링하는 이유는 아래 그림과 같다.

우리가 집중적으로 보길 원하는 하이퍼파라미터 구간기 0.0001에서 0.1이라고 하자.

위의 uniform distribution처럼 샘플링할 경우 원하는 범위의 샘플이 충분히 뽑히지 않는다.

반면 log-uniform distribution의 경우 해당 구간에 대한 성능을 충분히 확인할 수 있다.

 

✔️하이퍼파라미터 선정 매뉴얼

1. Initial Loss 확인

weight decay를 끈다. 초기설정단계에서의 loss를 확인하는 과정이다.

 

2. Overfitting a small sample

작은 sample에 대해서 100% accuracy가 될 때까지 training한다.

'학습'을 할 수 있는지 여부를 확인하는 과정이다.

학습시켰을 때 loss의 경향에 따라 학습이 잘 되고 있는지 진단할 수 있다.

* loss가 줄어들지 않을 때 → underfitting이 일어나고 있는 것이다. (too low learning rate, bad initialization)

* loss가 exploding할 때  learning rate가 너무 높은 것이다. (also bad initialization)

3. Loss를 감소시키는 Learning Rate 찾기

weight decay를 켜고 loss가 우하향 curve를 그리도록 만드는 learning rate를 찾는다.

 

4. Coarse Grid, Train for 1~5 epochs

3번에서 유력한 lr과 weight decay를 찾아 1~5 epoch만큼만 훈련시켜본다.

 

5. Refine Grid, Train Longer

4번에서 best model을 선정한다.

선정한 모델을 lr scheduling없이 좀 더 오랜 epoch동안 학습시킨다.

 

6. Monitor Performance Curve

학습에 이상이 있는지 성능곡선을 통해 확인한다.

필요에 따라 이상이 있다면 5번으로 돌아간다.


😶Performance Curve Monitoring

위에서 설명한 하이퍼파라미터 선정 매뉴얼에서 6번에 해당하는 내용이다.

여러 Performance Curve의 형태를 살펴보고 각각이 어떤 상황에 해당하는지 보자.

 

✔️ Training Accuracy Curve를 통한 Underfitting / Overfitting 확인

Training Accuracy가 예쁜 곡선을 그리며 우상향해야 학습이 진행되고 있는 것.

 

✔️ Loss 감소패턴

Learning Rate의 Bad Initialization case이다.

 

Loss가 감소하지 않고 수렴하는 현상이 일어나고 있음을 확인할 수 있다.

이 때는 Learning Rate를 줄여가야 한다.

 

learning rate decay를 너무 일찍 진행했을 때 발생하는 현상이다.

loss가 감소하고 있었는데 learning rate를 줄여버려서 더 이상 loss가 줄어들고 있지 않다.

 

✔️ Training Acc, Testing Acc 패턴

Accuracy가 아직 수렴하지 않고 계속 오르고 있다.

좀 더 많은 epoch동안 학습시켜 성능을 향상시켜야 한다.

 

Training accuracy는 계속해서 오르나 validation accuracy가 증가하다 갑자기 감소하는 패턴은 전형적인 Overfitting이다.

이 때는 데이터 양을 늘리거나 규제를 사용해 모델의 복잡도를 줄여야 한다.

 

Train/Val Accuracy간 차이가 없다.

정상적으로 학습이 된다면 Training Accuracy가 Validation Accuracy보다 살짝 높아야 한다.

'학습' 자체가 잘 되고 있지 않을 가능성이 있다.