Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 10136|Odpowiedź: 0

Ewolucja architektury sieci neuronowych: kompleksowy przegląd ponad dziesięciu architektur od LeNet5 do ENet

[Skopiuj link]
Opublikowano 24.04.2018 13:08:47 | | | |
LeNet5
LeNet5 powstał w 1994 roku i jest jedną z pierwszych sieci neuronowych splotowych, rozwijając dziedzinę uczenia głębokiego. Od 1988 roku, po wielu udanych iteracjach, to pionierskie dzieło Yanna LeCuna nosi nazwę LeNet5 (zobacz: Gradient-Based Learning Applied to Document Recognition).


Architektura LeNet5 opiera się na idei, że (szczególnie) cechy obrazu są rozłożone na cały obraz, a splot z parametrami przyswajalnymi jest efektywnym sposobem wydobycia podobnych cech w wielu lokalizacjach przy niewielkiej liczbie parametrów. W tamtym czasie nie było GPU do treningu, a nawet CPU działało wolno. Dlatego możliwość zapisywania parametrów oraz procesu obliczeń jest kluczowym osiągnięciem. To przeciwieństwo używania każdego piksela jako osobnego wejścia dla dużej, wielowarstwowej sieci neuronowej. LeNet5 wyjaśnia, że te piksele nie powinny być używane w pierwszej warstwie, ponieważ obraz ma silne korelacje przestrzenne, których nie można wykorzystać przez użycie niezależnych pikseli w obrazie jako różnych cech wejściowych.

Cechy LeNet5 można podsumować następująco:

Sieci neuronowe splotowe wykorzystują 3 warstwy jako sekwencję: splotową, wspólną, nieliniową → To prawdopodobnie kluczowa cecha głębokiego uczenia obrazów od czasu publikacji tego artykułu!
Użyj splotów do wyodrębniania cech przestrzennych
Podpróba z wykorzystaniem odwzorowania na średnią przestrzenną
Nieliniowość w postaci hiperbolicznej stycznej (tanh) lub w kształcie litery S (sigmoid).
Wielowarstwowe sieci neuronowe (MLP) pełnią rolę ostatecznych klasyfikatorów
Macierze rzadkich połączeń między warstwami unikają dużych kosztów obliczeniowych

Ogólnie rzecz biorąc, ta sieć jest punktem wyjścia dla wielu współczesnych architektur i zainspirowała wielu w tej dziedzinie.

Interwał
W latach 1998–2010 sieć neuronowa była na etapie inkubacji. Większość ludzi nie zdaje sobie sprawy z ich rosnącej siły, podczas gdy inni badacze robią to powoli. Dzięki pojawieniu się aparatów w telefonach komórkowych i tanich aparatów cyfrowych, coraz więcej danych jest wykorzystywanych. Rośnie też moc obliczeniowa, procesory stają się szybsze, a GPU stają się narzędziami obliczeniowymi do różnych celów. Te trendy pozwoliły sieciom neuronowym rozwijać się, choć powoli. Dane i moc obliczeniowa sprawiają, że zadania, które mogą wykonywać sieci neuronowe, stają się coraz ciekawsze. Potem wszystko stało się jasne......

Dan Ciresan Net
W 2010 roku Dan Claudiu Ciresan i Jurgen Schmidhuber opublikowali implementację najwcześniejszej sieci neuronowej GPU. Ta implementacja to 9-warstwowa sieć neuronowa działająca na procesorze graficznym NVIDIA GTX 280, w tym propagacja do przodu i do tyłu.

AlexNet
W 2012 roku Alex Krizhevsky opublikował Alexet (zob. ImageNet Classification with Deep Convolutional Neural Networks), coraz głębszą wersję LeNet, która wygrała trudny konkurs ImageNet z dużą przewagą.


AlexNet rozszerza idee LeNet na większe sieci neuronowe, które potrafią uczyć się znacznie bardziej złożonych obiektów i poziomów obiektów. Wkład tej pracy to:

