본문 바로가기

Machine Learning & Deep Learning

03. 초기화

1. Weight 초기화 전략

- 네트워크를 만들 때 weight의 초기화도 매우 중요한 요소

- 만약 weight를 모두 0으로 초기화 하면, 모든 뉴런이 같은 gradient를 계산하게 되어 모든 weight 값이 똑같이 변하게 됨

  즉, 학습되지 않는다.

- 초기값은 0에 근접해야 한다.

  너무 큰값으로 초기화 하면 학습시 그라디언트가 매우 커져서 폭발하기 때문 (gradient exploding)

 

1) 랜덤 값으로 초기화

+ 예를들어 실험세팅 : layer 10개와 tanh 활성함수를 사용하는 네트워크

+ 모델1 : 평균이 0, 표준편차는 0.01인 가우시안 분포에 의해 랜덤하게 초기화

결과 : 레이어를 통과 할 수록 결과값이 0으로 수렴. 즉, backprop시 gradient가 0

+ 모델2 : 평균이 0, 표준편차는 1.0인 가우시간 분포에 의해 랜덤하게 초기화

 

결과 : 레이어를 통과 할 수록 결과값이 -1, 1로 포화

   시그모이드를 사용하면 gradient가 0에 가까워짐 (활성함수에 들어오는 pre-activation이 양 극단)

 

2) Xavier 초기화 [ W = random.gaussian(n_input, n_output) / sqrt(n_input) ]

- Weight의 초기화를 이전 layer의 뉴런 수에 맞게 조정

- 뉴런수가 많다면 weight 초기값을 낮춰 pre-activation이 너무 크지 않게하고, 반대의 경우 초기값을 높인다.

  즉, 입력이 많으면 초기값을 낮추고, 입력이 적으면 초기값을 높인다.

- 하지만, 활성함수를 고려히자 않은 방법이기 때문에 ReLU를 사용하면 여전히 gradient vanishing 현상이 일어난다.

 

3) He 초기화 [ W = random.gaussian(n_input, n_output) / sqrt(n_input / 2)

- ReLU 활성함수의 사용을 고려한 초기화 방법

- Xavier와 비슷하나, 이전 레이어의 뉴런 개수의 절반만 고려

- ReLU를 사용한다면 이 초기화 방법이 가장 무난한 방법

 

 

 

2. Bias 초기화 전략

- Weight과 달리 정해진 룰이 크게 없음

+ 곱셈 연산이 수행되지 않아 gradient vanishing이 일어나지 않기 때문

+ 그냥 전부 0으로 초기화 하는 방법이 일반적임

 

 

 

 

 

 

 

 

반응형