Konwolucyjna sieć neuronowa, czyli CNN, to sieć neuronowa, która wyszukuje małe lokalne wzorce, a następnie łączy je w większe. W obrazach wczesne warstwy często wykrywają krawędzie lub narożniki, środkowe warstwy wykrywają tekstury lub części obiektów, a głębsze warstwy wykorzystują te sygnały do końcowej predykcji.

Kluczową ideą jest współdzielenie wag. Zamiast uczyć osobną wagę dla każdej pary piksel-pozycja, CNN używa tego samego małego filtra w wielu miejscach. Dzięki temu jest znacznie tańsza obliczeniowo niż warstwa gęsta działająca bezpośrednio na surowym obrazie i lepiej wykrywa ten sam typ wzorca w więcej niż jednym miejscu.

Co robi konwolucyjna sieć neuronowa

W warstwie w pełni połączonej każde wyjście może jednocześnie zależeć od wszystkich wartości wejściowych. CNN ma bardziej uporządkowaną strukturę. Używa małych jąder, często nazywanych filtrami, które patrzą tylko na jeden lokalny fragment naraz.

Dla wejścia jednokanałowego xx i jądra KK o rozmiarze k×kk \times k, jeden element wyjścia można zapisać jako

yi,j=m=0k1n=0k1Km,nxi+m,j+n.y_{i,j} = \sum_{m=0}^{k-1} \sum_{n=0}^{k-1} K_{m,n} x_{i+m,j+n}.

To właśnie idea lokalnej sumy ważonej stojąca za warstwą konwolucyjną. W wielu bibliotekach uczenia maszynowego implementowana operacja jest technicznie korelacją wzajemną, a nie odwróconą matematyczną konwolucją, ale intuicja praktyczna pozostaje taka sama: jądro przesuwa się po wejściu i tworzy mapę cech.

Mapa cech pokazuje, gdzie wyuczony wzorzec pojawia się z dużą siłą.

Dlaczego współdzielone filtry pomagają

Jeśli ta sama pionowa krawędź pojawia się blisko lewego górnego rogu obrazu albo bliżej środka, zwykle chcemy, aby model zauważył ją w obu przypadkach. CNN to umożliwia, używając tych samych parametrów filtra w różnych pozycjach.

Ma to dwa praktyczne skutki:

  • Zmniejsza liczbę uczonych parametrów w porównaniu z warstwą gęstą działającą na surowym obrazie.
  • Zachęca sieć do wykrywania powtarzających się lokalnych wzorców zamiast zapamiętywania jednej stałej lokalizacji.

To współużycie parametrów jest jednym z powodów, dla których CNN stały się skuteczne w zadaniach związanych z obrazami.

Jak wygląda podstawowa architektura CNN

Podstawowa CNN często ma taki schemat:

  1. warstwa konwolucyjna
  2. funkcja aktywacji, na przykład ReLU
  3. opcjonalny pooling lub downsampling
  4. kolejne bloki konwolucyjne
  5. końcowa warstwa predykcyjna

Wczesne warstwy zwykle wychwytują prostą lokalną strukturę. Głębsze warstwy łączą te odpowiedzi w większe cechy, bardziej specyficzne dla danego zadania.

Pooling nie jest obowiązkowy, ale gdy się go używa, zmniejsza wymiary przestrzenne, dzięki czemu późniejsze warstwy mogą pracować na bardziej zwartej reprezentacji. Typowym przykładem jest max pooling, który zachowuje największą wartość w każdym małym obszarze.

Jeśli stride wynosi 11, a padding 00, to wejście n×nn \times n z jądrem k×kk \times k daje wyjście o rozmiarze (nk+1)×(nk+1)(n-k+1) \times (n-k+1). Ta reguła rozmiaru jest przydatna, gdy sprawdzasz, czy przykład obliczeniowy ma sens.

Przykład obliczeniowy: jak powstaje mapa cech w CNN

Weźmy taki obraz wejściowy 4×44 \times 4:

X=[3300330000330033]X = \begin{bmatrix} 3 & 3 & 0 & 0 \\ 3 & 3 & 0 & 0 \\ 0 & 0 & 3 & 3 \\ 0 & 0 & 3 & 3 \end{bmatrix}

Użyjmy takiego jądra 2×22 \times 2:

K=[1111]K = \begin{bmatrix} 1 & 1 \\ 1 & 1 \end{bmatrix}

Załóżmy stride 11 i brak paddingu. Ponieważ wejście ma rozmiar 4×44 \times 4, a jądro 2×22 \times 2, wyjście musi mieć rozmiar 3×33 \times 3. Każdy element wyjścia jest sumą jednego fragmentu 2×22 \times 2, ponieważ każda wartość w jądrze jest równa 11.

Wartość wyjściowa w lewym górnym rogu to

y1,1=3(1)+3(1)+3(1)+3(1)=12.y_{1,1} = 3(1) + 3(1) + 3(1) + 3(1) = 12.

Fragment przesunięty o jeden krok w prawo to

