Level 5: CNN & 이미지 처리
🖼️

Level 5

CNN 아키텍처

LeNet, AlexNet, VGG 구조 이해

50분
CNN 아키텍처 강의 영상
강의 영상 보기 (새 탭에서 재생)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×66개 필터
AvgPool (2×2)14×14×6다운샘플링
Conv2 (5×5)10×10×1616개 필터
AvgPool (2×2)5×5×16다운샘플링
FC1120Fully Connected
FC284Fully 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×77×7 (동일)
파라미터49C²27C² (45% 적음)
ReLU 개수1개3개 (더 많은 비선형성)

VGG 구조

모델Conv 레이어파라미터
VGG-118약 1억 3천만
VGG-1613약 1억 3천8백만
VGG-1916약 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 PoolingFC 레이어 대신 사용

핵심 요약

모델년도깊이핵심 기여
LeNet19985층CNN의 기본 구조 확립
AlexNet20128층ReLU, Dropout, GPU
VGG201419층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 등을 실행할 수 있습니다.