Znaczenie lokalnej normalizacji odpowiedzi w CNN

41

Odkryłem, że Imagenet i inne duże CNN korzystają z lokalnych warstw normalizacji odpowiedzi. Nie mogę jednak znaleźć tylu informacji na ich temat. Jak ważne są i kiedy należy je stosować?

From http://caffe.berkeleyvision.org/tutorial/layers.html#data-layers :

„Lokalna warstwa normalizacyjna odpowiedzi dokonuje pewnego rodzaju„ bocznego hamowania ”poprzez normalizację w lokalnych regionach wejściowych. W trybie ACROSS_CHANNELS, lokalne regiony rozciągają się w pobliskich kanałach, ale nie mają zasięgu przestrzennego (tzn. Mają kształt rozmiar_lokalny x 1 x 1) W trybie WITHIN_CHANNEL, lokalne regiony rozszerzają się przestrzennie, ale są w osobnych kanałach (tj. Mają kształt 1 x rozmiar_lokalny x rozmiar_lokalny). Każda wartość wejściowa jest dzielona przez (1+ (α / n) ∑ix2i) β, gdzie n to rozmiar każdego regionu lokalnego, a suma jest przejmowana na region wyśrodkowany na tej wartości (w razie potrzeby dodawane jest zerowanie). ”

Edytować:

Wydaje się, że tego rodzaju warstwy mają minimalny wpływ i nie są już używane. Zasadniczo ich rola została pokonana przez inne techniki regularyzacji (takie jak rezygnacja i normalizacja partii), lepsze inicjalizacje i metody treningowe. Zobacz moją odpowiedź poniżej, aby uzyskać więcej informacji.

pir
źródło

Odpowiedzi:

20

Wydaje się, że tego rodzaju warstwy mają minimalny wpływ i nie są już używane. Zasadniczo ich rola została pokonana przez inne techniki regularyzacji (takie jak rezygnacja i normalizacja partii), lepsze inicjalizacje i metody treningowe. Oto, co napisano w notatkach do wykładu na kurs Stanford CS321n w ConvNets:

Warstwa normalizacyjna

Zaproponowano wiele rodzajów warstw normalizacyjnych do zastosowania w architekturach ConvNet, czasem z intencją wdrożenia schematów hamowania obserwowanych w mózgu biologicznym. Jednak warstwy te ostatnio przestały być przychylne, ponieważ w praktyce wykazano, że ich wkład jest minimalny, jeśli w ogóle. Różne typy normalizacji można znaleźć w dyskusji w API biblioteki biblioteki cuda-convnet Alexa Kriżewskiego.

pir
źródło
20

Rzeczywiście wydaje się, że nie ma dobrego wyjaśnienia w jednym miejscu. Najlepiej jest przeczytać artykuły, skąd pochodzą:

Oryginalny artykuł AlexNet wyjaśnia trochę w rozdziale 3.3:

  • Krizhevsky, Sutskever i Hinton, Klasyfikacja ImageNet z głębokimi konwencjalnymi sieciami neuronowymi, NIPS 2012. pdf

Dokładny sposób zrobienia tego został zaproponowany w (ale niewiele dodatkowych informacji tutaj):

  • Kevin Jarrett, Koray Kavukcuoglu, Marc'Aurelio Ranzato i Yann LeCun, Jaka jest najlepsza architektura wieloetapowa do rozpoznawania obiektów ?, ICCV 2009. pdf

Inspiracją była neuronauka obliczeniowa:

  • S. Lyu i E. Simoncelli. Nieliniowa reprezentacja obrazu z wykorzystaniem normalizacji dzielącej. CVPR 2008. pdf . Ten artykuł zagłębia się w matematykę i jest zgodny z odpowiedzią seanv507.
  • [24] N. Pinto, DD Cox i JJ DiCarlo. Dlaczego rozpoznawanie obiektów rzeczywistych jest trudne? PLoS Computational Biology, 2008.
