Standardowa warstwa splotowa jest dziwnie egalitarna. Nakłada dziesiątki — czasem setki — detektorów cech, a następnie traktuje każdy z nich z taką samą uwagą. Kanał, który nauczył się rozpoznawać ukośne krawędzie, otrzymuje taką samą wagę głosu jak ten, który wykrywa niebieskie piksele nieba. Kanał aktywujący się na teksturze futra na zdjęciu kota jest przekazywany dalej z taką samą wagą, jak ten aktywowany przez szum tła. Ta jednolitość jest słabością. Nie każdy kanał ma taką samą wagę dla każdego obrazu, a głębokie sieci historycznie nie posiadały mechanizmu, który pozwalałby to uwzględnić.
Mechanizm Squeeze-and-Excitation, wprowadzony przez Hu i współpracowników, naprawia to za pomocą niezwykle małego dodatku. Do każdego bloku splotowego dołącza on uczalny mechanizm bramkowania, dzięki czemu sieć może dynamicznie skalibrować, jak bardzo każdy kanał przyczynia się do wyniku, i robi to od nowa dla każdego wejścia. Dodatkowy koszt jest znikomy — około 2,5 procent więcej parametrów po dołączeniu do ResNet-50 — ale zysk w mocy reprezentacyjnej jest na tyle znaczący, że bloki SE pomogły wygrać ILSVRC 2017 i obecnie znajdują się w architekturach produkcyjnych, takich jak MobileNetV3 i EfficientNet.
Pomysł jest na tyle prosty, że można go zbudować od zera w trzech etapach.
Squeeze: Wyposażenie sieci w obiektyw szerokokątny
Splot jest z natury lokalny. Jądro 3×3 przesuwa się po obrazie i widzi tylko jego bezpośrednie sąsiedztwo. Jeśli nałożymy wystarczająco dużo warstw, pole recepcyjne rośnie, jednak żadna pojedyncza operacja nie patrzy na całą mapę cech za jednym razem. Oznacza to, że kanał może być silnie aktywowany na całym obszarze przestrzennym psa lub samochodu, ale kolejna warstwa nigdy nie otrzymuje wyraźnego podsumowania typu: „Ten detektor aktywował się wszędzie”.
Krok squeeze wypełnia tę lukę za pomocą globalnego uśredniania (global average pooling). Dla każdego kanału każda wartość w siatce przestrzennej H×W jest uśredniana do pojedynczej liczby. Jeśli masz 512 kanałów, masz teraz 512 skalarów. Każdy skalar koduje globalną obecność tego, co dany kanał nauczył się wykrywać — czy jest to felga koła, pas trawy, czy fragment odcienia skóry. Jest to podsumowanie całej sceny na poziomie kanałów.
Ma to znaczenie, ponieważ kontekst zmienia znaczenie. Detektor linii poziomej jest użyteczny na jednym obrazie, ponieważ identyfikuje horyzont, a bezużyteczny na innym, ponieważ wyłapuje szum w koronie drzew. Bez agregacji przestrzennej sieci brakuje czystego sygnału, aby dokonać tego rozróżnienia.
Excite: Wąskie gardło wymuszające współpracę
Gdy krok squeeze wygeneruje wektor globalnych deskryptorów kanałów, krok excite uczy się, co z nimi zrobić. Jest to niewielka, dwuwarstwowa sieć MLP. Przyjmuje ona wektor, kompresuje go do wąskiego gardła (bottleneck), a następnie rozszerza z powrotem do oryginalnego wymiaru kanałów.
Typowe implementacje stosują współczynnik redukcji (reduction ratio) wynoszący 16. Jeśli wejście ma 512 kanałów, pierwsza warstwa liniowa rzutuje 512 skalarów do 32, pomiędzy nimi znajduje się funkcja ReLU, a druga warstwa mapuje 32 z powrotem do 512. Ta kompresja jest zamierzona. Działa ona jak lejek: sieć nie może po prostu przekazać oryginalnych wartości bez zmian. Musi nauczyć się skompresowanej, wspólnej reprezentacji relacji między kanałami. Wąskie gardło wymusza pojawienie się zależności międzykanałowych. Model może się na przykład nauczyć, że gdy kanał „tekstury kory” jest silny, kanał konturów „pnia drzewa” również powinien zostać wzmocniony, podczas gdy kanał „odbicia wody” powinien zostać wyciszony.
Końcowa aktywacja jest tutaj kluczowa i jest to częste miejsce, w którym intuicja zawodzi. Wiele osób instynktownie sięga po softmax, ponieważ wydaje się, że uwaga (attention) powinna być rozkładem prawdopodobieństwa. Softmax wymusiłby rywalizację wszystkich kanałów między sobą, aż ich wagi zsumują się do jedności. Jeśli jeden kanał wzrośnie, inne muszą spaść. Jest to dokładnie błędne podejście w tym zadaniu. Zdjęcie zachodu słońca może wymagać jednoczesnego działania kanału „pomarańczowej poświaty” i kanału „tekstury chmur” z pełną siłą. Bramki powinny działać jak niezależne ściemniacze, a nie jak budżet o sumie zerowej.
Funkcja Sigmoid rozwiązuje ten problem. Ściska każdy skalar do wartości między zerem a jedynką, ale każdy kanał może poruszać się niezależnie. Model może wzmocnić dowolny podzbiór, pozostawić inne w stanie neutralnym i wyciszyć resztę, a wszystko to bez sztucznej rywalizacji.
Scale: Zastosuj bramki i przejdź dalej
Ostatni krok jest niemal antyklimatyczny, co stanowi o jego elegancji. Każda oryginalna mapa cech jest mnożona przez odpowiadającą jej wartość bramki aktywowanej funkcją sigmoid. Jeśli bramka jest bliska jedynce, kanał przechodzi bez zmian. Jeśli bramka jest bliska zeru, cała ta mapa cech zostaje wyciszona, zanikając ku ciszy. Wynik jest przekazywany do kolejnej warstwy sieci.
Ponieważ jest to czyste mnożenie w obrębie map przestrzennych, dodaje ono minimalny narzut obliczeniowy podczas wnioskowania (inference). Najcięższa praca została wykonana przez globalny pooling i dwie małe projekcje, które są pomijalne w porównaniu z otaczającymi je splotami (convolutions) 3×3.
Dlaczego ten projekt przetrwał
Poza czystą matematyką, Squeeze-and-Excitation utrzymuje się na rynku, ponieważ szanuje ograniczenia inżynieryjne.
Tanie parametry. Dodanie bloków SE do ResNet-50 kosztuje tylko około 2,5% więcej parametrów. Warstwy MLP są małe; nie powodują rozrostu modelu. W erze, w której wzrost dokładności często wynika z podwajania rozmiaru modelu, SE oferuje rzadki „darmowy obiad” (free lunch).
Modularność. SE nie jest nową architekturą typu backbone, która wymagałaby przeprojektowania całego potoku (pipeline). To moduł typu „drop-in”. Można go wstawić po dowolnym bloku splotowym w ResNet, DenseNet lub niestandardowych stosach bez konieczności przepisywania otaczającej logiki. Ta elastyczność sprawiła, że adaptacja przebiegła szybko – najpierw w badaniach, a później w sieciach zoptymalizowanych pod urządzenia mobilne.
Zachowanie adaptacyjne względem wejścia. W przeciwieństwie do statycznych wag kanałów, które są uczone podczas treningu i zamrożone, bramki SE są obliczane „w locie” (on the fly) dla każdego przejścia w przód (forward pass). Jeśli podasz sieci płaskie, pozbawione cech niebo, odpowiednie kanały pozostaną przygaszone. Jeśli pokażesz jej zatłoczoną ulicę z pieszymi, znakami i pojazdami, bramki skalibrują się ponownie, aby wzmocnić detektory istotne dla tego konkretnego obrazu. Ta sama sieć dostosowuje własną czułość scena po scenie.
Od zwycięzcy konkursu do codziennego wdrożenia
Bloki SE zajęły pierwsze miejsce w ILSVRC 2017, ale ich prawdziwa walidacja nastąpiła później. Zostały włączone do MobileNetV3, gdzie pomagają lekkim modelom „bić ponad swoją wagę” (punch above their weight class) bez nadmiernego zużycia baterii w urządzeniach mobilnych. Pojawiają się również w recepturze skalowania złożonego (compound scaling) EfficientNet, udowadniając, że uwaga kanałów (channel attention) nie jest luksusem zarezerwowanym dla potężnych serwerów, lecz praktycznym narzędziem efektywnego projektowania.
Jeśli chcesz zobaczyć, jak niewiele kodu to faktycznie wymaga, demo na żywo rozbija blok na poszczególne linie:
- Live demo: https://dev48v.infy.uk/dl/day40-squeeze-excitation.html
- Full build walkthrough: https://dev.to/dev48v/squeeze-and-excitation-from-scratch-cheap-channel-attention-that-learns-which-feature-maps-matter-1hic
A jeśli budujesz wraz ze społecznością: https://t.me/GyaanSetuAi
Najważniejszy wniosek
Lepsze modele wizyjne nie zawsze wymagają głębszych stosów lub szerszych filtrów. Czasami potrzebują po prostu chwili, aby zapytać, które kanały są faktycznie istotne dla obrazu znajdującego się przed nimi. Squeeze-and-Excitation daje im tę chwilę, wykorzystując jedynie uśredniony pooling, skompresowane MLP i bramkę sigmoid. Wynikiem jest sieć, która przestaje wykrzykiwać każdą cechę z tą samą głośnością, a zamiast tego uczy się szeptać, podkreślać lub wyciszać każdy kanał dokładnie wtedy, gdy wymaga tego scena.
