Co oznacza splot 1x1 w sieci neuronowej?

106

Obecnie prowadzę samouczek dogłębnej nauki Udacity. W lekcji 3 rozmawiają o zwoju 1x1. Ten splot 1x1 jest używany w module Google Inception. Mam problem ze zrozumieniem, czym jest splot 1x1.

Widziałem również ten post przez Yann Lecun.

Czy ktoś mógłby mi to wyjaśnić?

jkschin
źródło
Zobacz także powiązane pytanie
gkcn
1
Oto post na blogu na temat tych modułów, który został szczegółowo opisany na temat zwojów 1x1: hackathonprojects.wordpress.com/2016/09/25/...
Tommy
1
Mówiąc najprościej, cały pomysł polega na zmniejszeniu liczby kanałów w objętości 3D, co przyspieszy obliczenia.
onerhao

Odpowiedzi:

113

(N,F,H,W)

  • N
  • F
  • H,W

F1(N,F1,H,W)

F1>FF1<F

Rzeczywiście w artykule Google Inception Going Deep with Convolutions stwierdzają (pogrubienie jest moje, a nie oryginalnych autorów):

Jednym z dużych problemów z powyższymi modułami, przynajmniej w tej naiwnej formie, jest to, że nawet niewielka liczba zwojów 5x5 może być wyjątkowo droga na warstwie splotowej z dużą liczbą filtrów.

Prowadzi to do drugiego pomysłu proponowanej architektury: rozważnego zastosowania redukcji wymiarów i rzutów wszędzie tam, gdzie wymagania obliczeniowe wzrosłyby zbytnio w przeciwnym razie. Opiera się to na sukcesie osadzania: nawet osadzanie w małych wymiarach może zawierać wiele informacji o stosunkowo dużej poprawce obrazu ... Zwinięcia 1x1 są używane do obliczania redukcji przed kosztownymi zwójami 3x3 i 5x5. Oprócz tego, że są stosowane jako redukcje, obejmują także zastosowanie rektyfikacji liniowej aktywacji, co czyni je podwójnymi.

Dlatego w architekturze Inception używamy filtrów splotowych 1x1 w celu zmniejszenia wymiarów w wymiarze filtra. Jak wyjaśniono powyżej, te warstwy konwekcyjne 1x1 mogą być ogólnie używane do zmiany wymiarów przestrzeni filtru (zwiększania lub zmniejszania), aw architekturze Incepcji widzimy, jak skuteczne mogą być te filtry 1x1 do zmniejszania wymiarów, wyraźnie w przestrzeni wymiarów filtra , a nie przestrzenna przestrzeń wymiarów.

Być może istnieją inne interpretacje filtrów konwekcyjnych 1x1, ale wolę to wyjaśnienie, szczególnie w kontekście architektury Google Inception.

Indie AI
źródło
3
Czy to dlatego, że konwój 1x1 kompresuje poprzedni wymiar filtru do 1, przed implementacją konwekcji 5x5?
Leonard Loo,
1
@LeonardLoo każde jądro 1x1 zmniejsza wymiar filtra do 1, ale możesz mieć wiele jąder w jednym zwoju 1x1, więc liczba „filtrów” może być dowolna.
Fazzolini,
43

Splot 1x1 po prostu odwzorowuje piksel wejściowy ze wszystkimi swoimi kanałami na piksel wyjściowy, nie patrząc na nic wokół siebie. Często stosuje się go w celu zmniejszenia liczby kanałów głębokości, ponieważ często bardzo powolne jest pomnażanie objętości z bardzo dużymi głębokościami.

input (256 depth) -> 1x1 convolution (64 depth) -> 4x4 convolution (256 depth)

input (256 depth) -> 4x4 convolution (256 depth)

Dolny jest około ~ 3,7x wolniejszy.

Teoretycznie sieć neuronowa może „wybrać”, które wejście „kolory”, aby na to spojrzeć, zamiast brutalnej siły mnożącej wszystko.

