Konwolucyjne sieci neuronowe: czy neurony centralne nie są nadmiernie reprezentowane na wyjściu?


30

[To pytanie zadawano również przy przepełnieniu stosu]

Pytanie w skrócie

Badam splotowe sieci neuronowe i uważam, że sieci te nie traktują każdego neuronu wejściowego (piksela / parametru) w sposób równoważny. Wyobraź sobie, że mamy głęboką sieć (wiele warstw), która stosuje splot na niektórych obrazach wejściowych. Neurony w „środku” obrazu mają wiele unikalnych ścieżek do wielu neuronów głębszej warstwy, co oznacza, że ​​niewielka zmiana w neuronach środkowych ma silny wpływ na wynik. Jednak neurony na krawędzi obrazu mają tylko ścieżkę (lub, w zależności od dokładnej implementacji, rzędu 1 ) ścieżek, w których ich informacje przepływają przez wykres. Wydaje się, że są one „niedostatecznie reprezentowane”.11

Martwię się tym, ponieważ ta dyskryminacja neuronów brzegowych skaluje się wykładniczo wraz z głębokością (liczbą warstw) sieci. Nawet dodanie warstwy maksymalnej puli nie zahamuje wykładniczego wzrostu, tylko pełne połączenie zapewnia wszystkim neuronom równość. Nie jestem jednak przekonany, że moje rozumowanie jest prawidłowe, więc moje pytania są następujące:

  • Czy mam rację, że ten efekt ma miejsce w głębokich sieciach splotowych?
  • Czy jest na to jakaś teoria, czy kiedykolwiek była o niej wspominana w literaturze?
  • Czy są sposoby na pokonanie tego efektu?

Ponieważ nie jestem pewien, czy daje to wystarczające informacje, przedstawię nieco więcej informacji na temat problemu i dlaczego uważam, że jest to problem.

Bardziej szczegółowe wyjaśnienie

Wyobraź sobie, że mamy głęboką sieć neuronową, która pobiera obraz jako dane wejściowe. Załóżmy, że stosujemy filtr splotowy pikseli na obrazie, w którym za każdym razem przesuwamy okno splotu o 4 piksele. Oznacza to, że każdy neuron na wejściu wysyła swoją aktywację do 16 × 16 = 265 neuronów w warstwie 2 . Każdy z tych neuronów może wysłać swoją aktywację do innego 265 , tak że nasz najwyższy neuron jest reprezentowany w 265 2 neuronach wyjściowych i tak dalej.64×64416×16=26522652652

Nie dotyczy to jednak neuronów na krawędziach: mogą one być reprezentowane tylko w niewielkiej liczbie okien splotu, co powoduje, że aktywują one (rzędu) tylko neuron w następnej warstwie. Zastosowanie sztuczek, takich jak odbicie lustrzane wzdłuż krawędzi, nie pomoże: neurony drugiej warstwy, które będą rzutowane, wciąż znajdują się na krawędziach, co oznacza, że ​​neurony drugiej warstwy będą niedostatecznie reprezentowane (ograniczając w ten sposób znaczenie nasze neurony krawędziowe). Jak widać, ta rozbieżność skaluje się wykładniczo wraz z liczbą warstw.1

Stworzyłem obraz, aby zwizualizować problem, który można znaleźć tutaj (nie wolno umieszczać zdjęć w samym poście). Ta sieć ma okno splotu o rozmiarze . Liczby obok neuronów wskazują liczbę ścieżek prowadzących do najgłębszego neuronu. Obraz przypomina Trójkąt Pascala .3

https://www.dropbox.com/s/7rbwv7z14j4h0jr/deep_conv_problem_stackxchange.png?dl=0

Dlaczego to jest problem?

Ten efekt nie wydaje się stanowić problemu na pierwszy rzut oka: Zasadniczo wagi powinny automatycznie dostosowywać się w taki sposób, aby sieć wykonała swoją pracę. Ponadto krawędzie obrazu nie są tak ważne w rozpoznawaniu obrazu. Efekt ten może nie być zauważalny w codziennych testach rozpoznawania obrazu, ale nadal mnie dotyczy z dwóch powodów: 1. uogólnienia na inne aplikacje oraz 2. problemów pojawiających się w przypadku bardzo głębokich sieci.

1. Mogą być inne zastosowania, takie jak rozpoznawanie mowy lub dźwięku, w których nie jest prawdą, że najważniejsze są środkowe neurony. Stosowanie splotu często odbywa się w tej dziedzinie, ale nie znalazłem żadnych dokumentów, które wspominałyby o efekcie, który mnie niepokoi.

1026510

