1. Normalizing Inputs
Normalizing training sets
- x = [x1, x2] feature로 구성된 training set의 분포를 살펴보자.
- 우선 모든 x를 x의 mean(평균)만큼 빼준다(subtract).
그러면 두 번째 그림처럼 x1 feature 축에 대해 분포가 정렬된다. - 다음으로는 x의 분산을 구해 x 전체를 분산으로 나눠준다.
이때 이미 평균을 뺀 값이므로 x 제곱의 평균을 구하는 것이 바로 분산이 된다.
(분산을 구하는 기존 식은 'x-m' 제곱의 평균을 구하는 것이기 때문)
그러면 마지막 그림처럼 분산을 반영한 분포로 변형된다. - 이러한 변형을 train set에 대해 적용했다면 test set에도 동일한 평균과 분산값으로 변형을 해줘야 한다.
즉, 두 set에 대해 동일한 normalizing을 해줘야 한다는 뜻이다.
Why normalize inputs?
- normalize 전후를 비교해보자.
두 개의 feature만을 다루는 기존 예시를 기준으로 생각하면 normalize 전은 왼쪽의 그래프처럼 표현된다.
즉 x1의 범위는 굉장히 넓고 x2의 범위는 상대적으로 매우 좁은 경우 넓고 긴 형태로 cost값이 분포된다.
이런 경우 gradient descent를 적용했을 때 minimum까지 도달하는 과정이 굉장히 들쭉날쭉하고 그 시간도 오래 걸리게 된다. - 그러나 normalize를 적용하면 오른쪽 그림처럼 대칭적인 분포를 이루게 된다.
따라서 gradient descent를 적용했을 때 이전과 달리 동일한 속도로 들쭉날쭉 하지 않은 형태를 유지하며 miniumum에 도달하게 된다.
즉, normalize를 적용하면 feature 간 범위 차이를 표준화 시켜줌으로써 학습 속도를 향상시키는데 도움이 된다.
2. Vanishing / Exploding Gradients
Vanishing/exploding gradients
- 위와 같은 neural network가 있다고 가정해보자.
여기서 활성화 함수 g는 입력으로 받는 변수를 그대로 반환한다고 가정하고 bias = 0이라고 가정한다.
또한 각 layer에 사용되는 가중치 w가 동일한 단위행렬이라고 가정한다.
(이러한 가정은 vanishing/exploding gradients를 보다 직관적으로 이해하기 위함이다) - 만약 w에 포함되는 값이 1.5라면 결과적으로 layer의 개수를 L이라고 했을 때, logit 값은 1.5^L * X가 될 것이다.
반대로 w에 포함되는 값이 0.5라면 logit 값은 0.5^L * X가 될 것이다.
L의 값이 충분히 크다면 전자는 값이 무한대로 발산하고 후자의 값은 0으로 수렴하는 결과가 나타난다.
어떤 형태든지 간에 제대로 학습이 이뤄지지 않는다는 것을 의미한다.
layer가 많은 deep neural network의 경우 gradient가 vanish/explode하는 문제에 직면하게 된다.
3. Weight Initialization for Deep Networks
Single neuron example
- vanishing/exploding gradients를 방지하는 좋은 방법 중 하나는 각 layer에 포함된 unit의 개수로 나눠주는 것이다.
- 이를 코드로 구현하면 마지막 줄과 같다.
np.random.randn을 통해 random 값으로 w를 초기화하고 여기에 '(2 / 해당 layer의 unit수)의 제곱근'을 곱해준다.
우리가 normalize를 위해 분산을 나누어준 것과 유사한 개념이다. - 어떤 값으로 나눠주어야 하는지는 activation function(활성화 함수)에 따라 다르다.
가장 많이 쓰이는 ReLU의 경우 '2 / 해당 layer의 unit'에 제곱근을 취한 것이 가장 효율적이라고 알려져 있다.
하지만 tan h를 활성화 함수로 사용하는 경우 분자에 2가 아닌 1을 사용해야 한다.
한편 2를 current, previous layer에 포함된 총 unit 수로 나눠야 한다는 주장도 있다.
출처: Coursera, Improving Deep Neural Networks, DeepLearning.AI
'Improving Deep Neural Networks > 1주차' 카테고리의 다른 글
Quiz & Assignments (0) | 2022.11.06 |
---|---|
Setting Up your Optimization(2) (0) | 2022.11.05 |
Regularizing your Neural Network (2) | 2022.11.05 |
Setting up your Machine Learning Application (0) | 2022.11.05 |