본문 바로가기

AI Tech

가중치 초기화 (Weight Initialization)

Weight Initialization(가중치 초기화)는 신경망을 훈련하기 전에 각 뉴런의 가중치를 적절하게 초기화하는 과정이다.

 

가중치 초기화는 왜 중요할까?

학습 속도에 영향: 적절한 초기화는 학습 속도를 향상시키고, 학습이 수렴하는 데 걸리는 시간을 단축시킬 수 있다.

기울기 소실(Vanishing Gradient)과 폭발(Exploding Gradient) 문제를 방지한다.

모델 성능에 영향: 초기화 방식에 따라 모델의 최종 성능이 크게 달라질 수 있다.

 

가중치 초기화 방법

1. 0으로 초기화

모든 신경망 가중치를 0으로 초기화하는 방법.

torch.nn.init.zeros_(tensor)

 

  • 대칭성 문제(Symmetry Problem):
    • 모든 가중치가 동일한 값(0)으로 초기화되면, 각 층의 모든 뉴런은 동일한 출력을 생성하고 동일한 기울기를 가지게 된다. 이는 학습 과정에서 모든 뉴런이 동일한 업데이트를 받아 결국 동일한 역할을 하게 되며, 각 뉴런 간의 차별성이 사라진다. 이로 인해 학습의 효과가 사실상 의미가 없어진다..
  • 활성화 함수의 비효율성:
    • 일부 활성화 함수, 특히 ReLU나 Leaky ReLU 같은 함수들은 입력이 0일 때 비활성화되거나 특정 방향으로 기울기 소실 문제를 일으킬 수 있다. 예를 들어, 모든 입력이 0이기 때문에 ReLU의 경우, 출력이 모두 0이 되어 학습이 시작되지 않는다.
  • 그래디언트 소실/폭발 문제:
    • 모든 뉴런이 동일한 값으로 업데이트되면, 그래디언트가 사라지거나 폭발할 수 있다.

 

2. 정규 분포 초기화

신경망 가중치를 평균이 0이고 특정한 표준편차를 가지는 정규 분포에서 샘플링하여 초기화하는 방법.

torch.nn.init.normal_(tensor, mean=0.0, std=1.0, generator=None)

 

  • 다양성 확보:
    • 모든 가중치가 동일한 값으로 초기화되는 것을 방지하여 신경망이 다양한 특징을 학습할 수 있도록 한다.
  • 균형 잡힌 초기화:
    • 적절한 표준편차를 설정하면 너무 크거나 작은 값으로 초기화되는 것을 방지하여 학습 초기부터 안정적인 그래디언트 흐름을 유지할 수 있다.
  • 정규 분포 초기화는 학습을 안정화시키는 데 도움이 되지만, 모든 문제를 해결하는 만능 해결책은 아니다. 다른 하이퍼파라미터나 네트워크 구조에 따라 성능이 달라질 수 있다.

 

3. Xavier 초기화

Xavier 초기화는 각 층의 입력 뉴런 수와 출력 뉴런 수를 고려하여 가중치의 분산을 조절하여 초기화 하는 방법.

이를 통해 입력과 출력 사이의 신호가 적절하게 전달되도록 하여 그래디언트 흐름을 안정화시킨다.

 

Xavier 초기화에서 가중치의 분산 σ²은 다음과 같이 계산한다.

σ² = 2 / (fan_in + fan_out)

fan_in: 입력 뉴런의 수
fan_out: 출력 뉴런의 수

 

#pytorch 없이 구현
limit = np.sqrt(6.0 / (fan_in + fan_out))
return np.random.uniform(-limit, limit, size=(fan_out, fan_in))
    
#pytorch를 이용
torch.nn.init.xavier_uniform_(tensor, gain=1.0, generator=None)
torch.nn.init.xavier_normal_(tensor, gain=1.0, generator=None)

 

 

  • 깊은 신경망에서도 안정적인 그래디언트 흐름을 유지하여 학습을 원활하게 하며, 학습 속도가 향상된다.
  • 다양한 활성화 함수에 적용 가능:
    • tanh, sigmoid 등 다양한 활성화 함수에 적용할 수 있습니다.
    • 하지만 ReLU와 같은 활성화 함수에는 비효율적이다.

 

 

Papers with Code - Xavier Initialization Explained

Xavier Initialization, or Glorot Initialization, is an initialization scheme for neural networks. Biases are initialized be 0 and the weights $W_{ij}$ at each layer are initialized as: $$ W_{ij} \sim U\left[-\frac{\sqrt{6}}{\sqrt{fan_{in} + fan_{out}}}, \f

paperswithcode.com

 

4. He 초기화

Xavier 초기화를 개선하여 나온 방법으로, ReLU의 특성을 고려하여 더욱 안정적인 학습을 가능하게 하는 초기화 방법.

torch.nn.init.kaiming_uniform_(tensor, a=0, mode='fan_in', nonlinearity='leaky_relu', generator=None)
torch.nn.init.kaiming_normal_(tensor, a=0, mode='fan_in', nonlinearity='leaky_relu', generator=None)

 

 

 

Papers with Code - Kaiming Initialization Explained

Kaiming Initialization, or He Initialization, is an initialization method for neural networks that takes into account the non-linearity of activation functions, such as ReLU activations. A proper initialization method should avoid reducing or magnifying th

paperswithcode.com