Polynomial Learning Rate 스케줄링이란?
딥러닝 모델을 훈련할 때 사용되는 학습률(learning rate) 스케줄링 기법 중 하나로,
시작 학습률()에서 최종 학습률()까지 학습률을 다항식 형태로 감소시키는 방식.
•
최대학습 시간() 동안, 학습률의 감소 패턴을 다항식으로 모델링해서 훈련과정을 최적화
•
감소율은 다항식의 차수인 에 의해 결정됨
→ 다항식의 차수를 조절하는 방식으로 학습률 감소 정도를 제어
Polynomial Learning Rate Scheduler 수식
◦
: 시간 t 에서의 학습률
◦
, : 시작 학습률, 최종학습률
◦
: 학습률 감소를 적용할 최대 시간(에포크)
◦
: 다항식 차수 (값이 클수록 감소 속도가 느려짐)
Polynomial Learning Rate 스케줄러 코드
다음은 SETR(Segmenter)모델에서 사용된 Polynomial Learning Rate Scheduler 클래스 코드이다.
scheduler.py 전체 코드
1. Polynomial LR 클래스 생성자
: PyTorch의 _LRScheduler를 상속받아 Polynomial Learning Rate 스케줄링을 위해 구현된 클래스
class PolynomialLR(_LRScheduler): # PolynomialLR 클래스는 PyTorch의 _LRScheduler를 상속받아 정의됩니다.
def __init__(
self,
optimizer,
step_size,
iter_warmup,
iter_max,
power,
min_lr=0,
last_epoch=-1,
):
self.step_size = step_size
self.iter_warmup = int(iter_warmup)
self.iter_max = int(iter_max)
self.power = power
self.min_lr = min_lr
super(PolynomialLR, self).__init__(optimizer, last_epoch) # 상위 클래스의 생성자 호출
Python
복사
•
생성자 함수 주요 파라미터
◦
optimizer: PyTorch 최적화 알고리즘 (예: SGD, Adam 등)
◦
step_size: 학습률을 업데이트할 스텝 사이즈
◦
iter_warmup: 학습 초기에 학습률을 서서히 증가시킬 워밍업 단계의 반복 횟수
◦
iter_max: 최대 반복 횟수 (이 값을 넘어서면 학습률이 min_lr로 고정됨)
◦
power: 다항식 감소에 사용되는 지수 (다항식의 차수)
◦
min_lr: 최소 학습률 값
◦
last_epoch: 마지막 에포크 번호, 기본값은 -1로 초기 설정
2. Polynomial_decay 함수
: Polynomial Learning rate decay 연산을 진행하는 함수
def polynomial_decay(self, lr):
iter_cur = float(self.last_epoch) # 현재 반복(iteration)횟수
if iter_cur < self.iter_warmup: # 워밍업 기간 동안은
coef = iter_cur / self.iter_warmup
coef *= (1 - self.iter_warmup / self.iter_max) ** self.power
else: # 워밍업 기간 이후는
coef = (1 - iter_cur / self.iter_max) ** self.power
return (lr - self.min_lr) * coef + self.min_lr # 다항식 감소 계산
Python
복사
[Polynomial Learning rate decay 연산 과정]
1.
self.last_epoch 를 실수형으로 변환하여 현재 반복 횟수 iter_cur 결정
2.
워밍업 기간 동안의 계산 정의
모델 초기화 과정에서 무작위로 높은 학습률 값을 사용하게 되면, 가중치 업데이트가 너무 커져서 모델이 불안정해질 수 있음
→ 워밍업 기간을 통해 점진적으로 학습률을 증가시키게 되면, 학습 초기단계에서의 과적합을 방지 가능.
해당 코드에서는 워밍업 기간(warm-up period)동안
현재 반복 횟수(iter_cur)가 워밍업 기간(iter_warmup)에 도달 할 때 까지 점진적으로 coef 값을 증가.
→ (coef)값을 곱해줌
→ coef 값은 학습률의 증가 속도를 결정하고, 워밍업 기간이 끝나면 초기에 설정된 학습률에 도달함
3.
워밍업 기간 이후의 계산
Polynomial Learning rate decay 수식을 사용해 각 단계마다 학습률을 감소시키고, 새로운 학습률 ()를 계산
•
현재학습률과 최소학습률 사이의 오차에 learning rate 감소율 값을 곱하는 방식으로 학습률을 감소 시킴
•
최소학습률 을 더해서 최종 학습률인 결정
4.
최종 learning rate 값 반환
3. get_lr 함수
: 학습 단계에 따른 학습률 반환 함수
→ 학습 단계에 따라 polynomial_decay를 적용할 지를 결정하여 학습률 값을 반환
def get_lr(self):
# 현재 에폭에서 학습률을 업데이트할지 여부를 결정
if (
(self.last_epoch == 0) #훈련이 시작된 후 첫 번째 에폭인 경우
or (self.last_epoch % self.step_size != 0) #현재 에포크가 학습률 업데이트 주기로 나누어 떨어지지 않는 경우
or (self.last_epoch > self.iter_max)#현재 에포크가 최대 반복횟수를 초과한 경우
):
# 변경 없이 현재 학습률 반환 (Polynomial Learing Rate Decay 사용X)
return [group["lr"] for group in self.optimizer.param_groups]
# 그 외의 단계에서는 다항식 감소를 적용한 학습률 반환
return [self.polynomial_decay(lr) for lr in self.base_lrs]
Python
복사