Jasper Uijlings
źródło
15

Oto moja sugerowana odpowiedź, chociaż nie twierdzę, że mam wiedzę. Podczas wykonywania zniżania gradientu na modelu liniowym powierzchnia błędu jest kwadratowa, a krzywizna jest określana przez , gdzie jest Twoim wprowadzeniem. Teraz idealna powierzchnia błędu lub zejście gradientu ma tę samą krzywiznę we wszystkich kierunkach (w przeciwnym razie wielkość kroku jest zbyt mała w niektórych kierunkach i zbyt duża w innych). Normalizacja danych wejściowych poprzez przeskalowanie danych wejściowych w celu oznaczenia zera, wariancja 1 pomaga i jest szybka: teraz kierunki wzdłuż każdego wymiaru mają tę samą krzywiznę, co z kolei ogranicza krzywiznę w innych kierunkach. XXXTX

Optymalnym rozwiązaniem byłoby sferowanie / wybielanie danych wejściowych do każdego neuronu, jednak jest to zbyt drogie obliczeniowo. LCN można uzasadnić jako przybliżone wybielanie oparte na założeniu wysokiego stopnia korelacji między sąsiednimi pikselami (lub kanałami). Więc twierdzę, że korzyścią jest to, że powierzchnia błędu jest bardziej łagodna dla SGD ... Pojedyncza szybkość uczenia się działa dobrze w poprzek wymiarów wejściowych (każdego neuronu)

seanv507
źródło
2
Normalizacja partii: przyspieszenie głębokiego szkolenia w sieci poprzez zmniejszenie wewnętrznej zmiany współzmiennej Sergey Ioffe, Christian Szegedy, arxiv.org/abs/1502.03167 (starannie zaprojektowane) przeskalowanie danych wejściowych neuronów i osiągnięcie znacznego przyspieszenia dzięki możliwości korzystania z większych szybkości uczenia się.
seanv507
Możesz edytować te informacje w swojej odpowiedzi za pomocą przycisku edycji pod tekstem odpowiedzi.
Przywróć Monikę
10

Tą odpowiedzią chciałbym podsumować uwagi innych autorów i przedstawić wyjaśnienie techniki LRN (lub kontrastowej normalizacji) w jednym miejscu dla tych, którzy chcą tylko wiedzieć, co to jest i jak działa.

Motywacja:Ten rodzaj normalizacji odpowiedzi (LRN) wprowadza formę bocznego hamowania zainspirowanego typem występującym w prawdziwych neuronach, tworząc konkurencję dla dużych aktywności między wyjściami neuronów obliczanymi przy użyciu różnych jąder. AlexNet 3.3

Innymi słowy, LRN pozwala zmniejszyć odpowiedzi, które są jednorodnie duże dla sąsiedztwa i uczynić większą aktywację bardziej wyraźną w sąsiedztwie, tj. Stworzyć większy kontrast na mapie aktywacji. prateekvjoshi.com stwierdza, że ​​jest szczególnie przydatny w przypadku nieograniczonych funkcji aktywacyjnych jako RELU.

Oryginalna formuła: Dla każdej konkretnej pozycji (x, y) i jądra i, które odpowiadają pojedynczemu wyjściu „piksela”, stosujemy „filtr”, który zawiera informacje o wynikach innych n jąder zastosowanych do tej samej pozycji. Tę regularyzację stosuje się przed funkcją aktywacji. Ta regularyzacja rzeczywiście opiera się na kolejności jąder, co według mojej najlepszej wiedzy jest po prostu niefortunnym zbiegiem okoliczności.

LRN

