인공신경망 ( ANN ) #6-2 최적화 : 초기 가중치 설정, 기울기 소실( gradient vanishing ), 배치 정규화 ( batch normalization )
초기 가중치 설정
초기 가중치에 따른 활성화값 분포
활성화 함수의 출력 데이터를 활성화값이라고 하는데, 초기 가중치에 따른 활성화값의 분포를 관찰하면 중요한 정보를 얻을 수 있다.
활성화 함수로 sigmoid를 사용하며 W는 표준편차(stdev)가 1인 정규분포로 초기화한 경우 :
히스토그램의 세로 값은 해당 범위(계급이라 한다)내에 데이터가 몇 개나 있는지를 나타낸다.
여기서는 계급을 30개로 나눴으니 각 계급은 0.0333...의 범위를 갖는다.
즉, 0~0.0333.... 범위의 값을 가진 활성화값이 35000개 가량 있다는 뜻이다.
각 막대를 모두 더하면
X는 1000x100, 각 layer의 가중치 W12345는 모두 100x100이므로
활성화값 Y는 1000x100이다. 따라서 1000x100개가 나온다.
시그모이드 함수의 개형을 생각해 보면
입력이 0에서 멀어질 수록, 출력은 더 큰 폭으로 0 또는 1에 가까워지며 동시에 기울기는 0으로 수렴하게 된다.
W를 평균이 0, 표준편차가 1인 표준정규분포를 이용해 초기화 한 경우 시그모이드 함수를 사용하면 시그모이드 함수의 출력(활성화값)이 0과 1에 치우쳐 분포하게 된다.
* sigmoid 함수의 입력이 W가 아니라 ``py np.dot(X, W)``임에 유의한다.
그냥 W가 sigmoid의 입력일 경우 활성화값이 0과 1에 치우쳐 분포하는게 아니라
W가 표준정규분포를 따르기 때문에 표준정규분포의 확률 밀도 함수를 따른다.
기울기 소실 ( gradient vanishing )
0에서 멀어질 수록 기울기가 0으로 수렴하기 때문에, 활성화값이 0 또는 1에 치우쳐 분포하게 되면 기울기가 점점 작아지다가 사라진다.
이것이 기울기 소실(gradient vanishing)이다.
* 수치 미분의 경우
출력이 0 또는 1에 가까워지면서 실수의 소수점 표현 한계로 인해 \\(f(w+h) - f(w-h) = 0\\)이 되면 기울기가 0이 된다.
* 오차역전파법의 경우
기울기라는게 결국 손실함수의 기울기를 의미하는거지만, 역전파하며 이전 노드들을 거쳐가기 때문에 이전 노드도 기울기에 영향을 준다.
SoftmaxWithLoss의 역전파 출력은 \\(y_k-t_k\\)인데, 여기서 \\(t\\)는 one-hot-vector이므로 \\(t_k\\)는 0 또는 1이다.
\\(y_k\\)가 0 또는 1에 가까운 작은 값일 때 실수의 소수점 표현 한계로 인해 \\(y_k-t_k=0\\)이 되어 기울기가 0이 된다.
이는 활성화 함수로 사용된 sigmoid 함수가 input을 작은 output range(0~1)로 비선형적으로 우겨넣기 때문에 발생하는 문제다.
예를 들어 sigmoid 함수에 [1 3 5 7 9]를 넣으면 [ 0.73105858 0.95257413 0.99330715 0.99908895 0.99987661]가 출력된다.
tanh 함수도 마찬가지다. 값을 우겨넣는 현상은 S자 곡선의 끝 부분에서 더 심하게 발생한다.
따라서 이런 성질을 갖지 않는 비선형 함수를 활성화 함수로 선택하면 해결할 수 있다. ReLU 함수가 그렇다.
활성화 함수로 sigmoid를 사용하며 W는 표준편차(stdev)가 0.01인 정규분포로 초기화한 경우 :
표준편차를 0.01로 지정했기 때문에 초기화 값은 0 주변에 더 많이 몰려있게 된다.
따라서 sigmoid(0) = 0.5이므로, 활성화값은 0.5 부근에 몰려있게 되는데 이 경우 기울기 소실은 일어나지 않지만 뉴런들이 다양한 값을 표현하지 못하기 때문에 뉴런을 여러개 두는 의미가 없어져버린다. 즉 이렇게 활성화 값이 특정 부근에 몰려있는 경우 표현력이 제한된다.
Xavier initialization
일반적으로 sigmoid나 tanh 등의 중앙부근이 선형인 S자 모양 함수에는 Xavier 초깃값을 사용한다.
Xavier 초깃값은 앞 계층의 노드가 n개일 때, 표준편차가 \\(\frac{1}{\sqrt{n}}\\)인 정규분포를 말한다.
sigmoid나 tanh는 물론 중첩 원리를 만족하지 않으므로 선형함수가 아니지만, 중앙 부근에서 테일러 급수를 사용하면 선형근사가 가능하므로 중앙 부근은 선형인 함수로 볼 수 있다.
활성화 함수로 sigmoid를 사용하며 W는 Xavier 초깃값을 사용한 경우 :
He initialization ( Kaiming He )
활성화 함수로 ReLU를 사용하며 W는 He 초깃값을 사용한 경우 :
배치 정규화( batch normalization )
- 초깃값에 크게 의존하지 않는다.
- gradient vanishing / gradient exploding을 방지한다.
- 오버피팅을 억제한다. ( 그래도 드롭아웃을 병행해서 사용하기는 한다. )
미니배치 \\(B = \{x_1,\ x_2,\ ...,\ x_n\}\\)에 대해 이를 평균이 0, 분산이 1인 표준정규분포를 따르는 \\(\{\hat{x_1},\ \hat{x_2},\ ...,\ \hat{x_n}\}\\)으로 정규화한다.
이 때 B가 미니배치이므로, \\(x_i\\)는 단일 원소 값이 아니라 단일 입력 데이터(행렬)임에 유의한다.
즉, 배치 정규화는 단일 입력 데이터 단위가 아니라 미니배치 단위로 정규화한다.
정규화 :
정규화에서 \\(x_i-\mu_B\\)가 평균을 0으로 만들고, \\(\sqrt{\sigma^2_B+\varepsilon}\\)가 분산을 1로 만든다.
표준편차로 나누면 분산이 1이 된다.
엡실론은 0으로 나누는 것을 예방하기 위해 더해주며 아주 작은 값으로 설정한다.
정규화 하고 나서 배치 정규화 계층마다 이 정규화된 데이터에 고유한 확대(scale, \\(\gamma\\)), 이동(shift, \\(\beta\\))변환을 수행한다.
확대 및 이동 : \\(y_i \leftarrow \gamma \hat{x_i}+\beta\\)
초깃값은 \\(\gamma=1,\ \beta=0\\)이며 학습하면서 적절한 값으로 조정해나간다.
참고
배치 정규화
https://arxiv.org/abs/1502.03167 - 원논문
https://kratzert.github.io/2016/02/12/understanding-the-gradient-flow-through-the-batch-normalization-layer.html - 역전파 및 자세한 설명
'Machine Learning > Theory' 카테고리의 다른 글
합성곱 신경망 ( CNN, Convolutional Neural Network ) (11) | 2017.03.27 |
---|---|
인공신경망 ( ANN ) #6-3 최적화 : 오버피팅 방지( weight decay, droupout ) / 하이퍼파라미터 최적화 (2) | 2017.03.26 |
인공신경망 ( ANN ) #6-1 최적화 : 가중치 최적화 기법 (0) | 2017.03.24 |
인공신경망 ( ANN ) #5 오차역전파법(backpropagation) (2) | 2017.03.20 |
인공신경망 ( ANN ) #4-2 학습 ( 미분, 기울기, 경사법, 신경망 학습 과정 ) (4) | 2017.03.18 |