CNN(Convolutional Neural Networks)은 이름에서도 알 수 있듯이 convolution이 중요한 과정이다.
그렇다면 convolution은 무엇인가? https://velog.io/@cherrykim/CNN-첫걸음 이부분에서도 간략하게 다루었었다. 다시 한번 식 첨부하자면 다음과 같다.
이것이 실제 적용된 모습을 그림을 통해 표현하면 다음과 같다. 마치 커널을 이미지 데이터 위에 도장을 찍는 듯한 형상이다. 도장을 하나 찍으면 output이 하나가 나오는 형태이다.
그리고 하나씩 옮겨가며 쭉쭉쭉 계산하게 된다.
하나의 이미지 데이터에도 어떤 filter(=kernel)를 사용하느냐에 따라 convolution 결과가 다음과 같이(blur, emboss, outline etc.) 상이하다.
구체적인 예를 들자면, 3*3 filter에서 각 셀이 1/9을 갖는다고 생각해보자. 그렇다면 convolution 결과는 9개 픽셀 값을 평균낸 효과를 얻을 것이고, 이는 Blur 효과와 유사할 것이다.
Convolution filter의 size와 총 parameter 수를 공식으로 나타내면 다음과 같다.
필터의 크기
=
총 파라미터 수
=
위 과정을 보다 친절하게 이미지를 통해 설명하자면 다음과 같다.
1) 입력 채널의 수와 filter의 채널 수는 같아야 한다. 이 때 output size
는 (입력 채널) - (filter) + 1 이다.
2) 여러개의 channel을 갖는 convolutional feature map을 만들기 위해서는 output 채널 수 만큼 filter가 여러개 있어야 한다.
즉, 이를 쌓으면 다음과 같은 모양이 된다.
CNN은 convolution layer
, pooling layer
(e.g., max pooling, average pooling), fully connected layer
로 이루어져 있다.
(참고) 우리가 새로운 아키텍쳐를 만나면 해야할 일은?
이 네트워크의 layer마다 몇개의 파라미터로 이루어져있고, 전체 파라미터는 몇개인지 감을 갖고 있는게 중요하다.
(참고) 머신러닝 발전 방향성
파라미터 수는 줄이고
convolution layer는 deep하게!
머신러닝에서 내가 학습하고자하는 모델의 파라미터 수가 늘어날수록 주로 학습이 어렵고 generalization performance가 떨어지기 때문이다.
1. Stride
개념
Stride는 필터가 입력 데이터 위를 이동하는 간격을 의미한다.
공식
2. Padding
AlexNet으로 파라미터 수를 계산해보자.
대표적으로 convolution layer와 dense layer 하나씩 보여주겠다!
아래 수식은 마지막 화살표 값 계산하는 방법이다.
위 예시에서 알 수 있는 사실은 파라미터 수: convolution layer <<< dense layer
라는 것이다! 그 이유는 이미 알다시피 convolution layer는 하나의 커널이 모든 위치에 대해 동일하게 적용되는 shared parameter이기 때문이다. 따라서 parameter를 줄이는 것이 중요하다면 fully connected layer는 최소화하고 convolution layer를 늘려야 한다. 그렇게 함으로써 최종적으로 parameter수는 줄이고 NN depth는 늘어나게 된다!