2014년 10월 26일 일요일

Neural Network 과 javaNNS 소개

Neural Network에 관하여 공부하다가 좀 더 이해하기 쉽게 공부할 수 있는 방법이 없을까 찾아보다가 JavaNNS를 찾았습니다.
이 글은 JavaNNS 자세한 설명서가 없어서 이것저것 시도한 글입니다.
JavaNNS란 Java Neural Network Simulator입니다. SNN(Simulation of Neural Networks)가 이미 존재하는건데 Java로 만든겁니다.
다운로드는 http://www.ra.cs.uni-tuebingen.de/downloads/JavaNNS/ 여기에서 할 수 있습니다.
그리고 자바 버전은 jre7 을 설치해 줍니다. 혹시 java8 버전을 이용하시는 분이 안되시면 java7로 설치해보시기 바랍니다.
JavaNNS를 설치하면 manual.pdf가 존재하는데 그것은 메뉴와 기능에 대한 설명입니다.
NN에서 자주 등장하게 나오는 XOR을 만드는 설명을 해보도록 하겠습니다.

NN에 관해 공부를 하셨다면, XOR이 Hidden layer 없이 퍼셉트론으로 분류가 안된다는 사실을 아실겁니다.
그래서 Hidden layer를 입력한 예제를 준비하였습니다.(example 폴더에서 구할 수 있습니다.)

참고 :
http://baibook.epfl.ch/exercises/supervisedLearningNN/NN_Exercise.pdf
http://www.cs.bham.ac.uk/~jxb/NN/javaNNS/javaNNSguide.html

처음 시작하면 아래와 같은 화면이 나온다. 처음 보이는 화면이 View>Network 화면이 기본으로 보이는 윈도우가 됩니다.


Network의 노드를 만들기 위해서는 Tool>Create>Layers를 선택합니다.
그리고 노드를 만들때 주의할 점은 Unit type과 Layer number가 됩니다.


일반적으로 Input이 하나의 Layer를 가지고 Hidden 과 Output Layer를 지닐때 각각 Layer 번호를 다르게 입력하도록 합니다.



XOR 을 예를 들자면 아래와 같습니다.
입력 출력
0 0   0
1 0   1
0 1   1
0 0   0
입력이 2개이고 출력이 하나가 되도록 합니다.
그리고 hidden이 몇 개 있을지는 맘대로 해도 됩니다. hidden을 0,1,2개 등등 시뮬레이션 해볼 수 있는 툴이 JavaNNS가 되겠습니다. hidden Layer를 더많이 넣어 볼 수도 있습니다.

여기에서는 hidden node를 2개 hidden layer 2개를 만들어 보겠습니다.
그리고 Tools>Create connections 선택해서 Connect feed-forward 선택하면 됩니다.
그려면 화살표가 자동으로 나오게 되며 하나씩 움직일 수 있습니다.


이제 훈련시키는일이 남았습니다.
훈련시키기 위해서는 패턴 데이터가 필요합니다. 구글 검색을 해봤는데 같이 첨부된 패턴 데이터를 참고하라고 합니다.
JavaNNS 예제 폴더에 보면 xor.pat 파일을 찾을 수 있습니다.
이것을 File>Open 해서 파일을 xor.pat파일을 선택합니다.

아래는 xor.pat파일 내용입니다. 패턴은 4가지이고 입력은 2개 출력은 하나를 가지고 있는 데이터 입니다.
SNNS pattern definition file V3.2
generated at Mon Apr 25 15:58:23 1994

No. of patterns : 4
No. of input units : 2
No. of output units : 1
# Input pattern 1:
0 0
# Output pattern 1:
0
# Input pattern 2:
0 1
# Output pattern 2:
1
# Input pattern 3:
1 0
# Output pattern 3:
1
# Input pattern 4:
1 1
# Output pattern 4:
일단 데이터를 초기화 하도록 합니다. Tool>Control Panel : Initializing 탭에서 Init을 누릅니다. 그리고 훈련 시키기 위해서는 Tool>Control Panel : Learning 탭을 사용하고 훈련과정을 보기위해서 Error graph를 열어서 보도록 합니다.
Tool>Control Panel : Learning : Learn All 버튼을 누릅니다.

확인해야 할 부분은 Error graph에서 Learn All을 많이 했을때 값이 떨어지는지 확인하는것입니다. 그리고 Log에서 SSE값이 얼마가 나오는지 보면 됩니다. 0에 가까울 수록 오류가 작다는것을 의미합니다. 위 데이터에서는 11000 회만에 오차가 0이 되었습니다.



댓글 없음:

댓글 쓰기