딥러닝 & 머신러닝/딥러닝 지식

가중치 초기화(Weight Initialization) 설명

별보는두더지 2020. 8. 30. 18:26
반응형

# Weight Initialization 방법에 대해 말해주세요. 그리고 무엇을 많이 사용하나요?

 

* 가중치의 초기값을 어떻게 설정하느냐에 따라 신경망의 학습이 잘 될수도, 안될수도 있다.

 

i) 가중치를 0으로, 또는 균일한 값으로 초기화하는 경우: 이러면 안된다!

 

- 모든 hidden layer들이 같은, 또는 대칭적인 가중치 값을 갖는다면 모든 노드의 활성화 함수에 같은, 또는 대칭적인 입력값이 들어간다는 뜻이고, 그러면 나중 역전파 때 모든 가중치의 값이 똑같이 갱신되기 때문에 가중치를 여러 개 둔 의미가 없어짐. (= 모델의 표현력 제한 일어남) 즉, 한 layer의 노드들이 모두 같은 일을 하기 때문에 노드의 낭비가 발생함.

 

(* 가중치 갱신은 입력값이 모든 노드를 거치고 나온 결과값과 실제값 사이의 차이를 나타내는 loss function의 값, 그것의 gradient를 이용해서 이루어진다.)

 

- 즉, 모든 노드들이 같은, 또는 대칭적인 값을 갖고 있는 것 자체도 문제인데, 하물며 그 값이 0이라면 backpropagation 때 발생하는 곱셈 과정이 잘 이루어지지 않아 가중치 갱신이 안된다. 그 값이 0이 아니어도 다 같은 값이기에 역전파 때 가중치 값이 전부 똑같이 갱신되서 학습이 안된다.

 

대칭적 가중치 문제의 예시는 아래에서 더 자세하게 볼 수 있다.

 

 

ii) 가중치를 랜덤하게 초기화하는 경우: 이래도 안된다!

 

- 평균이 0, 표준편차가 1인 정규분포를 따르는 가중치 값들로 초기화했을때

: sigmoid가 활성화 함수로 쓰인 layer들을 통과할수록 그 출력 값이 0, 1에 치우치게 되고(실험으로 알려짐, cs231n 강의나 '밑바닥 딥러닝' 참고), sigmoid의 값이 0, 1에 치우친다는 것은 곧 그 지점에서의 gradient도 0에 가까워진다는 것(0,1로 가까워질수록 그래프가 x축과 평행하므로): Gradient Vanishing 문제 발생!

 

- 평균이 0, 표준편차가 0.01인 정규분포를 따르는 가중치 값들로 초기화했을때

: sigmoid가 활성화 함수로 쓰인 layer들을 통과할수록 그 출력 값이 0.5에 치우친다(이 또한 실험으로 알려짐). 0, 1에 치우치지는 않았으나 활성화 값들이 치우쳤다는 것은 다수의 노드(뉴런)들이 거의 같은 값을 출력하고 있으니 표현력이 떨어진다는 것이고, 이는 곧 여러 노드를 둔 의미가 없다는 것: 표현력 제한 문제!

 

- 가중치를 큰 값으로 랜덤하게 주었을 때

: sigmoid 활성화 함수의 gradient 값이 0에 가까워져 Gradient Vanishing 문제 발생.

 

 

- 가중치를 작은 값으로 랜덤하게 주었을 때

: ReLU 활성화 함수에서 Dying ReLU 현상 때문에 가중치 갱신이 일어나지 않는다.

 

* 따라서 가중치가 너무 고르게, 또는 너무 랜덤하게 분포되는 상황은 막되, 활성화 값의 분포는 고르게 되야한다!

→ 각 층의 활성화 값들을 광범위하게 분포시킬 목적으로 가중치의 적절한 분포를 찾고자 함.

(활성화 값 = 입력 신호(W, X, b)의 결합이 활성화 함수를 통과한 값)

 

- Xavier Initialization

: 활성화 함수가 선형인것을 전제로 함. sigmoid와 tanh는 좌우 대칭이고 중앙 부분이 선형이라 적용 가능. 앞 층의 노드가 n개라면 가중치의 초기값은 표준편차가 1/root(n)인 분포를 따르는 랜덤한 값을 사용한다. 즉 n이 커질수록 표준편차는 줄어드므로, 앞 층에 노드가 많을수록 대상 노드의 초기값으로 설정하는 가중치가 좁게 퍼진다.

 

- He Initialization

: 활성화 함수가 선형이 아닌, ReLU일 때 적용하는 가중치 초기화 방법. 앞 층의 노드가 n개라면 가중치의 초기값은 표준편차가 2/root(n)인 분포를 따르는 랜덤한 값을 사용한다. (ReLU는 음의 영역에 해당하는 함숫값이 0이라서 더 넓게 분포시키기 위해 2배의 계수가 필요하다고 직관적으로 이해하자) Xavier Initialization을 ReLU에 적용했을 때 층이 깊어지면서 활성화 값이 0으로 치우치는 문제를 보완했다. 

반응형