W praktyce (patrz Caffe ) można zastosować 2 podejścia:

  1. WITHIN_CHANNEL. Normalizuj ponad lokalnym otoczeniem jednego kanału (odpowiadającego jednemu filtrowi splotowemu). Innymi słowy, podziel odpowiedź jednego kanału jednego piksela zgodnie z wartościami wyjściowymi tego samego neuronu dla pikseli w pobliżu.
  2. ACROSS_CHANNELS. Dla pojedynczego piksela znormalizuj wartości każdego kanału zgodnie z wartościami wszystkich kanałów dla tego samego piksela

Rzeczywiste użycie LRN było używane częściej w dniach wczesnych konwetów, takich jak LeNet-5. Obecna implementacja GoogLeNet (Inception) w Caffe często wykorzystuje LRN w połączeniu z technikami łączenia, ale wydaje się, że jest to zrobione ze względu na samą jego posiadanie. Ani oryginalny Inception / GoogLeNet ( tutaj ), ani żadna z poniższych wersji nie wspomina w żaden sposób o LRN. Ponadto implementacja TensorFlow dla Inception (dostarczona i zaktualizowana przez zespół oryginalnych autorów) nie korzysta z LRN, mimo że jest dostępna.

Wniosek Zastosowanie LRN wraz z warstwą puli nie zaszkodzi wydajności sieci, o ile wartości hiperparametrów są rozsądne. Mimo to nie znam żadnego niedawnego uzasadnienia dla zastosowania normalizacji LRN / kontrastu w sieci neuronowej.

y.selivonchyk
źródło
Dodałbym również, że LRN jest rodzajem „konkurencyjnej normalizacji”, zgodnie ze stroną 374 w Géron, Aurélien. Praktyczne uczenie maszynowe dzięki Scikit-Learn i TensorFlow: koncepcje, narzędzia i techniki do budowy inteligentnych systemów. „O'Reilly Media, Inc.”, 2017 . (Wspominam o tym, ponieważ ponieważ Hinton nazywa to „normalizacją konkurencyjną” w wykładzie Sieci konwergentne do rozpoznawania obiektów na swoim kursie)
Oren Milman,
7

Warstwa typu Lokalna Normalizacja Reakcji (LRN) okazuje się przydatna przy stosowaniu neuronów z nieograniczonymi aktywacjami (np. Rektyfikowanymi neuronami liniowymi), ponieważ pozwala na wykrycie cech wysokiej częstotliwości z dużą odpowiedzią neuronową, przy równoczesnym tłumieniu odpowiedzi, które są jednakowo duże w lokalnej okolicy. Jest to rodzaj regulizatora, który zachęca do „rywalizacji” o duże aktywności wśród pobliskich grup neuronów.

src- https://code.google.com/p/cuda-convnet/wiki/LayerParams#Local_response_normalization_layer_(same_map)

vivkul
źródło
0

Lokalna normalizacja odpowiedzi (LRN) odbywa się w pikselach dla każdego kanału :i

xi=xi(k+(αjxj2))β

gdzie są stałymi. Zauważ, że otrzymasz normalizację L2, jeśli ustawisz , , . κ = 0 α = 1 β = 1k,α,βRκ=0α=1β=12

Istnieje jednak znacznie nowsza technika zwana „normalizacją wsadową” (patrz artykuł ), która działa dość podobnie i sugeruje, aby nie używać już LRN. Normalizacja partii działa również w pikselach:

y=xμσ2+ϵγ+β

gdzie to średnia, to wariancja, to mała stała, to parametry, których można się nauczyć, które pozwalają sieci usunąć normalizację.σ 2 ε > 0 γ , β Rμσ2ε>0γ,βR

Odpowiedź brzmi: lokalna normalizacja odpowiedzi nie jest już ważna, ponieważ mamy coś, co działa lepiej i zastąpiliśmy LRN: normalizacja partii.

Zobacz też

Martin Thoma
źródło
Myślę, że to nie jest poprawne. LRN jest stosowany na wyjściu jądra, a nie na wejściu (chociaż Alexnet używa normalizacji wejścia, ale to osobne).
Shital Shah