Użyj zmodyfikowanej jednostki liniowej (ReLU) jako nieliniowości
Stosuj technikę Dropout, aby selektywnie ignorować pojedyncze neurony podczas treningu, aby uniknąć nadmiernego dopasowania modelu
Nadpisz dużą pulę, aby uniknąć średniego efektu przeciętnego poolingu
Skróć czas treningu z kartą NVIDIA GTX 580

W tym momencie GPU mogą dostarczyć większą liczbę rdzeni niż CPU, a czas treningu może zostać wydłużony dziesięciokrotnie, co z kolei pozwala na większe zbiory danych i większe obrazy.

Sukces AlexNet doprowadził do małej rewolucji. Konwolucyjne sieci neuronowe stały się obecnie kręgosłupem głębokiego uczenia i stały się synonimem "dużych sieci neuronowych, które teraz potrafią rozwiązywać użyteczne zadania."

Overfeat
W grudniu 2013 roku laboratorium Yanna LeCuna na Uniwersytecie Nowojorskim zaproponowało pochodną AlexNet, Overfeat (zobacz: OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks). W artykule zaproponowano również naukę ramki ograniczającej, co doprowadziło do powstania wielu artykułów na ten sam temat. Uważam, że lepiej nauczyć się dzielić obiekty niż poznawać sztuczne ramki ograniczające.

VGG
Sieć VGG z Uniwersytetu Oksfordzkiego (zobacz: Very Deep Convolutional Networks for Large-Scale Image Recognition) jest pierwszą siecią, która używa mniejszych filtrów 3×3 na każdej warstwie splotowej i łączy je, aby przetwarzać je jako sekwencję splotową.

Wydaje się to być przeciwieństwem zasady LeNeta, gdzie do uzyskania podobnych cech obrazu stosuje się duże sploty. W przeciwieństwie do filtrów 9×9 lub 11×11 w AlexNet, filtry zaczynają się zmniejszać, zbliżając się do słynnej anomalii splotu 1×1, której LeNet stara się uniknąć—przynajmniej na pierwszej warstwie sieci. Jednak VGG poczynił duże postępy, stosując kolejne sploty 3×3, aby naśladować efekty większych pól recepcyjnych, takich jak 5×5 i 7×7. Te pomysły były również wykorzystywane w nowszych architekturach sieci, takich jak Inception i ResNet.


Sieci VGG wykorzystują wiele warstw splotowych 3×3 do charakteryzowania złożonych cech. Należy zauważyć, że 3., 4. i 5. blok filtrów VGG-E: 256×256 oraz 512×512 3×3 są używane wielokrotnie kolejno, aby wydobyć bardziej złożone cechy i ich kombinacje. Efekt ten jest równoważny dużemu klasyfikatorowi 512×512 z 3 warstwami splotowymi. To oczywiście oznacza, że istnieje wiele parametrów i możliwości uczenia się. Jednak te sieci są trudne do trenowania i muszą być podzielone na mniejsze sieci oraz kumulowane warstwa po warstwie. Wynika to z braku solidnego sposobu na uregulowanie modelu lub ograniczenia dużej ilości przestrzeni wyszukiwania z powodu dużej liczby parametrów.

VGG używa dużych rozmiarów cech w wielu warstwach, ponieważ wnioskowanie jest czasochłonne podczas działania. Podobnie jak w przypadku wąskiego gardła w Inception, zmniejszenie liczby funkcji pozwoli zaoszczędzić część kosztów obliczeniowych.

Sieć w sieci
Idea sieci w sieci (NiN, patrz artykuł: Sieć w sieci) jest prosta i świetna: wykorzystanie splotu 1×1 do zapewnienia bardziej kompozycyjnych możliwości dla cech warstwy splotowej.

