Ø 가중치 초기값에 따라 은닉층 활성화 값들이 바뀌는 것을 관찰함으로써, 가중치 초기값 설정이 학습에 미치는 영향을 분석해본 실험
# 5개 Layer, 각 층은 100개의 노드로 구성, Input data 1000개 정규분포로 생성,
# Sigmoid 활성함수 사용, 활성화 값( Sigmoid 출력값 ) 분포를 관찰
Sigmoid 출력값
활성화 값들이 0,1에 치우쳐 분포 => 역전파 시 대부분 기울기 값이 0에 가까움 =>기울기 소실 (Vanishing Gradient)
=> Sigmoid 출력 값이 0.5 부근에 집중됨
기울기 소실문제는 해결된 듯 보이나, 활성화 값들이 치우쳤다는 것? => 표현력 관점에서 문제
( Input data가 정규분포를 따르고있다는 점이 핵심)
l 활성화 값들이 치우쳤다 => 신경망의 표현력이 떨어진다
l 활성화 값은 적당히 고루 분포되어야한다!
Xavier의 논문은 앞 층의 입력 노드 수, 다음 층 출력 노드 수를 고려하여 가중치 초기설정값을 계산하도록 제안했으나, Caffe등 프레임워크에서는 앞 층의 입력노드 수만으로 계산하도록 단순화 하였다.( 여러 라이브러리에서 이와 같이 구현되어있음)
=> 앞 층의 노드가 N개라면, 표준편차가 ( 1 / sqrt(n) )인 분포를 가중치에 사용하면 활성함수의 표현력을 해치지 않는다는 결론이 나왔다.
=> 오른쪽으로 갈수록 일그러지는 것은 Sigmoid대신 tanh를 사용하면 개선된다.
l But, Xavier 초기값은 “활성화 함수가 선형인 경우”에 알맞은 설정이다.
l Sigmoid, tanh는 모두 중앙 부근이 선형에 가깝기 때문에 위과 같이 좋은 결과를 도출해낸 것.
ReLU와 같은 비선형 활성함수를 사용할 때에는 ReLU에 특화된 초기값 이용해야한다!
# Kaiming He가 제안한 He초기값
# 앞 Layer의 노드 수가 n일 때, 표준편차가 sqrt( 2 / n )인 정규분포 사용
# 표준편차가 0.01인 정규분포 가중치 / Xavier 초기가중치값 / He 초기 가중치 사용하여
ReLU 활성함수의 출력값을 살펴보았다.
1. std = = 0.01인 정규분포 초기값
각 층의 활성화 값들이 매우 작은 값, 즉 0에 치우쳐있다. 이는 역전파 시, 정보를 충분히 전달할 수 없다.
2. Xavier 초기값
층이 깊어지며 치우침이 조금씩 커지고, 기울기 소실 문제를 야기할 것이다.
3. He 초기값
층이 깊어져도 분포가 균일하여, 역전파 시에도 적절한 값이 나와 학습(갱신)이 제대로 이루어질 것을 기대할 수 있다.
² 현재는 ReLU에는 He초기 가중치,
² sigmoid, tanh에는 Xavier 초기 가중치를 쓰는 것이 모범적이다.
실제 MNIST 데이터셋과 5층 Layer( 각 층 뉴런 수 100개) 와 ReLU 활성화함수를 사용했을 때의 손실함수 값 추이이다.
학부연구생 딥러닝 기본개념 학습내용 복습02 - Optimizer (0) | 2022.10.09 |
---|---|
학부연구생 딥러닝 기본개념 학습내용 복습-01 순전파와 역전파&활성함수 (0) | 2022.10.09 |
Hyperparameter 종류와 Tuning (0) | 2022.10.06 |
SGD와 Weight Decay regularization (0) | 2022.10.06 |
Sigmoid함수와 Gradient Descent를 위한 cross-entropy 미분 (0) | 2022.10.03 |