Convolution#
수식으로#
역할#
원하는 feature를 뽑을 수 있다.
가령, 모든 kernel의 값이 1/9인 (3,3) kernel을 사용했다고 하자. 그러면 평균을 구하는 convolution 연산이 된다.
tensor#
Stack of convolution#
Convolution and Neural networks#
위 그림이 가장 고전적인 CNN이다.
Convolution and pooling layers: feature extraction Fully connected layers: decision making(eg. classification, regression)
요즘은 Fully connected layer를 줄이는 추세이다. 왜냐하면 parameter의 수를 줄이기 위해서다. parameter 수가 많다면 학습이 어렵고 generalization performance가 떨어지기 때문이다.
Stride#
kernel을 stride만큼 옮기면서 convolution 연산을 한다.
Padding#
가장자리에 대해서는 convolution 연산이 불가능하다. 따라서, 임의의 값을 채워주고 이미지의 가장자리에 대해서 convolution 연산을 수행한다. e.g., zero padding = 덧대는 부분을 0으로 채운다.
padding을 하면 input과 ouput의 spacial dimension을 맞출 수 있다.
undefined
Counting parameters#
Convolution 연산의 parameters = kernel의 parameters
- 3x3 kernel이라고 하지만, 앞서 서술했듯 kerenel의 channel은 input의 channel과 맞춰준다.
- 즉, (3,3,128) kenrel을 사용한다.
- 채널 수를 맞춰준 kernel과 input을 convolution하면 반드시 channel을 1개가 된다.
- output의 channel 수는 64이다.
- 따라서 (3,3,128) kernel이 64개 존재해야 한다.
이러한 과정을 통해서 대략적인 parameter의 수에 대해 감을 잡는 것은 중요하다!
Alexnet#
convolution 사이의 parameter 숫자와 dense layer 사이의 parameter 숫자가 매우 상이하다!! 이유는 아래와 같다.
- convolution은 어찌보면 같은 weight를 kernel이라는 요소를 통해서 공유한다.
- input 이미지의 어느 위치에 있는 요소든 상관없이 동일한 kernel을 사용한다.
- dense layer는 알고 있듯이 모든 node가 서로 다른 weight를 가지고 있다.
1x1 convolution#
1x1 convolution은 영역을 볼 수 없다. 당연하다. 1x1의 영역에 대해서만 convolution 연산을 반복하는 kernel이기 때문이다.
하지만 아래와 같은 역할을 기대할 수 있다.
- channel(dimension) 감소
- depth가 증가할 때, parameter 감소를 기대
- e.g., bottleneck architecture