Convolutional neural networks, w polskiej terminologii nazywane sieciami splotowymi lub konwolucyjnymi, to rodzaj sieci neuronowych zaprojektowany specjalnie do przetwarzania danych o strukturze przestrzennej – najczęściej obrazów, ale również sygnałów dźwiękowych czy danych sekwencyjnych. Ich największą zaletą jest zdolność do samodzielnego wykrywania wzorców, takich jak krawędzie, tekstury czy kształty, bez konieczności ręcznego definiowania cech przez człowieka. To właśnie ta architektura stoi za większością dzisiejszych systemów rozpoznawania obrazów, od aplikacji do skanowania dokumentów po systemy wspomagające diagnostykę medyczną.
Czym jest sieć splotowa i skąd wzięła się jej nazwa?
Nazwa pochodzi od operacji matematycznej zwanej splotem (konwolucją), która polega na przesuwaniu niewielkiego filtra po danych wejściowych i obliczaniu wartości na podstawie lokalnego sąsiedztwa pikseli. W przeciwieństwie do klasycznych, w pełni połączonych sieci neuronowych, gdzie każdy neuron łączy się z każdym pikselem obrazu, sieć splotowa analizuje dane fragment po fragmencie. Dzięki temu liczba parametrów do wytrenowania jest znacznie mniejsza, a sieć potrafi rozpoznać ten sam wzorzec niezależnie od tego, w którym miejscu obrazu się znajduje.
Taka konstrukcja odzwierciedla intuicję zaczerpniętą z badań nad ludzkim układem wzrokowym – kora wzrokowa również przetwarza obraz lokalnie, warstwa po warstwie, zaczynając od prostych cech i budując na ich bazie coraz bardziej złożone reprezentacje. Pierwsze warstwy sieci splotowej wykrywają linie i kontrasty, kolejne łączą je w kształty, a najgłębsze warstwy rozpoznają całe obiekty, na przykład twarz, samochód czy konkretny znak drogowy.
Jak działają sieci splotowe – ogólna architektura
Typowa sieć splotowa składa się z kilku powtarzających się bloków, na które składają się warstwy splotowe, warstwy poolingu (łączenia) oraz funkcje aktywacji, a na końcu znajdują się jedna lub więcej warstw w pełni połączonych, które podejmują ostateczną decyzję – na przykład klasyfikują obraz jako „kot” lub „pies”. Dane wejściowe, czyli obraz zapisany jako macierz liczb reprezentujących wartości pikseli, przechodzą przez te warstwy sekwencyjnie, a każda z nich przekształca reprezentację danych w coraz bardziej abstrakcyjną formę.
Kluczową cechą tej architektury jest hierarchiczność przetwarzania. Wczesne warstwy pracują na surowych danych i wykrywają proste wzorce, takie jak krawędzie pod różnym kątem czy zmiany jasności. Środkowe warstwy kombinują te proste cechy w bardziej złożone struktury, na przykład rogi, tekstury czy fragmenty kształtów. Ostatnie warstwy splotowe operują już na wysoce abstrakcyjnych mapach cech, które mogą reprezentować całe obiekty lub ich charakterystyczne elementy.
Ważną właściwością sieci splotowych jest współdzielenie wag – ten sam filtr jest stosowany do całego obrazu, a nie tylko do jednego jego fragmentu. Dzięki temu sieć uczy się rozpoznawać wzorzec niezależnie od jego położenia, co nazywa się niezmienniczością translacyjną. To jedna z głównych przyczyn, dla których sieci splotowe radzą sobie z obrazami znacznie lepiej niż standardowe sieci w pełni połączone, które musiałyby uczyć się rozpoznawania tego samego obiektu osobno dla każdej możliwej pozycji.
Warstwa splotowa: filtry, kernele i mapy cech
Podstawowym elementem sieci splotowej jest filtr, nazywany też kernelem – niewielka macierz liczb, na przykład o wymiarach 3×3 lub 5×5. Filtr przesuwa się po obrazie wejściowym z określonym krokiem, zwanym stride, i w każdej pozycji wykonuje operację mnożenia i sumowania wartości pikseli z wartościami filtra. Wynik tej operacji dla całego obrazu tworzy tak zwaną mapę cech (feature map), która wskazuje, w jakich miejscach obrazu dany wzorzec występuje najsilniej.
W praktyce w jednej warstwie splotowej stosuje się wiele filtrów jednocześnie – każdy z nich uczy się wykrywać inny wzorzec. Jeden filtr może reagować na pionowe krawędzie, inny na poziome, kolejny na określony kolor czy teksturę. Liczba filtrów w warstwie decyduje o liczbie map cech, które trafiają do kolejnej warstwy, a im głębiej w sieci, tym filtry zwykle wykrywają bardziej złożone i abstrakcyjne wzorce.
Istotnym parametrem jest też tzw. padding, czyli dodawanie dodatkowych, zerowych wartości na granicach obrazu przed wykonaniem splotu. Bez paddingu obraz po każdej warstwie splotowej się zmniejsza, co przy wielu warstwach mogłoby prowadzić do utraty informacji z krawędzi obrazu. Odpowiednio ustawiony padding pozwala zachować rozmiar mapy cech lub kontrolować go w sposób przewidywalny.
Warstwy poolingu i redukcja wymiarowości
Po warstwie splotowej zwykle następuje warstwa poolingu, której zadaniem jest zmniejszenie rozmiaru map cech, a tym samym liczby obliczeń potrzebnych w kolejnych warstwach. Najpopularniejszym wariantem jest max pooling, który z niewielkiego okna, na przykład 2×2, wybiera tylko największą wartość i odrzuca resztę. Innym podejściem jest average pooling, obliczający średnią wartość w danym oknie.
Pooling ma dwie ważne konsekwencje praktyczne. Po pierwsze, redukuje liczbę parametrów i czas potrzebny na trenowanie oraz działanie sieci, co ma znaczenie zwłaszcza przy dużych obrazach lub ograniczonych zasobach sprzętowych. Po drugie, zwiększa odporność sieci na niewielkie przesunięcia i zniekształcenia obrazu – jeśli obiekt na zdjęciu przesunie się o kilka pikseli, wynik poolingu w większości przypadków pozostanie niezmieniony.
W nowszych architekturach coraz częściej ogranicza się liczbę klasycznych warstw poolingu na rzecz warstw splotowych z większym krokiem (stride), które realizują podobną funkcję redukcji wymiarów, jednocześnie ucząc się, jakie informacje warto zachować, a jakie odrzucić. To podejście bywa skuteczniejsze, ponieważ decyzja o redukcji danych nie jest sztywno zakodowana, lecz wynika z procesu uczenia.
Funkcje aktywacji i warstwy w pełni połączone
Po każdej operacji splotu wynik przechodzi przez nieliniową funkcję aktywacji, najczęściej ReLU (Rectified Linear Unit), która zeruje wszystkie wartości ujemne, a pozostawia niezmienione wartości dodatnie. Bez takiej nieliniowości sieć, niezależnie od liczby warstw, mogłaby modelować jedynie relacje liniowe, co drastycznie ograniczałoby jej zdolność do rozpoznawania złożonych wzorców obrazu. ReLU jest popularna, ponieważ jest prosta obliczeniowo i w praktyce pomaga sieci szybciej się uczyć w porównaniu ze starszymi funkcjami, takimi jak sigmoid czy tangens hiperboliczny.
Po serii warstw splotowych i poolingu, gdy sieć wyodrębniła już istotne cechy obrazu, dane trafiają do jednej lub kilku warstw w pełni połączonych (fully connected, czasem nazywanych warstwami gęstymi). To w nich następuje ostateczna klasyfikacja – każdy neuron ostatniej warstwy odpowiada zwykle jednej kategorii, a jego wartość wyjściowa, po przejściu przez funkcję softmax, informuje o prawdopodobieństwie przynależności obrazu do danej klasy.
W wielu nowoczesnych architekturach warstwy w pełni połączone zastępuje się operacją global average pooling, która redukuje każdą mapę cech do jednej liczby przed klasyfikacją. Takie rozwiązanie zmniejsza liczbę parametrów sieci i ogranicza ryzyko przeuczenia, czyli sytuacji, w której model zbyt dobrze zapamiętuje dane treningowe, a słabo radzi sobie z nowymi przykładami.
Jak trenuje się sieci splotowe
Trenowanie sieci splotowej polega na iteracyjnym dostrajaniu wartości filtrów i wag warstw w pełni połączonych tak, aby predykcje sieci coraz lepiej zgadzały się z prawdziwymi etykietami danych treningowych. Proces zaczyna się od losowej inicjalizacji parametrów, a następnie sieć wykonuje przejście w przód (forward pass), czyli obliczenie wyniku dla danego obrazu wejściowego.
Wynik ten porównuje się z oczekiwaną etykietą za pomocą funkcji straty (loss function), która liczbowo wyraża, jak duży jest błąd predykcji. Następnie za pomocą algorytmu propagacji wstecznej (backpropagation) oblicza się, w jaki sposób każdy parametr sieci przyczynił się do tego błędu, a algorytm optymalizacji, na przykład stochastyczny spadek gradientowy lub jego wariant Adam, aktualizuje wagi w kierunku zmniejszającym błąd.
Ten cykl powtarza się wielokrotnie na dużych zbiorach danych, często obejmujących setki tysięcy lub miliony obrazów, aż sieć zacznie generalizować, czyli poprawnie rozpoznawać obiekty również na zdjęciach, których nie widziała podczas treningu. Aby uniknąć przeuczenia, stosuje się techniki takie jak augmentacja danych (sztuczne tworzenie nowych przykładów przez obracanie, przycinanie czy zmianę kolorów obrazów), dropout (losowe wyłączanie części neuronów podczas treningu) oraz regularyzację wag.
Trenowanie dużych sieci splotowych od zera wymaga znacznych zasobów obliczeniowych, zwykle kart graficznych (GPU) lub dedykowanych akceleratorów. Z tego powodu w praktyce bardzo popularne jest tzw. uczenie transferowe (transfer learning) – wykorzystanie sieci wytrenowanej wcześniej na dużym, ogólnym zbiorze danych i jej dostrojenie do konkretnego, mniejszego zadania.
Zastosowania konwolucyjnych sieci neuronowych
Najbardziej znanym obszarem zastosowań jest klasyfikacja obrazów, czyli przypisywanie zdjęcia do jednej z wielu możliwych kategorii, oraz detekcja obiektów, która dodatkowo wskazuje lokalizację danego obiektu na obrazie za pomocą prostokąta otaczającego (bounding box). Na tych właśnie zadaniach oparte są systemy rozpoznawania twarzy, aplikacje do sortowania zdjęć w telefonach oraz mechanizmy moderacji treści wizualnych w serwisach internetowych.
Sieci splotowe mają również kluczowe znaczenie w segmentacji semantycznej, czyli precyzyjnym wyznaczaniu granic poszczególnych obiektów na obrazie, piksel po pikselu. To zastosowanie jest szeroko wykorzystywane w systemach wspomagających diagnostykę medyczną, gdzie sieć pomaga wyodrębnić obszar zmiany chorobowej na zdjęciu rentgenowskim lub tomograficznym, a także w pojazdach autonomicznych, które muszą odróżnić jezdnię, pieszych i inne pojazdy.
- Rozpoznawanie i klasyfikacja obrazów w aplikacjach mobilnych i systemach wyszukiwania wizualnego.
- Analiza obrazów medycznych, w tym wspomaganie wykrywania zmian na zdjęciach RTG, CT i MRI.
- Systemy wizyjne w robotyce i pojazdach autonomicznych.
- Rozpoznawanie tekstu na obrazach (OCR) oraz odczyt tablic rejestracyjnych.
- Analiza sygnałów dźwiękowych przekształconych na spektrogramy, na przykład w rozpoznawaniu mowy.
Poza obrazami sieci splotowe wykorzystuje się także w analizie danych jednowymiarowych, takich jak sygnały czasowe czy dane finansowe, gdzie filtr splotowy przesuwa się nie po dwóch, a po jednej osi, wykrywając lokalne wzorce w przebiegu sygnału.
Najważniejsze architektury CNN, które warto znać
Historia sieci splotowych sięga lat 90., kiedy LeNet-5, opracowana przez Yanna LeCuna, pokazała skuteczność tej architektury w rozpoznawaniu cyfr na czekach bankowych. Przełom nastąpił jednak dopiero na początku lat 2010., gdy architektura AlexNet zwyciężyła w konkursie ImageNet, znacząco poprawiając wyniki rozpoznawania obrazów względem wcześniejszych metod i przyczyniając się do gwałtownego wzrostu popularności głębokiego uczenia.
Kolejne lata przyniosły architektury takie jak VGG, oparte na prostych, powtarzalnych blokach niewielkich filtrów 3×3 układanych w głębokie stosy, oraz GoogLeNet, wprowadzającą moduły Inception łączące filtry o różnych rozmiarach równolegle. Istotnym krokiem naprzód był ResNet, który wprowadził tzw. połączenia rezydualne (skip connections) – ścieżki pozwalające sygnałowi „przeskakiwać” niektóre warstwy, co umożliwiło trenowanie znacznie głębszych sieci bez utraty stabilności procesu uczenia.
Nowsze podejścia, takie jak MobileNet czy EfficientNet, skupiają się na efektywności obliczeniowej, umożliwiając uruchamianie sieci splotowych na urządzeniach mobilnych i wbudowanych o ograniczonych zasobach, przy zachowaniu satysfakcjonującej dokładności. Wybór konkretnej architektury zależy od zadania: mniejsze modele nadają się do zastosowań na urządzeniach z ograniczoną moc obliczeniową, a większe, głębsze sieci wykorzystuje się tam, gdzie liczy się przede wszystkim maksymalna dokładność, na przykład w analizie obrazów medycznych.
CNN a inne typy sieci neuronowych
W porównaniu z klasycznymi, w pełni połączonymi sieciami neuronowymi (perceptronami wielowarstwowymi), sieci splotowe są znacznie efektywniejsze w przetwarzaniu danych przestrzennych, ponieważ wykorzystują lokalność i współdzielenie wag, a nie traktują każdego piksela jako oddzielny, niezależny wymiar wejściowy. Dzięki temu wymagają mniej parametrów i danych treningowych, aby osiągnąć dobre wyniki na obrazach.
Inną rodziną są rekurencyjne sieci neuronowe (RNN) oraz ich warianty, takie jak LSTM, zaprojektowane do przetwarzania danych sekwencyjnych, gdzie kolejność elementów ma kluczowe znaczenie, na przykład tekstu czy szeregów czasowych. Sieci splotowe bywają jednak stosowane również do takich danych – w formie splotów jednowymiarowych – choć nie modelują bezpośrednio długoterminowych zależności w taki sposób, jak robią to sieci rekurencyjne.
W ostatnich latach w zadaniach związanych z obrazami coraz większą popularność zdobywają transformery wizyjne (Vision Transformers, ViT), inspirowane architekturą wykorzystywaną w przetwarzaniu języka naturalnego. W przeciwieństwie do sieci splotowych, transformery nie zakładają z góry lokalności przetwarzania, lecz uczą się relacji między odległymi fragmentami obrazu za pomocą mechanizmu uwagi (attention). Przy dużych zbiorach danych bywają skuteczniejsze od sieci splotowych, jednak przy ograniczonej liczbie danych treningowych sieci splotowe wciąż często osiągają porównywalne lub lepsze wyniki, a w praktyce coraz częściej stosuje się rozwiązania hybrydowe, łączące oba podejścia.
Convolutional neural networks po polsku – jak się je nazywa
W polskiej literaturze technicznej i akademickiej termin convolutional neural networks tłumaczy się najczęściej jako sieci konwolucyjne albo sieci splotowe – oba określenia funkcjonują równolegle i odnoszą się do tej samej architektury. Wynika to z tego, że matematyczna operacja convolution bywa w polskich podręcznikach nazywana zarówno „konwolucją”, jak i „splotem”, przy czym „splot” jest terminem starszym, zakorzenionym w polskiej terminologii matematycznej i sygnałowej, a „konwolucja” jest bezpośrednią transkrypcją angielskiego słowa, coraz częściej używaną w środowisku programistycznym.
W praktyce, zarówno w dokumentacji technicznej, artykułach naukowych, jak i w rozmowach branżowych, powszechnie stosuje się też po prostu skrót CNN, niezależnie od tego, czy tekst jest w języku polskim, czy angielskim – skrót ten na dobre wpisał się w słownik osób pracujących z uczeniem maszynowym. Warto o tym pamiętać, szukając materiałów edukacyjnych po polsku: artykuł mówiący o „sieciach splotowych” i artykuł mówiący o „sieciach konwolucyjnych” najczęściej opisują dokładnie to samo zagadnienie, a wybór terminologii jest kwestią stylu autora, nie różnicą merytoryczną.
Osoby zaczynające naukę tego tematu po polsku mogą się też natknąć na tłumaczenia poszczególnych elementów architektury, takie jak „warstwa splotowa” (convolutional layer), „warstwa łączenia” lub „warstwa poolingu” (pooling layer), „mapa cech” (feature map) czy „funkcja aktywacji” (activation function). W wielu polskich materiałach terminy angielskie pojawiają się jednak obok polskich odpowiedników lub całkowicie je zastępują, ponieważ znaczna część dokumentacji bibliotek programistycznych, takich jak TensorFlow czy PyTorch, dostępna jest wyłącznie w języku angielskim.
Ograniczenia i wyzwania sieci splotowych
Sieci splotowe, mimo swojej skuteczności, mają istotne ograniczenia. Wymagają dużych zbiorów danych treningowych, aby dobrze generalizować – przy niewielkiej liczbie przykładów łatwo dochodzi do przeuczenia, gdy model zapamiętuje szczegóły konkretnych obrazów treningowych, a nie uczy się ogólnych wzorców.
Kolejnym wyzwaniem jest brak naturalnej odporności na zmiany skali, obrotu czy perspektywy – choć pooling zapewnia pewną tolerancję na przesunięcia, sieć wytrenowana na obiektach w jednej orientacji może mieć problem z rozpoznaniem tego samego obiektu obróconego o znaczny kąt, jeśli takie przykłady nie znalazły się w danych treningowych. Rozwiązuje się to częściowo poprzez augmentację danych, ale nie eliminuje problemu całkowicie.
Sieci splotowe bywają też podatne na tzw. ataki adwersarialne – niewielkie, często niewidoczne dla człowieka zmiany w obrazie mogą sprawić, że model dokona błędnej klasyfikacji z dużą pewnością. Dodatkowym wyzwaniem jest interpretowalność: duże, głębokie sieci działają w praktyce jak „czarna skrzynka”, co utrudnia wyjaśnienie, dlaczego model podjął konkretną decyzję – a to bywa istotnym problemem w zastosowaniach medycznych czy prawnych, gdzie wymagana jest przejrzystość procesu decyzyjnego.
Wreszcie, trenowanie i uruchamianie dużych sieci splotowych wiąże się z kosztami obliczeniowymi i energetycznymi, co ma znaczenie zarówno przy projektowaniu produktów komercyjnych, jak i przy wyborze modelu do zastosowań na urządzeniach z ograniczonymi zasobami, na przykład w smartfonach czy kamerach przemysłowych.
Najczęściej zadawane pytania
Czym różni się sieć splotowa od zwykłej sieci neuronowej?
Sieć splotowa wykorzystuje lokalne filtry przesuwane po obrazie i współdzielenie wag, dzięki czemu potrzebuje znacznie mniej parametrów niż sieć w pełni połączona, która łączy każdy neuron z każdym pikselem wejściowym. To sprawia, że sieci splotowe są znacznie efektywniejsze w przetwarzaniu obrazów i innych danych o strukturze przestrzennej.
Do czego służą sieci splotowe w praktyce?
Najczęściej wykorzystuje się je do klasyfikacji i rozpoznawania obiektów na obrazach, segmentacji obrazów medycznych, systemów wizyjnych w pojazdach autonomicznych oraz rozpoznawania tekstu i twarzy. Znajdują też zastosowanie w analizie sygnałów jednowymiarowych, na przykład dźwięku przekształconego na spektrogram.
Czy trzeba znać matematykę, aby zrozumieć CNN?
Podstawowe zrozumienie idei – filtrów, splotu i redukcji wymiarów – nie wymaga zaawansowanej matematyki, choć głębsze zrozumienie procesu trenowania, takiego jak propagacja wsteczna i gradienty, ułatwia znajomość algebry liniowej i podstaw rachunku różniczkowego. Do praktycznego korzystania z gotowych bibliotek, takich jak TensorFlow czy PyTorch, wystarczy zrozumienie koncepcyjne architektury.
Czy sieci splotowe zastąpiły już transformery wizyjne?
Nie – oba podejścia są obecnie stosowane równolegle, a wybór zależy od zadania i dostępnych danych. Sieci splotowe wciąż dobrze radzą sobie przy ograniczonej liczbie danych treningowych i mniejszych zasobach obliczeniowych, podczas gdy transformery wizyjne bywają skuteczniejsze przy bardzo dużych zbiorach danych.
Jak nazywa się CNN po polsku?
W polskiej terminologii najczęściej używa się określeń sieć splotowa lub sieć konwolucyjna, a same skróty CNN pojawiają się równie często niezależnie od języka tekstu. Oba polskie tłumaczenia opisują tę samą architekturę i są używane wymiennie w literaturze i dokumentacji technicznej.
Podsumowanie
Sieci splotowe pozostają jednym z fundamentów dzisiejszego przetwarzania obrazów, łącząc skuteczność w wykrywaniu wzorców z relatywną efektywnością obliczeniową w porównaniu z prostszymi architekturami. Zrozumienie ich podstawowych elementów – filtrów, poolingu, funkcji aktywacji i procesu trenowania – pozwala świadomie oceniać możliwości i ograniczenia systemów wizyjnych, z którymi coraz częściej mamy do czynienia w codziennych aplikacjach i urządzeniach. Choć nowsze architektury, takie jak transformery wizyjne, zdobywają coraz większą popularność, sieci splotowe wciąż odgrywają kluczową rolę i pozostaną istotnym punktem odniesienia w rozwoju uczenia maszynowego na wiele kolejnych lat.