기울기가 너무 커지면 제한해
일부 학습 구성에서는 기울기 노름이 아주 커질 수 있어. 긴 시퀀스를 다루는 RNN, 적절한 정규화가 없는 매우 깊은 신경망, GAN, 워밍업 없이 학습하는 Transformer가 대표적이야. 거대한 기울기에 학습률을 곱하면 갱신 폭도 지나치게 커져서 손실이 NaN이 되거나 학습이 갑자기 발산할 수 있어.
기울기 제한은 옵티마이저가 매개변수를 갱신하기 전에 기울기 크기를 제한하는 기법이야. 흔한 방식은 두 가지야:
- 전체 노름으로 제한: 모든 기울기를 합친 L2 노름을 계산하고, 임곗값을 넘으면 전체를 같은 비율로 줄여. Transformer나 LLM 미세 조정 같은 현대적인 학습에서 가장 흔해.
- 값으로 제한: 각 기울기 원소를
[-c, c]범위로 잘라. 더 거친 방식이지만 전체 노름보다 일부 이상치 원소가 문제일 때 유용해.
반복문 안에서의 위치
항상 backward()와 optimizer.step() 사이에 둬. 역전파 전에는 아직 기울기가 없으니 제한할 수 없고, 매개변수를 갱신한 뒤에는 이미 늦어.
max_norm은 Transformer 학습에서 흔히 1.0, RNN에서는 5.0을 쓰기도 해. 다만 알맞은 값은 경험적으로 정해야 해. 학습 중 실제 기울기 노름을 기록하면 임곗값에 얼마나 자주 걸리는지 볼 수 있어.