Compare: Fully connected layer
지금까지 우리가 봤던 layer들은 fully connected layer이다.
32x32x3 image가 있다고 가정하자. (보통 3차원 이미지라함은 2차원 평면에 있고 컬러 이미지의 경우 R, G, B여서 깊이가 3인 것으로 많이 본다) 그러면 우리는 지금까지 이 image를 3072x1로 납작하게 바꾼 후에 weight를 곱해 왔다.

이렇게 되면 사진 전체의 내용을 고려해줘야 한다. 여기에는 단점이 2가지가 있는데
1. 이미지 전체를 다 계산해야 하므로 계산량이 많아진다.
2. 이미지 내에서 관계없는 내용까지 학습되게 된다. (예를 들어서 동물을 분류하는 classifier를 만들고 싶을 때 고양이 뒤에 있는 배경은 전혀 중요하지 않지만 함께 학습되게 된다.
이러한 문제점들을 해결하기 위해서 나온 것이 convolutional neural network (CNN)인 것이다!
Convolutional layer의 가장 큰 차이점은, 차원을 보존한다는 것이다.
작은 필터를 (ex. 5x5x3) 이용해서 주어진 spatial location에 대해서 그 filter에 해당하는 element에 대한 dot product를 해주는 것이다. sliding하면서 지나가는 것 같은 이 과정을 convolving이라고 한다. (포스텍 23학번 일반전형 면접 문제에 나왔기 때문에 나에게는 제법 익숙한 내용이다. 그만큼 고등학생도 이해할 수 있다는 뜻이라고 할 수 있다) 마치 사진을 스윽 스캔하는 사람의 눈 같은 느낌이다.
Convolution 필터의 깊이는 항상 이미지의 깊이와 같아야 한다.


dot product한 결과에 해당하는 행렬을 activation map이라고 한다. activation map의 개수는 filter의 개수와 같다.
각 layer마다 여러 개의 filter가 있ㄷ고 이 filter가 activation map을 만든다.

ConvNet
ConvNet은 Convolution layer들의 sequence이며, 이 사이사이에 activation function이 들어가게 된다.
아니

참고로 쓸데없는 지식을 좀 자랑해 보자면 저 사진은 VGGNet의 모습이다. VGG-16은 16개의 layer를 쌓았다는 뜻이고 Conv3_2라고 써 있는 건 3번째 레이어의 2번째 필터라는 뜻이다.
여러 개의 filter를 쌓을 때는 hierarchy가 있는데, 덜 복잡한 것부터 (low-level이라고 부른다) 쌓아 올린다. 순차적으로 앞에 있는 layer들은 Low-level feature부터 학습하고 (edges), Mid-level features (corner, blob) 등을 학습하다가 점차 high-level features (실제 이미지에 가까운 것)을 학습하는 것을 볼 수 있다.
왜 이러한 구조가 되어야만 하는지는 직관적으로 생각해보면 쉬운데, 처음에 사진의 아주 작은 영역에 filter를 convolve해봤자 픽셀 자체가 몇 개 없어서 정보가 많이 없기 때문이다. 이후에 배울 pooling과 stacking을 이용하면 점차 복잡한 정보도 이해할 수 있게 된다.
Convolution 식

input image를 여러 layer에 통과시킨다.
conv layer → nonlinear layer (ex. ReLU) → conv layer → pooling
So how does it work?
image에 filter를 activation map를 만드는 일을 정확히 어떻게 하는 것인가?
보통은 7x7 input에서 3x3 filter를 움직이게 된다면, 5x5 output이 나오게 된다.
stride: 한 번에 몇 칸씩 움직일 것인가

Output size = (N-F) / stride + 1
Padding
Convolution filter가 사진을 픽셀 단위로 지나가다 보면, 모서리에 있는 픽셀들은 학습에 많이 이용되지 못한다는 한계점이 있다.
따라서 0으로 된 테두리를 추가해주게 된다. pad가 이 두께를 의미한다.
또한 padding을 이용하면 convolution의 output의 크기가 줄어들지 않는다는 장점이 있다.

Number of parameters in the layer?
5*5*3 + 1 = 76
76*10 = 760 layers
Summary
Convolutional layer의 input volume은 3개의 layer로 이루어져 있다.
$W_1$: input width
$H_1$: input height
$D_1$: input depth (ex. RGB로 이루어진 그림이면 depth = 3)
Hyperparameter는 다음과 같다.
- K: filter의 개수 ( = output depth)
- F: Filter size (ex. 3x3 filter이면 F=3)
- S: stride (한 번에 filter가 얼마나 움직이는가?)
- P: padding (zero layer들을 얼마나 붙여뒀는가)
Output volume
$W_2 \times H_2 \times D_2$
$D_2 = K$, 각 필터가 하나의 output slice를 만든다.
$W_2 = \lfloor \frac{W_1-F+2P}{S}\rfloor+1$
$H_2 = \lfloor \frac{H_1-F+2P}{S}\rfloor+1$
'cs > cs231n' 카테고리의 다른 글
| [cs231n] Lecture 4. Backpropagation and neural networks (0) | 2025.03.10 |
|---|---|
| [cs231n] Lecture 3: Linear classifiers, loss (0) | 2025.02.20 |
| [cs231n] Lecture 2: Image Classification (0) | 2025.02.03 |
| [cs231n] lecture 1: history of CV (0) | 2025.01.01 |