czwartek, 22 marca 2018

CNN - Fully Connected Layer (FC) -> warstwa w pełni połączona

Położenie warstwy w strukturze CNN
Fully Connected Layer (FC Layers) tzw. warstwa gęsta (ang. dense layer), wchodzi w skład tzw. warstwy klasyfikującej.

Jest to najcześciej przedostatnia warstwa w sieci CNN (Convolutional Neural Networks).
Za nią może być np. warstwa softmax.




Jakie jest jej zadania
Warstwy konwolucyjna, ReLU i pooling mogą służyć do wykrycia złożonych wzorców, a do wsparcia ostatecznej klasyfikacji obiektu stosuje się tzw. warstwę gęstą (ang. dense layer lub fully connected layer.
Warstwa ostatecznie identyfikuje do jakiej klasy należy obiekt wejściowy.
Zwraca prawdopodobieństwo, że obiekt na zdjęciu jest określonego rodzaju.


Najnowsze projekty ConvNet jednak pokazały, że można je skonstruować sieć CNN bez warstw FC Layer. Najnowsze modele takie jak GoogleNet i ResNet, pokazują, że warstwę FC Layer można zastąpić Global Average Pooling Layer (GAP Layer), która ma o wiele mniej parametrów i większą dokładność klasyfikacji. 
Dlatego coraz więcej modeli preferuje odrzucanie FC Layer na rzecz lepszej wydajności.


Budowa warstwy
W FC Layer każdy neuron jest połączony z każdym neuronem z poprzedniej warstwy, a każde połączenie ma swoją własną wagę.



 
Ważną rzeczą w Fully Connected Layer są właśnie wagi połączeń. Są one tym, czego nauczyła się sieć.  
Kiedy trenujesz sieć, ciągle dostosowujesz te wagi w górę i w dół, aż sieć zrobi to, co chcesz.  
Kiedy ludzie mówią o "wyuczonych parametrach" sieci neuronowej, mówią o tych wagach.

Suma iloczynu danych wejściowych i wag w każdym węźle wyjściowym określa prawdopodobne przypisanie do klasy wynikowej.

Rozpatrzy taki przykład sieci:


Fully Connected Layer to spłaszczona jednowymiarowa tablica poprzedniej warstwy wynikowej (może to być zarówna wartwa konwolucyjna, pooling jak i inna fully connected layer), w tym przypadku warstwy polling.






Fully Connected Layer (FC) vs Convolutional layers (CONV)
Warstwy konwolucyjne (CONV) pomagają wyodrębnić pewne cechy z obrazu, podczas gdy Fully Connected Layer (FC) może generalizować te cechy na przestrzeń wyjściową (ponieważ nie ma struktury wag, takiej jak CN). W ten sposób przechodzisz od warstwy najmniej elastycznej do najbardziej elastycznej.

Warto zauważyć, że jedyną różnicą między warstwami FC i CONV jest to, że neurony w warstwie CONV są połączone tylko z lokalnym regionem w danych wejściowych i że wiele neuronów w woluminie CONV mają wspólne parametry. 



Postać funkcjonalna obu warstw jest identyczna. Możliwa jest zatem konwersja pomiędzy warstwami FC i CONV.

FC to warstwa bardzo pamięciożerna ze względu na przechowywanie informacji o każdym neuronie i jego wagach i wszystkich połączeniach. Kompresja ma tu kluczowe znaczenie dla zmniejszenia pamięci i kosztów obliczeniowych sieci neuronowych.
W porównaniu z warstwą konwolucyjną, gdzie każdy neuron przechowywał informację tylko o połączeniach z sąsiednim neuronem z poprzedniej warstwy. 

Zasadniczo FC Layer ma największą liczbę wag. Ta warstwa może zatem wymagać czasu na trening w porównaniu do innych warstw. 


Fully Connected Layers a uczenie
Wyobraź sobie teraz, że chcesz zbudować własny model, aby rozpoznać słodkie koty.
Jeśli zaczynasz od zera, musisz podać dużą liczbę przykładów ćwiczeń, aby model uczył się rozpoznawać, co jest kotem w pierwszej kolejności. Możesz zamiast tego wziąć istniejący, dobrze działający model z już wyuczonymi ciężarami np. ImageNet.

Ideą jest to, że oryginalny model nauczył się rozpoznawać ogólne cechy w warstwach CNN i można je ponownie wykorzystać (rozpoznaje koty i inne obiekty). Górna warstwa działa poza generalizacją i skupia się na konkretnych elementach, które znajdują się w zestawie treningowym.

Usuń zatem wierzchnią warstwę (Fully Connected Layer), która wyuczyła się klasyfikowania obiektów do etykiet. Nie interesują Cię przecież wszystkie etykiety, których nauczył się oryginalny model, tylko same koty. Poprzez trening na naszych obiektach (słodkich kotkach) nauczysz sieć rozpoznawać detale słodkich kotków poprzez stworzenie swojej specyficznej dla twoich potrzeb, warstwy Fully Connected Layer.


Multiple Fully Connected Layers
Istnieją pewne architektury CNN, które wykorzystują wiele w pełni połączonych warstw na końcu sieci. Poniższy przykład - ma dwie w pełni połączone warstwy, a na końcu warstwę softmax.



SOFTMAX
Celem wypracowania decyzji klasyfikacyjnej, wyjściowa warstwa typu Fully Connected Layer jest poddawana działaniu aktywacji za pomocą funkcji, którą formalnie utożsamia się z istnieniem oddzielnej warstwy o nazwie Softmax.

Funkcja typu softmax oblicza dla każdego neuronu z ostatniej warstwy typu FullConnected prawdopodobieństwo  przynależności  obrazu  wejściowego do określonej kategorii.



Materiały
http://andrew.gibiansky.com/blog/machine-learning/convolutional-neural-networks/
https://www.safaribooksonline.com/library/view/deep-learning/9781491924570/ch04.html
https://leonardoaraujosantos.gitbooks.io/artificial-inteligence/content/fc_layer.html

1 komentarz:

  1. Cześć, bardzo fajny blog. Trafiłem pisząc magisterkę, pozdrowienia z Politechniki :)

    OdpowiedzUsuń