강몬드의 프로그래밍 이야기

신경망과 딥러닝 4.손 글씨 문자를 분류하는 신경망 본문

학습/딥러닝

신경망과 딥러닝 4.손 글씨 문자를 분류하는 신경망

강몬드 2016. 1. 26. 11:22

손 글씨 문자를 분류하는 신경망

   문자분류 문제는 두 가지 세부 문제로 나누어서 풀 수 있다. 첫 번째, 우리는 손 글씨들이 작성된 문자들을 각각을 세분화해서 하나의 문자를 포함하는 분리된 이미지를 만들어야한다. 그림 1.5.1은 여러 문자들이 나열된 이미지이다.

   



<그림 1.5.1 손 글씨 문자>

   그림 1.5.2는 그림 1.5.1의 문자들을 세분화하였다.



<그림 1.5.2 세분화된 이미지>

   인간은 이 세분화 문제를 쉽게 할 수 있지만, 이를 컴퓨터 프로그램이 정확하게 나누기란 어려운 문제다. 세분화 된 이미지를 구했으면 그 다음은 각각의 문자 이미지들을 분류해야 한다. 예를 들어, 위 문자들 중에 첫 번째 문자부터 인식하려고 한다면 프로그램은 ‘5’라고 인지해야 할 것이다. 우리는 두번째 문제, 즉 각각의 숫자를 분류하는 문제를 해결하는 프로그램을 짜는데 집중할 것이다. 왜냐하면 여러분이 하나의 숫자를 구분할 수 있다면, 분할 문제를 해결하는 것은 크게 어렵지 않기 때문이다. 이미지 분할 문제를 해결하는 방법에는 여러가지가 있다. 한가지 방법으로는 여러번 이미지를 나눠 본 후 시도한 분할을 단일 숫자 분류기로 점수를 내는 것이다. 만약 단일 숫자 분류기가 작은 이미지들을 분류하는데 어려움을 겪지 않았다면 높은 점수를 받을 것이고, 숫자를 인지하는데 어려움을 겪는다면 낮은 점수를 받을것이다. 이 방법의 핵심 아이디어는, 만약 단일 숫자 분류기가 어딘가에서 난항을 겪는다면, 아마 이미지 분할이 제대로 이루어지지 않았을 가능성이 높다는 데에 있다. 이러한 아이디어 뿐만 아니라 다른 여러가지 방법으로 이미지 분할 문제를 잘 해결할 수 있을 것이다. 그렇기 때문에, 이미지 분할 문제 보다는 더 흥미롭고 어려운 단일 숫자를 분류할 수 있는 neural network를 만드는 데에 집중할 것이다.


   하나의 문자 인식을 위해 다음과 같은 신경망을 설계하였다. 그림 1.5.1은 세 개의 층을 갖는 신경망이다.



<그림 1.5.1. A three-layer neural network>

   입력 층의 뉴런들을 입력 이미지의 픽셀 값을 받는다. 여기서 사용된 학습데이터는 28 x 28 크기의 손 글씨 문자 이미지이다. 입력은 흑백 화소 값으로 흰색을 표현하는 0.0부터 검정색을 표현하는 1.0사이의 실수 값이다.


   두 번째 층은 히든 층이다. 뉴런의 수를 n으로 표기하였지만 여기선 15개의 뉴런을 사용한다.


   출력 층은 10개의 뉴런이다. 이 뉴런 중 첫 번째의 뉴런이 1에 가까운 값을 출력하면 이는 입력이 ‘0’이라고 분류 결과를 가리킨다. 마찬가지로 두 번째 뉴런이 1에 가까운 값을 가지면 입력의 분류 결과가 ‘1’이다.


   출력 층의 뉴런이 10개인 이유는 신경망이 0~9까지의 수를 분류하는 목적을 갖기 때문이다. 이진 표기 방법을 이용해서 4개의 뉴런으로도 결과를 가질 수 있다. 이기 때문에 10개보다 많은 분류를 할 수 있다. 그러나 이 방법은 효율적이지 않다. 이유는 두 가지 방법을 사용해보고 실험 결과 10개의 뉴런을 사용하는 모델이 더 좋은 결과를 얻었다.


출처 : http://neuralnetworksanddeeplearning.com/index.html

Comments