사이토고키의 <밑바닥부터 시작하는 딥러닝>을 공부하고 정리해보았습니다.
이전 포스팅에서는 표준편차 초깃값, Xavier 초깃값에 대해 알아보았습니다.
이번에는 활성화 함수로 ReLU를 이용할 때의 초깃값을 알아보겠습니다.
ReLU를 사용할 때의 가중치 초깃값 - He 초깃값
ReLU를 이용할 때는 ReLU에 특화된 초깃값을 이용해야 합니다.
이 특화된 초깃값을 He 초깃값이라 합니다.
He 초깃값은 앞 계층의 노드가 n개일 때, 표준편차가 $\sqrt\frac{2}{n}$인 정규분포를 사용합니다.
Xavier 초깃값은 $\sqrt\frac{1}{n}$이었습니다.
ReLU는 음의 영역이 0이라서 더 넓게 분포시키기 위해 2배의 계수가 필요하다고 생각할 수 있습니다.
그러면 활성화 함수로 ReLU를 이용한 경우의 활성화값 분포를 보겠습니다.
결과를 보면 std = 0.01일 때의 각 층의 활성화들은 아주 작은 값들입니다.
신경망에 아주 작은 데이터가 흐른다는 것은 역전파 때 가중치의 기울기 역시 작아진다는 의미입니다.
이는 중대한 문제이며, 실제로도 학습이 거의 이뤄지지 않습니다
이어서 Xavier 초깃값 결과를 보면 층이 깊어지면서 치우침이 조금씩 커집니다.
실제로 층이 깊어지면 활성화값들의 치우침도 커지고, 학습할 때 '기울기 소실'문제를 일으킵니다.
마지막으로 He 초깃값은 모든 층에서 균일하게 분포되었습니다.
층이 깊어져도 분포가 균일하게 유지되기에 역전파 때도 적절한 값이 나올 것으로 기대할 수 있습니다.
활성화 함수로 ReLU를 사용할 때는 He 초깃값을, sigmoid나 tanh 등의 S자 모양 곡선일 때는 Xavier 초깃값을 쓰는 것이 현재의 모범 사례라고 할 수 있습니다.
MNIST 데이터셋으로 본 가중치 초깃값 비교
'실제' 데이터를 가지고 가중치의 초깃값을 주는 방법이 신경망 학습에 얼마나 영향을 주는지 보겠습니다.
지금까지 살펴본 세 경우(std = 0.01, Xavier 초깃값, He 초깃값) 모두를 실험해보겠습니다.
이 실험은 층별 뉴런 수가 100개인 5층 신경망에서 활성화 함수로 ReLU를 사용했습니다.
std = 0.01일 때는 학습이 전혀 이뤄지지 않습니다.
활성화 값의 분포에서 본 것처럼 순전파 때 너무 작은 값이 흐르기 때문입니다.
그로 인해 역전파 떄의 기울기도 작아져 가중치가 거의 갱신되지 않습니다.
Xavier 초깃값과 He 초깃값의 경우는 학습이 순조롭게 이뤄지고 있습니다.
다만 학습 진도는 He 초깃값이 더 빠릅니다.
지금까지 살펴보았듯 가중치의 초깃값은 신경망 학습에 아주 중요한 포인트입니다.
'수학 > 딥러닝 이론' 카테고리의 다른 글
[딥러닝] 1. 오버피팅(과적합)이란? (0) | 2020.10.03 |
---|---|
[딥러닝] 배치 정규화의 알고리즘과 효과 (0) | 2020.10.03 |
[딥러닝] 2. 가중치의 초깃값 - 가중치의 초깃값에 따라 은닉층의 활성화값 분포 변화, Xavier 초깃값 (2) | 2020.10.02 |
[딥러닝] 1. 가중치의 초깃값 - 초깃값을 0으로 하면? (0) | 2020.10.02 |
[딥러닝] 매개변수 갱신 - Adam, 어느 갱신 방법을 이용할 것인가? (0) | 2020.10.02 |