Teraz wyobraź sobie, że zaburzamy wszystkie neurony w niewielkim stopniu. Centralne neurony spowodują, że moc wyjściowa zmieni się silniej o kilka rzędów wielkości, w porównaniu do neuronów krawędziowych. Uważam, że w przypadku ogólnych zastosowań i bardzo głębokich sieci należy znaleźć sposoby na rozwiązanie mojego problemu?


8
Nie mogę w pełni odpowiedzieć na twoje pytanie, ale znalazłem ten artykuł: cs.utoronto.ca/~kriz/conv-cifar10-aug2010.pdf, który dotyczy twojego problemu. Mówią o różnych rozwiązaniach: 1) wypełnianie krawędzi wejściowych zerami, 2) dodawanie losowo połączonych globalnie komponentów, lub 3) ustalanie i propagowanie krawędzi do przodu, aby żadne informacje o krawędziach nie zostały utracone. Ostatnio byłem ciekawy tego samego problemu i znalazłem twoje pytanie. Wciąż brodzę po szczegółach tego artykułu. Mam nadzieję, że to pomoże.
nfmcclure

Dzięki, właśnie tego szukałem! Imponujące, że jest to zauważalne przy zaledwie 2 warstwach. Dla tych TL; DR'ing cały papier: Stwierdzono, że najlepszym rozwiązaniem jest użycie kombinacji 1) (wypełnienie zerowe) i 2) (losowe połączenia globalne).
Koen


Jestem ciekawy, czy to nie wystarczy przy użyciu nie nakładającego się przesunięcia? Tak więc w twoim przykładzie masz łatki 64x64 i za każdym razem przesuwasz wejście 64 pikseli podczas stosowania splotu. (twoje „przesunięcie” jest moim „przesunięciem”). Co, jak sądzę, jest dokładnie takie samo, jak wypełnianie zerami?
Renthal

1
Przepraszam, że przez chwilę nie odpowiadam, nie pracuję już nad NN. Myślę jednak, że mógłbym odpowiedzieć na pytania, chociaż zdaję sobie sprawę, że moim większym celem było lepsze zrozumienie, co się dzieje (czego wciąż nie rozumiem). 1) Wydaje się, że efekt ten rzeczywiście ma miejsce. 2) Dokument, do którego prowadzi link powyżej, opisuje go i 3) analizuje również sposoby jego przezwyciężenia. Do Renthal: Nie nakładające się łatki (wybranie offset = rozmiar konw.) Powinny rzeczywiście rozwiązać mój problem, ale ludzie często znajdują nakładające się łatki, aby działać lepiej. Do EngrStudent, przepraszam, nie jestem zaznajomiony z Resamplingiem Bootstrap.
Koen

Odpowiedzi:


4

Rzadkie reprezentacje są oczekiwane w modelach hierarchicznych. Być może odkrywasz problem związany z hierarchiczną strukturą modeli głębokiego uczenia się. Znajdziesz sporo artykułów naukowych na temat „rzadkich reprezentacji”, szczególnie w badaniach pamięci.

Myślę, że skorzystałbyś na czytaniu o „polach receptorowych” w korze wzrokowej. Nie tylko komórki ON i OFF znajdują się w mózgu ssaków, ale także komórki RF, które strzelają zarówno podczas ON, jak i OFF. Być może problem krawędzi / rzadkości można obejść, aktualizując model, aby odzwierciedlić obecną neuronaukę w zakresie widzenia, szczególnie w modelach zwierzęcych.


3

Masz rację, że jest to problem, jeśli splot działa tylko na pikselach obrazu, ale problem znika, jeśli wyzerujesz obrazy (co jest ogólnie zalecane). Zapewnia to, że splot zastosuje filtr tyle samo razy do każdego piksela.


1
Nie jestem jeszcze przekonany. Wypełnienie zerowe spowoduje utworzenie większej liczby pikseli wyjściowych wokół pikseli „środkowych”, które można znaleźć bez wypełnienia. Wartości „środkowych” pikseli są dokładnie takie same, bez względu na to, jakiego wypełnienia używasz.
Koen

1
Jeśli okno splotowe ma rozmiar n×n, następnie wypełniając wszystkie krawędzie za pomocą n-1wiele zer, gwarantujesz, że splot będzie działał na piksele brzegowe tyle razy, ile piksele wewnętrzne (zakładając, że robisz to na każdej warstwie splotowej w sieci). W praktyce jednak nie ma tak agresywnego wypełniania, a zamiast tego obniża wagę pikseli pikselowych, ponieważ ważna informacja jest o wiele bardziej prawdopodobne w pobliżu środka obrazu.
jon_simon

Wizualizacja splotu w połowie tej strony może pomóc w przekazaniu intuicji: cs231n.github.io/convolutional-networks
jon_simon
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.