※ 이 글의 내용은 O'REILLY의 <밑바닥부터 시작하는 딥러닝> 책을 기반으로 한다.
학습 관련 기술 : 초기 가중치 설정
- 가중치의 초깃값을 지정해주는 일은 학습에서 매우 중요한 부분이다. 지정해 주지 않으면 컴퓨터가 무작위로 가중치의 초깃값을 지정하고 학습을 해나가는데, 만약 가중치의 초깃값이 최적값과 멀리 떨어져있다면 학습하는데 오랜 시간이 걸리게 된다. 또한 오래 학습할 경우 과대적합(Overfitting)의 가능성을 내포하고 있으므로 초기 가중치를 설정하여 빠르게 학습하는 것이 매우 중요하다.
- 가중치 감소(Weight Decay) : 가중치 감소는, 간단히 말해서 가중치 매개변수의 값이 작아지도록 학습하는 방법이다. 가중치 값을 작게 하여 과대적합이 일어나지 않게 하는 것이다. 특정 가중치 값을 0으로 만드는 L1 방식이나 0에 가깝게 가지만 0이 되지는 않도록 가중치 값을 줄이는 L2 방식의 정규화(Regularization, 규제)를 사용한다. L2 방식이 더 많이 사용된다. L1과 L2 정규화에 대해서는 (http://kolikim.tistory.com/9?category=733478)를 참고하면 된다.
- 가중치 감소 기법을 사용하면 가중치가 0에 가까워진다. 이 말은, 가중치에 곱해지는 각각의 특성들이 어느 정도 무시가 된다는 말이다. 즉, 데이터의 특성을 일정 부분 무시함으로써 학습 모델의 성능은 떨어지게 되지만 전체적인 경향성은 유지되므로 과대적합(Overfitting)을 피할 수 있다.
- 가중치의 초깃값을 모두 0으로 설정하는 것은 좋은 생각이 아니다. 비단 0뿐만이 아니라, 가중치 전체를 하나의 값으로 통일하는 것 자체가 나쁜 방식이다. 동일한 가중치를 가지게 되면 순전파(Forward-Propagation)에 의해 전달되는 값도 동일하고, 따라서 오차역전파법(Back-Propagation)에 의해 갱신되는 가중치의 값도 동일하므로 가중치가 여러 개 있는 의미가 없어지게 된다. 따라서 초깃값을 작게 설정하되, 무작위로 설정하는 것이 기본이다.
- 5개의 층마다 각 100개씩의 뉴런을 가진 신경망 모델에 1000개의 데이터를 무작위로 생성하여 입력해준다. 가중치의 분포는 정규분포를 사용하며, 활성화 함수로는 시그모이드(sigmoid) 함수를 사용한다.
- 먼저 가중치 분포에서 표준 편차가 1인 정규분포를 사용하면, 위와 같은 히스토그램을 얻을 수 있다. 표준 편차가 크다는 것은 곧 분산이 크다는 말이고, 데이터가 한 곳에 집중되기 보다는 넓게 퍼져있다는 것을 뜻한다. 활성화 함수가 시그모이드 함수이기 때문에 넓게 퍼져있는 데이터는 활성화 값이 0과 1에 치우치게 된다.
- 기울기 소실 문제(Gradient Vanishing Problem) : 위와 같이 시그모이드 함수를 활성화 함수로 사용함으로 인해 데이터의 활성화 값이 0과 1에 치우치게 되면 발생하는 문제가 바로 기울기 소실 문제이다. 시그모이드 함수는 함수 값이 0과 1로 수렴해갈 때 기울기가 급속도로 줄어들고, 그 값이 0에 가까워진다. 오차역전파법에 의해 시그모이드 함수의 미분 값(기울기)를 곱해나가는데, 이 값이 0에 가까우므로 점점 곱해나가다 보면 역전파의 기울기 값 또한 점점 작아지다가 사라지게 된다. 이것을 기울기 소실 문제라고 하며, 층이 깊은 모델일수록 더욱 문제가 심각해진다.
- 표준 편차가 0.01로 작게 한 가중치 정규분포의 경우 활성화 값 분포가 위와 같이 나타난다. 표준 편차가 작으므로 데이터가 중앙에 많이 쏠려있게 되고(가중치가 대부분 0이고), 시그모이드 함수가 활성화 함수로 사용되므로 활성화 값이 0.5 부근에 집중되는 것을 볼 수 있다. 표준 편차가 클 때처럼 활성화 값이 0과 1로 치우치지 않아 기울기 소실 문제(Gradient Vanishing Problem)는 발생하지 않는다. 그러나 위와 같은 경우에는 대부분의 뉴런이 거의 같은 값을 출력하고 있기 때문에 뉴런이 여러 개가 있는 의미가 없고, 모델의 표현력에 한계가 생긴다.
- 활성화 값이 특정 영역에 치우치게 되면 모델의 표현력이 제한된다던가, 기울기가 소실되어 학습이 제대로 이루어지지 않는다던가 하는 문제가 발생한다. 따라서 활성화 값은 적당히 고르게 분포되어야 하고, 이것을 위해 여러 권장되는 가중치의 초깃값이 존재한다.
- Xavier 초깃값 : 활성화 함수가 시그모이드(Sigmoid)나 하이퍼탄젠트(tanh) 함수일 때 사용할 수 있는 가중치 초깃값이다. 앞 계층의 노드 수가 n일 때 표준 편차가 (1/√n)인 가중치 분포를 사용한다. Xavier 초깃값을 사용하면 앞 층에 노드가 많을수록 다음 노드의 초깃값으로 설정되는 가중치 표준 편차가 작아져서 가중치들이 중앙에 집중된다.
- 위의 그림은 Xavier 가중치 초깃값을 사용했을 때의 활성화 값 분포이다. 층이 깊어지면 분포 형태가 일그러지지만, 표준 편차를 단순 상수로 지정했을 때보다 확실히 다양하게 활성화 값이 분포되어 있다는 것을 알 수 있다.
- He 초깃값 : 활성화 함수가 렐루(ReLU) 함수일 때에 특화된 가중치 초깃값이다. He 초깃값은 앞 계층의 노드 수가 n일 때, 표준 편차가 √(2/n)인 가중치 정규 분포를 사용한다. 각 가중치 초깃값에 따른 활성화 값 분포는 다음과 같다.
- 먼저 표준 편차가 상수인 정규 분포 형태의 가중치 초깃값을 사용한 경우, 각 층에서 활성화 값이 특정 값에만 쏠려 나타나는 것을 볼 수 있다. Xavier 초깃값도 처음에는 활성화 값이 고르게 분포되어 있으나 층이 깊어질수록 특정 값에 치우치는 경향을 보인다. 따라서 층이 매우 깊어지면 활성화 값들이 매우 치우치게 되어 기울기 소실 문제(Gradient Vanishing Problem)가 발생하게 된다. 그와 다르게 He 초깃값은 모든 층에서 균일하게 분포되었다. 층이 깊어져도 분포가 균일하기 때문에 오차역전파(Back-Propagation)를 적용하더라도 적절한 값이 나오게 된다.
- 위의 그래프는 손글씨 인식 데이터인 MNIST 세트에 가중치 초깃값 지정 방식을 다르게 하여 학습 성능을 비교한 것이다. 표준 편차가 0.01인 정규분포 형태의 가중치 초깃값 모델은 기울기 소실 문제로 인해 아예 학습이 이루어지지 않는다. Xavier나 He 초깃값의 경우는 학습이 제대로 이루어지고 있는 것을 볼 수 있다. 그러나 속도 면에서 He 초깃값이 조금더 빠르게 나타난다.