공간적으로 이미지를 슬라이스하면서 dot products를 해나가는 것입니다.
처음에 32 X 32 X 3의 input을 받았을 때
actviation 관점에서 28 X 28 X 6의 새로운 형태의 이미지로 Rerepresentation 했다고 칠 때 다음 input으로 전달이 됩니다.
이미지를 받았고 Convolution layer를 돌리면 6, 5X5X3 -> 28X28X6 Activation volume을 얻게 되고10, 5X5X6의 필터를 거친다면 -> 24X24X6 형태가 됩니다.
제어를 해야하는 파라미터는 당연히 필터의 하나하나의 값들이 됩니다.
CONV - RELU - POOL 반복하고 계산하는 방식으로 합니다.
공간의 차원에 대해 생각을 해보면 32X32X3 의 이미지에 5X5X3FILTER를 적용하면 28X28X3을 얻습니다.
만약 7x7 input을 넣는다면 3x3 필터를 적용을 해봅니다. 처음부터 끝까지 움직이면 5x5로 output을 얻을 수 있습니다. 이는 stride를 1로 두었을 때 결과입니다.
만약 stride를 2로 두었다면 3x3의 결과를 얻게 됩니다. 만약 3을 주게 된다면 이미지에 fit하지가 않기 때문에 3x3을 적용하는 것은 원칙적으로는 적용하지 않습니다.
이느 공식으론 (N-F) / stride +1 이지만 그림으로 보면 금방 이해할 수 있는 것입니다.
zero pad를 이용
7x7의 경우 3x 3이 적용이 안되기 때문에 0으로 패딩을 해서 두개씩 양쪽에 늘어나는 것은
이런 구조가 되고 이는 7X7의 output을 얻을 수 있습니다. 그리고 stride는 1로 했을 때를 가정한 것입니다. 이런 편의성 때문에 패딩이 유용한 것이며 사이즈를 보조를 해주기 위해 padding은 (F-1)/2로 해주면 됩니다.
풀링 레이어
각각의 representation에 대해 독립적으로 작동하는 것으로 각각에 대해서 1/2로 줄어주는 역할을 하는 것, depth는 그대로 유지하면서 하는 것으로 downsampling되는 결과를 얻을 수 있는 것입니다.
pooling layer에서 downsampling 해주는 것으로 풀링레이어는 convolution layer와 다르게 파라미터와 패딩이 없습니다.
풀링의 방법은 여러가지가 있지만 제일 많이 쓰이는 것은 max pooling입니다. 4x4 가 있을 때 2x2의 filter and stride 2로 할 때 4x4 를 2x2로 묶어서 가장 최대값만 넣는 방식으로 (n-f)/s + 1로 합니다.
이렇게 Depth pooling을 하는 것이 정보를 잃는 것이 아니냐는 우려가 있을 수도 있습니다. 하지만 의도적으로 이렇게 하는 것이 좋은 결과를 얻을 때도 있습니다. 약간의 정보를 손실함으로써 invariance한 능력을 얻게 되는 것으로
VGGNet
기존의 AlexNet에서는 필터를 변경을 했는데 3x3 CONV stride1, pad1 and 2X2 MAX POOL stride 2 마을 모든 레이어에 적용을 했습니다.
ResNet
runtime 시에 vggnet보다 8배나 많은 레이어를 가지고 있음에도 불구하고 성능이 빠릅니다. 이렇게 좋은 성능이 나오는 것은 복잡하게 되어 있지만 간단하게 본다면 주목해야 할 부분이 conv 1번을 거친 다음 바로 pooling이 들어갑니다. 56x56기반으로 이후 쭉 56x56으로 동작을 하게 되어서 초기에 사이즈를 줄이면서 효율적 연산이 가능합니다.
skip connection 또한 매우 효율적으로 진행이 되는 것이 resnet입니다
'IT 프로그래밍 > AI' 카테고리의 다른 글
[cs231n] Visualization, Adversarial examples (0) | 2024.11.15 |
---|---|
[cs231n] Localization - as Regression (5) | 2024.11.15 |
[cs231n] Training NN (0) | 2024.11.13 |
[cs231n] 3강 Neural Network NN (0) | 2024.11.08 |
[cs231n] 2강 Classification Pipeline (0) | 2024.11.07 |