본문 바로가기

Enginius/Machine Learning

Deep Neural Network (DNN)

딥러닝 시대에 '약간' 뒤쳐지는 Deep Belief Network (DBN)으로 pre-train 한 Deep Neural Network (DNN) 입니다. Multi-layer perceptron이라고 할 수도 있겠지만, pre-training이 추가됬으니까요. 물론 요즘엔 pre-training을 거의 하지 않는다고 합니다. ReLU가 나와서, SGD로 학습을 시키면 잘된다고 합니다. 


그림 출처는 아래 링크


DNN 학습 코드는 

http://www.mathworks.com/matlabcentral/fileexchange/42853-deep-neural-network

를 사용했고, 

http://enginius.tistory.com/606

와 같은 spiral data를 만들어서 분류 실험을 하였습니다. 


실험에 사용된 파라미터들은 다음과 같습니다. 

이 파라미터들에 따라 실험 결과가 어떻게 변하는지 확인해보는 것도 딥러닝을 이해하는데 큰 도움이 될 것같습니다. 


위에 사용된 파라미터들은 CNN에도 동일하게 적용되며, adaptive learning rate (RMSProp등)를 제외하면, 위의 파라미터 정도가 전부일 것 같습니다.. 위의 파라미터 중 DropOutRtae와 WeightCost는 regularizer 역할을 하며, 함수를 얼마나 smooth하게 할지 정해주므로 잘 설정해야 합니다. 개인적으로는 WeightCost를 바꿔가면서 decision surface가 어떻게 변하는지를 보는게 감을 잡는데 도움이 된다고 생각합니다. 


실험 결과

======== Deep Neural Network ========

DNN train: 2.948 sec 

DNN test: 0.009 sec 

DNN Train Accuracy: 99.5% AdaBoost Test Accuracy: 99.1%  

앞서 해본 Boosted Random Fern과 성능이 거의 비슷합니다. 


DNN으로 학습된 decision surface는 다음과 같습니다. 나름 잘 되고 있는 것을 알 수 있습니다. 한가지 재밌는 사실은 앞서 포스팅한 boosted random fern과 다르게 이것은 smooth한 곡면을 찾는다는 점입니다. 즉 맨 왼쪽의 decision을 보면 가장 인접한 데이터는 파란색이지만 빨간색으로 분류가 되고 있는 것을 알 수 있습니다. 이는 부드러운 곡면을 만들려다보니 한쪽이 내려가면 다른쪽을 올라가는 현상을 보여주는 것으로 regularizer가 있는 regression을 하는 경우 쉽게 나오는 풍경(?)입니다. 


매트랩 코드


'Enginius > Machine Learning' 카테고리의 다른 글

Bayesian Optimization with Expected Improvement  (0) 2015.12.16
Convolutional Neural Network (CNN)  (5) 2015.12.03
Boosting Methods  (0) 2015.12.02
Practical usage of Representer theorem  (5) 2015.11.07
Representer Theorem  (2) 2015.11.06