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으로 초기화 하는 방법이 일반적임
'Machine Learning & Deep Learning' 카테고리의 다른 글
04. 배치정규화 (Batch Normalization) (0) | 2017.08.03 |
---|---|
03. 정규화 (Regularization) (0) | 2017.08.03 |
01. 활성함수(activation function) - Sigmoid, ReLU (0) | 2017.08.03 |
00. 뉴럴 네트워크 (0) | 2017.08.03 |
클러스터링 평가하기 (Clustering Evaluation) (0) | 2017.07.17 |