backward 가 너무 멀리 가면, clip
일부 training setup 이 huge norm 의 gradient 생성 — RNN 위 긴 sequence, 적절한 normalization 없는 매우 깊은 network, GAN, warmup 없는 transformer training. Huge gradient × 어떤 learning rate = huge update → training 불안정 (NaN loss, 갑작스런 발산).
Gradient clipping 은 optimizer step 전에 gradient 크기 제한. 두 흔한 변형:
- Global norm 으로 clip — 모든 gradient 의 결합 L2 norm 계산, threshold 초과하면 down-scale. modern training (Transformer, LLM fine-tune) 에서 가장 흔함.
- 값으로 clip — 각 gradient element 를
[-c, c]로 clamp. 더 거칠지만, overall large norm 보다 outlier element 일 때 유용.
loop 안 위치
항상 backward() 와 optimizer.step() 사이. backward 전 clip 은 의미 없음 (gradient 아직 없음); step 후 clip 은 너무 늦음.
전형적 max_norm 값은 transformer training 엔 1.0, RNN 엔 가끔 5.0. 올바른 값은 경험적 — training 중 실제 gradient norm log 하면 cap 자주 치는지 보임.