Architektura NiN wykorzystuje warstwy MLP przestrzenne po pojedynczych konwolucjach, aby lepiej łączyć cechy przed innymi warstwami. Ponownie można sądzić, że sploty 1×1 są sprzeczne z pierwotną zasadą LeNet, ale w rzeczywistości mogą łączyć cechy splotowe w lepszy sposób, niż to niemożliwe, po prostu stosując więcej cech splotowych. To różni się od używania oryginalnego piksela jako kolejnego wejścia warstwy. Sploty 1×1 są często używane do spatykowego łączenia cech na mapach cech po konwolucji, dzięki czemu mogą faktycznie używać bardzo niewielu parametrów i udostępniać je na wszystkich pikselach tych cech!


Zdolność MLP do znacznego zwiększenia skuteczności poszczególnych cech splotowych poprzez łączenie ich w bardziej złożone grupy. Od tego czasu ta idea została wykorzystana w niektórych nowszych architekturach, takich jak ResNet, Inception i jego pochodne.

NiN używa także warstwy pulowania średniej jako części końcowego klasyfikatora, co jest kolejną praktyką, która stanie się powszechna. Osiąga się to poprzez uśrednianie odpowiedzi sieci na wiele obrazów wejściowych przed klasyfikacją.

GoogLeNet i Inception
Christian Szegedy z Google rozpoczął swoją próbę zmniejszenia nakładu obliczeniowego głębokich sieci neuronowych i zaprojektował GoogLeNet, pierwszą architekturę Inception (zobacz: Going Deeper with Convolutions).

To było jesienią 2014 roku, a modele głębokiego uczenia stawały się użyteczne w klasyfikowaniu obrazów i klatek wideo. Większość sceptyków nie ma już wątpliwości, że głębokie uczenie i sieci neuronowe naprawdę wróciły tym razem i będą się dalej rozwijać. Biorąc pod uwagę użyteczność tych technologii, giganci internetowi tacy jak Google są bardzo zainteresowani efektywnym i skalowym wdrażaniem tych architektur na swoich serwerach.

Christian dużo myślał o tym, jak głębokie sieci neuronowe mogą osiągać wysoki poziom wydajności, na przykład w ImageNet, jednocześnie zmniejszając ich nakłady obliczeniowe. Można też wprowadzić poprawę wydajności, jednocześnie zapewniając ten sam narzut obliczeniowy.

On i jego zespół wymyślili moduł Incepcji:


Na pierwszy rzut oka jest to zasadniczo równoległa kombinacja filtrów splotowych 1×1, 3×3, 5×5. Ale świetną ideą Incepcji jest zmniejszenie liczby cech przed drogimi modułami równoległymi z blokami 1×1 konwolucyjnymi (NiN). Jest to powszechnie określane jako "wąskie gardło". Ta część zostanie wyjaśniona w sekcji "warstwa wąskiego gardła" poniżej.

GoogLeNet używa szkieletu bez modułu incepcyjnego jako warstwy początkowej, następnie warstwy puli średniej oraz klasyfikatora softmax podobnego do NiN. Ten klasyfikator ma znacznie mniejszą liczbę operacji niż klasyfikatory AlexNet i VGG. To również doprowadziło do bardzo skutecznego projektu sieci, patrz artykuł: An Analysis of Deep Neural Network Models for Practical Applications.

Warstwa wąskiego gardła
Zainspirowana NiN, warstwa wąskiego gardła w Inception zmniejsza liczbę cech w każdej warstwie, a tym samym liczbę operacji; Dzięki temu czas wnioskowania można utrzymać niski. Liczba cech jest zmniejszana czterokrotnie, zanim dane zostaną przekazane przez kosztowne moduły splotowe. To znacząca oszczędność pod względem kosztów obliczeniowych i sukces architektury.

