딥러닝 시대에 '약간' 뒤쳐지는 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 |