요약
Cyclic learning rate (CLR) 은 learning rate을 수동으로 조절해갈 필요없이, 자동으로 최적의 값을 찾는 과정의 스케쥴링입니다. CLR은 LearningRateReduceOnPlatue와 같이 감소하는 방향으로만 학습율을 조절하는 것이 아니라, 특정 영역에서 증감을 반복합니다. 그리고 이를 실험적으로 증명했습니다.
Deep learning 에서의 Learning rate
딥러닝의 파라미터 업데이트은 stochastic gradient descent로, 아래와 같은 식으로 학습합니다.
$\theta^{t}=\theta^{t-1}-\epsilon_{t}\frac{\partial L}{\partial \theta}$
- L: 손실함수
- $\epsilon_{t}$: 학습
문제는 학습률이 너무 작으면 학습의 수렴이 느려지고, 너무 큰 경우는 학습의 수렴을 보장할 수 없습니다. 이를 해결하기위해서, CLR이 나오기 전까지는 단순히 학습율을 줄여나가는 방식등을 사용했습니다.
Cyclic learning rate (CLR)
CLR을 사용하는 경우는 아래의 그림(Figure 1)과 같이 더 적은 iteration내에 빠른 수렴을 실험적으로 할 수 있음을 보여주었습니다. CLR은 학습율을 증가시키는 것이 짧게는 학습에 부정적인 영향을 끼치지만, 학습의 긴 추이에서는 더 나은 최적화를 보여준다는 것을 경험적으로 확인해서 제안된 것입니다.
Cyclic learning rate은 최조값(minimum bound, base_lr), 최대값(Maximum bound, max_lr)을 지정해서 주기적으로 학습율을 증/감시키면서 학습합니다. 학습율을 어떻게 증감시킬지의 방법(policy)을 3가지로 제안합니다. 아래의 3가지 방법이 가능하며, 어떤 것을 사용하더라도 큰 차이없다고 합니다.
- Triangular window (linear)
- Welch window (parabolic)
- Hann window (sinusoidal)
아래는 triangular window (linear)의 방법입니다. 최대학습률, 최소 학습률, 스텝수(stepsize)의 3가지 파라미터를 사용자가 지정했을 떄, 최대최소율에 맞추어 증가, 감소하며 학습률이 변경됩니다. stepsize 반복할때까지 maxmum bound까지 올라가고, 이후 그 다음 stepsize까지 반복해서 최소학습률에 도달하는 식입니다. 파이토치에는 이를 구분하여 구현되어있습니다.(step_size_up, step_size_down)
CLR이 효과적인 이유(주장)
1. Saddle point에서 학습률을 크게해서 탈출이 가능: Dauphin et al 연구팀의 주장에 따르면 학습이 제대로 안되는 이유는 로컬미니멈(local mimima)에 빠져서라기보단, 안장점(saddle point, gradient가 0 또는 거의0 지점)때문이라는 주장이 있습니다. 아래의 그림과 같이 saddle point인 경우, 평평하기 떄문에 gradient값이 작아 학습이 느리게 됩니다. 이때 학습률을 크게 증가시키면 이 saddle point을 탈출할 수 있다는 것입니다.
2. 최소/최대값의 범위를 진동하며 사용하니, 최적의 학습률이 사용이 된다는 것
pytorch implementation. base_lr, max_lr, step_size 정하기
pytorch에서는 아래와 같이 torch.optim.lr_schedular.CyclicLR로 CLR이 구현되어있습니다. 논문에서 언급했던 것과 같이 base_lr, max_lr, stepsize을 지정해야합니다. pytorch에서는 step_size가 up구간, down구간으로 나눠져있습니다. 이 인자들을 어떻게 전달해야하는지 알아보겠습니다.
torch.optim.lr_scheduler.CyclicLR(
optimizer,
base_lr,
max_lr,
step_size_up=2000,
step_size_down=None,
mode='triangular',
...,
verbose='deprecated'
)
1. base_lr (minimum lr), maximum lr 구하기
- LR range test: 모델을 적은수의 에폭만 미리 돌려보는것입니다. 예를 들어, 2에폭정도에 learning rate을 0부터 0.02까지 바꿔본다고 생각해보겠습니다. 2에폭정도 돈 후에, learning rate, accuracy의 라인플롯을 그립니다. accuracy가 나오게되는데, 0부터 증가했다가 감소하는 구간을 보입니다. 저자들은 증가하는 시점의 learning rate과 감소하는 시점의 learning rate이 base_lr, max_lr로 선택하는 것이 좋다고 주장합니다. 또는 최적의 학습율을 보이는 수의 2배 내에 있기 때문에, base_lr과 max_lr의 크기가 3~4배정도 주게 하면 좋다고합니다.
또 다른 예시로, AlexNet의 LR range test의 결과를 보여드리겠습니다. 학습율(x축, learning rate)이 0.006이전까지는 학습이없다가 0.006정도부터 학습이 되기에, base_lr은 0.006으로 셋팅하면됩니다. 그리고, 이 그레프에서 0.015부터 학습률이 지속적으로 감소하기에 max_lr은 0.015으로 학습하는게 합리적이라고 합니다.
2. stepsize (cycle length) 구하기. stepsize은 배치사이즈를 구하면 1에폭당 얼마의 step으로 갈지 계산할 수 있습니다. CIFAR-10같은 경우 학습데이터가 50,000장의 이미지가 있는데, 배치사이즈가 100이라면, 500step(iteration)을 하게됩니다. CLR은 stepsize에 따라 성능차이가 크게 없다고는하지만, 보통 iteration(step)수의 2배 ~ 10배정도 설정하면 좋다고합니다. (*주의 논문에서는 하나의 배치사이즈를 학습한 것을 epoch)이라고 합니다. 논문에서 제시한 것과 같으면, 위의 예시에서 CIFAR-10의 배치사이즈가 100이었으면, 총 스텝수가 500이므로, CLR의 step으로 들어가는 것은 4,000정도 (=8*500)가 좋은 선택이라고합니다.
'Best Paper review' 카테고리의 다른 글
[5분 컷 리뷰] Supervised Contrastive Learning (0) | 2024.07.23 |
---|