본문 바로가기
C.W.K.
Stream
Lesson 01 of 12 · published

이미지는 왜 다른가

~16 min · images, spatial, translation-invariance

Level 0호기심
0 XP0/73 lessons0/11 achievements
0/120 XP to next level120 XP to go0% complete

픽셀이 실제로 가진 구조

이미지는 일렬로 늘어놓은 벡터가 아냐. 가까운 픽셀끼리는 서로 연관되어 있고, 같은 물체가 화면의 다른 위치에 나타나기도 해. 유용한 특징은 전체에 퍼지기 전에 2-D 격자의 작은 영역에서 먼저 드러나. 이미지를 단순히 평탄화해서 MLP에 넣으면 이런 구조를 모두 잃게 돼. CNN은 이 구조를 직접 활용하려고 만들어졌어.

중요한 속성은 3가지야. 지역성은 특징이 픽셀 주변의 작은 영역에 존재한다는 뜻이고, 평행이동 불변성은 화면 어디에 나타나도 고양이는 여전히 고양이라는 뜻이야. 조합성은 저수준 특징이 중간 수준 특징으로 합쳐지고, 다시 물체를 이루는 성질을 말해.

팁: 위치가 달라져도 레이블은 바뀌지 않는다는 사실을 다시 배우느라 모델이 매개변수를 낭비하면, 실제 과제를 학습할 여력이 줄어들어. 평행이동 불변성을 구조에 내장한 아키텍처(CNN)는 그 성질까지 직접 학습해야 하는 아키텍처(초기 MLP)보다 이미지 데이터에서 더 뛰어난 성능을 보여.

이미지를 일렬 벡터로 다루는 비용

224×224 RGB 이미지를 MLP에 넣으면 3 * 224 * 224 = 150,528개의 입력 특징이 생겨. 첫 번째 은닉층에는 은닉 유닛 하나마다 대략 그만큼의 매개변수가 필요해. 너비가 256인 첫 번째 층만 해도 매개변수가 38M개야. 작은 CNN보다 많을 뿐 아니라, (입력 픽셀, 은닉 유닛) 쌍마다 고유한 가중치를 학습해야 해. 이렇게 많은 매개변수로 위치 변화를 외우는 일을 3×3 합성곱은 9개의 가중치로 포착해.

앞으로 배울 것

다음 레슨부터는 도구 모음을 차례로 쌓아갈 거야. 먼저 합성곱으로 지역성과 평행이동을 다루고, pooling으로 크기를 줄여. 이어서 고전 CNN의 계보인 AlexNet → VGG → ResNet → ConvNeXt를 살펴본 뒤, Transformer가 비전까지 다루는 ViT로 넘어가. 그다음에는 시퀀스 모델, 어텐션, Transformer 블록을 배워. 핵심 패턴은 하나야. 각 아키텍처는 데이터에 관한 가정을 담고 있으니, 데이터에 맞는 가정을 가진 아키텍처를 골라야 해.

원칙: 아키텍처는 하나의 의견이야. 층을 선택할 때마다 데이터가 어떤 구조를 가졌는지에 대한 가정이 들어가. 그 가정을 이해해야 막힌 모델을 디버깅할 수 있어.

Code

작은 이미지 과제에서 MLP와 CNN의 매개변수 수 비교·python
import torch.nn as nn

# MLP on 32x32 RGB
mlp = nn.Sequential(
    nn.Flatten(),
    nn.Linear(3 * 32 * 32, 128), nn.ReLU(),
    nn.Linear(128, 10),
)
print("MLP params:", sum(p.numel() for p in mlp.parameters()))

# Small CNN on 32x32 RGB
cnn = nn.Sequential(
    nn.Conv2d(3, 32, 3, padding=1), nn.ReLU(), nn.MaxPool2d(2),
    nn.Conv2d(32, 64, 3, padding=1), nn.ReLU(), nn.MaxPool2d(2),
    nn.AdaptiveAvgPool2d(1), nn.Flatten(),
    nn.Linear(64, 10),
)
print("CNN params:", sum(p.numel() for p in cnn.parameters()))
# CNN typically uses fewer parameters AND generalizes better.

External links

Exercise

작은 MLP와 작은 CNN을 비슷한 매개변수 수로 맞춰 CIFAR-10에 학습해. CNN이 의미 있는 차이(~10+ pp 정확도 격차)로 더 잘 일반화해야 해. 이 격차는 아키텍처에 내장된 가정이 실제로 효과를 낸다는 직접적인 증거야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.