Sprawdźmy to konkretnie. Teraz, gdy mamy 256 wejść cech i 256 wyjść cech, załóżmy, że warstwa Inception może wykonać tylko 3×3 sploty, co oznacza łącznie 256×256×3×3 sploty (prawie 589 000 operacji mnożenia i akumulacji (MAC)). Może to być poza naszym budżetem obliczeniowym, powiedzmy, by uruchomić warstwę w 0,5 milisekundy na serwerach Google. Zamiast tego zdecydowaliśmy się zmniejszyć liczbę cech, które trzeba było splotować, co wynosiło 64 (czyli 256/4). W tym przypadku zaczynamy od spływu 256 -> 64 1×1, następnie 64 splotów na wszystkich gałęziach Incepcji, a następnie 1×1 splotu z cechą 64 -> 256, a teraz operacja wygląda następująco:

256×64 × 1×1 = 16 000 s
64×64 × 3×3 = 36 000 s
64×256 × 1×1 = 16 000

W porównaniu z poprzednimi 600 000, obecnie łącznie jest 70 000 woluminów obliczeniowych, co jest prawie 10 razy mniej.

I mimo że prowadziliśmy lepsze operacje, nie straciliśmy na tym poziomie ogólności. Warstwa wąskiego gardła okazała się świetna w zbiorach danych takich jak ImageNet, a także jest wykorzystywana w architekturach takich jak ResNet, o czym zaraz wspomniemy.

Jest to skuteczne, ponieważ cechy wejściowe są ze sobą powiązane, więc redundancję można zredukować, właściwie łącząc je z konwolucją 1×1. Następnie, po złożeniu niewielkiej liczby cech, można je ponownie rozwinąć w znaczące kombinacje na kolejnej warstwie.

Inception V3 (i V2)
Christian i jego zespół są bardzo płodnymi badaczami. W lutym 2015 roku wprowadzono Batch Normalized Inception jako Inception V2 (zob. artykuł: Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift). Normalizacja wsadowa oblicza średnią i odchylenie standardowe wszystkich map cech na wyjściu jednej warstwy i wykorzystuje te wartości do normalizacji ich odpowiedzi. Jest to równoważne z "wybielaniem" danych, tak aby wszystkie mapy neuronalne reagowały w tym samym zakresie i były zerowe średnie. Pomaga to w treningu, gdy kolejna warstwa nie musi uczyć się offsetu z danych wejściowych, a także skupia się na lepszym połączeniu tych cech.

W grudniu 2015 roku zespół wydał nową wersję modułu Inception oraz podobnej architektury (zob. artykuł: Rethinking the Inception Architecture for Computer Vision). Artykuł lepiej wyjaśnia oryginalną architekturę GoogLeNet, dając więcej szczegółów dotyczących wyborów projektowych. Pierwotny pomysł wygląda następująco:

Dzięki starannemu budowaniu sieci wyrównuje się głębokość i szerokość, aby zmaksymalizować przepływ informacji do sieci. Przed każdym poolingiem dodaj mapowanie funkcji.
Wraz ze wzrostem głębokości, systematycznie rośnie także głębokość lub liczba cech warstwy sieciowej.
Wykorzystaj każde zwiększenie głębokości warstwy, aby zwiększyć wiązanie cech przed kolejną warstwą.
Używając tylko 3×3 splotów, dany filtr 5×5 i 7×7 można podzielić na kilka 3×3, jeśli to możliwe. Spójrz na poniższe zdjęcie


W rezultacie nowe Incepcje stało się:


Możesz też podzielić filtr, spłaszczając splot na bardziej złożone moduły:


Podczas wykonywania obliczeń incepcyjnych moduł Inception może również zmniejszyć rozmiar danych poprzez pulowanie. Jest to zasadniczo podobne do uruchomienia prostej warstwy puli równolegle podczas wykonywania konwolucji:


Inception również używa warstwy poolingowej i softmax jako ostatecznego klasyfikatora.

