일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- Learning rate Scheduler
- Cosine annealing
- 머신러닝
- deep learning
- 인공지능 그랜드 챌린지
- 부스트캠프
- Lr Scheduler
- 딥러닝
- ai
- 음성인식
- End-To-End
- Machine Learning
- VAD
- aitech
- 인공지능
- 부스트캠프ai
- 네이버커넥트재단
- Today
- Total
AI4NLP
Learning rate Scheduler 설명 본문
딥러닝, 머신러닝을 사용할 때에 Model이나 Optimizer에는 많은 신경을 쓰지만 Lr Scheduler에는 많은 신경을 쓰지 않는 경우가 많습니다. (제가 그랬습니다...ㅠㅠ)
실제 학습을 할 때에 어떤 Lr Scheduler를 고르느냐, Lr Scheduler의 Hyperparameter로 어떤 값을 고르느냐에 따라 학습 결과에는 큰 차이가 존재합니다.
Lr Scheduler는 미리 학습 일정을 정해두고, 그 일정에 따라 학습률을 조정하는 방법입니다. 일반적으로는 warmup이라는 파라미터를 정하고 현재 step이 warmup보다 낮을 경우는 learning rate를 linear하게 증가 시키고, warmup 후에는 각 Lr Scheduler에서 정한 방법대로 learning rate를 update합니다.
이번 포스팅에서는 Learning rate scheduler(이하 Lr Scheduler)에 대해 다뤄보려고 합니다.
-
Constant Lr Scheduler
Learning rate를 고정된 값(Constant)으로 설정하는 Lr Scheduler입니다. Learning rate의 변화가 없으며, 처음부터 끝까지 고정된 값으로 학습되는 방식입니다.
-
Exponential Lr Scheduler
매번마다 현재 step의 비율을 지수(exponential)로 취해주는 Lr Scheduler입니다. stage_length를 정해주고 현재 step이 stage_length 이하일 때까지는 1이하의 값을 지수로 취해주고, 현재 step가 stage_length를 초과할 경우는 1 이상의 값을 지수로 취해줍니다. floor 함수를 취해서 step의 비율 값을 정수로 설정할 수도 있습니다.
cur_stage = step / stage_length
if staircase:
cur_stage = np.floor(cur_stage)
learning_rate = init_lr * decay ** cur_stage -
King Lr Scheduler
King Scheduler는 loss history에 맞는 OLS(Ordinary least square)의 기울기가 음수일 확률을 계산하고, 최근 step에서의 이 확률이 51% 미만일 경우, learning rate를 급격하게 감소시키는 방법입니다.
참고 ) http://blog.dlib.net/2018/02/automatic-learning-rate-scheduling-that.html
-
Cosine Lr Scheduler
warmup 후에는 코사인 함수를 이용하여 Learning rate를 scaling하는 방식입니다. t_curr은 현재 주기 범위 내의 업데이트 비율이며 t_i는 현재 주기 범위입니다.
lr = lr_min + 0.5*(lr_max - lr_min)*(1 + cos(t_cur / t_i)) -
Noam Lr Scheduler
linear한 warmup 후 inverse square root를 취하여 업데이트 하는 방식입니다. 'Attention is all you need" 논문에서 transformer 업데이트에 사용한 Lr Scheduler입니다.
lr = scale_factor * ( (model_dim ** (-0.5)) * adj_step )
adj_step = min(step_num ** (-0.5), step_num * warmup_steps ** (-1.5))
논문 : https://arxiv.org/abs/1706.03762 -
ReduceLROnPlateau
warmup 이전까지는 선형적으로 증가시키다가, warmup 이후 val_loss의 정체(Plateau)가 생기면 Learning rate를 축소시키는 방법입니다.
Training 에서는 같은 모델이더라도, 어떤 Lr Scheduler를 사용하냐에 따라 더 좋은 결과를 얻어낼 수 있을 것입니다.
'Machine Learning' 카테고리의 다른 글
Making Pre-trained Language Models Better Few-shot Learners (0) | 2021.10.24 |
---|---|
따라하며 하는 Slurm 세팅 & 설명, Ubuntu 18.04 (4) | 2021.04.18 |
코싸인 어닐링,Cosine annealing learning rate scheduler 간단 설명 (1) | 2020.12.13 |
GPT-3 paper를 읽고 써보는 간략한 리뷰 혹은 설명, Language Models are Few-Shot Learners (0) | 2020.09.06 |
추천 시스템(Recommendation System) - 협업 필터링 (Collaborative filtering) 설명 (1) (0) | 2020.07.19 |