Faltningsnät (CNN)
Kunna förklara faltning, pooling och receptiva fält, och bygga ett CNN för bildklassificering.
Förkunskaper
Intuition
En bild på 224 × 224 × 3 har 150 000 tal. Ett fullt kopplat lager med 1 000 neuroner skulle ha 150 miljoner vikter — och lära sig samma kant på tusen olika platser separat.
Faltning (convolution): ett litet filter (3 × 3 × 3 = 27 vikter) glider över bilden och räknar samma sak överallt. 64 filter → 64 «kartor» över var något finns (kanter, färgövergångar). Samma vikter överallt = översättningsinvarians + få parametrar.
Pooling (max/medel över 2 × 2) halverar upplösningen; efter några lager täcker varje neuron ett stort receptivt fält och ser hela objekt. Stapla: faltning → ReLU → pooling, upprepa, sist ett litet fullt kopplat huvud.
Moderna alternativ (ViT) gör liknande med attention över bildlappar, men CNN är fortfarande effektivast på liten data.
Kod
import torch, torch.nn as nn
class LitetCNN(nn.Module):
def __init__(self, klasser=10):
super().__init__()
self.f = nn.Sequential(
nn.Conv2d(3, 32, 3, padding=1), nn.ReLU(), nn.MaxPool2d(2), # 32×32 → 16×16
nn.Conv2d(32, 64, 3, padding=1), nn.ReLU(), nn.MaxPool2d(2), # → 8×8
nn.Conv2d(64, 128, 3, padding=1), nn.ReLU(), nn.AdaptiveAvgPool2d(1),
)
self.huvud = nn.Linear(128, klasser)
def forward(self, x):
return self.huvud(self.f(x).flatten(1))
m = LitetCNN()
print(sum(p.numel() for p in m.parameters())) # ≈ 94 000 — jämför 150 M för ett dense-lager
print(m(torch.zeros(4, 3, 32, 32)).shape) # (4, 10)
Parametrar i ett Conv2d(in, ut, k): in · ut · k · k + ut. Utdatastorlek med padding p och stride s: ⌊(H + 2p − k)/s⌋ + 1.
Formellt
2D-faltning (egentligen korskorrelation i DL-bibliotek): . Ett lager med in- och utkanaler och kärna har parametrar oberoende av bildstorlek. Receptivt fält växer additivt: efter lager med , stride 1: ; varje pooling/stride-2 dubblar tillväxten. Ekvivarians: för translationer (upp till kanteffekter); pooling ger approximativ invarians. Batchnormalisering och residualkopplingar gör djupa CNN (ResNet) tränbara.
Behärskning innebär
- Förklarar faltning, pooling och receptiva fält
- Räknar utdatastorlek och parametrar för ett faltningslager
- Bygger och tränar ett litet CNN för bildklassificering
Logga in för att göra övningarna och bygga upp din behärskning.
Källor
- Dive into Deep Learning (CC BY-SA 4.0) — CC BY-SA 4.0
- CS231n — Convolutional Networks — fri läsning