CNN(convolutional neural network)에 대해서 알아보자
cnn의 등장 이유
- DNN은 Over-fitting 문제가 발생한다.
너무 train data에 fitting 되는, 함수에 대한 자유도가 너무 높다.
Ex) 강아지, 고양이 분류 문제에서, 내가 보여준 강아지가 아니라면 강아지가 아니라고 판단해 버리는 문제 발생, 조금이라도 다르면 아니라고 판단해버림
단, 내가 보여줬던 강아지는 100퍼 잘 판단. ->너무 융통성 없는 모델임을 알 수 있다.
- Fully connected 문제 발생
너무 계산량이 많아진다. 굳이 다 쓸 필요가 없는데 너무 재화를 많이 쓴다.
cnn(convolution neural network)이란 ?
원본 이미지 x[k]에 필터 h[k]를 곱하고, 다 더한 후 결괏값을 y [n]에 저장한다.
예를 들어 원본 이미지 = x[4][4]라고 하고, 필터를 h [2][2]라고 한다면,
y [I][I]=x [I][I]*h [1][1]+x [I+1][I]*h [2][1]+x [I][I+1]*h [1][2]+x [I+1][I+1]*h [2][2]
이때 1씩 이동하는 것을 stride-1이라고 하는데, stride가 무엇인지는 뒤에서 추가 설명
여기서 필터는 sobel 필터(x필터와 y필터)를 사용해서, 윤곽을 추출해준다.
아까 본 y, h를 예로 든다면, h는 sobel필터가 되고, y는 필터를 통과한 이미지, x는 필터를 통과하기 전 필터가 되는 것.
따라서 convolution filtering을 한다는 것은 이미지의 특징을 뽑는다는 것.
단순히 이미지를 vectorize 해서 (이미지를 1차원으로 찌른 후 이어 붙임) 하는 것보다 더욱 효율적이다.
Stride
필터를 적용할 때 1칸씩 이동하는 게 아니라, n칸씩 이동하도록 설정한다.
1칸은 1픽셀을 의미하는데 굳이 1픽셀씩 보는 게 의미가 없으므로,,
Max-pooling
이미지의 크기를 줄이기 위해, NxN의 이미지 픽셀을 묶어서 가장 크기의 큰 픽셀을 구한다. 그리고 그 값을 출력 값으로 하는 것
예를 들어, 256 X 256 이미지가 있다면 그것의 특징을 분리해서 학습을 더욱 빨리 시키기 위한 것이라고 생각하면 되겠다.
cnn의 대략적인 그림
확실히 pooling layer을 거치면 크기가 감소하는 것을 알 수 있다.