무작위 초기화

로지스틱 회귀에서는 그렇지 않지만, NN 에서 가중치를 0 이 아닌 랜덤한 값으로 초기화 하는 것은 매우 중요함

위 그림에서, W[1]W^{[1]} 이 모두 0으로 초기화 된 2x2 행렬이라고 가정했을 때 a1[1]=a2[2]a_1^{[1]}=a_2^{[2]} 가 되기 때문에 같은 활성화 값을 가지게 되버리고 히든 레이어의 노드 갯수가 의미 없어짐

역전파 시 dz1[1]=dz2[1]dz_1^{[1]}=dz_2^{[1]} 도 성립함

이처럼 레이어의 노드들이 모두 동일한 값을 가지고 계산하게 되는 상황을 “대칭한다” 라고 표현함

경사 하강을 한번 수행 해도 값이 변하지 않으므로 같은 값 (이 경우 0) 으로 초기화 하면 안됨

Python 에서 올바른 가중치 초기화 방법

W1 = np.random.randn((2,2)) * 0.01
b1 = np.zeros((2, 1))

W2 = np.random.randn((1,2)) * 0.01
b2 = np.zeros((1, 1))
# b2 = 0 
  • 0.01 을 곱하는 이유
    • 활성화 함수를 계산 할 때 값이 너무 크면 기울기가 0과 너무 가까워지기 때문에 더 많은 경사 하강 반복이 필요해질 수 있음