본문 바로가기
Deep Learning

[Transformer optimize scheduler] Huggingface에서 제공하는 함수

by 지구킹 2023. 5. 26.
728x90

Huggingface에서 제공하는 transformer optimize scheduler중 가장 많이 사용되는 함수에 대해 간략히 정리해보고자 한다.


get_constance_schedule

  • 학습률을 일정한 상수로 유지하는 역할을 수행. 따라서 입력된 optimizer에 대한 learning rate scheduler를 생성하고 반환한다.
  • 학습률을 동적으로 조정하는 대신 고정된 학습률을 사용하고자 할떄 유리하다.

 

get_constance_schedule_with_warmup

  • 일정한 상수 학습률을 유지하면서 동시에 warm-up 기간 동안 학습률을 선형적으로 증가시키고 이후에는 일정한 학습률을 유지하는 역할을 한다.
  • num_warmup_steps: 총 훈련 스탭 수에 대한 일정 비율로 설정된다. 예를들어, 전체 훈련 스텝의 10%를 웜업 기간을 설정한다면, 초기에는 학습률이 점차적으로 증가하여 안정화된 모델 파라미터를 얻을 수 있다.
    • 보통 설정하는 수식은 (전체 샘플 수/batch_size) *2를 한다
  • last_epoch: 마지막 에폭의 인덱스를 나타낸다.

 

get_cosine_schedule_with_warmup

  • warm-up 기간 동안 학습률을 선형적으로 증가시킨 후, 코사인 함수를 사용하여 학습률을 감소시키는 역할을 한다.
  • num_training_steps: 전체 훈련 스텝 수를 나타내며, (전체 샘플 수 / 배치사이즈)*epoch 로 계산된다.
  • num_cycles: 코사인 함수의 주기 수를 나타낸다.
  • last_epoch: 마지막 에폭의 인덱스를 나타낸다.

 

get_cosine_with_hard_restarts_schedule_with_warmup

  • warm-up 기간동안 학습률을 선형적으로 증가시킨 후, 하드 리스타트 주기와 코사인 함수를 결합하여 학습률을 조정하는 역할을 한다.
  • 하드 리스타트 주기는 학습률이 감소하고 다시 증가하는 주기를 말하며, 코사인 함수의 주기를 기반으로 계산된다.
  • num_cycles: 하드 리스타트 주기를 코사인 함수의 주기로 나눈 값으로, 학습률이 하드 리스타트 주기마다 증가하고 다시 감소하는 횟수를 결정한다.

 

get_linear_schedule_with_warmup

  • warn-up 기간동안 학습률을 선형적으로 증가시킨 후 일정한 비율로 감소시키는 역할을 한다.

 

get_polynomial_decay_schedule_with_warmup

  • warm-up 기간동안 학습률을 선형적으로 증가시킨 후 다항식 함수를 사용하여 학습률을 감소시키는 역할을 한다.
  • power: 다항식 함수의 차수를 지정한다. 값이 1.0인 경우 선형 감소를 나타내며, 2.0인 경우 제곱 감소를 나타낸다.
  • lr_end: 학습 종료 시점의 학습률을 지정한다. 즉, 훈련 스텝이 num_training_steps에 도달할 때까지 학습률이 lr_end로 감소한다. 이 값을 0으로 설정하면 학습 종료시점에 학습률이 0이된다.


나의 경우, 보통 linear schedule을 많이 사용했었다. 하지만 reference를 찾아본 결과, cosine annealing 방식으로 스케쥴링을 하면 효과적이라는 것을 발견했다. (Cosine annealing방식은 "SGDR: Stochastic Gradient Descent with Warm Restarts"에서 제안된 스케쥴러 이다.)

 

이 방식의 이점은 최댓값과 최소값 사이에서 코싸인 함수를 이용하여 급격히 증가시켰다가 급격히 감소시키기 때문에 모델의 매니폴드 공강의 saddle point를 빠르게 벗어날 수 있으며, 학습 중간에 생기는 정체 구간들 또한 빠르게 벗어날 수 있도록 한다. 결과적으로 모델의 일반화 성능을 극대화 시켜준다고 한다.

 

실제 실험 결과에서도 cosine annealing을 이용하여 학습한 wide residual network가 cosine annealing을 사용하지 않고 학습한 wide residual network에 비해 테스트 데이터에서 0.5%, 1.0%의 높은 성능을 보여준다.

 

따라서 어떤 scheduler를 사용할지 애매할 경우, get_cosine_with_hard_restarts_schedule_with_warmup 스케줄러를 활용하여 모델을 학습시키는 것을 권장한다.

 

Reference

* https://huggingface.co/docs/transformers/main_classes/optimizer_schedules

* https://paperswithcode.com/method/cosine-annealing

 

Papers with Code - Cosine Annealing Explained

Cosine Annealing is a type of learning rate schedule that has the effect of starting with a large learning rate that is relatively rapidly decreased to a minimum value before being increased rapidly again. The resetting of the learning rate acts like a sim

paperswithcode.com

 

728x90

댓글