Bezpłatny Debreuil
źródło
19
Powiedziałbym, że 1x1 odwzorowuje nie tylko jeden piksel na piksel wyjściowy, ale łączy wszystkie kanały pikseli wejściowych do jednego piksela. W twoim przykładzie w pierwszym wierszu jest 256 kanałów wejściowych, a każde z 64 jąder 1x1 zwalnia wszystkie 256 kanałów wejściowych do jednego „piksela” (liczba rzeczywista). W rezultacie masz teraz 64 kanały zamiast 256 z tym samym wymiarem przestrzennym, co sprawia, że ​​splot 4x4 jest obliczeniowo tańszy niż w przykładzie z drugiej linii.
Fazzolini,
Dobra uwaga, zaktualizuję post :)
Darmowy Debreuil
3
Skąd masz 3,7x wolniej?
CMCDragonkai
@CMCDragonkai Załóżmy, że koszt obliczeń jest proporcjonalny do liczby wag. W późniejszym przypadku num_weights = in_depth x out_depth x kernel_size = 256x256x4x4. W pierwszym przypadku num_weights = 256x64x1x1+64x265x4x4=256x64x17. Weź stosunek, a to daje 256/17 ~ 3.7. Sprawdź tę papierową stronę 9, aby uzyskać wizualizację powiązania wag liczbowych z głębokością wejściową i głębokością wyjściową. arxiv.org/pdf/1603.07285.pdf
Nelson Dinh
11

any

https://datascience.stackexchange.com/questions/9175/how-do-subsequent-convolution-layers-work

W szczególności typ 2.2 jest tam poprawnym opisem splotu.

Kolejna pomocna odpowiedź:

https://ai.stackexchange.com/questions/5769/in-a-cnn-does-each-new-filter-have-different-weights-for-each-input-channel-or

Ta odpowiedź wyjaśnia, w jaki sposób masz oddzielny filtr dla każdej kombinacji kanałów wejścia / wyjścia . Po obliczeniu każdego z nich wyniki są sumowane na osi kanału wejściowego, pozostawiając z liczbą kanałów wyjściowych wartość.

Oto znalezione wideo, które pomogło mi zrozumieć, jak działa splot 1x1.

https://www.coursera.org/lecture/convolutional-neural-networks/networks-in-networks-and-1x1-convolutions-ZTb8x

Oto najważniejsze rzeczy, które z tego wyciągnąłem:

  • mnf1(m,n,f1)f1mnf2(m,n,f2)
  • f2<f1f1f2
Simon Alford
źródło
(m,n,f1)
3

Spróbuję wyjaśnić bardziej intuicyjnie i w skrócie ilustracjami!

Konwój 1 * 1 (inaczej sieć w sieci )?

powiedzmy, że wpisujesz to (n_H, n_W, n_c_prev). Możesz myśleć o (1 * 1 * n_c_prev) jak o pojedynczym neuronie (w pełni połączonej sieci - dlaczego N / W w N / W ), który przyjmuje (n_c_prev) liczby na wejściu, mnożąc je przez (1 * 1 * n_c_prev ), a następnie dodawanie, a następnie pobieranie ReLu i danych wyjściowych (n_H, n_W), a jeśli masz wiele filtrów (n_c), wówczas dane wyjściowe to (n_H, n_W, n_C).

Możesz więc użyć warstwy puli, aby zmniejszyć wymiary przestrzenne (n_H, n_W) i możesz użyć konwekcji 1 * 1, aby zredukować n_c_prev (tj. Liczbę kanałów), co pozwala zaoszczędzić wiele obliczeń. Na przykład

wprowadź opis zdjęcia tutaj

Dlatego wynos

  • Możesz użyć warstwy splotowej 1x1, aby zmniejszyć n_C, ale nie n_H, n_W.

  • Możesz użyć warstwy puli, aby zredukować n_H, n_W i n_C.

