Deep learning/모델 구현

10. 학습 관련 기술들(2) - 가중치의 초깃값

jwjwvison 2021. 4. 23. 21:39

이 포스팅은 밑바닥부터 시작하는 딥러닝을 공부하고 정리한것 입니다.


 신경망 학습에서 특히 중요한 것이 가중치의 초깃값이다.

 

1. 초깃값을 0으로 하면?

 가중치 감소는 간단히 말하자면 가중치 매개변수의 값이 작아지도록 학습하는 방법이다. 만약 가중치의 초깃값을 모두 0으로 설정한다면 어떨까? 오차역전파법에서 모든 가중치의 값이 똑같이 갱신되기 때문에 그러면 안된다. 이러한 가중치가 고르게 되어버리는 상황을 막으려면 초깃값을 무작위로 설정해야 한다.

 

2. 은닉층의 활성화값 분포

 입력 데이터로서 1000개의 데이터를 정규분포로 무자구이로 생성하여 이 5층 신경망에 흘린다. 이번에는 표준편차가 1인 정규분포를 이용한다. 이 분포된 정도(표준 편차)를 바꿔가며 활성화값들의 분포가 어떻게 변화하는지 관찰하는 것이 이 실험의 목적이다.

 각 층의 활성화값들이 0과 1에 치우쳐 분포되어 있다. 여기에서 사용한 시그모이드 함수는 그 출력이 0에 가까워지자 (또는 1에 가까워지자) 그 미분은 0에 다가간다. 그래서 데이터가 0과 1에 치우쳐 분포하게 되면 역전파의 기울기 값이 점점 작아지다가 사라진다. 이것이 기울기 소실(gradient vanishing)이라 알려진 문제이다. 층을 깊게 하는 딥러닝에서는 기울기 소실은 더 심각한 문제가 될 수 있다.

 

 이번에는 가중치의 표준편차를 0.01로 바꿔 같은 실험을 반복해보자.

w=np.random.randn(node_num,node_num) * 1           #표준편차 1
w=np.random.randn(node_num,node_num) * 0.01        #표준편차 0.01

 이번에는 0.5 부근에 집중되어있다. 앞의 예처럼 0과 1로 치우치진 않았으니 기울기 소실 문제는 일어나지 않는다. 그러나 활성화값들이 치우쳤다는 것은 표현력 관점에서는 큰 문제가 있는 것이다. 왜냐하면, 이 상황에서는 다수의 뉴런이 거의 같은 값을 출력하고 있으니 뉴런을 여러 개 둔 의미가 없어진다는 뜻이다. 예를 들어 뉴런 100개가 거의 같은 값을 출력한다면 뉴런 1개짜리와 별반 다를 게 없는 것이다. 그래서 활성화값들이 치우치면 표현력을 제한한다는 관점에서 문제가 된다.

 

 이어서 Xavier 초깃값을 써보겠다. 이 값은 일반적인 딥러닝 프레임워크들이 표준적으로 이용하고 있다. 이 값을 찾아낸 논문은 각 층의 활성화값들을 광범위하게 분포시킬 목적으로 가중치의 적절한 분포를 찾고자 했다. 그리고 앞 계층의 노드가 n개라면 표준편차가 1/n^(1/2) 인 분포를 사용하면 된다는 결론을 이끌었다.

Xavier 초깃값을 사용하면 앞 층에 노드가 많을수록 대상 노드의 초기값으로 설정하는 가중치가 좁게 퍼진다.

node_num = 100    # 앞 층의 노드 수
w=np.random.randn(node_num,node_num) / np.sqrt(node_num)

 이 결과를 보면 층이 깊어지면서 형태가 다소 일그러지지만, 앞에서 본 방식보다는 확실히 넓게 분포됨을 알 수 있다. 각 층에 흐르는 데이터는 적당히 퍼져 있으므로, 시그모이드 함수의 표현력도 제한받지 않고 학습이 효율적으로 이뤄질 것으로 기대된다.

 

 

 반면 ReLU를 이용할 때는 ReLU에 특화된 초깃값을 이용하라고 권장한다. He초깃값 이라고 한다. He 초깃값은 앞 계층의 노드가 n개일 때, 표준 편차가 √(2/n) 인 정규분포를 사용한다. ReLU는 음의 영역이 0이라서 더 넓게 분포시키기 위해 2배의 계수가 필요하다고 해석할 수 있겠다.

 결과를 보면 std=0.01일 때의 각 층의 활성화값들은 아주 작은 값들이다. 신경망에서 아주 작은 데이터가 흐른다는 것은 역전파 때 가중치의 기울기 역시 작아진다는 뜻이다. 이는 중대한 문제이며, 실제로도 학습이 거의 이뤄지지 않을 것이다.

 이어서 Xavier 초깃값 결과를 보면 이쪽은 층이 깊어지면서 치우침이 조금씩 커진다. 실제로 층이 깊어지면 활성화값들의 치우침도 커지고, 학습할 때 기울기 소실 문제를 일으킨다.

 마지막으로 He 초깃값은 모든 층에서 균일하게 분포되었다.

 

 이상의 실험 결과를 바탕으로, 활성화 함수로 ReLU를 사용할 때는 He 초깃값을, sigmoid나 tanh등의 S자 모양 곡선일 때는 Xavier 초깃값을 쓴다.