Koń jaki jest, każdy widzi

… a przynajmniej tak twierdziły Nowe Ateny – pierwsza polska encyklopedia powszechna autorstwa Benedykta Chmielowskiego. Ale czy aby tak jest na pewno?

Dziś, dzięki kilku artykułom o programowaniu sieci neuronowych1 2 trafiłem na stronę http://playground.tensorflow.org/ na której każdy może, z poziomu przeglądarki, pobawić się siecią neuronową rozwiązującą proste problemy, do czego bardzo zachęcam. Podzielę się też kilkoma wnioskami z mojej własnej zabawy.

Zacząłem od poniższego przykładu:a

Zadaniem tej sieci neuronowej jest nauczenie się na zestawie próbnym danych, gdzie znajdują się żółte i niebieskie punkty tak, abyśmy mogli ją potem zapytać, czy punkt o współrzędnych (x, y) jest żółty, czy niebieski. W sekcji OUTPUT po prawej stronie widzimy jednocześnie punkty, o które spytano sieć (sieć nie wie, czy są one żółte, czy niebieskie), oraz tło, ukazujące jaki kolor sieć „widzi” dla pewnych współrzędnych. Im mocniejszy jest kolor tła, tym bardziej pewna jest sieć neuronowa co do swojego osądu. Co zatem stało się w przypadku pojedynczego neuronu?

Pojedynczy neuron potrafi podzielić przestrzeń na dwie części, obrócić linię podziału dookoła własnej osi oraz przesunąć ją w dowolnym kierunku, ale, biorąc pod uwagę to, jakie dane wejściowe posiada, nie jest w stanie zrobić nic więcej, co nie rozwiązuje problemu. Owszem, niebieskie elementy znajdują się na niebieskim tle, ale razem z nimi również przeważająca większość żółtych. To oznacza, że sieć neuronowa nie posiada wymaganej pojemności, żeby nauczyć się konceptu „okrągłości” na swoich danych wejściowych. Pomóc może dodanie kolejnych neuronów.

b

Dwa neurony są w stanie podzielić punkty dwiema liniami w przestrzeni. Jest to duży zysk w porównaniu do poprzedniej sieci, ale nadal nie jest to oczekiwany rezultat. Przy trzech neuronach rzecz staje się ciekawsza.

c

Mimo, że pojedynczo każdy z neuronów potrafi podzielić przestrzeń na dwie części, jak w pierwszym przypadku, cała sieć jest w stanie zawrzeć niebieskie punkty w czworokącie. Warto się chwilę zatrzymać przy tym przykładzie i spojrzeć na małe obrazki przy neuronach. Okazuje się, że:

  • Linie podziału drugiego i trzeciego neuronu są jednocześnie przekątnymi czworokąta;
  • Linia podziału pierwszego neuronu pokrywa się z jednym z boków czworokąta;
  • Na podstawie tego cała sieć potrafi ustawić swoje wagi tak, żeby stworzyć czworokąt.

Zaskoczyło mnie to, że trzy neurony potrafią wykazać już tak ciekawe zachowania.

Dla czterech i więcej neuronów sieć zazwyczaj buduje sześciokąt którym opina niebieskie punkty.

A co by się stało, gdyby wykorzystać inne dane wejściowe, np. x^2 oraz y^2? Wow.

koncept

W ciągu zaledwie 26 iteracji (wcześniej, przy trzech neuronach potrzebne było ich kilkaset) mamy śliczne koło zamykające w sobie niebieskie punkty przy zaledwie jednym neuronie. Nie jest to niezwykłe dla osób, które przypominają sobie równanie okręgu z liceum:

\(x^2 + y^2 = r^2\)

Gdzie x i y to współrzędne, a r to promień. Co oznacza tylko tyle, że przy odpowiednich danych wejściowych, to, co nam, ludziom może wydawać się trudne, potrafi się zredukować do zwykłego dodawania.

Język i słowa

f

Przez chwilę wyobraźmy sobie tytułowego konia, koło którego przechodzą dwie osoby — Tytus i Romek. Tytus kieruje swoją głowę na konia pierwszy i zaczyna przetwarzać to, co widzi w swojej głowie. Kiedy już rozpoznaje konia, zdziwiony krzyczy „Patrz, koń!” do Romka. Romkowi słyszącemu znane mu słowo przez głowę przechodzi obraz konia. Jak wygląda koń, który wyobraził sobie Romek?