[3030],\begin{bmatrix} 3 & 0 \\ 3 & 0 \end{bmatrix},

więc

y1,2=3+0+3+0=6.y_{1,2} = 3 + 0 + 3 + 0 = 6.

Po wykonaniu obliczeń dla wszystkich poprawnych pozycji otrzymujemy

Y=[12606660612].Y = \begin{bmatrix} 12 & 6 & 0 \\ 6 & 6 & 6 \\ 0 & 6 & 12 \end{bmatrix}.

To wyjście jest mapą cech. Duże wartości pokazują, gdzie jądro znalazło silne dopasowanie. Tutaj filtr reaguje najmocniej tam, gdzie pojawia się pełny jasny blok 2×22 \times 2.

Jeśli teraz zastosujesz ReLU, nic się nie zmieni, ponieważ wszystkie elementy są już nieujemne. Jeśli następnie użyjesz max poolingu 2×22 \times 2 ze stride 11, wynik po poolingu będzie równy

[126612].\begin{bmatrix} 12 & 6 \\ 6 & 12 \end{bmatrix}.

To nie tworzy nowej informacji. Zachowuje najsilniejsze pobliskie odpowiedzi i zmniejsza siatkę przestrzenną.

Ten przykład jest prosty, ale dobrze pokazuje podstawowy mechanizm: filtr przesuwa się, oblicza lokalne sumy ważone i tworzy mapę tego, gdzie pojawia się dany wzorzec.

Czego CNN uczy się podczas treningu

Powyższe jądro zostało wybrane ręcznie, ale w prawdziwej CNN wartości filtrów są uczone na podstawie danych. Trening dostosowuje te wartości tak, aby powstałe mapy cech były użyteczne dla danego zadania.

Jeśli zadaniem jest klasyfikacja obrazów, sieć uczy się filtrów, które pomagają rozróżniać klasy. Jeśli zadaniem jest segmentacja lub detekcja, późniejsze warstwy są trenowane pod te właśnie wyjścia. Podstawowy mechanizm pozostaje taki sam: przejście w przód, funkcja straty, backpropagation, aktualizacja parametrów.

Typowe błędy przy nauce CNN

Myślenie, że CNN to po prostu „klasyfikator obrazów”

Obrazy są standardowym przykładem, ale CNN tak naprawdę dotyczą lokalnej struktury i współdzielonych filtrów. Jeśli sąsiednie wartości mają znaczenie, ta sama idea może być użyteczna także poza obrazami.

Zakładanie, że pooling jest zawsze wymagany

Jest częsty, ale nie uniwersalny. Niektóre architektury zmniejszają rozmiar przestrzenny za pomocą konwolucji ze skokiem, a inne dłużej zachowują więcej szczegółów przestrzennych.

Ignorowanie stride i paddingu

Rozmiar mapy cech zależy od tych wyborów. Jeśli zmienisz stride albo padding, zmienisz nie tylko kształt wyjścia, ale też to, jakie lokalne sąsiedztwa może zobaczyć każda jednostka.

Traktowanie warstwy wyłącznie jako wzoru

Wzór na konwolucję jest ważny, ale architektura też ma znaczenie. CNN działa dlatego, że konwolucja, aktywacja, układanie warstw i trening współpracują ze sobą.

Kiedy konwolucyjne sieci neuronowe są przydatne

CNN są szeroko stosowane w zadaniach computer vision, takich jak klasyfikacja obrazów, detekcja obiektów i segmentacja. Pojawiają się też w niektórych zadaniach związanych z przetwarzaniem sygnałów i sekwencji, gdzie lokalne wzorce mają znaczenie.

Są szczególnie przydatne wtedy, gdy dane wejściowe mają wyraźną strukturę siatki albo uporządkowane sąsiedztwo. Jeśli ten warunek jest słaby, lepiej może sprawdzić się inna architektura.

Model mentalny, który ułatwia zrozumienie CNN

Pomyśl o CNN jak o detektorze wzorców, który zaczyna od małych elementów i wraz z głębokością staje się bardziej abstrakcyjny. Jedna warstwa pyta: „Czy ten mały wzorzec pojawia się tutaj?”. Późniejsze warstwy pytają: „Czy te prostsze wzorce łączą się w coś bardziej znaczącego?”.

Dlatego CNN łatwiej zrozumieć, gdy skupiasz się na mapach cech, a nie tylko na samym słowie „konwolucja”.

Wypróbuj własną wersję

Zachowaj to samo wejście, ale zmień jądro na

[1111].\begin{bmatrix} 1 & -1 \\ 1 & -1 \end{bmatrix}.

Oblicz ponownie mapę cech i sprawdź, które obszary dają teraz duże dodatnie lub ujemne odpowiedzi. Ta mała zmiana znacznie lepiej pokazuje, jak różne filtry wykrywają różne wzorce.

Potrzebujesz pomocy z zadaniem?

Prześlij pytanie i otrzymaj zweryfikowane rozwiązanie krok po kroku w kilka sekund.

Otwórz GPAI Solver →