Mathpresso 머신 러닝 스터디 — 11. CNN(Convolution Neural Nerwork)_2

.

2부 — 그래서 어떻게 쓰면되지?

.

앞선 스터디에서 CNN NN에 Convolution 작업을 선행한 것이라고 했습니다.

.

Convolution 이란 필터링을 하는 것으로 우리는 원하는 특징을 얻기 위해서 필터의 종류를 직접 정해줍니다.

.

(아래 그림의 [(4, 0, 0), (0, 0, 0), (0, 0, -4)]는 사람이 정해준 것입니다.)

Convolution Kernel or mask는 사람이 정해주는 것이었습니다.

.

그런데 놀랍게도 CNN은 이것 마저도 학습합니다.

.

보통 데이터에서 원하는 특징을 뽑아내기 위해서는 사람이 직접 처리를 해줘야했으나

.

데이터를 넣고 머신러닝으로 학습시키면 그 특징 마저도 학습하는 것입니다.

.

그러면 우리가 해줘야할 것은 무엇일까요?

.

1.우리는 Neural Network의 hidden layer의 크기를 정하듯이 마찬가지로 convolution layer의 크기를 정해줘야 합니다.

.

2.이미지의 특성상 매우 많은 픽셀이 존재하고 feature 또한 많으므로 원활한 학습을 위하여 feature를 줄이는 subsampling을 해야 합니다.

.

이 부분에 대한 내용은 매우 방대하고 수학,영상처리의 영역이므로 영상 링크로 대신하겠습니다.(매우 좋은 한글 강의입니다.)

https://www.youtube.com/watch?v=Em63mknbtWo&index=31&list=PLlMkM4tgfjnLSOjrEJN31gZATbcj_MpUm

Sung Kim 님의 명강의

.

그리고 오늘의 예제는 역시 MNIST를 CNN으로 분류할 것입니다.

만능 MNIST

.

예제 코드는 한줄 한줄 한글 주석을 달았기에 읽으시면서 이해하시면 편할 겁니다.(흐름을 이해해주세요!!)

.

( MNIST_CNN.py > setting: python 3.5, tensorflow, numpy)

(참고로 CPU로 돌린다면 매우 오래 걸릴것입니다…)

.

2개의 convolution layer를 쓰고 2개의 pooling layer를 사용하여

98.44%의 정확도를 보였습니다.

200개 중에 1개 틀리는 확률

.

여기서 Overfitting을 막기 위한 Drop Out을 추가하고 대략 20000번 정도 학습을 시키면 정확도가 99.2%가 나온다고 합니다!!

.

이 정도면 정확도가 매우 높다고 말할 수 있겠지요??

.

매우 복잡한 이미지 처리도 컴퓨팅 성능이 허락한다면 이런 고성능을 낼 수 있기에 영상 분석은딥러닝에 의해 비약적으로 성장한 분야입니다.

.

이렇게 CNN에 대한 이야기를 끝내고 다음에는 순차적인 정보를 처리하여 자연어 처리 분야(NLP)에서 큰 성과를 내고있는 RNN(Recurrent Neural Network)으로 돌아오겠습니다.

.

cf) 오탈자 혹은 잘못된 개념에 대한 피드백은 항상 환영합니다.