기존의 Convolution은 신호처리에서 두 개의 함수가 있을 때(f, g), 이들을 섞어주는 연산자로써 사용되었음)
2D 이미지 Convolution
= 전체 이미지 공간
= 컨볼루션 필터
기본적인 Convolution 작동 방식
이때 적용하는 필터에 따라, 같은 이미지에 적용하더라도 다른 결과를 가져오게 됨
예를 들어, (3x3) 필터를 적용할 때 모든 필터 값에 이 들어가 있다고 한다면, 이미지가 어떤 특정 영역만큼의 픽셀 값들을 합쳐서 평균을 내기 때문에 마치 Blur된 것 같은 효과가 나게 됨.
채널이 3개 있는 RGB 이미지(32x32x3)를 5x5 filter로 Convolution한다고 하면, fileter의 채널은 3이 됨(filter의 채널과 image의 채널은 같음).
이때, output은 28x28x1이 됨.
만약 filter가 여러층 있다면, output(Convolution feature map)의 채널도 그만큼 늘어나게 됨
- convolution에서 feature map을 얻기 위한 파라미터의 수를 잘 생각해야 함.(parameter가 많아지면, 그만큼 많음 컴퓨터 자원을 사용케 하며, overfitting이 될 수 있음)
- parameter 개수: 컨볼루션 사이즈(n*m) * input 채널 수 * output 채널 수
- 위 그림에선 (5x5x3x4) + (5x5x4x10) 개가 사용됨
- pooling layers: overfitting을 방지하기 위해, feature map의 차원을 축소시키는 과정(max pooling, mean pooling, ...)
- 어떠한 컨볼루션 필터가 같이 이루어져있을 때, 적절한 크기의 padding과 stride가 들어가면, 입력과 convolution operator의 출력으로 나오는 convolution feature map의 spatial dimension이 같아짐
(원하는 출력값에 맞춰 stride, padding을 조절할 수 있음)
3 x 3 x 128 x 64 = 73,728
AlexNet은 현재 사용하는 많은 알고리즘의 기준이 되었음
왜 3x3 필터를 사용했을까 ?
- Receptive field: filter가 한 곳을 찍었을 때 고려되는 input의 크기(spatial dimension)
- 위 그림에서 알 수 있듯이, 3x3 필터를 두 번 사용하는 것과 5x5를 한 번 사용하는 것의 Receptive field는 같음
- 따라서 3x3 필터를 깊게 쌓는 것이 파라미터 개수에 훨씬 유리
지금까지 배운 모델들의 layer수와 파라미터 수
- AlexNet(8-layers) / num of param: 60m
- VGGNet(19-layers) / num of param: 110m
- GoogLeNet(22-layers) / num of param: 4m
어느 순간부터 학습이 되지 않음을 볼 수 있다.