학교생활/인공지능

Neural Network 기반 숫자인식 시스템 개발

park_juyoung 2018. 10. 25. 00:06

[프로젝트:"Neural Network 기반 숫자인식 시스템 개발 ]

 

o 개발 시스템 설명

 

우리가 디자인할 neural network 은 다음과 같은 구조를 가지도록 한다:

 


 

- 입력으로 들어 오는 feature N ( N 은 상수기호로 정의됨) 이다. 결국 총 입력 시그날의 수는 N+1 이다.

       

- 전체 층(layer)의 수는 3 개이다.각 층의 뉴론의 수는 기호상수  m0, m1, m2 로 선언함.

 

- 츨력층의 뉴론의 수 = m2

 

우리의 시스템은 문자인식 시스템이다. 가능한 문자 집합은 { 0, 1, 2, , 9} 로 한다.

 

[1]   Training data :

    - 인공지능 연구집단에서 많이 사용하는 MNIST data 를 이용한다.

       traindata.txt,  testdata.txt 의 두 개의 파일로 구성된다.

       전자는 훈련에 후자는 테스트에 이용된다.

    - 각 예제는 28 X 28 의 숫자 이미지와 이의 정답레이블 (0 ~9 중 한 수) 로 구성된다.

    - 이미지의 각 셀의 값은 0 ~ 255 사이의 정수이다. 이것은 해당 셀의 gray scale 이다.

    - 우리는 각 셀 값을  0 ~ 1 사이의 실수로 변환하여 사용한다.

    - 데이터는 파일 train.txt test.txt 에 주어진다. 전자는 6만개의 예제, 후자는 1만개의 예제로

       를 가진다.

-      각 예제는 다음과 같은 format 를 가진다.

 

-      


-      첫 라인:   4  ( target label 을 나타낸다. 즉 이미지의 정답 레이블을 나타낸다.)

-      다음 28 개의 라인: 각 라인은 28 개의 정수를 가진다.  28X 28  이미지 정보를 나타낸다.

-       

 

[3] 시스템의 구성은 다음과 같다.

전체 시스템은 training part testing part 로 구성되어 있다.

() training part

    -  initialization :

       먼저 모든 weight parameter 들을 초기화 해야 한다.

    - epoch 의 구성

      (a) 6만개 각 훈련 예를 하나씩 취해 가면서 다음 작업을 수행한다:

          .   forword computation

                모든 뉴론의 s, f 를 순방향으로 계산한다.

         .   backward computation

                모든 뉴론의 delta를 역방향으로 계산한다.

         .   weight update

                모든 뉴론의  weights  delta 를 이용하여 갱신한다.

         3 단계를 모든 훈련예제에 대하여 수행하고 나면 한 epoch 를 수행한 것이 된다.

      (b) epoch 를 수행한 후에 평균에러 (average squared error ) 를 다음 과정을 거쳐 구한다.

         .  각 훈련 예마다 forward computation 을 수행하여 출력층 뉴론의 출력마다 f 를 계산한다.

             각 출력층 뉴론 출력의 squared error 를 계산한다.

         .  모든 출력층 뉴론 출력의 squared error 를 합한다 ( squared error of an example )

         .  위의  모든 훈련예의 squared error of a example 을 모두 합한다.

         .  모든 훈련예에 대하여 위 작업을 수행한 결과로 total sum of squared error 을 구한다.

         .  결국 평균 에러(average squared error) 는 다음과 같이 구한다:

                    total sum of squared error / (훈련예의 수 * 출력층 뉴론의 수)

      (c)  다음 epoch 로 더 나아갈 지를 결정한다.  예를 들어 train_threshold = 0.001 을 이용한다.

              만약 average squared error  <  train_threshold 이면,

              종료할지 여부를 물어보아 계속하라면 종료하지 않고 다음 epoch 를 수행한다.

              종료하라고 하면 다음 epoch 로 가지 않고, test 과정으로 간다.

 

 ()  testing part

    - 1만개의 테스트 예제 각각에 대하여 다음을 수행한다.

    - 테스팅 과정에서는 각 뉴론의 함수를  sigmoid 대신 다시 threshold 함수로 교체하여야 하지만

우리 과제에서는 그냥 sigmoid 함수를 이용한다. 출력 층의 여러 뉴론 중  f 가 가장 큰 것에

 해당하는 문자를 답으로 인식한다.

 

    - 각각의 테스트 예제에 대하여 출력을 계산한다. 이 출력이 이 테스트 예제의 target label

       동일하면 이 테스트 예제는 답을 맞춘 것이고 아니면 못 맞춘 것이다.

       이 작업을 모든 훈련 예제에 대하여 시행한다.

       그 다음  accuracy 를 다음과 같이 계산한다:

 

              test accuracy = 


 

  

o  실험 방법:

(가)  위에서 설명한 시스템을 개발한다. 그리고 test accuracy 를 출력하여 본다 .

        만약 test accuracy 가 좋지 않다고 생각되면  다음 사항 을 변경하여 다시 실험 (즉 훈련-테스트) 과정을

시도해 본다:

       -  각 층의 뉴론의 수

       -  학습률 c

  ()  실험결과로 출력할 정보: 

       각층의 뉴론 갯수, 학습률 c,  훈련에 소요된 epoch , test accuracy.

 

 





1. 프로그램 실행 방법

  각 층의 뉴런 수와 1epoch를 설정하고 트레이닝 데이터와 테스트 데이터를 읽어와 메모리에 저장한다. 그리고 랜덤 가중치를 설정하고 트레이닝을 시작한다. 1epoch 당 평균오차율을 epoch 한번 마다 출력하고 설정된 평균 오차율 이하로 떨어 질 경우 훈련을 마칠지 설정한다. 훈련을 마치게 되면 테스트 데이터에 대한 정답율을 출력하게 된다. 훈련을 계속 할 경우 1epoch를 하고 다시 훈련을 마칠지 물어 본다.


2. 프로그램 결과 창




github : https://github.com/park-ju1008/Neural-Network

'학교생활 > 인공지능' 카테고리의 다른 글

프로젝트: A* 탐색시스템 개발  (0) 2018.10.25