ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [7/16, 13/10K] - 가중치 초기화 설명(Kaiming, Xavier)
    개발일지 2024. 7. 16. 11:45

    mmengine에서 여러가지 초기화 함수 제공함.

    Kaiming 초기화와 Xavier 초기화는 신경망의 가중치를 초기화하는 방법입니다. 두 가지 초기화 방법은 주로 심층 신경망에서 학습 안정성을 높이고 성능을 향상시키기 위해 사용됩니다. 이 두 가지 초기화 방법의 차이점과 그 목적에 대해 설명하겠습니다.

    1. Kaiming 초기화 (He 초기화)

    개발자: Kaiming He et al.

    설명:

    • Kaiming 초기화는 주로 ReLU (Rectified Linear Unit) 활성화 함수를 사용하는 신경망에 사용됩니다.
    • 가중치 초기화 시, 입력 뉴런의 수(n)에 따라 가중치를 무작위로 설정합니다.
    • 분포: N(0, 2/n), 여기서 n은 이전 층의 뉴런 수입니다.

    공식:

    python
    Copy code
    W ~ N(0, sqrt(2 / n))

    목적:

    • ReLU 활성화 함수의 특성에 맞게 가중치를 초기화하여, 학습 초기 단계에서 신경망이 깊어져도 신호가 사라지지 않도록 합니다.
    • ReLU는 양수 부분에서 기울기가 1이므로, 분산이 2로 설정됩니다.

    2. Xavier 초기화 (Glorot 초기화)

    개발자: Xavier Glorot et al.

    설명:

    • Xavier 초기화는 주로 sigmoid, tanh 등 대칭적인 활성화 함수를 사용하는 신경망에 사용됩니다.
    • 가중치 초기화 시, 입력 뉴런의 수(n)와 출력 뉴런의 수(m)에 따라 가중치를 무작위로 설정합니다.
    • 분포: N(0, 1/n) 또는 N(0, 1/(n+m)), 여기서 n은 이전 층의 뉴런 수, m은 다음 층의 뉴런 수입니다.

    공식:

    python
    Copy code
    W ~ N(0, sqrt(1 / n)) # 또는 sqrt(1 / (n + m))

    목적:

    • 대칭적인 활성화 함수의 특성에 맞게 가중치를 초기화하여, 신호가 폭발하거나 소멸하지 않도록 합니다.
    • 모든 층에서 분산이 일정하게 유지되도록 합니다.

    차이점 요약

    초기화 방법사용 대상분포공식목적

    Kaiming 초기화 ReLU 및 변형 (e.g., Leaky ReLU) N(0, 2/n) W ~ N(0, sqrt(2 / n)) ReLU 활성화 함수에 최적화, 신호 소멸 방지
    Xavier 초기화 Sigmoid, tanh 등 대칭 활성화 함수 N(0, 1/n) 또는 N(0, 1/(n+m)) W ~ N(0, sqrt(1 / n)) 또는 W ~ N(0, sqrt(1 / (n + m))) 대칭 활성화 함수에 최적화, 신호 폭발/소멸 방지

    예시 코드 (PyTorch)

    Kaiming 초기화와 Xavier 초기화를 PyTorch에서 사용하는 예시입니다.

    python
    import torch
    import torch.nn as nn
    
    # Kaiming 초기화
    conv_layer = nn.Conv2d(in_channels=3, out_channels=64, kernel_size=3, stride=1, padding=1)
    nn.init.kaiming_normal_(conv_layer.weight, mode='fan_in', nonlinearity='relu')
    
    # Xavier 초기화
    linear_layer = nn.Linear(in_features=128, out_features=64)
    nn.init.xavier_normal_(linear_layer.weight)

     

    위의 코드에서는 kaiming_normal_과 xavier_normal_ 함수를 사용하여 각각 Kaiming 초기화와 Xavier 초기화를 수행합니다. Kaiming 초기화는 주로 Convolutional 레이어에, Xavier 초기화는 주로 Fully Connected 레이어에 적용됩니다.

    이와 같은 초기화 방법을 사용하면 신경망 학습의 초기 단계에서 안정적인 학습을 도와주고, 성능 향상에 기여할 수 있습니다.

    반응형

    '개발일지' 카테고리의 다른 글

    7/21 - [17/10K] - preds = model(sweep_imgs, mats, ...)  (0) 2024.07.22
    7/17 - [15/10K] - __getitem__, collate_fn 역할  (0) 2024.07.17
    7/10 - [11/10K] - nuscene 이미지 저장  (0) 2024.07.10
    7/9 - (9/10K)  (0) 2024.07.10
    7/1 - (7/10000)  (0) 2024.07.01
Designed by Tistory.