이전까지 보았었던 linear classifier와 neural network model은 pixel값들을 flat하게 펼쳐 연산하였기 때문에* image 의 spatial structure까지 다루지 못한다는 문제점이 있었다.
이 전 강의에서 보았던 matrix valued backprop도 matrix form으로 연산을 하지만 결국 flat한 것과 다를바없어 spatial feature를 커버하지 못한다.
이러한 문제를 해결하고자 fully connected neural network에 새로운 operator를 정의하여 2-dimentional spatial data인 image에 적용하려 한다.
이러한 image의 spatial position에서의 filter를 통한 연산은 filter의 크기와같은 75-dimensional(vector) dot product + bias 형태로 하나의 scalar를 optput울 출력한다. 이때 output은 해당 position에서 input image가 얼마나 filter와 일치하는지를 나타낸다.
위와같은 연산을 모든 가능한 input spatial postion을 돌며 single number를 생산해내어 1x28x28 크기의 activation map이라는 optput을 뽑아낸다.
이러한 각각의 activation map은 input image의 각 spatial position이 얼마나 각각의 filter에 영향을 받았는가를 나타낸다.
이때의 activation map들을 concatenate시켜 하나의 (depth dimension이 3인) 3-dimensional tensor로 나타낼 수 있으며 그림의 예시같은 경우 6x28x28형태를 갖게된다.
이러한 output을 또 다른 관점에서 본다면 각 point에서 6-dim feature vector를 가진 28x28 gird로 생각해 볼 수도 있다.
위와같은 input을 위의 그림처럼 batch로 사용할 수도 있다. 이때의 input image, filter, outputs는 4-dimensional tensor가 된다.
위 그림 처럼 각 conv layer에있는 kernel(filter)의 수 만큼 output이 나오게 되며 이는 다음 layer의 inout으로 들어가게 되는 형태이다.
이때 각 layer의 input과 output이 되는 activation map 들은 fully-connected network에서와 같이 hidden layer라고 말한다.
하지만 이런 형태의 convolution network는 각각의 convolution operator가 fully-connected network에서의 각 layer와 같이 linear operator에 지나지 않는다. 그렇기에 우리는 아래의 그림처럼 conv operator 직후에 (non-linear인) activation function을 취해준다.
Convolutional network에서도 비슷한 해석이 가능하다. 위의 그림은 AlexNet의 11x11 RGB image를 학습한 첫번째 layer의 filters이다. 이 각각의 filter들은 oriented edge정보와 opposing color정보등 low-level feature를 학습한 것으로 볼 수 있다.
이러한 각각의 filter들은 oriented edge, opposing color로 해석되는 정보를 통해 input image의 각 position이 얼마나 다음 hidden layer에 영향을 미치는 정도를 나타낸다.
다른 표현으론 64-dimensional feature vector가 있고 각각의 vector는 하나의 input position에서의 64개의 feature를 학습한 형태로 생각해 볼 수 있다
<5개 이어붙힌 이미지>
In general :
input size가 W이고 filter size가 K라고 했을때 output size는 W-K+1의 형태가 되는데 이는 input 의 edge(corner) position을 kernel이 커버하지 못하여 매 convolution operation을 거치면서 점점 spatial dimension이 줄면서 pixel의 손실이 일어나 문제가 된다.
이러한 문제를 해결하기위해 padding을 image의 테두리에 둘러준다
위 그림에서는 zero-padding을 사용한 예시이지만 사용할 image에 따라 다른 형태의 padding을 적용할 수 있다.
이 padding은 convolution layer의 추가적인 hyper parameter가 된다. Input image size, filter size, 추가로 stride에 따라 적용할 수 있는 padding size가 정해져있는데 stride개념을 무시했을때(stride가 1일때) 일반적으로 (K - 1) / 2 를 padding size로 사용한다.
Convolution layer가 무엇을 하는지 생각해볼 수 있는 또다른 방식이 Receptive field 이다. 이는 output image의 각 spatial position이 input image에서 얼만큼의 region에 영향을 받는가를 뜻한다.
이를 1-conv layer 관점에서 살펴보면 다음과 같다.
위 그림의 예시에선 3x3 region이 receptive field가 된다.
이러한 1-conv layer 를 stacking conv layer관점에서 살펴보자.
위 예시는 3-conv layers일때의 receptive field 예시이다. output tensor부터 점점 확장해 나가며 3x3 regin이 5x5 region이 되고 7x7 region이 최종 receptive fild size가 된다.
이러한 receptive field size를 1+L*(K-1)으로 계산할 수 있다.
하지만 input image의 해상도가 커질수록 그만큼 conv layer가 많아지며 (kernel size가 위와같이 3일경우엔 500개 가량의 convlayer가 필요) output에서 각 spatial position이 매우 큰 receptive field size를 커버한다는 뜻이므로 좋지 않은 형태이다.
위와같은 문제를 해결하기 위해 또다른 hyper parameter를 적용하여 downsample을 해줘야 한다.
<43p 이미지 3개 합친거>
우리는 여지껏 2D convolution을 다뤘지만 가끔식 실제로 1D Convolution 형태를 볼 수 있다.
1D conv는 2-dimensional input을 갖고 (1-spatial dimension(W)과 num of the channel dimension(C_in)을 갖고) weights matrix는 위 그림의 파란색 영역처럼 C_in x K size의 kernel C_out개를 갖은 형태이다.
1D conv는 일반적으로 sequence형태의 textural data와 audio data에 많이 사용된다.
이전의 conv layer의 stride와의 다른점은 learnable parameter가 없다는 점이다. pooling layer에서는 hyperparameter로 kernel size와 stride, pooling function만 신경쓰면 된다.
간단한 예를 통해 이를 살펴보자.
위 예시는 kernel size와 stride가 2인 2x2 max pooling을 하는 모습이다. kernel size와 stride가 2로 동일한 이유는 pooling region이 overlapping되지 않게 하기 위함이다 이는 흔하게 사용되는 hyper parameter setting이다. Alexnet에서는 K=3, S=2를 사용한다고 한다.