← 문제 목록/Norm 기반 클리핑
문제 해설

Norm 기반 클리핑

최적화 · easy

preview

Norm 기반 클리핑 (Gradient Clipping)

딥러닝 학습 중 그래디언트 폭발을 막는 표준 기법. 벡터의 L2 노름이 한계 max_norm 을 넘으면 방향은 유지한 채 크기만 줄입니다:

clip(x,c)=xmin ⁣(cx2, 1)\text{clip}(x, c) = x \cdot \min\!\left(\frac{c}{\|x\|_2},\ 1\right)

  • xc\|x\| \le c: 변화 없음
  • x>c\|x\| > c: cxx\frac{c \cdot x}{\|x\|} (정확히 c 로 스케일)

왜 중요한가

  • RNN / Transformer 학습에서 loss가 발산하는 주요 원인이 그래디언트 폭발
  • torch.nn.utils.clip_grad_norm_, tf.clip_by_norm 으로 기본 제공
  • 방향을 보존 하기 때문에 각 원소별 클리핑보다 부드럽게 동작

과제

함수 clip_by_norm(x, max_norm) 을 완성하세요.

  • 1D 배열 x.
  • 반환: 같은 shape.
  • 노름 0 (영벡터) 은 그대로 반환 (0으로 나누기 방지).

테스트 케이스

#이름검증
1작은 norm → 원래 그대로[0.3, 0.4], max=1[0.3, 0.4]
2큰 norm → 스케일[3, 4], max=1 → 노름 1
3방향 보존clipped와 원래 벡터가 같은 방향 (양의 스칼라 배)
4영벡터[0, 0][0, 0] (NaN 없음)
5max_norm 정확히 도달[3, 4], max=2 → 노름 정확히 2
코드 작성
Loading...
실행 결과

코드를 작성하고 Run 을 눌러보세요.