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ć?
Odpowiedzi:
Rzeczywiście w artykule Google Inception Going Deep with Convolutions stwierdzają (pogrubienie jest moje, a nie oryginalnych autorów):
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.
źródło
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.
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.
źródło
num_weights = in_depth x out_depth x kernel_size = 256x256x4x4
. W pierwszym przypadkunum_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.pdfhttps://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:
źródło
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
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,
źródło
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.
źródło
Matematyczne działanie splotu oznacza obliczenie iloczynu dwóch (ciągłych lub dyskretnych) funkcji dla wszystkich możliwych pozycji przesunięcia.
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].
źródło