Related to: Deep Learning
가중치 초기화 (Weight Initialization)
- 신경망의 목적 : 신경망 모델의 목적은 손실(Loss)을 최소화 = Parameter Optimization

Loss를 최소화하기 위해서는 경사 하강법을 사용하여 Loss를 줄여나가야 합니다. 그러나 위 그림과 같이 시작점에 따라서 전혀 다른 방향으로 학습이 진행될 수도 있고 최저점을 찾기 위해 걸리는 속도가 다를 수도 있습니다.
학습 시작 시, 적절하게 가중치를 초기화하는 것은 학습에 있어 중요합니다.
- Zero Initialization
- 모든 파라미터 값을 0으로 놓고 시작하면 되지 않을까?라고 생각할 수 있습니다.
- 그러나 파라미터의 값이 모두 같다면 역전파(Back propagation)를 통해서 갱신하더라도 모두 같은 값으로 변하게됩니다.
- 신경망 노드의 파라미터가 모두 동일하다면 여러 개의 노드로 신경망을 구성하는 의미가 사라집니다.
- Random Initialization
-
파라미터에 다른 값을 부여하기 위해서 가장 쉽게 생각해 볼 수 있는 방법은 확률분포를 사용하는 것입니다.
-
Std1, Sigmoid를 사용한 경우

- 0, 1에 가까운 값만 출력
- 활성화 값이 0, 1에 가까울 때, Sigmoid 기준 기울기가 0에 가까워지므로 학습이 거의 일어나지 않게 되어 Gradient Vanishing 현상 발생
-
Std 0.01, Sigmoid를 사용한 경우

- 대부분의 출력 값이 0.5 주변에 위치하며, 따라서 Gradient Vanishing 현상을 방지할 수 있음
- 출력 값이 비슷하면 노드를 여러개 구성하는 의미가 사라지게 됨
-
Xavier Initialization - 사비에르 초기화
-
사비에르 글로로트(Xavier Glorot)가 제안
-
고정된 표준편차를 사용하지 않음, 은닉층의 노드 수에 맞춰 표준편차를 선정
-
적용 후

-
Code
# TensorFlow tf.keras.initializers.GlorotNormal() # PyTorch torch.nn.init.xavier_normal_()
He Initialization - 히 초기화
-
카이밍 히(Kaiming He)가 제안
-
ReLU함수를 활성화 함수로 사용할 때 추천되는 초기화 방법
-
적용 전

-
적용 후

-
Code
# TensorFlow tf.keras.initializers.HeNormal() # PyTorch torch.nn.init.kaiming_normal_()
참조
https://yngie-c.github.io/deep learning/2020/03/17/parameter_init/
https://supermemi.tistory.com/entry/CNN-가중치-초기화-Weight-Initialization-PyTorch-Code