Gradient Clipping

JunD·2025년 12월 18일
post-thumbnail
  • 오늘은 딥러닝 모델 학습 시 기울기 폭발(Gradient Exploding)을 방지하는 Gradient Clipping에 대해 알아보자!

Gradient Clipping

  • 그레디언트 클리핑은 단어 그대로 기울기를 자르는 역할을 담당한다.

  • 사실 클리핑은 모델 학습 시, 필수 요소는 아니고 필요한 경우에 사용!

  • 그럼 어떤 매커니즘이고 어떻게 적용되는 지, 그 과정에 대해 살펴보자

학습 방향과 크기, 규제에는 Learning Rate, Weight decay 등 다양한 요소가 결합되어 학습의 방향, 강도가 결정되지만 해당 포스팅은 기울기 클리핑의 관점에서만 설명한다.


모든 파라미터 기울기 벡터 g의 L2 Norm

  • 모델 학습은 아래 그림과 같은 n차원의 공간에서 손실(loss)가 가장 작은 지점을 향해 가는 과정이다.
    • 이때 모든 파라미터의 기울기 벡터를 g라고 하면, g\vec{g}는 학습 과정에서 전역 최저점으로 향하는 방향, 강도 정보를 갖는다.
    • n차원에서 n은 해당 모델 파라미터의 모든 개수를 의미
  • 파라미터가 업데이트에는 g\vec{g}L2 Norm이 반영된다.

    L2 Norm

    • 피타고라스 정리 c=a2+b2c = \sqrt{a^2 + b^2})를 n차원으로 확장한 개념이라고 생각하면 된다.

    • 각 파라미터의 기울기(g1,g2,g3...g_1, g_2, g_3...)는 각 축(axis)의 이동량을 나타낸다.

    • 즉, 이들이 모인 g\vec{g}L2_norm은 다음 업데이트의 강도를 나타낸다.

  • g\vec{g}의 L2 norm
    • g2=g12+g22++gn2\|g\|_2 = \sqrt{g_1^2 + g_2^2 + \dots + g_n^2}

그렇다면 Clipping은 언제 사용될까?


클리핑과 max_norm

  • 각 파라미터의 기울기가 너무 커지면 g\vec{g}의 L2 norm도 커지고, 이는 업데이트 강도가 너무 강해져 학습 불안정을 야기한다.

  • 클리핑은 이러한 기울기 폭발로 인해 불안정한 학습을 방지하는 역할이다.

  • 그럼 어떻게 적용될까?

    • 클리핑은 적용 시 인자로 max_norm을 사용한다.

    • max_norm은 g\vec{g}의 L2 norm의 최대치를 지정

    • 즉, g2\|g\|_2 max_norm 값을 넘을 때 기울기 클리핑 적용

      Example)

      • max_norm = 1.0, g2\|g\|_2 = 10인 경우
        • max_normg2=110=0.1\frac{max\_norm}{\|g\|_2} = \frac{1}{10} = 0.1로 개별 기울기 정규화를 수행한다.
        • 즉, g2=(g10.1)2+(g20.1)2++(gn0.1)2\|g\|_2 = \sqrt{(g_1 * 0.1)^2 + (g_2 * 0.1)^2 + \dots + (g_n * 0.1)^2 }
  • 위 예시를 아래와 같이 표현할 수 있다.
    • gnew=g×min(1,max_normg2)g_{new} = g \times \min\left(1, \frac{max\_norm}{\|g\|_2}\right)

💡정리

  • 클리핑은 학습 안정성을 위해 중요한 요소이지만, 오히려 학습을 방해할 수도 있다.

  • 모델 학습에는 여러 기술이 있을 뿐 정해진 템플릿은 없기 때문에,

  • 클리핑 적용을 선택하기 위한 가장 확실한 방법은 각 배치별 grad_norm 값을 출력하여 확인해야한다.

    • 스텝별 grad_norm이 max_norm 값을 계속 유지한다면? Saturation(포화)를 의미
      • 클리핑을 사용하지 않거나 max_norm을 올려주는 것이 좋다.
profile
Data Scientist & Data Analyst

0개의 댓글