티스토리 뷰

반응형

딥러닝 기초학습 5: CNN의 탄생 — 이미지가 가진 ‘공간 구조’를 이해하면 CNN이 보인다


“이미지 분류에 MLP(다층 퍼셉트론)를 쓰면 왜 잘 안될까?”

이유는 단순합니다.

이미지는 구조를 가진 데이터이기 때문입니다.

  • 인접한 픽셀끼리는 서로 강하게 연관되어 있고
  • 멀리 떨어진 픽셀끼리는 거의 무관하며
  • 이미지의 패턴은 위치가 조금 달라도 동일하게 인식되어야 합니다.

MLP는 이러한 ‘공간 구조’를 완전히 무시합니다.
CNN은 바로 이 문제를 해결하려고 등장했습니다.

이번 글에서는
CNN(Convolutional Neural Network)
왜 필요한지 → 필터가 어떻게 동작하는지 → 구조 전체가 어떻게 학습되는지
완전히 직관적으로 이해할 수 있게 설명합니다.


1. 왜 MLP로 이미지를 학습하면 문제가 되는가?

28×28 흑백 이미지(예: MNIST)를 예로 들어봅시다.

  • 이미지 픽셀 수 = 784
  • MLP 입력층 = 784개의 뉴런
  • 다음 은닉층을 512개만 둬도
    W 파라미터 수 = 784 × 512 = 401,408개

이미 첫 레이어에서 거의 40만 개의 가중치가 발생합니다.

문제 1) 파라미터 폭발

이미지가 커질수록 가중치가 기하급수적으로 증가.

문제 2) 공간 정보 소실

MLP는 784개의 픽셀을 ‘그냥 숫자 784개’로 취급합니다.
→ 왼쪽 위 픽셀과 오른쪽 아래 픽셀의 관계를 모름

문제 3) 위치 불변성 없음

숫자 ‘7’이 이미지 중앙에 있으면 맞추지만
조금만 이동해도 다른 데이터처럼 느껴짐.


2. CNN이 해결하려는 것

CNN이 해결하고자 한 핵심은 단 하나:

“이미지는 공간적 구조를 가진다.
그러니 이 구조를 학습하는 뉴런을 만들자.”

이를 위해 도입된 개념들이
Convolution(합성곱), Filter(커널), Stride, Padding, Feature Map 등입니다.


3. 필터(Filter, Kernel)란?

필터는 작은 정사각형 행렬입니다.
예: 3×3 필터

[ 1  0 -1
  1  0 -1
  1  0 -1 ]

이 작은 필터를 이미지 전체에 ‘슬라이딩’하며
각 위치에서 연산을 반복합니다.

Convolution 계산 방식

필터와 이미지의 일부분을 곱하고 더합니다.

예:

필터 ⊗ 이미지 = 합(필터 * 이미지 patch)

이렇게 얻은 결과값이 하나의 특징값(feature value) 입니다.


4. 왜 작은 필터로 이미지를 보는가? (지역 수용 영역)

반응형

인간의 시각 신경도
한 번에 전체 이미지를 보지 않고
작은 영역씩 처리합니다.

CNN은 이를 모방해
한 필터가 작은 부분의 특징을 추출합니다:

  • 모서리(edge)
  • 선(line)
  • 방향(direction)
  • 점(texture)

필터는 이미지의 ‘패턴 추출기’입니다.


5. 스트라이드(Stride)

스트라이드는 필터가 한 번 이동하는 거리입니다.

  • Stride = 1 → 세밀한 특징 추출
  • Stride = 2 → 절반 사이즈로 줄면서 빠르게 요약

6. 패딩(Padding)

필터가 가장자리에서 계산할 수 있도록 이미지 테두리에 0을 채우는 것.

  • VALID padding: 패딩 없음 → 출력 크기 감소
  • SAME padding: 입력 크기 유지

패딩은 CNN 구조의 핵심입니다.
패딩 없이 계속 합성곱하면 이미지가 계속 줄어듭니다.


7. 여러 개의 필터 = 여러 개의 특징맵(Feature Map)

CNN 레이어는 보통 16, 32, 64개의 필터를 사용합니다.
필터마다 다른 패턴을 학습하므로
출력은 이런 feature map들이 쌓인 형태:

(Height, Width, Channels)

예: (28, 28, 32)


8. Pooling — CNN의 두 번째 핵심 (Downsampling)

Pooling은 특징맵의 크기를 줄이고
고수준 특징을 남기기 위한 연산입니다.

