CNN — ConvNet의 Conv 레이어 만들기
CNN의 시작은 고양이의 시신경을 실험하면서 어떤 이미지를 보여줄 때 뇌 전체가 아닌 일부만 활성화된다는 사실을 알게되면서 부터다.
이미지로 시작하기
32X32X3 사이즈의 이미지를 입력받는다고 가정했을 때, 이미지의 일부인 5X5X3사이즈의 영역만 -이 일부를 필터라고 부른다- 읽어들인다. 이 때 필터가 하는 일은 궁극적으로 하나의 값(number)을 만들어내는 것이다. = Wx+b를 이용해 한 값을 만들어낸다.

전체 이미지에 대해 몇개의 필터 즉, 값이 필요한 것일까?
이 전체 사이즈(32X32X3)중 일부만 잘라내기 위해 5X5X3 필터를 이용한다고 가정해보자. 이 때 필터의 역할은 잘라낸 이미지를 통해 하나의 값을 추출해 내는 것이다. W의 값은 필터의 값이라고 보면된다.
필터는 전체 이미지를 훑으면서 NxN 형태의 결과값을 리턴한다.

Stride는 필터가 한번 움직일때 얼마나 큰 보폭으로 움직이는가를 의미한다. 1이면 1칸씩, 2면 2칸씩.
Stride의 값에 따라서 output이 정해지는데 이 때 output을 구하는 공식은 아래와 같다.
OUTPUT = (원본이미지 사이즈 — 필터이미지 사이즈)/stride + 1
이런식으로 계속 진행하다보면 output의 사이즈가 원본이미지의 사이즈와 비교했을 때 점점 작아지는 결과가 발생하는데, 이를 방지하기 위해 기존 원본이미지에 0 사이즈의 패딩을 추가해준다. 예를 들면 위 7x7의 원본 사이즈에 패딩이 추가되면 9x9사이즈가 되고, stride = 1 로 3x3필터를 적용하면 7x7의 output, 즉 원본 사이즈와 동일한 사이즈가 출력될 수 있다.