Related to: Deep Learning

가중치 초기화 (Weight Initialization)

  • 신경망의 목적 : 신경망 모델의 목적은 손실(Loss)을 최소화 = Parameter Optimization

Untitled 62.png

Loss를 최소화하기 위해서는 경사 하강법을 사용하여 Loss를 줄여나가야 합니다. 그러나 위 그림과 같이 시작점에 따라서 전혀 다른 방향으로 학습이 진행될 수도 있고 최저점을 찾기 위해 걸리는 속도가 다를 수도 있습니다.

학습 시작 시, 적절하게 가중치를 초기화하는 것은 학습에 있어 중요합니다.

  • Zero Initialization
    • 모든 파라미터 값을 0으로 놓고 시작하면 되지 않을까?라고 생각할 수 있습니다.
    • 그러나 파라미터의 값이 모두 같다면 역전파(Back propagation)를 통해서 갱신하더라도 모두 같은 값으로 변하게됩니다.
    • 신경망 노드의 파라미터가 모두 동일하다면 여러 개의 노드로 신경망을 구성하는 의미가 사라집니다.
  • Random Initialization
    • 파라미터에 다른 값을 부여하기 위해서 가장 쉽게 생각해 볼 수 있는 방법은 확률분포를 사용하는 것입니다.

    • Std1, Sigmoid를 사용한 경우

      Untitled 1 45.png

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

      Untitled 2 30.png

      • 대부분의 출력 값이 0.5 주변에 위치하며, 따라서 Gradient Vanishing 현상을 방지할 수 있음
      • 출력 값이 비슷하면 노드를 여러개 구성하는 의미가 사라지게 됨

Xavier Initialization - 사비에르 초기화

  • 사비에르 글로로트(Xavier Glorot)가 제안

  • 고정된 표준편차를 사용하지 않음, 은닉층의 노드 수에 맞춰 표준편차를 선정

  • 적용 후

    Untitled 3 23.png

  • Code

    # TensorFlow
    tf.keras.initializers.GlorotNormal()
     
    # PyTorch
    torch.nn.init.xavier_normal_()

He Initialization - 히 초기화

  • 카이밍 히(Kaiming He)가 제안

  • ReLU함수를 활성화 함수로 사용할 때 추천되는 초기화 방법

  • 적용 전

    Untitled 4 15.png

  • 적용 후

    Untitled 5 12.png

  • 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