[모두의 딥러닝] Initialize weights in a smart way
📗강의노트/모두의 딥러닝

[모두의 딥러닝] Initialize weights in a smart way

728x90
반응형

Sung Kim 님의 "모두의 딥러닝" 강의노트입니다

좋은 강의 감사드립니다!

https://www.youtube.com/watch?v=mQGwjrStQgg&list=PLlMkM4tgfjnLSOjrEJN31gZATbcj_MpUm&index=5


Vanishing gradient 문제를 해결하는 방법이 두 가지가 있는데 
하나가 이전에 말했던 ReLU이고 두 번째는 초기값을 제대로 설정하자는 것이다.
Geoffrey Hinton’s summary of findings up to today의 4가지 이유에 속해있다. 

ReLU 끼리도 결과의 차이가 존재함 / 초기에 W를 주는 것에 따라 달라짐 

< 초기값(W)을 다 0을 놔둠 >
W를 chain rule을 할 때 사용되는데 x의 기울기가 0이 되버림 나머지 이전의 gradient도 다 0이 되어버린다. 

“ 절대로 초기값을 0을 주면 안된다! “

어떻게 초기화 것인가에 대해 “ RBM ( Restricted Boltzmann Machine ) “ 이 등장함. 
RBM을 통해 초기화한 것을 “ DBN ( Deep Belief Nets ) “ 라고 한다

Restriction이라고 부르는 이유는 세로 노드들끼리 연결이 된게 아니라 앞뒤로만 연결되어 있기 때문이다.


입력을 재생산하는 역할을 한다. 


초기에 Forward는 데이터셋을 각각의 W1,2,3을 통해 새로운 값 b를 만들어낸다. 
그 b를 가지고 Backward를 진행한다. 이때 받았던 W1,2,3을 그대로 이용하여 새로 입력값을 만들어 내게 되는데 이를 X-hat이라고 불러보자

그러면 처음에 X값과 X-hat 값을 비교하여 차이가 최저가 되도록 Weight 값을 조정해준다. 
이를 바로 RBM이라고 하는 것이다. 다른 말로는 (auto) encoder / (auto) decoder 라고 하기도 한다. 

1번째와 2번째만을 놓고 W를 앞으로 뒤로 줬다 뺐다하면서 W값을 학습(조정)하고, 다음 단으로 넘어가면서 반복하면 된다. 

Pre-Training을 하는데 label값도 필요없고 그냥 기존의 X값만 필요로 한다. 그리고 전체를 보면 W값들이 다 생기는데 이것을 바로 “ 초기화된 값 ” 이라고 한다.

그리고 실제 학습하듯이 x data,  Label을 놓고 학습을 시키는 것이다. 이를 “ Fine Tuning "이라고 부른다. 이미 가지고있는 W의 값들이 훌륭하고 조정되었기 때문에 조금만 건드린다는 의미로 사용한다. 


하지만 좀 복잡해서 굳이 RBM안써도 된다는 소식이 있다!

그리고 아주 간단한 초기화 방법이있다. 

Xavier initialization이라는 방법이다. 입력 node에 맞게 초기값을 비례하게해서 세팅하면 된다는 것이다. 

기본적으로 just right = 좋은 값을 얻고 싶다!

Fan_in / fan_out에 따라 W을 random하게 줌 

2015년 HE는 나누기 2를 하면 더 잘 된다고 발표했다. 

이를 통해 조금 더 간단하게 코딩할 수 있다.

하지만 데이터마다 정확하게 W을 initialize하는 방법은 다를 수도 있다. 따라서 초기화를 여러가지 해보는 것이 중요하다!!


728x90
반응형