Innymi słowy, wprowadź opis zdjęcia tutaj

  • co robisz przy użyciu filtra CONV 1 * 1? w zasadzie bierzesz wagi „1 * 1 * num_input_channel_of_featureMap” i zwojach (elementualnie *, a następnie +) ten wolumin nad obrazem / featureMap o rozmiarze „W H num_input_channel_of_featureMap”, a otrzymujesz wynik o rozmiarze „W * H”.

  • Teraz możesz użyć numeru „# filtrów” tego rodzaju „1 * 1 * num_input_channel_of_featureMap” i uzyskać objętość „W H #filter” jako ostateczne wyjście!

  • Dokładniej mówiąc, mnożymy „1 * 1”, takie jak 32 różne wagi (objętość 1 * 1), z jednym wycinkiem w tej samej pozycji na wejściowej mapie obiektów, a następnie ReLu i otrzymujemy pojedynczy odpowiadający numer, widziany jako piksel koloru zielonego !

  • 1 * 1 CONV pomaga zmniejszyć liczbę kanałów i zaoszczędzić na obliczeniach w niektórych sieciach (INCEPTIONS).!

  • Ale oczywiście, jeśli chcesz zachować liczbę kanałów na tym samym poziomie, co na mapie obiektów wejściowych, to też w porządku, jedyną rzeczą, którą robi CONV 1 * 1 jest proste zastosowanie do niej nieliniowości ReLU, która pozwala na naukę złożonych funkcji w NN .

anu
źródło
1

Jeszcze jeden pomysł na zmniejszenie wymiarów w kontekście filtrów 1x1:

Weźmy na przykład warstwę FCC o wymiarach 4096 x 8 x 8 FC7. Co się stanie, jeśli następna warstwa (nazywana fc8) ma wymiary 2048 x 8 x 8 z filtrem o rozmiarze 1? fc7 jest bardzo głęboko w sieci, każda z jego cech 4096 jest semantycznie bogata, ale każdy neuron (np. obraz wejściowy to 250 x 250 x 3) ma duże pole odbiorcze. Innymi słowy, jeśli neuron jest bardzo aktywny, wiemy, że gdzieś w jego polu semantycznym występuje odpowiednia cecha.

Weźmy na przykład lewy najwyższy neuron w fc8 z filtrem 1x1. Łączy się ze wszystkimi 4096 neuronami / cechami tylko w tym samym polu odbiorczym (lewy górny róg obrazu), z których każdy jest aktywowany przez jedną cechę. Niektóre (tak samo 500) z nich są bardzo aktywne. Jeśli powstały neuron jest również bardzo aktywny, oznacza to prawdopodobnie, że nauczył się rozpoznawać 1 lub więcej cech w tym polu recepcyjnym. Po zrobieniu tego 2048 razy dla neuronów położonych najwyżej w fc8, całkiem sporo z nich (np. 250) będzie bardzo aktywnych, co oznacza, że ​​„zebrali” cechy z tego samego pola recepcyjnego przez fc7, a wiele z nich prawdopodobnie więcej niż jeden.

Jeśli nadal zmniejszasz wymiarowość, malejąca liczba neuronów będzie uczyć się coraz większej liczby funkcji z tego samego pola recepcyjnego. A ponieważ parametry przestrzenne 8x8 pozostają takie same, nie zmieniamy „widoku” każdego neuronu, a tym samym nie zmniejszamy szorstkości przestrzennej.

Może warto zajrzeć do „W pełni konwergentnych sieci” Longa, Shelhamera i Darrela.

Alex
źródło
1
Myślę , że jest to kolejna dobra intuicja mechanizmu, ale muszę do niego wrócić, ponieważ uważam, że notacja wymiarów jest myląca, a zwłaszcza „po tym, jak zrobiłeś to 2048 razy na lewą górę neurony w fc8 ”.
WillC
Nie bardzo rozumiałem, co próbujesz powiedzieć, czy mógłbyś to wyjaśnić?
Michael Heidelberg,
0

Matematyczne działanie splotu oznacza obliczenie iloczynu dwóch (ciągłych lub dyskretnych) funkcji dla wszystkich możliwych pozycji przesunięcia.

v×v

Aplikacje przetwarzania obrazu sieci neuronowych - w tym sieci neuronowe splotowe - zostały poddane przeglądowi w: [M. Egmont-Petersen, D. de Ridder, H. Handels. Przetwarzanie obrazu za pomocą sieci neuronowych - przegląd , Rozpoznawanie wzorców , t. 35, nr 10, str. 2279-2301, 2002].

Match Maker EE
źródło