Pierwsza sieć neuronowa
W tym ćwiczeniu wytrenujemy naszą pierwszą małą sieć neuronową.
Sieci neuronowe dadzą nam możliwość nauki modeli nielinearnych
bez użycia różnych funkcji.
Zadanie 1. Model opisany poniżej łączy 2 funkcje wejściowe w 1 neuron. Czy model nauczy się nieliniowych zachowań? Uruchom je, aby potwierdzić
Zadanie 2. Spróbuj zwiększyć liczbę neuronów w ukrytej warstwie z 1 do 2 i spróbuj zmienić aktywację liniową na nieliniową, na przykład ReLU. Czy można utworzyć model, który może uczyć się nieliniowości? Czy może skutecznie modelować dane?
Zadanie 3. Spróbuj zwiększyć liczbę neuronów w ukrytej warstwie 2 z 3 za pomocą nielinearnej aktywacji, na przykład ReLU. Czy może skutecznie modelować dane? Czym różni się jakość modelu w zależności od modelu?
Zadanie 4. Kontynuuj eksperymentowanie, dodając lub usuwając ukryte warstwy i neurony na warstwę. Możesz też zmienić tempo, normalizację oraz inne ustawienia związane z uczeniem się. Jaka jest najmniejsza liczba neuronów i warstw, która daje wynik testowy 0,177 lub niższy?
Czy zwiększenie rozmiaru modelu powoduje poprawę dopasowania, czy też szybko skurcza się?
Czy to się zmienia, jak często łączy się z dobrym modelem? Spróbuj na przykład takiej architektury:
- Pierwsza ukryta warstwę z 3 neuronami.
- Druga ukryta warstwa z 3 neuronami.
- Trzecia ukryta warstwę z 2 neuronami.
(Odpowiedzi pojawią się tuż pod ćwiczeniem).
Kliknij ikonę plusa dla zadania 1.
Aktywacja jest ustawiona na Liniowy, więc model nie może wykrywać żadnych nieliniowości. Utrata jest bardzo wysoka, a model twierdzi, że ma za mało danych.
Kliknij ikonę plusa dla zadania 2.
Funkcja aktywacji nielinearnej może poznać modele nielinearne. Jednak pojedyncza ukryta warstwy z 2 neuronami nie odzwierciedli wszystkich nieliniowości w tym zbiorze danych i spowoduje dużą utratę danych nawet bez szumu: nadal będzie zbyt mało danych. Ćwiczenia nie są nieokreślone, więc niektóre ćwiczenia nie nauczą się skutecznego modelu, a inne będą całkiem nieźle.
Najlepszy model może nie mieć oczekiwanego kształtu!
Kliknij ikonę plusa dla zadania 3.
Plenerowy teledysk wyróżnia się niezwykłą naturą. Pojedyncza ukryta warstwy z 3 neuronami wystarcza do modelowania zbioru danych (brak szumu), ale nie wszystkie uruchomienia są połączone w prawidłowym modelu.
Wystarczają 3 neurony, bo funkcja XOR może być wyrażona jako połączenie 3 połowa samolotu (aktywacja ReLU). Widać to na podstawie obrazów neuronowych, które pokazują dane wyjściowe poszczególnych neonów. W dobrym modelu z 3 neuronami i aktywacją ReLU występuje 1 obraz z prawie pionową linią, w którym występuje X1 jako dodatni (lub negatywny, znak może być przełączony), 1 obraz z linią poziomą, wykrywanie znaku X2 i 1 obraz z ukośną linią.
Jednak nie wszystkie uruchomienia mogą zostać połączone z dobrym modelem. Niektóre biegi będą lepsze niż model z dwoma neuronami i w tych przypadkach będą widoczne zduplikowane neurony.
Kliknij ikonę plusa dla zadania 4.
Pojedyncza ukryta warstwę z 3 neuronami może modelować dane, ale nie ma nadmiarowości, więc w przypadku wielu uruchomień skutecznie utracisz neuronę i nie wydobędziesz z niego dobrego modelu. Pojedyncza warstwa, która ma więcej niż 3 neurony, ma więcej nadmiarowości, przez co łatwiej skompilować model.
Jak widać, pojedyncza ukryta warstwę z tylko 2 neuronami nie może dobrze modelować danych. Jeśli spróbujesz to zrobić, zobaczysz, że wszystkie elementy w warstwie wyjściowej mogą mieć tylko kształty składające się z wierszy z tych 2 węzłów. W tym przypadku głębsza sieć może modelować zbiór danych lepiej niż sama pierwsza ukryta część. Poszczególne neurony w drugiej warstwie mogą tworzyć bardziej złożone kształty, np. prawy kwadrat, łącząc neurony w pierwszej warstwie. Choć dodanie drugiej ukrytej warstwy może nadal modelować zbiór danych lepiej niż pierwsza warstwa ukrytych, dobrym rozwiązaniem jest dodanie większej liczby węzłów do pierwszej warstwy, aby umożliwić utworzenie większej liczby wierszy w zestawie, z którego druga warstwę buduje kształty.
Model z 1 neuronem w pierwszej ukrytej warstwie nie może jednak nauczyć się dobrego modelu bez względu na jego głębokość. Dzieje się tak, ponieważ dane wyjściowe w pierwszej warstwie różnią się tylko wzdłuż jednego wymiaru (zwykle ukośna), co nie wystarcza do modelowania tego zbioru danych. Później nie można tego zrekompensować
bez względu na złożoność.
A jeśli nie chcesz mieć małej sieci, mamy wiele warstw z mnóstwem neuronów, a problem jest prosty? Jak już wspomnieliśmy, w pierwszej
warstwie można wypróbować różne poziomy nachylenia. Druga warstwa może zostać kumulowana w wielu różnych kształtach, a następnie w wielu warstwach będzie znajdować się mnóstwo kształtów.
Decydując się na modelowanie tak wielu różnych kształtów przez tak wiele różnych ukrytych neuronów, udało Ci się utworzyć wystarczająco dużo miejsca, by zacząć je nadmiernie dopasowywać do szumu w zestawie treningowym. Dzięki temu te złożone kształty są zgodne z elementami danych treningowych, a nie ogólną. W tym przykładzie większe modele mogą mieć złożone granice odpowiadające dokładnym punktom danych. W ekstremalnych przypadkach duży model może poznać wyspę wokół określonego miejsca, która nazywa się zapamiętywaniem danych. Jeśli ustawisz model na tyle duży, że okaże się, że jest on gorszy niż prostszy model z wystarczającą liczbą neuronów do rozwiązania problemu.
Inicjacja sieci neuronowej
To ćwiczenie wykorzystuje dane XOR, ale analizuje powtarzalność trenowania sieci neuronowych i znaczenie inicjalizacji.
Zadanie 1. Uruchom model zgodnie z przebiegiem 4–5 razy. Przed każdym testem kliknij przycisk Zresetuj sieć, aby uzyskać nową losową inicjalizację.
(Przycisk Resetuj sieć to okrągła strzałka resetowania widoczna po lewej stronie przycisku odtwarzania). Pozwól na uruchomienie przez co najmniej 500 kroków, aby zapewnić konwersję. Z czym mają się łączyć poszczególne dane wyjściowe?
Co się mówi o roli inicjowania w optymalizacji niezwiązanych z konwersjami?
Zadanie 2. Spróbuj stworzyć model nieco bardziej skomplikowany, dodając warstwę i kilka dodatkowych węzłów. Powtórz próby w zadaniu 1. Czy spowoduje to dodatkową stabilność wyników?
(Odpowiedzi pojawią się tuż pod ćwiczeniem).
Kliknij ikonę plusa dla zadania 1.
Uczony model miał różne kształty podczas każdego biegu. Utrata udziału w konwersji wynosiła prawie 2 razy więcej od najmniejszej.
Kliknij ikonę plusa dla zadania 2.
Dodanie warstwy i dodatkowych węzłów dało więcej powtarzalnych wyników.
Przy każdym uruchomieniu model wyglądał na mniej więcej taki sam. Ponadto zbiegająca się wartość testu zmniejszyła różnice między przebiegami.
Sieć neuronowa
Ten zbiór danych jest szumem spiralnym. Oczywiście model liniowy nie będzie oczywiście działać, ale nawet ręcznie zdefiniowane krzyżyki elementów mogą być trudne do zbudowania.
Zadanie 1. Wytrenuj najlepszy model wykorzystujący tylko X1 i X2. Możesz dodawać lub usuwać warstwy i neurony, zmieniać ustawienia nauczania, takie jak tempo nauczania, częstotliwość regularnego czy rozmiar grupy. Jaka jest najlepsza strata testowa? Jak gładkie są dane wyjściowe modelu?
Zadanie 2. Nawet w przypadku neuronowych sieci inżynieryjnych często jest potrzebnych do uzyskania największej wydajności. Spróbuj dodać dodatkowe cechy produktu lub inne przekształcenia, takie jak sin(X1) i sin(X2). Masz lepszy model? Czy dane wyjściowe modelu są bardziej płynne?
(Odpowiedzi pojawią się tuż pod ćwiczeniem).
Kliknij ikonę plusa, aby zobaczyć możliwe odpowiedzi.
Ten film pokazuje, jak wybrać hiperparametry w Playground, aby wytrenować model dla danych spiralnych minimalizujących utratę testu.
Neuronowe rozwiązanie do spirali neuronowych