딥러닝에서는 weight 를 학습하여 모델을 최적화합니다.


weight 의 초기화르 어떻게 하느냐에 따라 학습 속도가 달라지는데, 자칫 잘못하면 모델 자체의 성능이 굉장히 떨어질 수 있습니다.


이 문제 때문에 Neural Winter 가 찾아왔었습니다. (용어가 정확히 맞는지는 잘 모르겠네요.)


Neural Winter 에는 weight 초기화 문제 외에도 다른 요인들이 겹쳐서 찾아오기는 했지만 중요하다는 사실은 부정할 수 없을 것입니다.


어쨌든 Godfather of Deeplearning 이라고 불리는 Jeffrey Hinton 교수님께서 기존 뉴럴넷의 문제들을 해결했는데 그 중 weight 초기화도 있었습니다.


그 분께서 제시한 방법은 RBM(Restricted Boltzmann machine)을 이용하여 network 의 weight 를 초기화하는 것이었습니다. 이 방법을 사용한 뉴럴넷을 Deep Belief Net 라고 부른다고 합니다.



그 이후로 많은 논문들이 나오면서 훨씬 성능이 좋은 initialization 들이 나왔습니다. 저 같은 사람들은 그런 것들을 모두 읽어보고 이해할 필요는 없고, 어떤 상황에서 사용하는 것이 적합할지 알기만 하면 될 것입니다. 왠만한건 Tensorflow 같은 프레임워크에서 쉽게 사용할 수 있도록 지원하기 때문입니다.


initialization 에는 여러 종류가 있는데 요즘 사용하는 것들 중 대표적으로 Xavier / He initialization 등이 있습니다. 자세한 내용은 나중에 다시 공부해서 추가하겠습니다.


# Xavior initialization

W = np,random.randn(fan_in, fan_out) / np.sqrt(fan_in)


참고로 weight 를 0으로 초기화하는 것은 절대로 안 됩니다. cost 를 줄이는 과정에서 weight 를 미분하게 되는데 0이면 값이 변하지 않기 때문입니다.



마지막으로 중요한 것은, 정해진 초기화 방법은 없다는 것입니다. 문제, 상황 등에 따라 적합한 알고리즘들이 다르기 때문입니다.



참고

https://www.youtube.com/watch?v=4rC0sWrp3Uw&feature=youtu.be

'인공지능 > Deeplearning' 카테고리의 다른 글

RNN  (0) 2017.04.10
블로그 이미지

NCookie

,