MaxPooling

필터 영역에서 가장 큰 값만 남김
→ 가장 강한 특징을 대표값으로 사용

예: 2×2 MaxPool

[1 3]
[2 0] → 3

Pooling의 효과:

  • 연산량 감소
  • 과적합 감소
  • 위치 변화에 덜 민감해짐 (translation invariance)

9. CNN 전체 구조 요약

입력 이미지
 → [Conv + ReLU]  
 → [Conv + ReLU]
 → [Pooling]
 → [Conv + ReLU]
 → [Pooling]
 → [Flatten]
 → [FC Layer]
 → Softmax
 → Output

이 구조는 모든 CNN의 기본 뼈대입니다.


10. CNN이 학습하는 방식 (중요!)

CNN도 결국 역전파를 사용합니다.
다만 중요한 차이:

CNN은 “필터(kernel)의 값”이 학습되는 구조이다.

즉,

  • 어느 방향이 edge인지
  • 어떤 곡선이 3인지
  • 어떤 패턴이 고양이 귀인지

이 모든 것을 CNN의 필터가 스스로 학습합니다.

CNN 필터는 사람이 지정하는 것이 아니라
역전파로 자동 학습되는 파라미터입니다.


11. PyTorch로 완전 동작하는 CNN 코드

아래 코드는 MNIST 분류가 실제로 실행되는 검증된 코드입니다.

import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms

transform = transforms.Compose([
    transforms.ToTensor()
])

trainset = datasets.MNIST(root='./data', train=True, download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=64, shuffle=True)

class CNN(nn.Module):
    def __init__(self):
        super().__init__()
        self.conv1 = nn.Conv2d(1, 32, 3, padding=1)
        self.conv2 = nn.Conv2d(32, 64, 3, padding=1)
        self.pool = nn.MaxPool2d(2, 2)
        
        self.fc1 = nn.Linear(64 * 7 * 7, 128)
        self.fc2 = nn.Linear(128, 10)
        
    def forward(self, x):
        x = torch.relu(self.conv1(x))
        x = torch.relu(self.conv2(x))
        x = self.pool(x)
        x = x.view(-1, 64 * 7 * 7)
        x = torch.relu(self.fc1(x))
        return self.fc2(x)

model = CNN()
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)

for epoch in range(1):
    for images, labels in trainloader:
        optimizer.zero_grad()
        out = model(images)
        loss = criterion(out, labels)
        loss.backward()
        optimizer.step()

print("학습 완료!")

문제 없이 실행되는 코드입니다.


12. CNN이 왜 강력한가? (핵심 요약)

강점 설명

지역 수용 영역 작은 영역에서 정교한 특징 추출
공간 구조 보존 이미지의 형태·패턴을 직접 학습
가중치 공유 필터를 이미지 전체에 재사용 → 파라미터 절약
위치 변화에도 강함 pooling 덕분
계층적 특징 학습 edge → texture → shape → object

13. CNN → ResNet → EfficientNet → Vision Transformer로의 진화

CNN은 이미지 모델링의 기본 토대였고
그 뒤 수많은 모델이 개선되었습니다.

  • VGGNet — 깊이 증가
  • ResNet — skip connection, gradient 안정
  • DenseNet — feature reuse
  • EfficientNet — scaling 최적화
  • Vision Transformer (ViT) — attention 기반 구조로 진화

하지만 CNN의 개념을 이해하지 못하면
이후 모델들도 이해할 수 없습니다.


14. 요약

핵심 포인트 의미

필터 이미지의 패턴을 학습하는 커널
스트라이드 필터 이동 간격
패딩 크기 유지 or 감소 조절
pooling 요약 + 위치 불변성
CNN의 본질 “이미지의 공간적 구조를 학습하는 신경망”

📘 다음 글 예고

👉 딥러닝 기초학습 6: RNN의 탄생 — 순차 데이터(텍스트·시계열)를 이해하는 첫 번째 딥러닝 모델

CNN이 2D 구조(이미지)를 다룬다면,
RNN은 1D의 시간적 순서를 가진 데이터(문장, 시계열, 음성)를 다루는 모델입니다.

다음 글에서는

  • RNN이 왜 등장했는지
  • 순차 데이터의 특성
  • RNN 내부 구조와 역전파(BPTT)
    를 완전히 쉽게 설명합니다.


CNN,Convolution,딥러닝,합성곱신경망,이미지분류,FeatureMap,Pooling,Stride,패딩,PyTorch

※ 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/04   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
글 보관함
반응형