Related to: Fundamentals

개요

신경망 모델의 목적은 손실(Loss)을 최소화하는 것으로, 이를 위해 경사 하강법으로 파라미터를 최적화합니다. 학습 시작 시 가중치를 어떻게 초기화하느냐에 따라 학습 속도와 수렴 방향이 크게 달라집니다.

Untitled 62.png

핵심 개념

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