Weight Initialization
1) 개요
- 학습 parameter (weight)의 초기값 설정은 global minimum을 찾는데 매우 중요하다.
- vanishing gradient 또는 과하게 큰 gradient로 인해 올바른 학습이 될 수 없다.
2) weight 값이 0이거나 동일한 값일 경우
- 초기 weight 값이 0이거나 동일한 값일 경우 다음 layer에 동일한 값이 전달된다.
- backpropagation을 할 경우, 동일한 weight를 지닌 층에서 동일하게 갱신되기 때문에 모델에서 layer를 쌓은 효과가 없다.
LeCun Initialization
$$W \sim N(n_{in}, n_{out})$$
$$Var(W) = \frac{1}{n_{in}}$$
Xavier Initialization
- 이전 노드와 다음 노드 개수에 의존하는 방법으로 backpropagation에서 layer를 통과하기 전, 후 gradient 분산이 동일
- activation function으로 ReLU를 사용할 경우, output이 0으로 수렴하는 현상이 있을 수 있어 ReLU에서 사용X
- 정규분포로 평균은 0, 분산은 2를 input node, output node 개수의 합으로 나눈 값
$$W \sim N(0, Var(W))$$
$$Var(W) = \frac{2}{n_{in}, n_{out}}$$
He Initialization
- ReLU를 사용할 때 주로 사용하는데, 이는 Xavier를 사용했을 시 층이 깊어질수록 output값이 0으로 치우지기 때문이다.
$$W \sim N(0, Var(W))$$
$$Var(W) = \frac{2}{n_{in}}$$
가우시안 분포와 균등 분포 둘 중 어느 것을 써야 하는 것에 대한 정확한 기준은 없으며 각각의 논문에서 Glorot은 uniform
He는 Deep CNN 모델들은 주로 normal을 사용
출처 : https://datascience.stackexchange.com/questions/13061/when-to-use-he-or-glorot-normal-initialization-over-uniform-init-and-what-are/13362#13362
코드 예시
- 각 layer마다 dense method 안에 입력
'''lecun'''
keras.initializers.lecun_normal(seed=None)
keras.initializers.lecun_uniform(seed=None)
'''glorot'''
keras.initializers.glorot_normal(seed=None)
keras.initializers.glorot_uniform(seed=None)
'''He'''
keras.initializers.he_normal(seed=None)
keras.initializers.he_uniform(seed=None)
참고
'AI > Deep Learning' 카테고리의 다른 글
Batch Normalization (0) | 2021.03.05 |
---|---|
Dropout (0) | 2021.03.04 |
SGD (Stochastic Gradient Descent) (0) | 2021.03.04 |
Activation function (0) | 2021.03.03 |
Feed-forward NN & Backpropagation (0) | 2021.03.03 |