Cool wizualizacje sieci neuronowych

Sieci neuronowe to bestia o zmieniających się nazwach (aktualnie deep-learning)- ważne narzędzie w rękach robotyka. Pozwalają rozpoznawać obiekty, regulować trudne elementy a w szczególności – dają ogólny sposób na uczenie się maszyn. Lecz nie ma nic za darmo – w zamian za duże możliwości konstruowanie sieci neuronowych jest trudne a ich uczenie wymaga ogromnej ilości danych. Dodatkowo-początkującym trudno sobie wyobrazić, co te sieci robią. W tym poście pokażę i podlinkuję wizualizacje, które pomogą sieci neuronowe zrozumieć.

Big thanks to big companies for big data tools

Narzędzia do “big data” rozwijają wszystkie duże firmy internetowe. Google ma Tensor Flow, Facebook rozwija Torch’a, Yahoo Sparka, IBM i Windows mają swoje API do różnego typu “rozpoznawadeł” twarzy/ emocji/ rzeczy. I chwała im za to, bo my jako robotycy dostajemy często za darmo potężne narzędzia z dobrą dokumentacją i fajnymi wizualizacjami. Ogólnie, nauczyć się teraz sieci neuronowych jest wyjątkowo łatwo, z ogromną ilością filmów, demo i dostępnych, darmowych publikacji.

Zacznijmy od Googla, który pozwala się bawić się sieciami neuronowymi w przeglądarce na swoim “placu zabaw”: http://playground.tensorflow.org

Co ta strona pokazuje? Całą mini sieć neuronową! Sieć – bo różne elementy wysyłają między sobą dane, a neuronową, bo te elementy nazywamy neuronami. Zazwyczaj sieci neuronowe łączą się warstwami, tzn. poszczególny neuron pobiera informacje z neuronów poprzedniej warstwy a wysyła na następną. Generalnie, na wejściu mamy jakieś cechy obiektów (features) które znamy ( np. współrzędna x i y punktu), po drodze mamy neurony, które robią swoje, a na wyjściu mamy wyjścia które pozwalają nam, albo powiedzieć jakiego typu jest nasz obiekt, albo jakie ma właściwości. To pierwsze zadanie nazywa się klasyfikacją a to drugie regresją. Na placu zabaw mamy to pokazane za pomocą koloru kuleczek (albo typ – niebieski/pomarańcz albo różne kolory przy regresji).

Proces uczenia zobaczysz po naciśnięciu guzika play a potem można się pobawić różnymi opcjami. Ilością neuronów, ilością warstw ale też “funkcją aktywacji” to znaczy tym co neuron będzie robił z wynikiem swoich obliczeń. Cały plac zabaw pokazuje, jak w dużym stopniu rezultat uczenia zależy od odpowiedniego dobrania struktury sieci i wyregulowania jej “pokręteł”. Chociaż, są metody jak pewne rzeczy dobrać automatycznie (cross-walidacja), to niestety jest w tym też trochę wróżenia.

Neural Network zoo

Plac zabaw dla sieci neuronowych pokazał, jak wiele zależy od budowy sieci. Możliwych architektur jest wiele a aktualny postęp wynika z odpowiedniego łączenia. The Asimov institute opublikował wizualny przegląd różnych architektur – The Neural Network Zoo. Po przeczytaniu będzie się można polansować znajomością, że dana sieć to DCIGN a nie zwykłe DN /s.

Andrej Karpathy skonstruował świetne narzędzie do zabawy z bardzo popularnym typem warstwy sieci neuronowych – Convolutional Neural Networks. Warstwy tego typu uczą się jak tworzyć filtry, które z obrazka na wejściu sieci wyciągną jego cechy takie jak np. krawędzie czy rogi. To zaś bardzo pomaga przy wykorzystaniu sieci do konstruowaniu systemów wizyjnych. Dema różnych zastosowań CNN znajdują się na jego stronie: http://cs.stanford.edu/people/karpathy/convnetjs/

W szczególności w demo na zbiorze MNIST i CIFAR-9 widać, co robią filtry wewnątrz sieci neuronowej.

Sieci jeżdżą samochodem i projektują torebki

Sieci neuronowe nie tylko mają różną budowę ale i zastosowania. Chociaż zawsze na wejściu jest jakiś wektor numerów a na wyjściu inny wektor numerów, to to co one reprezentują może być bardzo różne.

Sieci neuronowe mogą być wykorzystywane przy “uczeniu przez wzmacnianie” (reinforcement learning) czyli takim gdzie zamiast wprost mówić sieci co ma robić, oceniamy tylko jej postępowanie. Fajne demo takiego systemu przedstawione jest na kursie MIT Self Driving Cars: http://selfdrivingcars.mit.edu/deeptrafficjs/, gdzie naszym zadaniem jest skonstruowanie sieci, która nauczy się jeździć samochodem w tłoku.

fragment opisujący narzędzie rozpoczyna się 2:15:25: https://youtu.be/QDzM8r3WgBw?t=1h15m25s Na stronie znajduje się też demo do kierowania samochodem w 4D.

Innym ciekawym zastosowaniem sieci neuronowych jest generacja nowych informacji. Służą temu np. generative adversarial networks, gdzie dwie sieci walczą ze sobą – jedna generuje fałszywe obrazy na podstawie opisu i dostaje punkty za to gdy, nie zostanie wykryta- druga wykrywa fałszywki. W efekcie sieć uczy się jak tworzyć obrazy z samych opisów.

Demo działania takich sieci, gdzie można sobie narysować zwierzątko albo torebkę a sieć ją skonstruuje, znajdziemy tutaj:

http://affinelayer.com/pixsrv/index.html, autor przygotował też artykuł opisujący jak takie sieci powstają: https://affinelayer.com/pix3pix/