티스토리 뷰

Background/Math

Xavier initializer

벼랑끝과학자 2023. 4. 16. 22:00

해당 포스팅은 공부가 많이 되지 않았을 시절에 작성한 것이라 지금 보니 부족한 내용도 보이고 설명이 매우 미흡합니다. 아래 포스팅을 확인해보면 더욱 잘 설명된 initialization 방식들을 확인할 수 있습니다.

https://reniew.github.io/13/

 

가중치 초기화 (Weight Initialization)

An Ed edition

reniew.github.io

 

 

Xavier initializer는 Neural Network에서 사용하는 weight initialization 방법이다. Xavier Glorot에 의해 고안된 방법이라 이러한 이름이 붙었다.

이 초기화 방법은 각 layer에서의 activation function에 의해 activation 된 weight 값의 결과(activation value)값이 너무 커지거나 너무 작아지는 것을 방지하는 방법이다.

Xavier 초기화 방식은 각각의 weight를 평균이 0이고 분산이 'var'인 Normal distribution을 따르는 정규분포에서 샘플링한다. 이때 'var'는 2 / (fan_in + fan_out)으로 주어지며 fan_in은 layer로 input되는 input의 size이고 fan_out은 해당 layer를 지나 output되는 output의 size이다.

이렇게 정규화된 분포로부터 샘플링된 초기 vector를 통해 학습을 시작하면 각 레이어에서 activation value가 너무 작아져서 생기는 gradient vanishing 현상과 또는 너무 커져서 나타나는 gradient exploding 현상을 방지하도록 도와준다.

Xavier initialization은 상당히 많은 딥러닝 분야에서 weight 초기화 방법으로 사용되고 있다고 한다.

 

Xavier initializer는 Word를 embedding할 때 embedding vector의 초기값을 설정할 때도 사용할 수 있다.

이때 var = 2 / (vocab_size + dimensionality of the embedding vector)이며 그 외의 방식은 weight초기화 방식과 동일하다.

 

import numpy as np

# Set the size of the vocabulary and the dimensionality of the embedding vectors
vocab_size = 10000
embedding_dim = 100

# Initialize the embedding matrix using the Xavier initializer
variance = 2.0 / (vocab_size + embedding_dim)
embedding_matrix = np.random.normal(scale=np.sqrt(variance), size=(vocab_size, embedding_dim))

 

댓글