가중치의 초깃값을 무엇으로 설정하느냐가 신경망 학습에 영향을 많이 끼친다.
각 neuron의 가중치를 기반으로 error를 결정하기 때문이고, 정확한 모델을 얻으려면 작은 error를 필요로 하기 때문
loss functiondp L2 norm과 같은 penalty를 추가하는 정규화 기법, bias가 아닌 weight에만 decay를 적용하는 것을 선호
결론적으로 0으로 초기화하게 되면 안됨
-> neuron이 training 중에 동일한 feature를 학습하기 때문
순전파 때 입력의 모든 가중치가 0이라면 두 번째 층 neuron도 똑같은 값이 전달되며, backpropagation에서 모든 weight의 값이 모두 똑같이 바뀌게 되는 것을 의미함.
가중치 초기화 방법에는
normal_은 말 그대로 normal distribution (정규분포)를 따르게 하는거고 일반적으로 weight를 초기화하기 위해 씀
ex) nn.init.normal_(m.weight, 0, 0.01)
constant_은 fill 0와 비슷한 느낌으로 쉽게 null값을 parameter 값으로 채워준다고 생각하면 됨, 흔히 bias를 초기화할 때 사용
ex) nn.init.constant_(m.bias, 0)
xavier_uniform_은 이전 노드 수와, 다음 노드 수를 고려해서 최적화하는 방법인데 비선형 함수인 sigmoid, tanh 에서 효과적인 모습을 보여줌
그러나 ReLU를 사용할 때는 출력값이 0으로 수렴하는 현상을 보여줘 ReLU에서는 사용하지 않는다.
-> 이 땐 He initialization을 사용하는데 nn.init 라이브러리 안에는 He가 따로 구현이 안돼있는 것 같아서 나중에 찾아보던가 일단은 pass..