본문 바로가기

AI/Basis

[AI basis] Gradient Clipping 이란?

Gradient Clipping의 단어를 먼저 분석해보자.

처음 이 단어를 접했을 때 cliff(절벽)의 의미로 clipping을 잘못 착각했는데 clip이라는 단어가 우리에게 익숙하기도 하면서 한국에서 자주 쓰이지 않는 의미를 의외로 가지고 있기 때문이라고 생각한다.

clip 

1. (클립으로) 고정하다.

2. (가위같은 것으로) 깎아내다.

 이 단어를 처음 제시한 사람이 어떤 생각으로 제시했는지는 모르지만 두가지 뜻 모두 해석될 수 있는 여지가 있다고 생각한다. 첫번째 뜻으로 해석하면 "분포한 Gradient를 클립으로 찝어주는 것이다" 두번째 뜻으로 해석하면 "분포한 Gradient에서 (범위가 벗어난 gradient를) 깍아 내는 것(크기를 줄이는 것)이다. 굳이 한가지 뜻을 고르자면 첫번째 뜻이 가장 적절하다고 개인적으로 생각한다

 

 Gradient clipping이 사용되는 이유는 "gradient exploding"을 해결하기 위해서 이다. gradient가 폭발적으로 증가하면서 최종적으로 가중치(weight)값들이 너무 커지면서 학습이 잘 되지 않는 상태이다. 주로 RNN에서 많이 발생한다.

 

 이를 해결하기 위한 "Gradient clipping" 이란 gradient가 일정 threshold를 넘으면 clipping 해준다. clipping의 방법은 다양하지만 일반적으로 다음과 같은 수식으로 진행된다.

$$ \hat{g} = \begin{cases}  \dfrac{threshold}{||\hat{g}||} \hat{g}, & (||\hat{g}|| > threshold ) \\ \hat{g} \end{cases}$$

이때 threshold는 gradient가 가질 수 있는 L2 norm의 최대값이다. 이는 hyperparameter이다.

 

위의 식에서 한가지 사실을 관찰할 수 있다.

 gradient는 위의 식으로 인해 gradient의 L2 norm 값이 L2 norm의 최대값으로 지정한 값보다 커질 수 없다.

즉 gradient 값의 L2 norm값이 정해진 threshold 이상으로 폭발적으로 증가할 수 없다는 것이다. 이를 통해 Gradient의 방향은 유지되면서 크기가 어느정도 제한되므로 gradient exploding을 효과적으로 제어할 수 있다는 것으로 알려져 있다.