Weight Initialization
1) 개요
- 학습 parameter (weight)의 초기값 설정은 global minimum을 찾는데 매우 중요하다.
- vanishing gradient 또는 과하게 큰 gradient로 인해 올바른 학습이 될 수 없다.
2) weight 값이 0이거나 동일한 값일 경우
- 초기 weight 값이 0이거나 동일한 값일 경우 다음 layer에 동일한 값이 전달된다.
- backpropagation을 할 경우, 동일한 weight를 지닌 층에서 동일하게 갱신되기 때문에 모델에서 layer를 쌓은 효과가 없다.
LeCun Initialization
W∼N(nin,nout)
Var(W)=1nin
Xavier Initialization
- 이전 노드와 다음 노드 개수에 의존하는 방법으로 backpropagation에서 layer를 통과하기 전, 후 gradient 분산이 동일
- activation function으로 ReLU를 사용할 경우, output이 0으로 수렴하는 현상이 있을 수 있어 ReLU에서 사용X
- 정규분포로 평균은 0, 분산은 2를 input node, output node 개수의 합으로 나눈 값
W∼N(0,Var(W))
Var(W)=2nin,nout
He Initialization
- ReLU를 사용할 때 주로 사용하는데, 이는 Xavier를 사용했을 시 층이 깊어질수록 output값이 0으로 치우지기 때문이다.
W∼N(0,Var(W))
Var(W)=2nin
가우시안 분포와 균등 분포 둘 중 어느 것을 써야 하는 것에 대한 정확한 기준은 없으며 각각의 논문에서 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)
참고