Background
- Neural Network를 구성할 때, 큰 문제점 중 하나는 “어떻게 weight들의 초기값을 정할 것인가?”이다.
- 만약 전부 으로 정하게 되면, gradient 값이 전부 이 되기 때문에 큰 의미가 없어진다.
- 같은 값으로 정하게 되면, gradient 값이 한 layer마다 전부 같은 값으로 되기 때문에 weight들이 update 되는 것에 많은 제한 사항이 생긴다.
- 따라서 같은 값이나 전부 으로 초기화하는 것은 나는 업데이트할 생각이 없소라고 말하는 것과 비슷하다.
Method 1: Random Initialization
- 가~장 간단한 방법으로는 모든 weight를 Random으로 정하는 것
- 그 중에서도 Gaussian distribution을 사용했다고 하자.
- 뭐 평균은 이라고 하고, standard derivation을 이라고 하자.
- 즉,
- 이렇게 되면 일 확률이
- 대략 라는 건데, 이 정도면 진짜 굉장히 높은 확률임을 기억하자.
- 그러면 의 값도 굉장히 커질 것이고, activation function으로 sigmoid-function을 활용하는 순간 gradient의 값이 거의 없다고 판단할 수 있는 Vanishing gradient problem에 직면하게 된다.
- 의 값이 굉장히 커지는 이유는, 는 모든 weight들을 모아놓은 값이기 때문이다.
- layer들 사이의 weight parameter들은 굉장히 많은데, 이것들이 전부 과 가까운 수면 도 이 수백, 수천개 더해져 있는 양상이 될 수 밖에 없다.
- 시그모이드 특성 상 일정 값 이상부터는 기울기가 굉장히 작으므로, 숫자가 너무 커도 의미가 없음을 알 수 있다.
- 표준편차가 너무 크면 안 좋으니 표준편차를 작게 줄여보자. 현재는 정도로 할 것이다.
- 즉,
- 그러면 의 값이 에 수렴할 것이고, sigmoid function의 값이 , 즉 최대로 가게 된다.
- 다만, 단점이 있다면 대부분의 node 값들이 에 수렴하게 되어서 위의 same initialization 값과 동일하게 됨.
- weight들이 가지는 의미는 non-linear function(activation function)을 거쳐가면서 feature을 잡는 것이 목표인데, 노드의 값들이 대부분 비슷해짐으로써 feature을 잡는 역할이 줄어져버림.
Method 2: Several Initialization.
- 위의 문제들로 인해 다른 node들의 초기화 방법을 고려해야함.
- 다만, 너무 복잡한 분포로 하면 골 때리기 때문에 gaussian에서 벗어나지는 않음
- 추가로, 앞의 문제들을 해결하기 위해서 input layer의 개수에 따라 weight들을 다르게 설정할 필요가 있음! ⇒ Lecun, Xavier(sig-mid function), He(ReLU function)
- 이것들이 모두 유익하다라는 것은 복잡한 수학적인 과정을 거치기 때문에 생략
- Lecun Normal / Uniform Initialization
- Normal:
- Uniform:
- Xavier Normal / Uniform Initialization
- Normal:
- Uniform:
- He Normal / Uniform Initialization
- Normal:
- Uniform:
Uploaded by N2T