티스토리 뷰

반응형


이전 까지의 내용 

  • 이전 글에서는 Vanishing Gradient 현상이 왜 일어나는지, 어떻게 해결해 나가는지와 가중치 초기화 (weight initialization) 가 왜 중요한지에 대해 살펴보았습니다. 이번 글에서는 가중치 초기화의 방법들에 대해서 살펴보겠습니다.

  • 전체 내용은 SlideShare 에서 한번에 보실 수 있으며 youtube 로도 볼 수 있습니다.



가중치 초기화의 중요성 


  • 처음 weight 값들을 평균이 0이며 표준편차가 1인 표준 정규분표를 이용해 초기화 했을 경우에 Sigmoid 함수의 출력값이 0 과 1에 치우치는 현상이 발생합니다. 이 현상이 왜 문제인지 살펴보기 위해 Sigmoid 의 개형을 다시 한 번 살펴보겠습니다.


  • 출력값이 0 과 1 에 치우치면 Gradient 는 0 에 가까운 값을 갖게 되고 이는 Gradient Vanishing 현상의 원인이 됩니다. 따라서 Activation Function 을 변경시키는 것 뿐 아니라 가중치를 적절하게 초기화 하는 것을 통해서도 Gradient Vanishing 현상을 어느정도 해소할 수 있습니다.



표준편차를 줄이는 방법을 통한 개선 

  • weight 의 값들이 0 에서 멀수록, 즉 표준편차가 클 수록 Sigmoid Function 을 사용할 때 0 과 1 에 치우치는 현상이 발생할 것입니다. 이를 해결하기 위한 방법 중 하나로 표준편차가 작은 정규분포 형태로 weight 들을 초기화 하는 방법이 있습니다.


  • 표준편차를 0.01 로 하는 정규분포 형태로 초기화 했을 때 출력값들을 나타낸 그래프 입니다. 표준편차가 1일 때와 달리 0.5 중심으로 모여 있는 것을 확인할 수 있습니다. 이렇게 구성되어 있다면 표준편차가 1일 때 보다 의미있는 ( 0 이 아닌 ) Gradient 값들을 갖게 될 것이고 Gradient Vanishing 현상을 완화할 수 있습니다.



발전된 방법 : Xavier Initialization 

  • Gradient Vanishing 현상을 완화 하기 위해서 가중치를 초기화 할 때 Sigmoid 와 같은 S 자 함수의 경우 가장 중요한 것은 출력값들이 표준 정규 분포 형태를 갖게 하는 것입니다. 출력값들이 표준 정규 분포 형태를 갖게 되어야 안정적으로 학습이 가능하기 때문입니다.

  • 단순히 작은 값의 표준편차를 갖는 형태로 초기화 하는 것이 아닌 보다 발전된 방법인 Xavier Initialization 에 대해 살펴보겠습니다. Xavier 초기화 방법은 표준 정규 분포를 입력 개수의 표준 편차로 나누어주면 됩니다. 

w = np.random.randn(n_input, n_output) / sqrt(n_input



  • 위의 그래프는 Sigmoid 함수와 Xavier 초기화 방법을 사용했을 경우의 그래프 입니다. 10층 레이어에서도 출력값들이 표준 정규분포 형태로 잘 출력되고 있는 것을 알 수 있습니다.



  • 다음 그래프는 Xavier 초기화 방법과 ReLU 함수를 결합했을 때의 그래프 입니다. 출력값이 0 으로 수렴하고 평균과 표준편차 모두 0으로 수렴하는 모습을 확인할 수 있습니다. ReLU 함수를 사용할 경우에는 Xavier 초기화 방법을 사용할 수 없다는 의미입니다.



ReLU 에 사용하는 초기화 : He Initialization 

  • ReLU 함수에 맞는 초기화 법은 He Initialization 입니다. He Initialization 은 Xavier Initialization 과 크게 다르지 않습니다. 단순히 인풋 개수의 절반의 제곱근으로 나누어주면 됩니다.

w = np.random.randn(n_input, n_output) / sqrt(n_input/2



  • He 초기화와 ReLU 함수를 사용했을 때의 그래프 입니다. 10 층 레이어 에서도 평균과 표준편차가 0 으로 수렴하지 않는 것을 알 수 있습니다.


  • Sigmoid 나 Tanh 를 사용할 경우에는 Xavier 초기화를 

  • ReLU 를 사용할 경우에는 He 초기화를 사용하시면 됩니다.



  • 신경망이 깊어지면 가중치들의 작은 변화가 큰 변화로 이어지는 불안정한 현상들이 생깁니다. 물론 이것을 해결하기 위해 처음에 가중치를 잘 설정해주는 방법을 사용했습니다. 가중치를 잘 설정해서 출력값들의 분포를 안정화했는데, 혹시 출력값 자체를 정규화 해준다면 어떨까요?

  • 다음 글에서는 출력값 자체를 정규화 하여 학습을 안정화 하는 방법인 Batch Normalization 에 대해 살펴보겠습니다.


다음 글 - Part. 7 : 배치 정규화






그래프 들은 다음의 사이트에서 참고하였습니다.

- http://umbum.tistory.com/221?category=751025

- cs231n 2017 lecture


부족한 블로그에 방문해 주셔서 감사합니다.

잘못된 부분이나 질문이 있으시면 

댓글로 말씀해주세요.


금방 확인하고 피드백 드리겠습니다.


좋은 하루 되세요. ^^


반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함