데이터를 기반으로

가중치 초기화(Weight initialization) 본문

데이터 분석(Python)/딥러닝(Deep Learning)

가중치 초기화(Weight initialization)

이노후 2022. 10. 3. 18:08
728x90
반응형

가중치 초기화를 공부하면서 수 많은 'Why?' 가 뒤따라 와 이해한 내용을 토대로 해당 글을 작성하고자 한다.

 

먼저, 가중치 초기화가 필요해진 배경에 대해서 확인해보자.

 

같은 모델을 훈련시키더라도 가중치가 초기에 어떤 값을 가졌느냐에 따라서 모델의 훈련 결과가 달라지기도 하는 이러한 현상을 위해 가중치 초기화를 진행하게 되었다고 한다.

 

그림 출처 : https://medium.com/coinmonks/loss-optimization-in-scientific-python-d1efbbe87171

위 그림을 보면 좀 더 쉽게 이해가 갈 수 있다. 우리는 경사하강법을 통해 Local Minimum에 빠지지 않아야 하기에 가중치가 초기에 어떤 값을 갖냐에 따라 이러한 문제도 자연스레 해결될 수 있기 때문이다.

 

이러한 초기화를 진행하는 방법론은 여러가지가 존재한다.

 

위 가중치 초기화에 대해 이해가 안갔다면, Zero initialization 에 대한 설명을 보면 가중치 초기화에 대한 개념이 조금은 잡힐  것이다.

 

Zero initialization

→ 모든 가중치 파라미터를 0으로 셋팅하고 시작하는 것이다.

→ 신경망의 모든 가중치는 동일하면 안되며, 단순하게 모든 값들이 0이면 역전파를 통해 갱신하더라도 계속 같은 값을 도출할 것이다.

 

이후 내가 보는 교재에는 Xavier와 He 초기화 2가지 방법론을 기준으로 설명을 이어나갔다.

 

참고로 제가 보고 있는 교재는 wiki-docs에 존재하는 '딥 러닝을 이요한 자연어 처리 입문' 중 기울기 소실 파트 입니다.

https://wikidocs.net/book/2155

 

딥 러닝을 이용한 자연어 처리 입문

많은 분들의 피드백으로 수년간 보완되어 온 딥 러닝 자연어 처리 무료 eBook입니다. 기본적인 텍스트 전처리부터 BERT와 같은 PLM의 다양한 다운스트림 태스크를 ...

wikidocs.net

1) 세이비어 초기화(Xavier Initialization)
=  세이비어(Xavier Initialization) 초기화 또는 글로럿 초기화(Glorot Initialization)
-> 균등 분포(Uniform Distribution) 또는 정규 분포(Normal distribution)로 초기화 할 때 두 가지 경우로 나뉘며, 
-> 이전 층의 뉴런 개수와 다음 층의 뉴런 개수를 가지고 식을 세웁니다.
-> 여러 층의 기울기 분산 사이에 균형을 맞춰서 특정 층이 너무 주목을 받거나 다른 층이 뒤쳐지는 것을 막습니다.
-> 시그모이드 함수나 하이퍼볼릭 탄젠트 함수와 같은 S자 형태인 활성화 함수랑 사용할 경우에는 좋은 성능을 보인다.
-> 하지만, ReLU와 함께 사용할 경우에는 성능이 좋지 않습니다. (He초기화로 대체)

 

위 내용이 해당 교재에서 보여준 설명이다.

 

여기서 첫 번째 'Why?' 가 등장한다.

 

다른 것들은 이해가 되는데,

 

왜 S자 형태인 활성화 함수들은 좋은 성능을 보이나, Relu 는 좋은 성능을 보이지 않는가?

 

우선 이해를 돕기위해 Activate Function은 Sigmoid로 지정하고 설명을 이어나가겠다.

 

위 질문에 대한 해답은 돌고 돌아 아래의 블로그를 보며 이해했다.

 

처음에는 쉽게 이해되지 않던 블로그의 글이 구글 블로그 약 30개 정도 읽고 나서 다시 보니 이해가 쉽게 되었다.

( 얼른...영어 논문을 쉽게 읽을 수 있는 그날이 와야...고수가 될 수 있을 것 같다)

 

https://koreapy.tistory.com/1318

 

[딥러닝 기초] Xavier/He 초기화

1) 시그모이드류 Activation Func의 초기화: Xavier 초기화 2) ReLu의 초기화: He 초기화 ▼  출처: https://wooono.tistory.com/223 가중치 초기화의 중요성 Gradient Vanishing 문제란, MLP를 학습시키는 방..

koreapy.tistory.com

※ 본 글에서는 수식은 따로 기재하지 않을 예정

 

- 활성화 함수로 시그모이드를 사용하는 경우, 함수의 출력값은 0 또는 1에 수렴한다.

- 각각, 기울기가 0에 가까워진다. 이러면 기울기 소실의 문제가 발생하게 된다.(역전파 기준으로 생각하라)

- 단순하게 표준편차를 1로 고정값으로 조정하게 되면 모든 출력값이 0.5에 치중되는 그래프를 확인할 수 있다.

- 하여, 직전 layer의 노드 수와 이후 layer 노드 개수를 고려한(수식은 본 글에는 제외) 정규분포로 초기화를 진행.

- 초기화 방법 : w = np.random.randn(n_input, n_output) / sqrt(1/n_input)

 

여기서 2번 째 'Why?'가 나타난다.

 

왜 Relu는 Xavier 초기화를 사용하면 안좋을 까?

 

바로 위 블로그에서도 보이지만, 출력결과가 layer를 거듭할 수록 0에 쏠리는 현상이 보여진다.

 

하여, Xavier보다 2배가 되는 제곱근으로 초기화 방법을 적용하여 좀 더 넓게 분포시키는게 He 초기화이다.

 

728x90
반응형