NLP/AI/Statistics

[cs231n] Note 6: Neural Network-2 (Weight Initialization) 본문

Stanford Lectures : AI/CS231n

[cs231n] Note 6: Neural Network-2 (Weight Initialization)

Danbi Cho 2021. 3. 30. 18:57

신경망 구조의 모델을 설계하는 방법은 모델의 성능의 차이를 가져오는 중요한 요인이다. 

 

그 중 모델 학습의 시작인 가중치 초기화  (weight initialization)에 대하여 소개하고자 한다. 

 

우선적으로 가장 기본적인 방법으로는 0으로 초기화하는 방법과 랜덤한 값으로 초기화하는 방법이 있다. 

 

첫 번째로, 모든 가중치 값을 0으로 초기화 하는 방법이다.  (all zero initialization)

 

모델을 설계하기 이전에 모델이 학습하여 최종적으로 출력하는 가중치 값이 어떤 값인지는 예측하기 힘들다.

 

하지만 데이터의 정규화를 적절하게 수행하였다고 가정했을 경우, 가중치의 절반은 양의 값이고 나머지 절반은 음의 값일 것이라고 생각할 수 있다. 

 

이 가정에서 가중치 값을 0으로 초기화하는 것은 합리적인 방법이 될 수 있다. 

 

다만, 신경망 구조가 모두 동일한 연산을 수행할 경우, 

 

모두 0으로 초기화된 가중치 값은 backpropagation을 하는 과정에서 동일한 파라미터를 업데이트를 수행하기 때문에

 

loss를 최소화시키지 못하고 동일하게 계산되며 여러 층으로 구성된 신경망 구조의 의미가 사라진다. 

 

즉, 모든 가중치를 0으로 초기화하는 방법은 좋은 접근 방법일 수 있지만 모든 값이 0일 경우에 문제가 발생한다. 

 

그래서 0에 가깝지만 모든 값이 0이 아닌 가중치 값을 갖도록 하는 방법을 사용하기도 한다. 

 

이는 0이 아니지만 그만큼 작은 랜덤한 값으로 가중치를 초기화 하는 방법이다. (Small random numbers)

 

이 방법은 신경망 내의 뉴런들이 각각 개별적인 랜덤 값으로 초기화되어 모델 학습을 수행하도록 한다. 

 

랜덤 초기화 방식에서 가중치들의 분포를 균일하게 설정할 수 있지만 이는 최종적으로 성능에 큰 차이를 주지 않는다. 

 

하지만 랜덤한 값으로 가중치를 초기화시키는 방법은 초기화된 뉴런들의 출력 분포가 입력되는 수에 따라 분산도 함께 증가하는 문제가 있다. 

 

이 문제를 해결하기 위해 초기화값들을 정규화시켜주는 작업이 수행된다.  (Calibrating the variances with $1/\sqrt{n}$)

 

즉, 입력 뉴런의 수가 $n$이라고 할 때, 랜덤하게 초기화된 가중치 값을 $\sqrt{n}$로 나누어 뉴런들의 분산을 1로 정규화시켜주는 것이다. 

 

이 방법은 모든 초기화 가중치값들의 출력 분포가 동일하여 수렴 속도가 빨라지는 장점이 있다. 

 

다음으로는 bias를 초기화시키는 방법이다. (Initializing the biases)

 

가중치(weight)가 아닌 편향성(bias)를 초기화시킬 수 있다.

 

흔히 bias는 0으로 초기화되며 ReLU에서는 0.01과 같이 작은 값으로 bias를 초기화하는 것이 좋다고 제시되고 있다. 

(하지만 이는 모든 경우에서 좋은 성능을 보이지 않아 일반적으로 0으로 초기화한다. )

 

참고) https://cs231n.github.io/neural-networks-2/#init

 

CS231n Convolutional Neural Networks for Visual Recognition

Table of Contents: Setting up the data and the model In the previous section we introduced a model of a Neuron, which computes a dot product following a non-linearity, and Neural Networks that arrange neurons into layers. Together, these choices define the

cs231n.github.io

 

Comments