논문이 어떻게 학습했는지 위주로 설명을 할 예정입니다.
MNIST 데이터의 분류

CNN 구조 예시
- 입력 이미지: 28x28 크기의 이미지입니다.
- 첫 번째 Convolution 레이어:
- Padding = 1, Kernel = 3x3, Stride = 1
- ReLU 활성화 함수 사용
- 출력 크기: 32 x 28 x 28
- 패딩을 1로 주었기 때문에, 28x28 크기가 그대로 유지됩니다.
- 32는 32개의 필터를 사용한 결과입니다.
- 첫 번째 MaxPooling 레이어:
- Kernel = 2x2, Stride = 2
- 출력 크기: 32 x 14 x 14
- 풀링을 통해 이미지 크기가 절반으로 줄어듭니다. (28x28 -> 14x14)
- 두 번째 Convolution 레이어:
- Padding = 1, Kernel = 3x3, Stride = 1
- 출력 크기: 64 x 14 x 14
- 64개의 필터를 사용하여 64개의 채널을 생성합니다.
- 두 번째 MaxPooling 레이어:
- Kernel = 2x2, Stride = 2
- 출력 크기: 64 x 7 x 7
- 풀링을 통해 이미지 크기가 다시 절반으로 줄어듭니다. (14x14 -> 7x7)
- 출력:
- 64 x 7 x 7 크기의 특징 맵이 나오며, 이 값들을 3136개의 1차원 벡터로 펼칩니다.
- 이 벡터는 **MLP (Multi-Layer Perceptron)**를 통과하여 분류기가 됩니다.
- 최종 출력은 분류 결과가 됩니다. (예: 10개의 클래스가 있을 경우, 10개의 확률 값으로 출력)
요약
- 입력: 28x28 이미지
- 첫 번째 Convolution: 32x28x28 (32개의 필터, 3x3 크기, stride 1, padding 1)
- 첫 번째 MaxPooling: 32x14x14 (2x2 필터, stride 2)
- 두 번째 Convolution: 64x14x14 (64개의 필터, 3x3 크기, stride 1, padding 1)
- 두 번째 MaxPooling: 64x7x7 (2x2 필터, stride 2)
- Flattening: 3136개의 1차원 벡터로 변환
- MLP 통과 후: 분류기를 통해 최종 출력
헷갈릴만한 포인트 : 32x14x14에서 64x14x14 바뀌는 이유에서 CNN에서 각 레이어의 출력 채널 개수는 사용하는 필터의 개수에 의해 결정됩니다. 첫번재 Conv layer에서는 32개의 필터를 사용하여 32개의 채널을 가진 출력이 나왔습니다.
즉 32개의 특징 맵이 생성이 된 것이죠. 두 번째 conv layer에서는 64개의 필터를 사용하는 이유는, 보다 복잡하고 추상적인 특징을 추출하기 위해서입니다. 첫 번째 레이어에서 32개 특징 기반, 두 번째 64개의 다른 필터를 사용해 새로운 특징을 추출합니다.
VGGnet
그 유명한 VGGnet, ComputerVision 전공자라면 무조건 알아야 하는 것입니다.

CNN 구조 예시 (224x224 이미지)
- 입력 이미지:
- 크기: 3 x 224 x 224 (RGB 이미지)
- 첫 번째 Convolution 레이어 (Conv3-64):
- 필터 크기: 3x3
- 필터 개수: 64개
- 패딩: 1 (패딩을 1로 설정하여 출력 크기가 유지됨)
- 출력 크기: 64 x 224 x 224
- 64개의 필터로 각각 특징을 추출하여 64개의 채널을 생성합니다. 패딩을 1로 주었기 때문에, 출력 크기는 224x224로 유지됩니다.
- MaxPooling 레이어:
- Kernel: 2x2
- Stride: (2,2)
- 출력 크기: 64 x 112 x 112
- MaxPooling을 통해 각 채널마다 크기가 절반으로 줄어들어 112x112가 됩니다. 채널 수는 그대로 64개입니다.
- 두 번째 Convolution 레이어 (Conv3-128):
- 필터 크기: 3x3
- 필터 개수: 128개
- 패딩: 1
- 출력 크기: 128 x 112 x 112
- 128개의 필터를 사용해 112x112 크기의 특징 맵을 생성합니다. 출력 채널 수는 128개로 증가합니다.
- MaxPooling 레이어:
- Kernel: 2x2
- Stride: (2,2)
- 출력 크기: 128 x 56 x 56
- MaxPooling을 통해 각 채널마다 크기가 절반으로 줄어들어 56x56가 됩니다.
- 세 번째 Convolution 레이어 (Conv3-256):
- 필터 크기: 3x3
- 필터 개수: 256개
- 패딩: 1
- 출력 크기: 256 x 56 x 56
- 256개의 필터를 사용해 56x56 크기의 특징 맵을 생성합니다.
- MaxPooling 레이어:
- Kernel: 2x2
- Stride: (2,2)
- 출력 크기: 256 x 28 x 28
- MaxPooling을 통해 각 채널마다 크기가 절반으로 줄어들어 28x28가 됩니다.
- 네 번째 Convolution 레이어 (Conv3-512):
- 필터 크기: 3x3
- 필터 개수: 512개
- 패딩: 1
- 출력 크기: 512 x 28 x 28
- 512개의 필터를 사용해 28x28 크기의 특징 맵을 생성합니다.
- MaxPooling 레이어:
- Kernel: 2x2
- Stride: (2,2)
- 출력 크기: 512 x 14 x 14
- MaxPooling을 통해 각 채널마다 크기가 절반으로 줄어들어 14x14가 됩니다.
- 다섯 번째 Convolution 레이어 (Conv3-512):
- 필터 크기: 3x3
- 필터 개수: 512개
- 패딩: 1
- 출력 크기: 512 x 14 x 14
- 512개의 필터를 사용해 14x14 크기의 특징 맵을 생성합니다.
- MaxPooling 레이어:
- Kernel: 2x2
- Stride: (2,2)
- 출력 크기: 512 x 7 x 7
- MaxPooling을 통해 각 채널마다 크기가 절반으로 줄어들어 7x7이 됩니다.
Flatten과 Fully Connected (FC) 레이어
- Flatten:
- 512 x 7 x 7 크기의 특징 맵을 1차원 벡터로 펼칩니다.
- 512 x 7 x 7 = 25088개의 값으로 평탄화됩니다.
- Fully Connected (FC) 레이어:
- 노드 개수: 4096개
- Flatten된 값을 4096개의 노드로 변환합니다.
- 이 레이어는 이미지의 최종적인 분류를 위한 결정을 내리기 위한 역할을 합니다.
- 출력 레이어 (Softmax):
- Softmax 함수를 사용하여 1000개의 클래스 중 하나로 분류합니다.
- Softmax를 통해 각 클래스의 확률을 계산하고, 가장 높은 확률을 가진 클래스를 최종 예측값으로 선택합니다.