ResNet
W grudniu 2015 roku wprowadzono nową zmianę, która zbiegła się z Inception V3. ResNet ma prosty pomysł: podaj wyjście dwóch kolejnych warstw splotowych i omiń wejście do kolejnej warstwy (zob. artykuł: Deep Residual Learning for Image Recognition).


To podobne do niektórych wcześniejszych pomysłów. Ale w ResNet dzielą dwie warstwy i są stosowane na większą skalę. Podążanie po dwóch warstwach to kluczowa intuicja, bo rozdzielenie jednej warstwy nie daje większej poprawy. Przejście przez warstwę 2 można traktować jako mały klasyfikator lub sieć w sieci.

To pierwszy raz, gdy liczba warstw sieciowych przekracza 100, a nawet 1000 warstw można wytrenować.

ResNet, który posiada dużą liczbę warstw sieciowych, zaczyna używać warstwy sieciowej podobnej do warstwy wąskiego gardła w Inception:


Ta warstwa przetwarza mniejszą liczbę cech, najpierw konwelując mniejszą liczbę cech o 1×1 przy mniejszym wyjściu (zwykle 1/4 wejścia), następnie używając warstwy 3×3, a następnie warstwy 1×1. Podobnie jak moduł Inception, zapewnia to niską intensywność obliczeniową, jednocześnie oferując bogate kombinacje funkcji.

ResNet używa stosunkowo prostej warstwy początkowej na wejściach: warstwy bazowej o 7×7 woluminach z dwoma pulami. Porównaj to z bardziej złożonymi i mniej intuicyjnymi Inception V3 i V4.

ResNet korzysta także z warstwy poolingowej oraz softmax jako ostatecznego klasyfikatora.

Inne spostrzeżenia dotyczące ResNet pojawiają się codziennie:

ResNet można traktować zarówno równoległy, jak i ciągły, traktując wejścia i wyjścia (wyjścia) jako równoległe w wielu modułach, podczas gdy wyjścia każdego modułu są połączone ciągłie.
ResNet można również traktować jako kombinację równoległych lub ciągłych modułów (zob. artykuł: Sieci resztkowe są wykładniczymi zespołami stosunkowo płytkich sieci).
Stwierdzono, że ResNet zazwyczaj działa równolegle na blokach sieciowych na warstwach 20-30. Zamiast płynąć nieprzerwanie przez całą długość sieci.
Gdy ResNet przekazuje wyjście z powrotem do wejścia jak RNN, sieć można uznać za lepiej zaufany biologicznie model korowy (zob. artykuł: Bridging the Gaps Between Residual Learning, Recurrent Neural Networks and Visual Cortex).

Inception V4
Oto inna wersja Incepcji od Christiana i jego zespołu, podobna do Incepcji V3:


Inception V4 łączy także moduł Inception i moduł ResNet:


Uważam, że architektura nie jest zbyt zwięzła, ale pełna mniej przejrzystych heurystyk. Trudno jest zrozumieć wybory w niej zawarte, a autorom trudno to wyjaśnić.

Biorąc pod uwagę prostotę sieci, którą łatwo zrozumieć i poprawić, ResNet może być lepszy.

