
강의 영상 보기 (새 탭에서 재생)YouTube
📓Google Colab에서 실습하기
이 레슨은 PyTorch/GPU가 필요합니다. 노트북을 다운로드 후 Google Colab에서 열어주세요.
학습 내용
CNN 아키텍처
학습 목표
이 레슨을 완료하면:
- •CNN 아키텍처의 발전 역사를 이해합니다
- •LeNet, AlexNet, VGG의 구조와 특징을 파악합니다
- •각 아키텍처의 핵심 기여를 설명할 수 있습니다
- •현대 CNN 설계 원칙을 배웁니다
핵심 메시지
"CNN의 역사는 '더 깊게, 더 효율적으로'의 여정입니다." LeNet의 5층에서 시작해 VGG의 19층, ResNet의 152층까지. 깊이가 깊어질수록 더 복잡한 패턴을 학습할 수 있게 되었습니다.
1. LeNet-5 (1998)
비유: LeNet은 CNN의 "원조 할아버지"입니다. 손글씨 숫자 인식을 위해 설계된 최초의 성공적인 CNN으로, 현대 CNN의 모든 핵심 요소를 이미 갖추고 있었습니다.
LeNet-5 구조
| 레이어 | 출력 크기 | 설명 |
|---|---|---|
| 입력 | 32×32×1 | 흑백 이미지 |
| Conv1 (5×5) | 28×28×6 | 6개 필터 |
| AvgPool (2×2) | 14×14×6 | 다운샘플링 |
| Conv2 (5×5) | 10×10×16 | 16개 필터 |
| AvgPool (2×2) | 5×5×16 | 다운샘플링 |
| FC1 | 120 | Fully Connected |
| FC2 | 84 | Fully Connected |
| 출력 | 10 | 숫자 0-9 |
LeNet의 핵심 기여
| 기여 | 설명 |
|---|---|
| 합성곱 + 풀링 | 특징 추출의 기본 패턴 확립 |
| 가중치 공유 | 파라미터 수 대폭 감소 |
| 계층적 특징 | 낮은 층은 엣지, 높은 층은 패턴 |
2. AlexNet (2012)
비유: AlexNet은 "딥러닝 르네상스의 시작"입니다. 2012년 ImageNet 대회에서 기존 방법들을 압도적으로 이기며 딥러닝 시대를 열었습니다.
AlexNet의 혁신
| 혁신 | 설명 |
|---|---|
| ReLU 활성화 | Sigmoid 대신 사용, 학습 속도 6배 향상 |
| Dropout | 과적합 방지 기법 도입 |
| GPU 학습 | 2개 GPU로 병렬 학습 |
| 데이터 증강 | 이미지 변환으로 데이터 확장 |
| Local Response Normalization | 정규화 기법 (현재는 BN으로 대체) |
AlexNet 구조 요약
| 특성 | 값 |
|---|---|
| 총 레이어 | 8개 (Conv 5 + FC 3) |
| 파라미터 수 | 약 6천만 개 |
| 입력 크기 | 227×227×3 |
| ImageNet 정확도 | Top-5 에러 15.3% |
3. VGGNet (2014)
비유: VGG는 "단순함의 미학"을 보여줍니다. 3×3 작은 필터만 사용하고 깊이를 늘리는 간단한 전략으로 뛰어난 성능을 달성했습니다.
VGG의 핵심 아이디어
"3×3 필터만 사용하자!"
왜 3×3인가?
- •5×5 필터 1개 = 3×3 필터 2개와 같은 수용 영역
- •7×7 필터 1개 = 3×3 필터 3개와 같은 수용 영역
- •파라미터는 더 적고, 비선형성은 더 많음
| 비교 | 7×7 × 1개 | 3×3 × 3개 |
|---|---|---|
| 수용 영역 | 7×7 | 7×7 (동일) |
| 파라미터 | 49C² | 27C² (45% 적음) |
| ReLU 개수 | 1개 | 3개 (더 많은 비선형성) |
VGG 구조
| 모델 | Conv 레이어 | 파라미터 |
|---|---|---|
| VGG-11 | 8 | 약 1억 3천만 |
| VGG-16 | 13 | 약 1억 3천8백만 |
| VGG-19 | 16 | 약 1억 4천4백만 |
4. 아키텍처 발전 비교
🔬 실습: 아키텍처 비교
python⚠️ 로컬 실행 필요import torch import torch.nn as nn # ═══════════════════════════════════════════════════════════════ # 📊 CNN 아키텍처 비교: 파라미터 수와 구조 # ═══════════════════════════════════════════════════════════════ # 간단한 VGG-스타일 블록 class VGGBlock(nn.Module): def __init__(self, in_ch, out_ch, num_convs): super().__init__() layers = [] for i in range(num_convs): layers.append(nn.Conv2d(in_ch if i == 0 else out_ch, out_ch, 3, padding=1)) layers.append(nn.BatchNorm2d(out_ch)) layers.append(nn.ReLU(inplace=True)) layers.append(nn.MaxPool2d(2, 2)) self.block = nn.Sequential(*layers) def forward(self, x): return self.block(x) # 간단한 CNN 모델들 정의 class SimpleCNN(nn.Module): def __init__(self, name, config): super().__init__() self.name = name self.features = nn.Sequential(*[ VGGBlock(in_ch, out_ch, num_convs) for in_ch, out_ch, num_convs in config ]) self.classifier = nn.Linear(512 * 7 * 7, 1000) def forward(self, x): x = self.features(x) x = x.view(x.size(0), -1) return self.classifier(x) # 설정: (입력채널, 출력채널, Conv 레이어 수) configs = { 'VGG-11 스타일': [(3, 64, 1), (64, 128, 1), (128, 256, 2), (256, 512, 2), (512, 512, 2)], 'VGG-16 스타일': [(3, 64, 2), (64, 128, 2), (128, 256, 3), (256, 512, 3), (512, 512, 3)], } print("=" * 60) print("📊 CNN 아키텍처 비교") print("=" * 60) for name, config in configs.items(): model = SimpleCNN(name, config) total_params = sum(p.numel() for p in model.parameters()) trainable = sum(p.numel() for p in model.parameters() if p.requires_grad) print(f"\n{name}:") print(f" 총 파라미터: {total_params:,}") print(f" 학습 가능: {trainable:,}") # 역사적 발전 요약 print("\n" + "=" * 60) print("📈 CNN 아키텍처 발전 역사") print("=" * 60) history = [ ("1998", "LeNet-5", "5층", "6만", "손글씨 인식의 시작"), ("2012", "AlexNet", "8층", "6천만", "딥러닝 르네상스"), ("2014", "VGG", "19층", "1.4억", "3×3 필터의 힘"), ("2014", "GoogLeNet", "22층", "5백만", "Inception 모듈"), ("2015", "ResNet", "152층", "6천만", "스킵 연결"), ] print(f"{'년도':<6} {'모델':<12} {'깊이':<8} {'파라미터':<10} {'핵심 기여'}") print("-" * 60) for year, model, depth, params, contribution in history: print(f"{year:<6} {model:<12} {depth:<8} {params:<10} {contribution}") print("\n💡 더 깊어지면서도 효율적인 방향으로 발전했습니다!")
5. 현대 CNN 설계 원칙
| 원칙 | 설명 |
|---|---|
| 작은 필터 선호 | 3×3이 표준, 가끔 1×1 사용 |
| BatchNorm 사용 | 모든 Conv 뒤에 적용 |
| ReLU 활성화 | 또는 변형 (LeakyReLU, GELU) |
| 깊이 > 너비 | 더 깊은 네트워크 선호 |
| 스킵 연결 | 매우 깊은 경우 필수 (ResNet) |
| Global Average Pooling | FC 레이어 대신 사용 |
핵심 요약
| 모델 | 년도 | 깊이 | 핵심 기여 |
|---|---|---|---|
| LeNet | 1998 | 5층 | CNN의 기본 구조 확립 |
| AlexNet | 2012 | 8층 | ReLU, Dropout, GPU |
| VGG | 2014 | 19층 | 3×3 필터, 깊이의 힘 |
학습 체크리스트
- • LeNet의 역사적 의의를 설명할 수 있다
- • AlexNet의 혁신 5가지를 나열할 수 있다
- • VGG의 3×3 필터 전략을 이해한다
- • 현대 CNN 설계 원칙을 알고 있다
다음 강의 예고
"CNN 구현 (MNIST)" - PyTorch로 CNN을 직접 구현하고 MNIST를 분류합니다!
레슨 정보
- 레벨
- Level 5: CNN & 이미지 처리
- 예상 소요 시간
- 50분
- 참고 영상
- YouTube 링크
💡실습 환경 안내
이 레벨은 PyTorch/GPU가 필요하여 Google Colab 사용을 권장합니다.
Colab은 무료 GPU를 제공하여 PyTorch, CNN, Transformer 등을 실행할 수 있습니다.