Sieć zaprezentowana powyżej jest, w wielkim uproszczeniu próbą odwzorowania tego, co zaszło w tej hipotetycznej sytuacji. Każda kolejna warstwa neuronów w naszej sieci to:

  1. Przetwarzanie wizualne Tytusa;
  2. Przetwarzanie decyzyjne Tytusa;
  3. Zamiana na głos;
  4. Przetwarzanie bodźców dźwiękowych przez Romka;
  5. Przetwarzanie decyzyjne Romka;
  6. Przetwarzanie wizualne Romka;

Sieć neuronowa uczy się rozpoznawać punkty w podwójnej spirali. Gdyby przeciąć pośrodku tak nauczoną sieć neuronową, moglibyśmy zobaczyć „słowa”, jakie wypowiada, które dalszej części sieci neuronowej posłużyłyby do zwizualizowania reprezentacji, jaką sieć przyjmuje dla danych wejściowych. Dla właściwego słowa wysłanego przez połowę sieci po lewej stronie, połowa sieci po prawej stronie pokazałaby na obrazku „koncept” zbioru punktów,  nauczonego przez wcześniejszy trening.

Co to oznacza? Koncept konia każdego z nas najpewniej będzie się różnił między sobą. Ktoś będzie myślał o koniu o ciemnej karnacji, a inna osoba o koniu o jasnej karnacji. Jednak jesteśmy w stanie pominąć te różnice na poziomie pojęciowym. Z dużym uproszczeniem, sieci neuronowe też to potrafią.

Historia lubi się powtarzać

da

Chciałbym porozmawiać jeszcze o jednym — tym razem o zjawisku odkrywania koła na nowo, w dosłownym znaczeniu. Różne ludy na świecie, dzięki braku pewnego źródła przechowywania informacji oraz dość barbarzyńskim podejściu do dziedzictwa kulturowego innych ludów, bardzo często odkrywały te same technologie na nowo, po raz pierwszy. A czasami też musiało minąć sporo czasu pomiędzy tymi odkryciami.

Sieć pokazana powyżej jest bardzo ciekawym przykładem. To, czego nie widać na zdjęciu, to ilość prób, które musiałem wykonać, żeby nauczyć sieć (przerywałem eksperymenty, kiedy sieć docierała do 1000 iteracji bez pożądanego rezultatu). Dopiero po kilkunastu próbach sieć znalazła takie ułożenie, które mnie zadowalało.

W kontekście sieci neuronowej rozwiązanie jest dość proste – dołożenie chociaż jednego neuronu do pierwszej warstwy znacząco poprawia osiąganie zadowalających rezultatów. Ale my, ludzie, nie możemy w prosty sposób włożyć więcej rozumu do głowy. A jednocześnie, skomplikowane osiągnięcia technologiczne są dla nas możliwe. Każda z warstw sieci neuronowej w naszym szczęśliwym układzie wprowadzała coś nowego do złożoności całego rozwiązania. Mimo, że w wielu innych przypadkach sieć ta zatrzymałaby się na nieoptymalnym rozwiązaniu, to raz na jakiś czas ktoś w społeczeństwie wpada na genialny pomysł, a im więcej jest ludzi, tym szybciej te pomysły się pojawiają. Nie możemy też zapomnieć o tym, że odkrycia nie pojawiają się z dnia na dzień. Podobnie jak obrazy pośrednie w poszczególnych warstwach sieci, tak wcześniejsi naukowcy muszą zostawić podatny grunt kolejnemu pod odkrycie, którego może dokonać, a za każdym człowiekiem, który dokonał ważnego odkrycia naukowego stoją inni ludzie, mimo że często zapominamy o ich istnieniu. W takich momentach, warto sięgnąć do historii.


We wcześniejszym wpisie zamieściłem niezwykle ciekawy film pokazujący wizualnie, jak obecne sieci neuronowe potrafią generować sztukę i obrazy na podstawie tego, czego wcześniej się nauczyły. Jeszcze raz — warto go obejrzeć.