출처: 모두를 위한 딥러닝 강좌 시즌 1 by Sung Kim
Fully Connected Layer 참고: https://sonofgodcom.wordpress.com/2018/12/31/cnn%EC%9D%84-%EC%9D%B4%ED%95%B4%ED%95%B4%EB%B3%B4%EC%9E%90-fully-connected-layer%EB%8A%94-%EB%AD%94%EA%B0%80/
CNN은 고양이의 신경 세포가 시각 자극의 특성에 따라 차별적으로 반응하는 것에 아이디어를 얻어서 창안된 모델이다.
CNN은 위 그림과 같이 여러 개의 convolutional layer로 구성되어 있으며 마지막에 fully connected layer를 통해 labeling할 수 있다.
cf) FC(fully connected) layer
그렇다면 Convolutional layer는 어떻게 구성되는 것일까?
이미지는 이미지의 가로 세로 크기에 따라서 데이터의 크기가 다르며, 색상값을 1개(흑백)만 가지고 있을 수도 있고, 3개(rgb)를 가지고 있을 수도 있다.
(예: 32x32x3, 64x64x1)
그렇다면 전체 데이터에 대해서 filter를 적용하고 나면 얻게 되는 feature map의 크기는 어떻게 알 수 있을까?
이는 간단한 식을 통해 계산할 수 있다.
입력 데이터의 크기 = NxN
filter의 크기 = FxF
filter가 한 번에 움직이는 보폭을 뜻하는 stride = s
이때 feature map의 크기
=
예를 들면, 7x7 데이터에 stride가 1, 크기가 3x3인 filter를 적용하면 5x5 사이즈의 feature map을 결과로 얻게 되는 것이다.
cf) 이미지 사이즈와 필터 사이즈에 따라서 적용할 수 있는 stride가 다르다.(나누어 떨어져야 하므로)
이렇듯, filter를 적용하고 나면 얻어지는 feature map의 크기는 원래 데이터의 크기보다 작아지는데, 이는 정보의 손실을 의미한다.
우리는 지금까지 filter를 하나 사용하는 예시를 통해 Convolutional layer 생성 과정을 알아보았다.
그런데 convolutional layer를 만들 때에는 보통 위 그림과 같이 filter를 여러 개 적용해서 여러 개의 feature map(activation map)을 얻게 된다.
Convolutional layer는 activation function과 함께 적용할 수 있으며, 위 그림과 같이 여러 번의 작업을 거쳐 여러 개의 Convolutional layer를 만들 수 있다.