CNN: Oczy Sztucznej Inteligencji

Jak maszyna widzi? Dla komputera zdjęcie to tylko wielka tabela z liczbami. CNN (Convolutional Neural Networks) to sieci, które nauczyły się "widzieć" tak jak my: najpierw dostrzegają krawędzie, potem kształty, a na końcu całe obiekty.

1. Anatomia widzenia: Jak to działa?

🔍 Konwolucja (Skanowanie)

Sieć przesuwa mały filtr po całym obrazie, szukając specyficznych cech (linii, kółek). To tak, jakbyś przeglądał mapę przez dziurkę od klucza.

📉 Pooling (Upraszczanie)

Po znalezieniu cech, sieć zmniejsza rozmiar danych, zachowując tylko najważniejsze punkty. Dzięki temu rozpoznaje obiekt niezależnie od jego pozycji.

2. Wady i ograniczenia CNN

Mimo swojej potęgi, sieci konwolucyjne nie są idealne. Oto ich największe słabości:

1. Potrzeba gigantycznych zbiorów danych

Aby CNN działała dobrze, musisz jej pokazać tysiące (lub miliony) przykładów. Jeśli masz mało danych, sieć po prostu się nie nauczy lub zacznie "zgadywać" na podstawie błędnych wzorców.

2. Kosztowne obliczenia (Hardware)

Trenowanie głębokich sieci CNN wymaga potężnych kart graficznych (GPU). Bez nich proces ten trwałby miesiącami, a nie godzinami.

3. Problem "czarnej skrzynki"

Trudno jest dokładnie zrozumieć, dlaczego sieć podjęła daną decyzję. Jeśli model pomyli psa z wilkiem, naukowcom trudno jest wyśledzić, który konkretnie piksel o tym zdecydował.

4. Wrażliwość na obrót i skalę

Klasyczne CNN mają problem, jeśli pokażesz im znany obiekt, ale do góry nogami lub pod dziwnym kątem, którego wcześniej nie widziały w treningu.

3. Implementacja w Pythonie (PyTorch)

import torch.nn as nn
import torch.nn.functional as F

class SimpleCNN(nn.Module):
    def __init__(self):
        super(SimpleCNN, self).__init__()
        self.conv1 = nn.Conv2d(3, 32, 3) # Skaner 3x3
        self.pool = nn.MaxPool2d(2, 2)   # Upraszczacz
        self.fc1 = nn.Linear(32 * 14 * 14, 10)

    def forward(self, x):
        x = self.pool(F.relu(self.conv1(x)))
        x = x.view(-1, 32 * 14 * 14) # Spłaszczanie
        return self.fc1(x)

4. Matematyka Filtrów

(I * K)[i, j] = Σ Σ I[i+m, j+n] · K[m, n]
Mnożenie fragmentu obrazu (I) przez macierz filtra (K).