위의 그림은 CNN 중 하나인 AlexNet의 계층 구조이다.
물론 저 아이를 꽃으로 판별하긴 했지만.. 꽃 같은 아이 하하하~
CNN에는 크게 4개의 계층이 있다. 하나씩 알아보자.
Fully Connected Layer에서는 input 데이터를 stretch한다.
이런 FC는 너무 많은 파라미터를 요구한다.
이에 대한 해결책으로 Locally Connected Layer, 더 나아가 Convolutional Layer가 있다.
Convolutional Layer에서는 다른 위치의 데이터에 같은 파라미터를 공유한다.
이때 파라미터는 학습된 가중치이다.
Convolution을 거친 결과벡터의 크기는
H(input - filter + 1) x W(input - filter + 1) x 1 이다.
filter를 이동하는 단위를 Stride라고 한다.
Stride까지 고려한 결과벡터의 크기는
⌊ (input - filter + 1) / Stride ⌋ + 1 이다. (⌊⌋는 내림 연산 기호)
Convolution 연산에서 모서리 쪽에 있는 데이터들은 중앙 쪽에 있는 데이터들에 비해 영향력이 적어진다.
이러한 문제를 해결하기 위한 방법이 바로 Zero-Padding이다.
위의 그림은 Zero-Padding을 2로 준 경우이다.
Zero-Padding의 크기는 'filter의 크기 - 1' 로 구할 수 있다.
이런 식으로 여러가지 filter를 사용해서 Convolution 연산을 수행할 수 있다.