Niedawno przeczytałem w pełni sieci konwergentne dla segmentacji semantycznej autorstwa Jonathana Longa, Evana Shelhamera, Trevora Darrella. Nie rozumiem, co robią „warstwy dekonwolucyjne” / jak działają.
Odpowiednia część to
3.3 Upsampling jest konwertowanym krokiem wstecz
Innym sposobem łączenia gruboziarnistych wyjść z gęstymi pikselami jest interpolacja. Na przykład prosta interpolacja dwuliniowa oblicza każde wyjście z najbliższych czterech danych wejściowych za pomocą mapy liniowej, która zależy tylko od względnych pozycji komórek wejściowych i wyjściowych. W pewnym sensie upsampling ze współczynnikiem jest splotem z ułamkiem wejściowym kroku 1 / f. Tak długo, jak jest całką, naturalnym sposobem na upsamplowanie jest zatem splot wsteczny (czasami nazywany dekonwolucją) z krokiem wyjściowym . Taka operacja jest trywialna do wdrożenia, ponieważ po prostu odwraca postępy splotu do przodu i do tyłu. f f f
W ten sposób upsampling wykonywany jest w sieci w celu kompleksowego uczenia się przez propagację wsteczną po utracie pikseli.
Zauważ, że filtr dekonwolucji w takiej warstwie nie musi być ustalony (np. Do dwuliniowego upsamplingu), ale można się go nauczyć. Stos warstw dekonwolucji i funkcji aktywacyjnych może nawet nauczyć się nieliniowego próbkowania w górę.
W naszych eksperymentach okazało się, że upsampling wewnątrz sieci jest szybki i skuteczny w nauce gęstego przewidywania. Nasza najlepsza architektura segmentacji wykorzystuje te warstwy do nauki próbkowania w celu uzyskania dokładniejszych prognoz w Rozdziale 4.2.
Nie sądzę, że naprawdę zrozumiałem, w jaki sposób trenowane są warstwy splotowe.
Wydaje mi się, że zrozumiałem, że warstwy splotowe z wielkością jądra uczą się filtrów wielkości . Dane wyjściowe warstwy splotowej o rozmiarze jądra , kroku i filtrach mają wymiary . Nie wiem jednak, jak działa uczenie się warstw splotowych. (Rozumiem, jak proste MLP uczą się z opadaniem gradientu, jeśli to pomaga).k × k k s ∈ N n Wejście dim
Więc jeśli moje rozumienie warstw splotowych jest prawidłowe, nie mam pojęcia, jak można to odwrócić.
Czy ktoś mógłby mi pomóc zrozumieć warstwy dekonwolucyjne?
źródło
Odpowiedzi:
Warstwa dekonwolucji jest bardzo niefortunną nazwą i należy ją raczej nazwać transponowaną warstwą splotową .
Wizualnie, dla transponowanego splotu z krokiem pierwszym i bez dopełniania, po prostu wypełniamy oryginalne wejście (niebieskie wpisy) zerami (białe wpisy) (Rysunek 1).
W przypadku kroku drugiego i wypełnienia transponowany splot wyglądałby tak (Ryc. 2):
Można znaleźć więcej (świetnych) wizualizacji arytmetyki splotowej tutaj .
źródło
Myślę, że jednym ze sposobów uzyskania naprawdę podstawowej intuicji na poziomie splotu jest przesuwanie filtrów K, które można traktować jak szablony K, nad obrazem wejściowym i wytwarzanie aktywacji K - każdy reprezentuje stopień dopasowania do określonego szablonu . Odwrotną operacją tego byłoby wzięcie aktywacji K i rozwinięcie ich w preimage operacji splotu. Intuicyjnym wyjaśnieniem operacji odwrotnej jest zatem z grubsza rekonstrukcja obrazu przy uwzględnieniu szablonów (filtrów) i aktywacji (stopień dopasowania dla każdego szablonu), a zatem na podstawowym poziomie intuicyjnym chcemy wysadzić każdą aktywację za pomocą maski szablonu i dodaj je.
Innym sposobem podejścia do zrozumienia deconv byłoby zbadanie implementacji warstwy dekonwolucji w Caffe, zobacz następujące odpowiednie fragmenty kodu:
Widać, że jest on zaimplementowany w Caffe dokładnie tak, jak backprop dla zwykłej naprzód warstwy splotowej (dla mnie było to bardziej oczywiste po tym, jak porównałem implementację backprop w warstwie cuDNN vs ConvolutionLayer :: Backward_gpu zaimplementowane przy użyciu GEMM). Jeśli więc przeanalizujesz, w jaki sposób wykonuje się propagację wsteczną dla regularnego splotu, zrozumiesz, co dzieje się na poziomie obliczeń mechanicznych. Sposób, w jaki działa to obliczenie, odpowiada intuicji opisanej w pierwszym akapicie tej notki.
Aby odpowiedzieć na inne pytanie w pierwszym pytaniu, istnieją dwie główne różnice między propagacją wsteczną MLP (warstwa w pełni połączona) a sieciami splotowymi:
1) wpływ wag jest zlokalizowany, więc najpierw wymyśl, jak zrobić backprop, powiedzmy, filtr 3x3 splątany z małym obszarem 3x3 obrazu wejściowego, odwzorowując go do pojedynczego punktu na obrazie wynikowym.
2) wagi filtrów splotowych są wspólne dla niezmienności przestrzennej. W praktyce oznacza to, że w przebiegu do przodu ten sam filtr 3x3 o tych samych wagach jest przeciągany przez cały obraz z tymi samymi wagami do obliczeń w przód w celu uzyskania obrazu wyjściowego (dla tego konkretnego filtra). Oznacza to, że gradienty wsteczne dla każdego punktu na obrazie źródłowym są sumowane w całym zakresie, który przeciągnęliśmy ten filtr podczas przejścia do przodu. Zauważ, że istnieją również różne gradienty strat wrt x, w i stronniczości, ponieważ dLoss / dx wymaga uprzedniej propagacji, a dLoss / dw to sposób, w jaki aktualizujemy wagi. w i stronniczość są niezależnymi danymi wejściowymi w obliczeniach DAG (nie ma wcześniejszych danych wejściowych), więc nie ma potrzeby przeprowadzania na nich propagacji wstecznej.
źródło
Matematyka krok po kroku wyjaśniająca, w jaki sposób transpozycja splotu robi 2x upsampling z filtrem 3x3 i krok 2:
Najprostszy fragment kodu TensorFlow do sprawdzania poprawności matematyki:
źródło
Te notatki, które towarzyszą Stanford CS klasy CS231n : splotowego sieci neuronowych do wizualnego rozpoznawania, Andrej Karpathy , zrobić doskonałą pracę wyjaśniając splotowych sieci neuronowych.
Czytanie tego artykułu powinno dać ci ogólny pogląd na:
Te slajdy są idealne dla sieci Deconvolutional.
źródło
Właśnie znalazłem świetny artykuł na stronie theaon na ten temat [1]:
Mówiąc w skrócie, „transponowany splot” jest operacją matematyczną z wykorzystaniem macierzy (podobnie jak splot), ale jest bardziej wydajny niż normalna operacja splotu w przypadku, gdy chcesz powrócić od splotu wartości do pierwotnego (przeciwnego kierunku). Dlatego w implementacjach preferuje się splot podczas obliczania kierunku przeciwnego (tj. Aby uniknąć wielu niepotrzebnych zwielokrotnień 0 spowodowanych przez rzadką macierz wynikającą z wypełniania danych wejściowych).
Image ---> convolution ---> Result
Result ---> transposed convolution ---> "originalish Image"
Czasami zapisujesz niektóre wartości wzdłuż ścieżki splotu i ponownie używasz tych informacji podczas „powrotu”:
Result ---> transposed convolution ---> Image
To prawdopodobnie powód, dla którego błędnie nazywa się to „dekonwolucją”. Ma to jednak coś wspólnego z transponowaniem macierzy splotu (C ^ T), stąd bardziej odpowiednia nazwa „transpozycja splotu”.
Rozważanie kosztów obliczeniowych ma więc sens. Za amazon gpus zapłaciłbyś dużo więcej, gdybyś nie używał transponowanego splotu.
Przeczytaj uważnie animacje tutaj: http://deeplearning.net/software/theano_versions/dev/tutorial/conv_arithmetic.html#no-zero-padding-unit-strides-transposed
Kilka innych istotnych lektur:
Jestem również nowy w tym względzie i byłbym wdzięczny za wszelkie opinie lub poprawki.
[1] http://deeplearning.net/software/theano_versions/dev/tutorial/conv_arithmetic.html
[2] http://deeplearning.net/software/theano_versions/dev/tutorial/conv_arithmetic.html#transposed-convolution-arithmetic
[3] https://en.wikipedia.org/wiki/Mched_filter
źródło
Przydałoby się PCA do analogii.
W przypadku korzystania z konw. Przejście do przodu służy do wyodrębnienia współczynników składników zasadowych z obrazu wejściowego, a przejście do tyłu (które aktualizuje dane wejściowe) polega na wykorzystaniu (gradientu) współczynników do odtworzenia nowego obrazu wejściowego, tak aby nowy obraz wejściowy ma współczynniki PC, które lepiej pasują do pożądanych współczynników.
Podczas używania deconv przejście do przodu i przejście do tyłu są odwrócone. Przebieg do przodu próbuje zrekonstruować obraz ze współczynników PC, a przejście do tyłu aktualizuje współczynniki PC na podstawie (gradientu) obrazu.
Przełożenie do przodu deconv wykonuje dokładnie obliczenia gradientu konwekcyjnego podane w tym poście: http://andrew.gibiansky.com/blog/machine-learning/convolutional-neural-networks/
Właśnie dlatego w implementacji deconv w kofeinie (patrz odpowiedź Andrieja Pokrovsky'ego) przekazanie w przód deconv wywołuje backward_cpu_gemm (), a przekazywanie w tył wywołuje forward_cpu_gemm ().
źródło
Oprócz odpowiedzi Davida Dao: można również pomyśleć na odwrót. Zamiast skupiać się na tym, które piksele wejściowe (niskiej rozdzielczości) są używane do wytworzenia pojedynczego piksela wyjściowego, możesz również skupić się na tym, które poszczególne piksele wejściowe przyczyniają się do tego, który region pikseli wyjściowych.
Odbywa się to w tej destylowanej publikacji , w tym w serii bardzo intuicyjnych i interaktywnych wizualizacji. Jedną z zalet myślenia w tym kierunku jest to, że wyjaśnianie artefaktów szachownicy staje się łatwe.
źródło
Zwoje z perspektywy DSP
Trochę się spóźniłem, ale nadal chciałbym podzielić się moją perspektywą i spostrzeżeniami. Moje wykształcenie to fizyka teoretyczna i cyfrowe przetwarzanie sygnałów. W szczególności badałem falki i zwoje są prawie w moim kręgosłupie;)
Sposób, w jaki ludzie ze społeczności zajmującej się głębokim uczeniem się mówią o zwojach, również mnie dezorientował. Z mojej perspektywy wydaje się, że brakuje właściwego podziału problemów. Wyjaśnię splot głębokiego uczenia się przy użyciu niektórych narzędzi DSP.
Zrzeczenie się
Moje wyjaśnienia będą nieco faliste, a nie matematyczne rygorystyczne, aby uzyskać główne punkty.
Definicje
i
Rozwinięcia dogłębnego uczenia się według części
Jak widać, transponowana jest operacja, stąd nazwa.
Połączenie z próbkowaniem do najbliższego sąsiada
tzn. możemy zastąpić powtarzający się upsampler współczynnikiem 2 i splot jądrem o rozmiarze 3 transponowanym splotem o rozmiarze jądra 4. Ten transponowany splot ma tę samą „zdolność interpolacji”, ale byłby w stanie nauczyć się lepiej dopasowanych interpolacji.
Wnioski i uwagi końcowe
Mam nadzieję, że uda mi się wyjaśnić niektóre powszechne sploty, które można znaleźć w głębokim uczeniu się, dzieląc je na części w podstawowych operacjach.
Nie omawiałem tu basenów. Jest to jednak nieliniowy próbnik próbkujący w dół i można go również traktować w ramach tej notacji.
źródło
Miałem wiele problemów ze zrozumieniem, co dokładnie wydarzyło się w gazecie, dopóki nie natknąłem się na ten post na blogu: http://warmspringwinds.github.io/tensorflow/tf-slim/2016/11/22/upsampling-and-image-segmentation -z -tensorflow-and-tf-slim /
Oto podsumowanie tego, jak rozumiem, co dzieje się w 2x próbkowaniu w górę:
Informacje z papieru
Prosty przykład
źródło
Poniższy artykuł omawia warstwy dekonwolucyjne, zarówno z punktu widzenia architektury, jak i szkolenia. Sieci dekonwolucyjne
źródło