W ostatnich latach splotowe sieci neuronowe (lub ogólnie głębokie sieci neuronowe) stały się coraz głębsze, a najnowocześniejsze sieci przechodzą z 7 warstw ( AlexNet ) do 1000 warstw ( sieci resztkowych) na przestrzeni 4 lat Przyczyną wzrostu wydajności z głębszej sieci jest to, że można się nauczyć bardziej złożonej, nieliniowej funkcji. Przy wystarczających danych szkoleniowych umożliwia to sieciom łatwiejsze rozróżnianie między różnymi klasami.
Wydaje się jednak, że trend nie podążył za liczbą parametrów w każdej warstwie. Na przykład liczba map obiektów w warstwach splotowych lub liczba węzłów w całkowicie połączonych warstwach pozostała w przybliżeniu taka sama i nadal jest stosunkowo niewielka, pomimo dużego wzrostu liczby warstw. Z mojej intuicji wydaje się, że zwiększenie liczby parametrów na warstwę dałoby każdej warstwie bogatsze źródło danych, z którego można by nauczyć się jej funkcji nieliniowej; ale wydaje się, że ten pomysł został pominięty na korzyść dodania kolejnych warstw, z których każda ma niewielką liczbę parametrów.
Więc chociaż sieci stały się „głębsze”, nie stały się „szersze”. Dlaczego to?
źródło
Odpowiedzi:
Jako zrzeczenie się, pracuję nad sieciami neuronowymi w swoich badaniach, ale generalnie używam stosunkowo małych, płytkich sieci neuronowych, a nie naprawdę głębokich sieci w najnowocześniejszych badaniach, które przytaczasz w swoim pytaniu. Nie jestem ekspertem od dziwactw i osobliwości bardzo głębokich sieci i oddam się komuś, kto jest.
Po pierwsze, zasadniczo nie ma powodu, aby w ogóle potrzebować głębokich sieci neuronowych. Wystarczająco szeroka sieć neuronowa z tylko jedną ukrytą warstwą może aproksymować dowolną (rozsądną) funkcję przy wystarczającej ilości danych treningowych. Istnieje jednak kilka trudności z użyciem wyjątkowo szerokiej, płytkiej sieci. Głównym problemem jest to, że te bardzo szerokie, płytkie sieci są bardzo dobre w zapamiętywaniu, ale nie tak dobre w uogólnieniu . Tak więc, jeśli trenujesz sieć z każdą możliwą wartością wejściową, super szeroka sieć może ostatecznie zapamiętać odpowiednią wartość wyjściową, którą chcesz. Ale to nie jest przydatne, ponieważ dla każdego praktycznego zastosowania nie będziesz miał wszystkich możliwych wartości wejściowych do trenowania.
Zaletą wielu warstw jest to, że mogą uczyć się funkcji na różnych poziomach abstrakcji . Na przykład, jeśli wytrenujesz głęboką splotową sieć neuronową do klasyfikowania obrazów, przekonasz się, że pierwsza warstwa będzie trenować się w zakresie rozpoznawania bardzo podstawowych rzeczy, takich jak krawędzie, kolejna warstwa wyszkoli się w zakresie rozpoznawania zbiorów krawędzi, takich jak kształty, następna warstwa będzie się uczyć rozpoznawania zbiorów kształtów, takich jak oczy lub nosy, a kolejna warstwa nauczy się funkcji wyższego rzędu, takich jak twarze. Wiele warstw jest znacznie lepszych w uogólnianiu, ponieważ uczą się wszystkich pośrednich cech między surowymi danymi a klasyfikacją wysokiego poziomu.
To wyjaśnia, dlaczego warto korzystać z głębokiej sieci zamiast z bardzo szerokiej, ale płytkiej sieci. Ale dlaczego nie bardzo głęboka, bardzo szeroka sieć? Myślę, że odpowiedź brzmi: chcesz, aby Twoja sieć była jak najmniejsza, aby dawać dobre wyniki. Gdy zwiększasz rozmiar sieci, tak naprawdę wprowadzasz więcej parametrów, których Twoja sieć musi się nauczyć, a tym samym zwiększasz szanse na przeregulowanie. Jeśli zbudujesz bardzo szeroką, bardzo głęboką sieć, ryzykujesz, że każda warstwa po prostu zapamięta, co chcesz, aby uzyskać dane wyjściowe, i powstanie sieć neuronowa, która nie uogólnia się na nowe dane.
Oprócz widma nadmiernego dopasowania, im szersza sieć, tym dłużej będzie trenować . Głębokie sieci już teraz mogą być bardzo kosztowne obliczeniowo, więc istnieje silna zachęta, aby uczynić je wystarczająco szerokimi, aby działały dobrze, ale nie szerszymi.
źródło
Nie sądzę, że istnieje jednoznaczna odpowiedź na twoje pytania. Ale myślę, że konwencjonalna mądrość wygląda następująco:
Zasadniczo wraz ze wzrostem przestrzeni hipotez algorytmu uczenia się algorytm może uczyć się coraz bogatszych struktur. Ale jednocześnie algorytm staje się bardziej podatny na nadmierne dopasowanie i prawdopodobnie zwiększy się błąd generalizacji.
Tak więc ostatecznie dla każdego zestawu danych wskazane jest, aby pracować z minimalnym modelem, który ma wystarczającą pojemność, aby poznać prawdziwą strukturę danych. Jest to jednak bardzo ręczna rada, ponieważ zazwyczaj „rzeczywista struktura danych” jest nieznana, a często nawet możliwości modeli kandydujących są jedynie niejasno zrozumiane.
Jeśli chodzi o sieci neuronowe, wielkość przestrzeni hipotez jest kontrolowana przez liczbę parametrów. Wydaje się, że dla określonej liczby parametrów (lub ustalonego rzędu wielkości) głębsze wchodzenie pozwala modelom uchwycić bogatsze struktury (np. Ten papier ).
Może to częściowo tłumaczyć sukces głębszych modeli o mniejszej liczbie parametrów: VGGNet (od 2014 r.) Ma 16 warstw o ~ 140 mln parametrów, podczas gdy ResNet (od 2015 r.) Pokonał ją przy użyciu 152 warstw, ale tylko ~ 2 mln parametrów
(z drugiej strony, mniejsze modele mogą być łatwiejsze do obliczeń, ale nie sądzę, że jest to istotny czynnik sam w sobie - ponieważ głębokość faktycznie komplikuje trening)
Zauważ, że ten trend (większa głębia, mniej parametrów) występuje głównie w zadaniach związanych ze wzrokiem i sieciach splotowych, a to wymaga wyjaśnienia dla konkretnej dziedziny. Oto kolejna perspektywa:
Każdy „neuron” w warstwie splotowej ma „pole odbiorcze”, które jest rozmiarem i kształtem danych wejściowych, które wpływają na każde wyjście. Intuicyjnie każde jądro przechwytuje pewien związek między pobliskimi danymi wejściowymi. A małe jądra (które są powszechne i preferowane) mają małe pole odbiorcze, więc mogą dostarczać informacji tylko o lokalnych relacjach.
Ale w miarę wchodzenia głębiej pole recepcyjne każdego neuronu w odniesieniu do jakiejś wcześniejszej warstwy staje się większe. Tak głębokie warstwy mogą zapewnić funkcje o globalnym znaczeniu semantycznym i abstrakcyjnych szczegółach (relacje relacji ... relacji obiektów), przy użyciu tylko małych jąder (które regulują relacje, których uczy się sieć, i pomagają jej się zjednoczyć i uogólnić).
Tak więc użyteczność głębokich sieci splotowych w wizji komputerowej można częściowo wyjaśnić przestrzenną strukturą obrazów i filmów. Możliwe, że czas pokaże, że w przypadku różnego rodzaju problemów lub w przypadku architektury niekonwolucyjnej głębokość faktycznie nie działa dobrze.
źródło
Dodanie większej liczby funkcji pomaga, ale korzyści szybko stają się marginalne po dodaniu wielu funkcji. To jeden z powodów, dla których działają takie narzędzia, jak PCA : kilka komponentów przechwytuje największą różnorodność funkcji. Dlatego dodawanie kolejnych funkcji po pewnym czasie jest prawie bezużyteczne.
Z drugiej strony, znalezienie odpowiedniej funkcji dla tej funkcji jest zawsze dobrym pomysłem. Jednak jeśli nie masz dobrej teorii, trudno jest wymyślić prawidłową funkcję. Tak więc dodawanie warstw jest pomocne jako forma brutalnej siły.
Rozważ prosty przypadek: opór powietrza samochodu. Powiedzmy, że nie znamy równania: 2/2 gdzie - powierzchnia przekroju samochodu, - gęstość powietrza, i - prędkość samochodu. Możemy stwierdzić, że pomiary samochodu są ważne i dodać je jako cechy, włączy się też prędkość samochodu. Dlatego ciągle dodajemy funkcje, a może dodajemy ciśnienie powietrza, temperaturę, długość, szerokość samochodu, liczbę siedzeń itp.ρ V
się na modelu takim jak Widzisz, jak te funkcje nie się w „prawdziwe” równanie, chyba że dodamy wszystkie interakcje i wielomiany. Gdyby jednak prawdziwe równanie nie było dogodnie wielomianowe, powiedzmy, że miało wykładniki lub inne dziwne funkcje transcendentalne, wówczas nie mielibyśmy szansy naśladować go z rozszerzaniem zestawu funkcji lub rozszerzaniem sieci.
Jednak pogłębienie sieci z łatwością doprowadziłoby cię do powyższego równania za pomocą tylko dwóch warstw. Bardziej skomplikowane funkcje wymagałyby więcej warstw, dlatego pogłębienie liczby warstw może być rozwiązaniem wielu problemów.
źródło
W przypadku gęsto połączonej sieci neuronowej o głębokości i szerokości liczba parametrów (stąd pamięć RAM wymagana do uruchomienia lub wyszkolenia sieci) wynosi . Tak więc, jeśli masz tylko ograniczoną liczbę parametrów, często sensowne jest preferowanie dużego wzrostu głębokości nad małym wzrostem szerokości.d w O(dw2)
Dlaczego możesz próbować ograniczyć liczbę parametrów? Wiele powodów:
Skąd pochodzi ? W przypadku dwóch sąsiednich warstw o szerokości połączenia między nimi opisano za pomocą . Więc jeśli masz warstwy o szerokości (plus warstwa wejściowa i wyjściowa), liczba parametrów to Zamiast ograniczania szerokości, alternatywną strategią czasami stosowaną jest użycie rzadkich połączeń. Na przykład podczas inicjowania topologii sieci można dopuścić każde połączenie z prawdopodobieństwem więc całkowita liczba parametrów wynosiw 1 , w 2 w 1 × w 2 ( d - 2 ) w ( d - 2 ) w 2 + w ⋅ ( szerokość warstwy wejściowej ) + w ⋅ ( szerokość warstwy wyjściowej ) = O ( d w 2 ) . 1 / √O(dw2) w1,w2 w1×w2 (d−2) w
źródło