SqueezeNet
SqueezeNet (patrz artykuł: SqueezeNet: AlexNet – dokładność na poziomie AlexNet z 50 razy mniejszą liczbą parametrów i rozmiarem modelu <0,5MB") to niedawno opublikowana architektura, która przetwarza koncepcje z ResNet i Inception. Model sieci projektowej lepszej architektury jest mniejszy, a parametry nie wymagają jeszcze złożonych algorytmów kompresji.

Wprowadź
Nasz zespół planuje połączyć wszystkie cechy niedawno ujawnionej architektury, aby stworzyć bardzo wydajną, niskoobciążeniową sieć, która wykorzystuje mniej parametrów i obliczeń, aby osiągnąć najwyższej jakości rezultaty. Ta architektura sieciowa nazywa się ENet i została zaprojektowana przez Adama Paszke. Już używaliśmy go do znaczników pojedynczego piksela i rozdzielczości scen.

Więcej informacji o ENet można znaleźć w artykule "ENet: A Deep Neural Network Architecture for Real-Time Semantic Segmentation". ENet to sieć kodowania, dodawania i dekodowania. Koder jest standardowym projektem CNN do klasyfikacji. Dekoder to sieć do upsamplowania, która propaguje klasyfikację wstecznie do oryginalnego obrazu w celu segmentacji. Wykorzystuje się to wyłącznie sieci neuronowe i nie stosuje innych algorytmów segmentacji obrazów.

ENet został zaprojektowany tak, aby na początku wykorzystywać jak najmniejszą ilość zasobów. Dlatego ma tak mały skrypt, z połączoną siecią enkoderów i dekoderów zajmującą 0,7 MB i dokładnością 16 fp. Nawet przy tak małym modelu ENet jest podobny lub wyższy niż inne rozwiązania sieci neuronowe pod względem dokładności segmentacji.

Analiza modułów
Analiza modułu CNN, przeprowadzona w artykule (Systematyczna ocena postępów CNN na ImageNet), jest bardzo pomocna:

Użyj nieliniowości ELU bez batchnorm lub ReLU z batchnorm.
Użyj wyuczonej transformacji przestrzeni barw RGB.
Stosuj liniową strategię spadku tempa uczenia się.
Użyj sumy średnich i większych warstw połączonych w pulę.
Użyj rozmiaru mini-partii około 128 do 256. Jeśli to za duże dla twojej karty graficznej, po prostu skaluj tempo uczenia do tego rozmiaru.
Użyj warstwy w pełni połączonej jako splotu i uśrednij wszystkie przewidywania do ostatecznej prognozy.
Gdy badanie zwiększa rozmiar zestawu treningowego, wykrywa, czy nie osiągnięto plateau
Czystość danych jest ważniejsza niż ich rozmiar.
Jeśli nie możesz zwiększyć rozmiaru obrazu wejściowego, zmniejsz kroki na kolejnych warstwach – efekt ten sam działa.
Jeśli Twoja sieć ma złożoną i wysoce zoptymalizowaną architekturę, taką jak GoogLeNet, musisz uważać na jej modyfikacje.

Inne architektury, na które warto zwrócić uwagę
FractalNet (patrz artykuł: FractalNet: Ultra-Deep Neural Networks without Residuals) wykorzystuje architekturę rekurencyjną, która nie jest testowana w ImageNet. Ta architektura jest pochodną ResNet, a ogólnie rzecz biorąc, ResNet.

przyszłość
Uważamy, że stworzenie architektury sieci neuronowej jest priorytetem rozwoju deep learningu. Nasz zespół zdecydowanie zaleca uważne czytanie i zrozumienie artykułów wymienionych w artykule.

Ale można się zastanawiać, dlaczego poświęcamy tyle czasu na tworzenie architektur? Dlaczego nie powiedzieć nam, czego używać z danymi? Jak łączyć moduły? Te pytania są dobre, ale wciąż są przedmiotem badań, a istnieje artykuł, do którego można się odwołać: Sieci neuronowe o strukturze różniczkowalnej.

Należy zauważyć, że większość architektur, o których mówiliśmy w tym artykule, dotyczy widzenia komputerowego. Podobne architektury sieci neuronowych zostały opracowane w innych obszarach i bardzo interesujące jest poznanie zmian architektonicznych we wszystkich innych zadaniach.

Jeśli interesuje Cię porównanie architektury sieci neuronowych i wydajności obliczeniowej, zobacz artykuł: An Analysis of Deep Neural Network Models for Practical Applications.







Poprzedni:Kilka metod obliczania czasu wykonania w Pythonie
Następny:Antminer B3 mówi ci, co kopać!
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com