Gradient Vanishing

gradient vanishing problem

신경망에서는 SGD(Stochastic Gradient Descent) 방법을 사용해 모델을 훈련시킨다.

gradient의 Back Propagation을 통해 weight 값을 업데이트하며 오차가 작아지도록 훈련하게 된다.

신경망에 층을 많이 추가할수록 더 많은 데이터셋을 다룰 수 있는 복잡한 모델을 만들 수 있지만, 층이 많아지면 역전파 시에 그래디언트들이 점점 소실되는 문제가 발생한다.

한 가중치 값의 그래디언트가 처음부터 너무 작으면 input 층에 가까워질수록 점점 더 작아져서 거의 사라져버리는 경우이다.

이를 ‘Vanishing Gradient’ 문제라고 한다.

반대로 그래디언트값이 업데이트되면서 무한히 커져서 explode되는 경우도 발생하는데, 이는 ‘Exploding Gradient’ 문제라고 한다.

Sigmoid Function

시그모이드 함수는 모든 값을 0과 1사이로 만들어주기 때문에 classification 문제에서 유용하게 쓰일 수 있다. 하지만 시그모이드 함수의 그래디언트 값은 최대 0.25에 불과하고, 양쪽에서 거의 0에 수렴한다.

image

따라서 sigmoid 함수를 activation함수로 하는 layer가 여러 개 있다면, 그래디언트 역전파 시 0.25도 안 되는 그래디언트 값과 0에서 1 사이의 weight 초기값들이 곱해져나가면서 값이 점점 더 작아진다.

ReLU Function

0과 x 값의 max 함수 형태인 ReLU의 그래디언트값은 다음과 같이 값이 0보다 클 때는 1, 0보다 작을 때는 0이 된다.

image

이에 따라 ReLU에서는 그래디언트가 점점 작아져 소실되는 문제는 발생하지 않는다. 다만, input값이 0보다 작을 때는 그래디언트 값이 아예 0이 되어(‘die’) 해당 weight는 업데이트가 전혀 되지 못하고 학습이 이루어지지 않게 된다. 하지만 input값을 0과 1사이로 normalize 한 후 모델 학습을 진행하면 이러한 문제의 발생을 막을 수 있고, 오히려 sparse한 데이터의 경우 그래디언트가 죽어서 학습되지 않는 것이 장점으로 작용할 수도 있다.

ReLU 및 Leaky ReLU에도 단점이 있다. input 값이 0보다 클 때에는 그 값을 그대로 출력하는 활성화함수이기 때문에, 층을 거치면서 출력값이 explode할 수 있다. 또한, 그래디언트 값이 1이라도 weight 값이 곱해지기 때문에 그래디언트 소실 문제가 발생할 확률이 없는 것은 아니다.

Share