합성곱 신경망 (Convolutional Neural Network, CNN)¶
개요¶
합성곱 신경망(CNN)은 이미지와 같은 그리드 구조 데이터를 처리하기 위해 설계된 신경망이다. 파라미터 공유(parameter sharing)와 지역적 연결성(local connectivity)이라는 두 가지 핵심 아이디어를 통해, 완전 연결 네트워크 대비 훨씬 적은 파라미터로 공간적 패턴을 효과적으로 학습한다. 2012년 AlexNet의 ImageNet 경진대회 우승 이후, 컴퓨터 비전의 지배적 아키텍처로 자리잡았다.
핵심 개념¶
1. 합성곱 연산 (Convolution Operation)¶
2D 합성곱 (실제로는 cross-correlation):
커널(필터)을 입력 위에 슬라이딩하며, element-wise 곱의 합을 계산한다.
핵심 특성: - 파라미터 공유: 같은 필터를 전체 입력에 적용 → 파라미터 수 대폭 감소 - 지역적 연결성: 각 뉴런이 입력의 일부 영역에만 연결 - 이동 등변성 (Translation Equivariance): 입력이 이동하면 출력도 동일하게 이동
2. Padding, Stride, 출력 크기¶
출력 크기 공식:
- \(W\): 입력 크기, \(K\): 커널 크기, \(P\): 패딩, \(S\): 스트라이드
| 패딩 유형 | 설명 | 출력 크기 |
|---|---|---|
| Valid (P=0) | 패딩 없음 | 줄어듦 |
| Same | 출력 = 입력 크기 유지 | 동일 |
합성곱 변형:
| 변형 | 설명 | 사용처 |
|---|---|---|
| Dilated (Atrous) | 커널 원소 사이에 간격 | 넓은 수용 영역 (세그멘테이션) |
| Transposed | 업샘플링 | 생성 모델, 세그멘테이션 |
| Depthwise Separable | 채널별 분리 합성곱 | 경량 모델 (MobileNet) |
주의: Transposed Convolution을 "Deconvolution"이라고 부르는 것은 잘못된 명칭이다. 수학적 역합성곱(deconvolution)과는 다른 연산이다.
3. 풀링 (Pooling)¶
| 풀링 유형 | 수식 | 특징 |
|---|---|---|
| Max Pooling | 영역 내 최대값 | 가장 강한 특징 보존 |
| Average Pooling | 영역 내 평균값 | 부드러운 다운샘플링 |
| Global Average Pooling (GAP) | 전체 feature map → 하나의 값 | FC 층 대체, 과적합 감소 |
목적: 공간 크기 축소, 약간의 이동 불변성(translation invariance), 파라미터 수 감소
4. 수용 영역 (Receptive Field)¶
출력의 한 뉴런이 "보는" 입력 영역의 크기이다.
깊은 네트워크의 이점: 작은 커널을 여러 층 쌓으면 큰 수용 영역을 적은 파라미터로 확보한다.
| 구성 | 수용 영역 | 파라미터 수 |
|---|---|---|
| 3×3 × 2층 | 5×5 | \(2 \times 3^2 = 18\) |
| 3×3 × 3층 | 7×7 | \(3 \times 3^2 = 27\) |
| 7×7 × 1층 | 7×7 | \(7^2 = 49\) |
Effective Receptive Field: 이론적 수용 영역과 실질적 영향 범위는 다르다. 실제로는 가우시안 형태로, 중심부의 영향이 가장 크다.
5. CNN 아키텍처 변천사¶
timeline
title CNN 아키텍처 발전 타임라인
1998 : LeNet-5 — 초기 CNN, 필기체 인식
2012 : AlexNet — ImageNet 혁신, ReLU+Dropout+GPU
2014 : VGGNet — 3×3 커널만으로 깊이 증가
: GoogLeNet — Inception 모듈
2015 : ResNet — 잔차 연결, 100+층
2017 : DenseNet — 모든 이전 층과 연결
2019 : EfficientNet — Compound Scaling
2022 : ConvNeXt — Transformer 수준 성능의 순수 CNN ResNet의 잔차 연결 (Residual Connection)¶
- 핵심 통찰: 항등 함수(identity)를 학습하는 것이 영 함수(zero function)를 학습하는 것보다 쉽다.
- 잔차 연결을 통해 기울기가 직접 전달되는 "지름길"이 생겨, 100층 이상의 초심층 네트워크 학습이 가능해졌다.
EfficientNet의 Compound Scaling¶
깊이, 너비, 해상도를 동시에 최적 비율로 확장한다:
제약 조건: \(\alpha \cdot \beta^2 \cdot \gamma^2 \approx 2\)
하나의 차원만 확장하는 것보다 세 차원을 균형 있게 확장하는 것이 효율적이다.
ConvNeXt (2022)¶
Transformer의 설계 원칙(큰 커널, LayerNorm, GELU 등)을 순수 CNN에 적용하여 ViT에 필적하는 성능을 달성하였다. CNN이 "구식"이 아님을 보여준 중요한 연구이다.
상세 내용¶
Depthwise Separable Convolution¶
MobileNet에서 사용되는 경량화 합성곱이다.
- Depthwise Convolution: 각 채널에 독립적으로 \(K \times K\) 합성곱 적용
- Pointwise Convolution: \(1 \times 1\) 합성곱으로 채널 간 조합
계산량 비교 (입력 채널 \(C_{in}\), 출력 채널 \(C_{out}\), 커널 \(K \times K\), 크기 \(H \times W\)): - 일반 합성곱: \(C_{in} \cdot C_{out} \cdot K^2 \cdot H \cdot W\) - Depthwise Separable: \(C_{in} \cdot (K^2 + C_{out}) \cdot H \cdot W\) - 비율: \(\frac{1}{C_{out}} + \frac{1}{K^2}\) (보통 8~9배 감소)
1×1 Convolution¶
채널 차원의 선형 결합으로, 공간 크기는 유지하면서: - 채널 수 조절 (차원 축소/확장) - 비선형성 추가 - 채널 간 정보 혼합
GoogLeNet/Inception과 ResNet의 bottleneck에서 핵심적으로 사용된다.
언제 사용하는가¶
| 과제 | CNN 사용 적합도 | 비고 |
|---|---|---|
| 이미지 분류 | 매우 적합 | 기본 접근 |
| 객체 탐지 | 매우 적합 | YOLO, Faster R-CNN |
| 이미지 세그멘테이션 | 매우 적합 | U-Net, DeepLab |
| 시계열 분류 | 적합 | 1D CNN |
| NLP | 일부 적합 | TextCNN (간단한 분류) |
| 정형 데이터 | 부적합 | MLP 또는 트리 모델 사용 |
최근에는 Vision Transformer (ViT)가 이미지 분야에서도 CNN과 경쟁하고 있다. 그러나 데이터가 적거나 추론 효율이 중요한 경우 CNN이 여전히 우수하다.
흔한 오해와 함정¶
-
너무 큰 커널 사용: 3×3 커널을 여러 층 쌓는 것이 큰 커널 하나보다 파라미터 효율적이고 표현력이 높다. 단, ConvNeXt처럼 7×7 커널이 효과적인 경우도 있다.
-
GAP 대신 큰 FC 층 사용: Global Average Pooling은 파라미터 없이 공간 차원을 제거하여 과적합을 줄인다. 불필요하게 큰 FC 층은 과적합의 원인이 된다.
-
입력 크기와 네트워크 용량 불일치: 작은 이미지에 매우 깊은 네트워크를 사용하면 풀링으로 공간 정보가 너무 빨리 소실된다.
-
사전 학습 모델을 활용하지 않음: ImageNet 사전 학습 모델을 전이 학습으로 활용하면 대부분의 비전 과제에서 처음부터 학습하는 것보다 훨씬 우수하다.
-
Transposed Convolution의 체커보드 아티팩트: Transposed Convolution이 아티팩트를 생성할 수 있다. 업샘플링 후 일반 합성곱을 적용하는 것이 대안이다.