본문 바로가기
machine learning

Learning with gradient descent

by 유주원 2016. 1. 20.

http://neuralnetworksanddeeplearning.com/ 의 e-book을 의역함.


이번에는 우리가 만든 neuron network에서 숫자를 인식하기 위해 어떻게 학습을 시켜야 하는지를 살펴보자. 첫 번째로는 학습을 시키기 위한 data-set이 필요하며 우리는 MNIST data set을 이용할 것이다. 아래의 그림이 MNIST 데이터 set의 몇몇 데이타들이다.



MNIST 데이터는 2가지로 나뉘는데 첫번째는 트레이닝 데이타로 쓰일 60000개 이미지이며, 이 이미지는 greyscale에 28 x 28 사이즈로 구성이 되어 있다. 두번째는 테스트 데이타로 쓰일 10000개 이미지이다. 이것 역시 28 x 28 greyscale 이미지로 되어 있다. 우리는 테스트 데이타를 사용해서 얼마나 이 neural network가 학습이 잘되었는지를 판단할 것이다. 실제로 더 좋은 수행 결과를 얻기 위해서 테스트 데이타는 학습 데이타와는 독립적인 데이타로 구성이 이루어 진다. 


우리는 트레이닝 input을 x라고 명시할 것이며, 이 x는 28 x 28 = 784 차원의 벡터라고 여기면 될 것이다. 각각의 벡터는 이미지의 하나의 픽셀을 위한 grey 값이라고 보면 된다. output은 y = y(x)라고 놓고, y는 10차원의 벡터라고 생각한다. 예를 들어 만약에 6이라는 숫자 형태를 가지는 어떠한 트레이닝 이미지 x가 있다면, y(x) = (0, 0, 0, 0, 0, 0, 1, 0, 0, 0) 가 된다.


이번에는 weight와 bias 값을 찾는 알고리즘을 살펴보자. 



w는 모든 weight의 리스트를 의미하고, b는 모든 bias, n은 intput의 총 개수, a는 x가 input일때의 output vector를 의미한다. ||v||는 보통 벡터 v의 길이를 구하는 함수 정도로 생각하면 된다. 우리는 C를 quadratic cost 함수라고 부르며 이 함수는 mean squared error 또는 MSE로도 잘 알려져 있다. sum 값이 음수가 될수 없기 때문에 c(w,b)는 음수가 아니며, C(w,b)가 점점 0에 가까워질수록 y(x)의 값이 output a와 일치한다고 보면 된다. 그래서 c(w,b)가 0에 가장 가까웠을때의 weight와 bias 값을 찾는 것이 위 알고리즘의 핵심 목표이다.