[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”.
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.
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.
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 .
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.
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?