본문 바로가기

데이터 다루기/신경망

[신경망] 11. Weight Initialization

728x90
반응형

안녕하세요, 이번 포스팅에서는 Weight Initialization에 대해서 배워보도록 하겠습니다.

위와 같은 신경망에서 초기 Weight값을 0으로 주는 것은 일반적으로 보입니다.

하지만 그렇게 된다면, 각 뉴런들이 학습을 할 때, 같은 역할을 하게 되며, gradient 또한 같아질 것입니다. (Same update)

저희가 신경망 모델을 사용하는 이유는 각 뉴런별로 y를 예측하는 데 있어서 가중치를 주어서 어떠한 Feature가 y의 예측에 가장 중요한지를 파악하는데 있는데, 이러한 역할이 없어지는 것이지요.

즉, 신경망 학습에 있어서 초기 Weight에 어떠한 값을 주느냐는 중요한 문제로 받아들여집니다.

이 문제에 대해 첫번째로 제시된 방법은 다음과 같습니다.

바로 Small random numbers를 초기의 Weight 값으로 주는 것입니다.

이 때 random number는 평균 0, 표준편차 0.01을 따르는 Gaussian 분포에서 발생시킵니다.

하지만 이러한 방법은 shallow network에서는 잘 작동하지만, deep network에서는 문제가 발생합니다.

예를 들어서, 10개의 Layer를 가지는 network에서 층이 깊어질수록 weight들이 곱해지므로 평균은 0에 수렴하지만, 표준편차마저 점점 줄어들어 0으로 수렴하게 됩니다. 즉, 모든 값들이 0으로 수렴한다는 것입니다. 즉 back propogation에서 업데이트 할 때, Input 값들이 애초에 너무 작아서, gradient가 매우 작아 Weight들의 업데이트가 거의 발생하지 않게됩니다.

반면에, 표준편차를 0.01이 아닌 1을 주면 어떻게 될까요?

위의 그림과 같이 Weight 값들이 1아니면 -1로 매우 치우쳐지게 됩니다. Gradient가 0으로 수렴하게 되고, update가 발생하지 않는 문제가 발생합니다.

이 처럼 초기 Weight 값을 너무 작게주어도 문제가 있고, 그렇다고 크게 주어도 문제가 발생합니다.

이를 해결하기 위한 방법이 2010년에 Glorot에 의해서 제시가 되게 됩니다. (Xavier Initialization)

이 방법은 이전 노드와 다음 노드의 개수에 의존하는 방법입니다.

Input 노드의 수가 적으면 Weight를 크게하여 output에 같은 큰 Variance를 가지게 하며, 노드의 수가 많으면 Weight를 작게하여 output에 같은 작은 Variance를 가지게 합니다.

즉 input variance와 output variance를 최대한 일정하게 만드는 방법입니다.

하지만 Xavier Initialization은 Relu 활성화 함수에서는 잘 작동하지 않고, 0으로 수렴하는 문제가 발생합니다.

이러한 문제를 해결하기 위해서 2015년에 He 라는 사람이 He Initialization을 발명합니다.

 

반응형